Re: svn commit: r1502093 - in /ofbiz/trunk: ./ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/servicedef/ applications/accounting/src/org/ofbiz/accounting/invoice/ applications/accou...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1502093 - in /ofbiz/trunk: ./ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/servicedef/ applications/accounting/src/org/ofbiz/accounting/invoice/ applications/accou...

Jacques Le Roux
Administrator
Hi Hans,

I stumbled upon that on the demo and wondered.
Is there an explanation somewhere about what are "invoice export replacement Id types" and how to use them?

Thanks

Jacques

Le 11/07/2013 05:14, [hidden email] a écrit :

> Author: hansbak
> Date: Thu Jul 11 03:14:30 2013
> New Revision: 1502093
>
> URL: http://svn.apache.org/r1502093
> Log:
> add a csv import/export invoices at an organizational level with partyid and productid translation functions, more imports/exports will follow
>
> Added:
>      ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar   (with props)
> Modified:
>      ofbiz/trunk/.classpath
>      ofbiz/trunk/LICENSE
>      ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
>      ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
>      ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
>      ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
>      ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
>      ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>      ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
>      ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml
>      ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml
>      ofbiz/trunk/framework/common/config/CommonUiLabels.xml
>
> Modified: ofbiz/trunk/.classpath
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/.classpath?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/.classpath (original)
> +++ ofbiz/trunk/.classpath Thu Jul 11 03:14:30 2013
> @@ -83,6 +83,7 @@
>       <classpathentry kind="lib" path="framework/base/lib/commons/commons-pool-1.3.jar"/>
>       <classpathentry kind="lib" path="framework/base/lib/commons/commons-primitives-1.0.jar"/>
>       <classpathentry kind="lib" path="framework/base/lib/commons/commons-validator-1.4.0.jar"/>
> +    <classpathentry kind="lib" path="framework/base/lib/commons/commons-csv-1.0.jar"/>
>       <classpathentry kind="lib" path="framework/base/lib/j2eespecs/geronimo-activation_1.0.2_spec-1.0.jar"/>
>       <classpathentry kind="lib" path="framework/base/lib/j2eespecs/geronimo-j2ee-connector_1.5_spec-1.0.jar"/>
>       <classpathentry kind="lib" path="framework/base/lib/j2eespecs/geronimo-jaxr_1.0_spec-1.0.jar"/>
>
> Modified: ofbiz/trunk/LICENSE
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/LICENSE?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/LICENSE (original)
> +++ ofbiz/trunk/LICENSE Thu Jul 11 03:14:30 2013
> @@ -44,6 +44,7 @@ framework/base/lib/commons/commons-cli-1
>   framework/base/lib/commons/commons-codec-1.6.jar
>   framework/base/lib/commons/commons-collections-3.2.1.jar
>   framework/base/lib/commons/commons-compress-1.4.1.jar
> +framework/base/lib/commons/commons-csv-1.0.jar
>   framework/base/lib/commons/commons-digester3-3.2.jar
>   framework/base/lib/commons/commons-discovery-0.4.jar
>   framework/base/lib/commons/commons-el-1.0.jar
> @@ -2729,4 +2730,5 @@ This package also includes the following
>         donated by SyncRO Soft Ltd., the publishers of the oXygen XML Editor.
>       * Cosmetic improvements provided by OpenStack.
>  
> -Webhelp for DocBook was developed as a Google Summer of Code project. August 2010
> \ No newline at end of file
> +Webhelp for DocBook was developed as a Google Summer of Code project. August 2010
> +
>
> Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml (original)
> +++ ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml Thu Jul 11 03:14:30 2013
> @@ -5010,6 +5010,9 @@
>           <value xml:lang="zh">固定资产数据中的期望使用寿命结束为空。</value>
>           <value xml:lang="zh_TW">固定資產資料中的期望使用壽命結束為空。</value>
>       </property>
> +    <property key="AccountingExportInvoices">
> +        <value xml:lang="en">Export Invoices</value>
> +    </property>
>       <property key="AccountingExpenses">
>           <value xml:lang="de">Aufwendungen</value>
>           <value xml:lang="en">Expenses</value>
>
> Modified: ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml (original)
> +++ ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml Thu Jul 11 03:14:30 2013
> @@ -1087,4 +1087,7 @@ under the License.
>       <CustomMethod customMethodId="STR_LINE_DEP_FORMULA" customMethodTypeId="DEPRECIATION_FORMULA" customMethodName="straightLineDepreciation" description="Straight Line depreciatiion algorithm for fixed asset((purchaseCost - salvageCost)/expectedLifeInYears)"/>
>       <CustomMethod customMethodId="DBL_DECL_DEP_FORMULA" customMethodTypeId="DEPRECIATION_FORMULA" customMethodName="doubleDecliningBalanceDepreciation" description="Double decline depreciatiion algorithm for fixed asset((NetBookValue - salvageCost)*2/remainingLifeInYears)"/>
>  
> +    <!-- invoice export replacement Id types -->
> +    <GoodIdentificationType description="replacement value for partyId in the invoice export function in accounting" goodIdentificationTypeId="INVOICE_EXPORT"/>
> +    <PartyIdentificationType description="replacement value for partyId in the invoice export function in accounting" partyIdentificationTypeId="INVOICE_EXPORT"/>
>   </entity-engine-xml>
>
> Modified: ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml (original)
> +++ ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml Thu Jul 11 03:14:30 2013
> @@ -224,4 +224,7 @@ under the License.
>               partyId="Company" transactionDate="2009-07-18 00:00:01.000" entryDate="2009-08-11 12:28:45.315" performedByPartyId="admin" statusId="FINACT_TRNS_CREATED" paymentId="8002"/>
>       <Payment paymentId="8002" finAccountTransId="9104"/>
>  
> +    <!-- invoice export demo data for replacement id's -->
> +    <GoodIdentification goodIdentificationTypeId="INVOICE_EXPORT" idValue="GZ-2644-replaced" productId="GZ-2644"/>
> +    <PartyIdentification idValue="DemoCustomer2" partyId="DemoCustomer" partyIdentificationTypeId="INVOICE_EXPORT"/>
>   </entity-engine-xml>
>
> Modified: ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml (original)
> +++ ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml Thu Jul 11 03:14:30 2013
> @@ -77,4 +77,51 @@ under the License.
>               <key-map field-name="productId"/>
>           </view-link>
>       </view-entity>
> +
> +    <view-entity entity-name="InvoiceExport" package-name="org.ofbiz.accounting.reports">
> +        <member-entity entity-alias="INV" entity-name="Invoice"/>
> +        <member-entity entity-alias="ITM" entity-name="InvoiceItem"/>
> +        <member-entity entity-alias="PFR" entity-name="PartyIdentification"/>
> +        <member-entity entity-alias="PTO" entity-name="PartyIdentification"/>
> +        <member-entity entity-alias="GI" entity-name="GoodIdentification"/>
> +        <alias entity-alias="INV" name="invoiceId" />
> +        <alias entity-alias="INV" name="invoiceDate"/>
> +        <alias entity-alias="INV" name="invoiceTypeId"/>
> +        <alias entity-alias="INV" name="description"/>
> +        <alias entity-alias="INV" name="partyIdFrom"/>
> +        <alias entity-alias="PFR" name="partyIdFromTrans" field="idValue"/>
> +        <alias entity-alias="INV" name="partyId"/>
> +        <alias entity-alias="PTO" name="partyIdTrans" field="idValue"/>
> +        <alias entity-alias="INV" name="currencyUomId"/>
> +        <alias entity-alias="INV" name="referenceNum"/>
> +        <alias entity-alias="ITM" name="invoiceItemSeqId"/>
> +        <alias entity-alias="ITM" name="invoiceItemTypeId"/>
> +        <alias entity-alias="ITM" name="itemDescription" field="description"/>
> +        <alias entity-alias="ITM" name="productId"/>
> +        <alias entity-alias="GI" name="productIdTrans" field="idValue"/>
> +        <alias entity-alias="ITM" name="quantity"/>
> +        <alias entity-alias="ITM" name="amount"/>
> +        <view-link entity-alias="INV" rel-entity-alias="ITM" rel-optional="true">
> +            <key-map field-name="invoiceId"/>
> +        </view-link>
> +        <view-link entity-alias="INV" rel-entity-alias="PFR" rel-optional="true">
> +            <key-map field-name="partyIdFrom" rel-field-name="partyId"/>
> +            <entity-condition>
> +                <condition-expr entity-alias="PFR" field-name="partyIdentificationTypeId" value="INVOICE_EXPORT"/>
> +            </entity-condition>
> +        </view-link>
> +        <view-link entity-alias="INV" rel-entity-alias="PTO" rel-optional="true">
> +            <key-map field-name="partyId"/>
> +            <entity-condition>
> +                <condition-expr entity-alias="PTO" field-name="partyIdentificationTypeId" value="INVOICE_EXPORT"/>
> +            </entity-condition>
> +        </view-link>
> +        <view-link entity-alias="ITM" rel-entity-alias="GI" rel-optional="true">
> +            <key-map field-name="productId"/>
> +            <entity-condition>
> +                <condition-expr entity-alias="GI" field-name="goodIdentificationTypeId"/>
> +            </entity-condition>
> +        </view-link>
> +    </view-entity>
> +
>   </entitymodel>
>
> Modified: ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml (original)
> +++ ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml Thu Jul 11 03:14:30 2013
> @@ -430,5 +430,12 @@ under the License.
>           <attribute name="invoiceId" type="String" mode="IN" optional="false"/>
>           <attribute name="isForeign" type="Boolean" mode="OUT" optional="false"/>
>       </service>
> +    <service name="importInvoice" engine="java"
> +        location="org.ofbiz.accounting.invoice.InvoiceServices" invoke="importInvoice" auth="true">
> +        <description>Import an invoice with invoiceitems in csv format</description>
> +        <permission-service service-name="acctgInvoicePermissionCheck" main-action="CREATE"/>
> +        <attribute mode="INOUT" name="organizationPartyId" type="String" optional="false"/>
> +        <attribute mode="IN" name="uploadedFile" type="java.nio.ByteBuffer" optional="true" />
> +    </service>
>      
>   </services>
>
> Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java (original)
> +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java Thu Jul 11 03:14:30 2013
> @@ -18,7 +18,16 @@
>    *******************************************************************************/
>   package org.ofbiz.accounting.invoice;
>  
> +import org.apache.commons.csv.CSVFormat;
> +import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
> +import org.apache.commons.csv.CSVRecord;
> +
> +import java.io.BufferedReader;
> +import java.io.IOException;
> +import java.io.StringReader;
>   import java.math.BigDecimal;
> +import java.nio.ByteBuffer;
> +import java.nio.charset.Charset;
>   import java.sql.Timestamp;
>   import java.util.ArrayList;
>   import java.util.Iterator;
> @@ -3334,5 +3343,164 @@ public class InvoiceServices {
>               return ServiceUtil.returnError(ee.getMessage());
>           }
>       }
> +
> +    public static Map<String, Object> importInvoice(DispatchContext dctx, Map<String, Object> context) {
> +        Delegator delegator = dctx.getDelegator();
> +        LocalDispatcher dispatcher = dctx.getDispatcher();
> +        GenericValue userLogin = (GenericValue) context.get("userLogin");
> +        ByteBuffer fileBytes = (ByteBuffer) context.get("uploadedFile");
> +        String organizationPartyId = (String) context.get("organizationPartyId");
> +        String encoding = System.getProperty("file.encoding");
> +        String csvString = Charset.forName(encoding).decode(fileBytes).toString();
> +        final BufferedReader csvReader = new BufferedReader(new StringReader(csvString));
> +        final CSVFormatBuilder builder = CSVFormat.newBuilder(',').withQuoteChar('"').withHeader();
> +        CSVFormat fmt = builder.build();
> +        List<String> errMsgs = FastList.newInstance();
> +     List<String> newErrMsgs = FastList.newInstance();
> +        String lastInvoiceId = null;
> +        String currentInvoiceId = null;
> +        String newInvoiceId = null;
> +        int invoicesCreated = 0;
> +
> +        if (fileBytes == null) {
> +         return ServiceUtil.returnError("Uploaded file data not found");
> +        }
> +
> +        try {
> +         for(final CSVRecord rec : fmt.parse(csvReader)) {
> +         currentInvoiceId =  rec.get("invoiceId");
> +         if (lastInvoiceId == null || !currentInvoiceId.equals(lastInvoiceId)) {
> +         newInvoiceId = null;
> +         Map<String, Object> invoice = UtilMisc.toMap(
> +         "invoiceTypeId", rec.get("invoiceTypeId"),
> +         "partyIdFrom", rec.get("partyIdFrom"),
> +         "partyId", rec.get("partyId"),
> +         "invoiceDate", rec.get("invoiceDate"),
> +         "dueDate", rec.get("dueDate"),
> +         "currencyUomId", rec.get("currencyUomId"),
> +         "description", rec.get("description"),
> +         "referenceNum", rec.get("referenceNum") + "   Imported: orginal InvoiceId: " + currentInvoiceId,
> +                 "userLogin", userLogin
> +                 );
> +
> +         // replace values if required
> +         if (UtilValidate.isNotEmpty(rec.get("partyIdFromTrans"))) {
> +         invoice.put("partyIdFrom", rec.get("partyIdFromTrans"));
> +         }
> +         if (UtilValidate.isNotEmpty(rec.get("partyIdTrans"))) {
> +         invoice.put("partyId", rec.get("partyIdTrans"));
> +         }
> +
> +         // invoice validation
> +                    try {
> +                 newErrMsgs = FastList.newInstance();
> +                        if (UtilValidate.isEmpty(invoice.get("partyIdFrom"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Mandatory Party Id From and Party Id From Trans missing for invoice: " + currentInvoiceId);
> +                        } else if (delegator.findOne("Party", UtilMisc.<String, Object>toMap("partyId", invoice.get("partyIdFrom")), false) == null) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": partyIdFrom: " + invoice.get("partyIdFrom") + " not found for invoice: " + currentInvoiceId);
> +                        }
> +                        if (UtilValidate.isEmpty(invoice.get("partyId"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Mandatory Party Id and Party Id Trans missing for invoice: " + currentInvoiceId);
> +                        } else if (delegator.findOne("Party", UtilMisc.<String, Object>toMap("partyId", invoice.get("partyId")), false) == null) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": partyId: " + invoice.get("partyId") + " not found for invoice: " + currentInvoiceId);
> +                        }
> +                        if (UtilValidate.isEmpty(invoice.get("invoiceTypeId"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Mandatory Invoice Type missing for invoice: " + currentInvoiceId);
> +                        } else if (delegator.findOne("InvoiceType", UtilMisc.<String, Object>toMap("invoiceTypeId", invoice.get("invoiceTypeId")), false) == null) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": InvoiceItem type id: " + invoice.get("invoiceTypeId") + " not found for invoice: " + currentInvoiceId);
> +                        }
> +                        GenericValue invoiceType = delegator.findOne("InvoiceType", UtilMisc.<String, Object>toMap("invoiceTypeId", invoice.get("invoiceTypeId")), false);
> +                        if ("PURCHASE_INVOICE".equals(invoiceType.getString("parentTypeId")) && !invoice.get("partyId").equals(organizationPartyId)) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": A purchase type invoice should have the partyId 'To' being the organizationPartyId(=" + organizationPartyId + ")! however is " + invoice.get("partyId") +"! invoice: " + currentInvoiceId);
> +                        }
> +                        if ("SALES_INVOICE".equals(invoiceType.getString("parentTypeId")) && !invoice.get("partyIdFrom").equals(organizationPartyId)) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": A sales type invoice should have the partyId 'from' being the organizationPartyId(=" + organizationPartyId + ")! however is " + invoice.get("partyIdFrom") +"! invoice: " + currentInvoiceId);
> +                        }
> +
> +
> +                    } catch (GenericEntityException e) {
> +                        Debug.logError("Valication checking problem against database. due to " + e.getMessage(), module);
> +                    }
> +
> +                    if (newErrMsgs.size() > 0) {
> +         errMsgs.addAll(newErrMsgs);
> +                    } else {
> +                        Map<String, Object> invoiceResult = null;
> +                     try {
> +                            invoiceResult = dispatcher.runSync("createInvoice", invoice);
> +                     } catch (GenericServiceException e) {
> +                     Debug.logError(e, module);
> +                     return ServiceUtil.returnError(e.getMessage());
> +                     }
> +                        newInvoiceId = (String) invoiceResult.get("invoiceId");
> +                        invoicesCreated++;
> +         }
> +                    lastInvoiceId = currentInvoiceId;
> +         }
> +
> +        
> +         if (newInvoiceId != null) {
> +         Map<String, Object> invoiceItem = UtilMisc.toMap(
> +                     "invoiceId", newInvoiceId,
> +                     "invoiceItemSeqId", rec.get("invoiceItemSeqId"),
> +                     "invoiceItemTypeId", rec.get("invoiceItemTypeId"),
> +                     "productId", rec.get("productId"),
> +                     "description", rec.get("itemDescription"),
> +                     "amount", rec.get("amount"),
> +                     "quantity", rec.get("quantity"),
> +                     "userLogin", userLogin
> +                     );
> +
> +         if (UtilValidate.isNotEmpty(rec.get("productIdTrans"))) {
> +         invoiceItem.put("productId", rec.get("productIdTrans"));
> +         }
> +         // invoice item validation
> +                    try {
> +                 newErrMsgs = FastList.newInstance();
> +                        if (UtilValidate.isEmpty(invoiceItem.get("invoiceItemSeqId"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Mandatory item sequence Id missing for invoice: " + currentInvoiceId);
> +                        }
> +                        if (UtilValidate.isEmpty(invoiceItem.get("invoiceItemTypeId"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Mandatory invoice item type missing for invoice: " + currentInvoiceId);
> +                        } else if (delegator.findOne("InvoiceItemType", UtilMisc.<String, Object>toMap("invoiceItemTypeId", invoiceItem.get("invoiceItemTypeId")), false) == null) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": InvoiceItem Item type id: " + invoiceItem.get("invoiceItemTypeId") + " not found for invoice: " + currentInvoiceId + " Item seqId:" + invoiceItem.get("invoiceItemSeqId"));
> +                        }
> +                        if (UtilValidate.isEmpty(invoiceItem.get("productId")) && UtilValidate.isEmpty(invoiceItem.get("description"))) {
> +                        }
> +                        if (UtilValidate.isNotEmpty(invoiceItem.get("productId")) && delegator.findOne("Product", UtilMisc.<String, Object>toMap("productId", invoiceItem.get("productId")), false) == null) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Product Id: " + invoiceItem.get("productId") + " not found for invoice: " + currentInvoiceId + " Item seqId:" + invoiceItem.get("invoiceItemSeqId"));
> +                        }
> +                        if (UtilValidate.isEmpty(invoiceItem.get("amount")) && UtilValidate.isEmpty(invoiceItem.get("quantity"))) {
> +                         newErrMsgs.add("Line number " + rec.getRecordNumber() + ": Either or both quantity and amount is required for invoice: " + currentInvoiceId + " Item seqId:" + invoiceItem.get("invoiceItemSeqId"));
> +                        }
> +                    } catch (GenericEntityException e) {
> +                        Debug.logError("Validation checking problem against database. due to " + e.getMessage(), module);
> +                    }
> +
> +                    if (newErrMsgs.size() > 0) {
> +         errMsgs.addAll(newErrMsgs);
> +                    } else {
> +             try {
> +             dispatcher.runSync("createInvoiceItem", invoiceItem);
> +             } catch (GenericServiceException e) {
> +             Debug.logError(e, module);
> +             return ServiceUtil.returnError(e.getMessage());
> +             }
> +         }
> +         }
> +         }
> +
> +        } catch (IOException e) {
> +            Debug.logError(e, module);
> +            return ServiceUtil.returnError(e.getMessage());
> +        }
> +
> +        if (errMsgs.size() > 0) {
> +         return ServiceUtil.returnError(errMsgs);
> +        }
>  
> +        Map<String, Object> result = ServiceUtil.returnSuccess(invoicesCreated + " new invoice(s) created");
> +        result.put("organizationPartyId", organizationPartyId);
> +        return result;
> +    }
>   }
>
> Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml (original)
> +++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml Thu Jul 11 03:14:30 2013
> @@ -753,6 +753,23 @@ under the License.
>           <security https="true" auth="true"/>
>           <response name="success" type="view" value="ListGlAccountOrgCsv"/>
>       </request-map>
> +
> +    <!-- Import export -->
> +    <request-map uri="ImportExport">
> +        <security https="true" auth="true"/>
> +        <response name="success" type="view" value="ImportExport"/>
> +    </request-map>
> +
> +    <request-map uri="PartyAccountsExportInvoicesCsv.csv">
> +        <security https="true" auth="true"/>
> +        <response name="success" type="view" value="PartyAccountsExportInvoicesCsv"/>
> +    </request-map>
> +    <request-map uri="uploadInvoice">
> +        <security auth="true" https="true"/>
> +        <event invoke="importInvoice" path="" type="service"/>
> +        <response name="success" type="request" value="ImportExport"/>
> +        <response name="error" type="view" value="ImportExport"/>
> +    </request-map>
>  
>       <!-- TO BE REMOVED
>       <request-map uri="EditGlobalGlAccountOrganizations"><security https="true" auth="true"/><response name="success" type="view" value="EditGlobalGlAccountOrganizations"/></request-map>
> @@ -2768,6 +2785,10 @@ under the License.
>       <view-map name="ListGlAccountOrgPdf" type="screenfop" page="component://accounting/widget/GlSetupScreens.xml#ListGlAccountOrgPdf" content-type="application/pdf" encoding="none"/>
>       <view-map name="ListGlAccountOrgCsv" type="screencsv" page="component://accounting/widget/GlSetupScreens.xml#ListGlAccountOrgCsv" content-type="text/csv" encoding="none"/>
>  
> +    <!-- import export -->
> +    <view-map name="ImportExport" type="screen" page="component://accounting/widget/GlSetupScreens.xml#ImportExport"/>
> +    <view-map name="PartyAccountsExportInvoicesCsv" type="screencsv" page="component://accounting/widget/GlSetupScreens.xml#PartyAccountsExportInvoicesCsv" content-type="text/csv" encoding="none"/>
> +
>       <!-- Manual Credit Card Transaction -->
>       <view-map name="FindGatewayResponses" page="component://accounting/widget/TransactionScreens.xml#FindGatewayResponses" type="screen"/>
>       <view-map name="ViewGatewayResponse" page="component://accounting/widget/TransactionScreens.xml#ViewGatewayResponse" type="screen"/>
>
> Modified: ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml (original)
> +++ ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml Thu Jul 11 03:14:30 2013
> @@ -34,6 +34,11 @@ under the License.
>                   <parameter param-name="organizationPartyId" from-field="partyId"/>
>               </hyperlink>
>           </field>
> +        <field name="importexport" title=" " use-when="hasBasicPermission" widget-style="buttontext">
> +            <hyperlink target="ImportExport" description="${uiLabelMap.CommonImportExport}">
> +                <parameter param-name="organizationPartyId" from-field="partyId"/>
> +            </hyperlink>
> +        </field>
>       </form>
>  
>       <form name="ListGlAccountOrganization" list-name="listIt" target="" title="" type="list" view-size="50"
> @@ -71,6 +76,55 @@ under the License.
>           <field name="submitButton" title="${uiLabelMap.AccountingNewCompany}"><submit button-type="button"/></field>
>       </form>
>  
> +    <form name="ExportInvoice" type="single" target="PartyAccountsExportInvoicesCsv.csv" title="" >
> +        <field name="organizationPartyId"><hidden value="${parameters.organizationPartyId}"/></field>
> +        <field name="invoiceId"><lookup target-form-name="LookupInvoice"/></field>
> +        <field name="startDate"><date-time/></field>
> +        <field name="submitButton" title="${uiLabelMap.CommonSubmit}"><submit button-type="button"/></field>
> +    </form>
> +
> +    <form name="PartyAccountsExportInvoicesCsv" list-name="listIt" target="" title="" type="list" view-size="99999"
> +        odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar" paginate="false">
> +        <actions>
> +            <entity-condition entity-name="InvoiceExport">
> +                <condition-list combine="and">
> +                    <condition-list combine="or">
> +                        <condition-expr field-name="partyIdFrom" from-field="organizationPartyId" operator="equals"/>
> +                        <condition-expr field-name="partyId" from-field="organizationPartyId" operator="equals"/>
> +                    </condition-list>
> +                    <condition-expr field-name="invoiceDate" operator="greater-equals" from-field="parameters.startDate" ignore-if-empty="true"/>
> +                    <condition-expr field-name="invoiceId" operator="equals" from-field="parameters.invoiceId" ignore-if-empty="true"/>
> +                </condition-list>
> +                <order-by field-name="invoiceId"/>
> +            </entity-condition>
> +        </actions>
> +        <field name="organizationPartyId"><hidden value="${organizationPartyId}"/></field>
> +        <field name="invoiceId" title="invoiceId"><display/></field>
> +        <field name="invoiceTypeId" title="invoiceTypeId"><display/></field>
> +        <field name="invoiceDate" title="invoiceDate"><display/></field>
> +        <field name="dueDate" title="dueDate"><display/></field>
> +        <field name="partyIdFrom" title="partyIdFrom"><display/></field>
> +        <field name="partyIdFromTrans" title="partyIdFromTrans"><display/></field>
> +        <field name="partyId" title="partyId"><display/></field>
> +        <field name="partyIdTrans" title="partyIdTrans"><display/></field>
> +        <field name="currencyUomId" title="currencyUomId"><display/></field>
> +        <field name="description" title="description"><display/></field>
> +        <field name="referenceNum" title="referenceNum"><display/></field>
> +        <field name="invoiceItemSeqId" title="invoiceItemSeqId"><display/></field>
> +        <field name="invoiceItemTypeId" title="invoiceItemTypeId"><display/></field>
> +        <field name="productId" title="productId"><display/></field>
> +        <field name="productIdTrans" title="productIdTrans"><display/></field>
> +        <field name="itemDescription" title="itemDescription"><display/></field>
> +        <field name="quantity" title="quantity"><display/></field>
> +        <field name="amount" title="amount"><display/></field>
> +    </form>
> +
> +    <form name="ImportInvoice" type="upload" target="uploadInvoice" title="" >
> +        <field name="organizationPartyId"><hidden value="${parameters.organizationPartyId}"/></field>
> +        <field name="uploadedFile"><file/></field>
> +        <field name="submitButton" title="${uiLabelMap.CommonUpload}"><submit button-type="button"/></field>
> +    </form>
> +
>       <form name="AssignGlAccount" type="single" target="createGlAccountOrganization" title="" default-map-name="account"
>           header-row-style="header-row" default-table-style="basic-table">
>           <field name="organizationPartyId"><hidden/></field>
>
> Modified: ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml (original)
> +++ ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml Thu Jul 11 03:14:30 2013
> @@ -51,7 +51,6 @@ under the License.
>       <screen name="ListCompanies">
>           <section>
>               <actions>
> -                <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/>
>                   <set field="titleProperty" value="AccountingAvailableInternalOrganizations"/>
>                   <set field="headerItem" value="companies"/>
>                   <set field="labelTitleProperty" value="${uiLabelMap.AccountingAvailableInternalOrganizations}"/>
> @@ -80,7 +79,6 @@ under the License.
>       <screen name="AddCompany">
>           <section>
>               <actions>
> -                <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/>
>                   <set field="titleProperty" value="AccountingNewCompany"/>
>               </actions>
>               <widgets>
> @@ -94,6 +92,32 @@ under the License.
>               </widgets>
>           </section>
>       </screen>
> +    <screen name="ImportExport">
> +        <section>
> +            <actions>
> +                <set field="titleProperty" value="CommonImportExport"/>
> +                <entity-one entity-name="PartyGroup" value-field="partyGroup">
> +                    <field-map field-name="partyId" from-field="parameters.organizationPartyId"/>
> +                </entity-one>
> +            </actions>
> +            <widgets>
> +                <decorator-screen name="main-decorator" location="${parameters.mainDecoratorLocation}">
> +                    <decorator-section name="body">
> +                        <screenlet title="${uiLabelMap.AccountingInvoice} ${uiLabelMap.CommonImportExport}  ${uiLabelMap.CommonFor}: ${partyGroup.groupName} [${parameters.organizationPartyId}]">
> +                            <container style="lefthalf">
> +                                <label style="h2">${uiLabelMap.CommonImport}</label>
> +                                <include-form name="ImportInvoice" location="component://accounting/widget/GlSetupForms.xml"/>
> +                            </container>
> +                            <container style="righthalf">
> +                                <label style="h2">${uiLabelMap.CommonExport}</label>
> +                                <include-form name="ExportInvoice" location="component://accounting/widget/GlSetupForms.xml"/>
> +                            </container>
> +                         </screenlet>
> +                    </decorator-section>
> +                </decorator-screen>
> +            </widgets>
> +        </section>
> +    </screen>
>       <screen name="ListGlAccountOrganization">
>           <section>
>               <actions>
> @@ -559,6 +583,18 @@ under the License.
>               </widgets>
>           </section>
>       </screen>
> +    <screen name="PartyAccountsExportInvoicesCsv">
> +        <section>
> +            <actions>
> +                <property-map resource="CommonUiLabels" map-name="uiLabelMap" global="true"/>
> +                <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/>
> +                <set field="organizationPartyId" from-field="parameters.organizationPartyId"/>
> +            </actions>
> +            <widgets>
> +                    <include-form name="PartyAccountsExportInvoicesCsv" location="component://accounting/widget/GlSetupForms.xml"/>
> +            </widgets>
> +        </section>
> +    </screen>
>       <screen name="FindGlAccountCategory">
>           <section>
>               <actions>
>
> Added: ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar?rev=1502093&view=auto
> ==============================================================================
> Binary file - no diff available.
>
> Propchange: ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar
> ------------------------------------------------------------------------------
>      svn:mime-type = application/octet-stream
>
> Modified: ofbiz/trunk/framework/common/config/CommonUiLabels.xml
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/config/CommonUiLabels.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
> ==============================================================================
> --- ofbiz/trunk/framework/common/config/CommonUiLabels.xml (original)
> +++ ofbiz/trunk/framework/common/config/CommonUiLabels.xml Thu Jul 11 03:14:30 2013
> @@ -5166,6 +5166,12 @@
>           <value xml:lang="vi">Ảnh</value>
>           <value xml:lang="zh">图片</value>
>       </property>
> +    <property key="CommonImport">
> +        <value xml:lang="en">Import</value>
> +    </property>
> +    <property key="CommonImportExport">
> +        <value xml:lang="en">Import/Export</value>
> +    </property>
>       <property key="CommonIn">
>           <value xml:lang="ar">داخل</value>
>           <value xml:lang="cs">V</value>
>
>
Reply | Threaded
Open this post in threaded view
|

Re: svn commit: r1502093 - in /ofbiz/trunk: ./ applications/accounting/config/ applications/accounting/data/ applications/accounting/entitydef/ applications/accounting/servicedef/ applications/accounting/src/org/ofbiz/accounting/invoice/ applications/accou...

hans_bakker
Hi Jacques,

if I remember well, there is the possibility to prefix the id's in order
to avoid conflicts in the target ofbiz system....

Regards,
Hans
On 07/10/14 15:47, Jacques Le Roux wrote:

> Hi Hans,
>
> I stumbled upon that on the demo and wondered.
> Is there an explanation somewhere about what are "invoice export
> replacement Id types" and how to use them?
>
> Thanks
>
> Jacques
>
> Le 11/07/2013 05:14, [hidden email] a écrit :
>> Author: hansbak
>> Date: Thu Jul 11 03:14:30 2013
>> New Revision: 1502093
>>
>> URL: http://svn.apache.org/r1502093
>> Log:
>> add a csv import/export invoices at an organizational level with
>> partyid and productid translation functions, more imports/exports
>> will follow
>>
>> Added:
>> ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar (with props)
>> Modified:
>>      ofbiz/trunk/.classpath
>>      ofbiz/trunk/LICENSE
>> ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
>> ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
>> ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
>> ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
>> ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
>>      ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml
>> ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml
>>      ofbiz/trunk/framework/common/config/CommonUiLabels.xml
>>
>> Modified: ofbiz/trunk/.classpath
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/.classpath?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/.classpath (original)
>> +++ ofbiz/trunk/.classpath Thu Jul 11 03:14:30 2013
>> @@ -83,6 +83,7 @@
>>       <classpathentry kind="lib"
>> path="framework/base/lib/commons/commons-pool-1.3.jar"/>
>>       <classpathentry kind="lib"
>> path="framework/base/lib/commons/commons-primitives-1.0.jar"/>
>>       <classpathentry kind="lib"
>> path="framework/base/lib/commons/commons-validator-1.4.0.jar"/>
>> +    <classpathentry kind="lib"
>> path="framework/base/lib/commons/commons-csv-1.0.jar"/>
>>       <classpathentry kind="lib"
>> path="framework/base/lib/j2eespecs/geronimo-activation_1.0.2_spec-1.0.jar"/>
>>       <classpathentry kind="lib"
>> path="framework/base/lib/j2eespecs/geronimo-j2ee-connector_1.5_spec-1.0.jar"/>
>>       <classpathentry kind="lib"
>> path="framework/base/lib/j2eespecs/geronimo-jaxr_1.0_spec-1.0.jar"/>
>>
>> Modified: ofbiz/trunk/LICENSE
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/LICENSE?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/LICENSE (original)
>> +++ ofbiz/trunk/LICENSE Thu Jul 11 03:14:30 2013
>> @@ -44,6 +44,7 @@ framework/base/lib/commons/commons-cli-1
>>   framework/base/lib/commons/commons-codec-1.6.jar
>>   framework/base/lib/commons/commons-collections-3.2.1.jar
>>   framework/base/lib/commons/commons-compress-1.4.1.jar
>> +framework/base/lib/commons/commons-csv-1.0.jar
>>   framework/base/lib/commons/commons-digester3-3.2.jar
>>   framework/base/lib/commons/commons-discovery-0.4.jar
>>   framework/base/lib/commons/commons-el-1.0.jar
>> @@ -2729,4 +2730,5 @@ This package also includes the following
>>         donated by SyncRO Soft Ltd., the publishers of the oXygen XML
>> Editor.
>>       * Cosmetic improvements provided by OpenStack.
>>   -Webhelp for DocBook was developed as a Google Summer of Code
>> project. August 2010
>> \ No newline at end of file
>> +Webhelp for DocBook was developed as a Google Summer of Code
>> project. August 2010
>> +
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
>> (original)
>> +++ ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -5010,6 +5010,9 @@
>>           <value
>> xml:lang="zh">固定资产数据中的期望使用寿命结束为空。</value>
>>           <value
>> xml:lang="zh_TW">固定資產資料中的期望使用壽命結束為空。</value>
>>       </property>
>> +    <property key="AccountingExportInvoices">
>> +        <value xml:lang="en">Export Invoices</value>
>> +    </property>
>>       <property key="AccountingExpenses">
>>           <value xml:lang="de">Aufwendungen</value>
>>           <value xml:lang="en">Expenses</value>
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
>> (original)
>> +++ ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -1087,4 +1087,7 @@ under the License.
>>       <CustomMethod customMethodId="STR_LINE_DEP_FORMULA"
>> customMethodTypeId="DEPRECIATION_FORMULA"
>> customMethodName="straightLineDepreciation" description="Straight
>> Line depreciatiion algorithm for fixed asset((purchaseCost -
>> salvageCost)/expectedLifeInYears)"/>
>>       <CustomMethod customMethodId="DBL_DECL_DEP_FORMULA"
>> customMethodTypeId="DEPRECIATION_FORMULA"
>> customMethodName="doubleDecliningBalanceDepreciation"
>> description="Double decline depreciatiion algorithm for fixed
>> asset((NetBookValue - salvageCost)*2/remainingLifeInYears)"/>
>>   +    <!-- invoice export replacement Id types -->
>> +    <GoodIdentificationType description="replacement value for
>> partyId in the invoice export function in accounting"
>> goodIdentificationTypeId="INVOICE_EXPORT"/>
>> +    <PartyIdentificationType description="replacement value for
>> partyId in the invoice export function in accounting"
>> partyIdentificationTypeId="INVOICE_EXPORT"/>
>>   </entity-engine-xml>
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
>> (original)
>> +++ ofbiz/trunk/applications/accounting/data/DemoPaymentsInvoices.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -224,4 +224,7 @@ under the License.
>>               partyId="Company" transactionDate="2009-07-18
>> 00:00:01.000" entryDate="2009-08-11 12:28:45.315"
>> performedByPartyId="admin" statusId="FINACT_TRNS_CREATED"
>> paymentId="8002"/>
>>       <Payment paymentId="8002" finAccountTransId="9104"/>
>>   +    <!-- invoice export demo data for replacement id's -->
>> +    <GoodIdentification goodIdentificationTypeId="INVOICE_EXPORT"
>> idValue="GZ-2644-replaced" productId="GZ-2644"/>
>> +    <PartyIdentification idValue="DemoCustomer2"
>> partyId="DemoCustomer" partyIdentificationTypeId="INVOICE_EXPORT"/>
>>   </entity-engine-xml>
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> ---
>> ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
>> (original)
>> +++
>> ofbiz/trunk/applications/accounting/entitydef/entitymodel_reports.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -77,4 +77,51 @@ under the License.
>>               <key-map field-name="productId"/>
>>           </view-link>
>>       </view-entity>
>> +
>> +    <view-entity entity-name="InvoiceExport"
>> package-name="org.ofbiz.accounting.reports">
>> +        <member-entity entity-alias="INV" entity-name="Invoice"/>
>> +        <member-entity entity-alias="ITM" entity-name="InvoiceItem"/>
>> +        <member-entity entity-alias="PFR"
>> entity-name="PartyIdentification"/>
>> +        <member-entity entity-alias="PTO"
>> entity-name="PartyIdentification"/>
>> +        <member-entity entity-alias="GI"
>> entity-name="GoodIdentification"/>
>> +        <alias entity-alias="INV" name="invoiceId" />
>> +        <alias entity-alias="INV" name="invoiceDate"/>
>> +        <alias entity-alias="INV" name="invoiceTypeId"/>
>> +        <alias entity-alias="INV" name="description"/>
>> +        <alias entity-alias="INV" name="partyIdFrom"/>
>> +        <alias entity-alias="PFR" name="partyIdFromTrans"
>> field="idValue"/>
>> +        <alias entity-alias="INV" name="partyId"/>
>> +        <alias entity-alias="PTO" name="partyIdTrans" field="idValue"/>
>> +        <alias entity-alias="INV" name="currencyUomId"/>
>> +        <alias entity-alias="INV" name="referenceNum"/>
>> +        <alias entity-alias="ITM" name="invoiceItemSeqId"/>
>> +        <alias entity-alias="ITM" name="invoiceItemTypeId"/>
>> +        <alias entity-alias="ITM" name="itemDescription"
>> field="description"/>
>> +        <alias entity-alias="ITM" name="productId"/>
>> +        <alias entity-alias="GI" name="productIdTrans"
>> field="idValue"/>
>> +        <alias entity-alias="ITM" name="quantity"/>
>> +        <alias entity-alias="ITM" name="amount"/>
>> +        <view-link entity-alias="INV" rel-entity-alias="ITM"
>> rel-optional="true">
>> +            <key-map field-name="invoiceId"/>
>> +        </view-link>
>> +        <view-link entity-alias="INV" rel-entity-alias="PFR"
>> rel-optional="true">
>> +            <key-map field-name="partyIdFrom"
>> rel-field-name="partyId"/>
>> +            <entity-condition>
>> +                <condition-expr entity-alias="PFR"
>> field-name="partyIdentificationTypeId" value="INVOICE_EXPORT"/>
>> +            </entity-condition>
>> +        </view-link>
>> +        <view-link entity-alias="INV" rel-entity-alias="PTO"
>> rel-optional="true">
>> +            <key-map field-name="partyId"/>
>> +            <entity-condition>
>> +                <condition-expr entity-alias="PTO"
>> field-name="partyIdentificationTypeId" value="INVOICE_EXPORT"/>
>> +            </entity-condition>
>> +        </view-link>
>> +        <view-link entity-alias="ITM" rel-entity-alias="GI"
>> rel-optional="true">
>> +            <key-map field-name="productId"/>
>> +            <entity-condition>
>> +                <condition-expr entity-alias="GI"
>> field-name="goodIdentificationTypeId"/>
>> +            </entity-condition>
>> +        </view-link>
>> +    </view-entity>
>> +
>>   </entitymodel>
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> ---
>> ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
>> (original)
>> +++
>> ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -430,5 +430,12 @@ under the License.
>>           <attribute name="invoiceId" type="String" mode="IN"
>> optional="false"/>
>>           <attribute name="isForeign" type="Boolean" mode="OUT"
>> optional="false"/>
>>       </service>
>> +    <service name="importInvoice" engine="java"
>> +        location="org.ofbiz.accounting.invoice.InvoiceServices"
>> invoke="importInvoice" auth="true">
>> +        <description>Import an invoice with invoiceitems in csv
>> format</description>
>> +        <permission-service
>> service-name="acctgInvoicePermissionCheck" main-action="CREATE"/>
>> +        <attribute mode="INOUT" name="organizationPartyId"
>> type="String" optional="false"/>
>> +        <attribute mode="IN" name="uploadedFile"
>> type="java.nio.ByteBuffer" optional="true" />
>> +    </service>
>>         </services>
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> ---
>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>> (original)
>> +++
>> ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
>> Thu Jul 11 03:14:30 2013
>> @@ -18,7 +18,16 @@
>> *******************************************************************************/
>>   package org.ofbiz.accounting.invoice;
>>   +import org.apache.commons.csv.CSVFormat;
>> +import org.apache.commons.csv.CSVFormat.CSVFormatBuilder;
>> +import org.apache.commons.csv.CSVRecord;
>> +
>> +import java.io.BufferedReader;
>> +import java.io.IOException;
>> +import java.io.StringReader;
>>   import java.math.BigDecimal;
>> +import java.nio.ByteBuffer;
>> +import java.nio.charset.Charset;
>>   import java.sql.Timestamp;
>>   import java.util.ArrayList;
>>   import java.util.Iterator;
>> @@ -3334,5 +3343,164 @@ public class InvoiceServices {
>>               return ServiceUtil.returnError(ee.getMessage());
>>           }
>>       }
>> +
>> +    public static Map<String, Object> importInvoice(DispatchContext
>> dctx, Map<String, Object> context) {
>> +        Delegator delegator = dctx.getDelegator();
>> +        LocalDispatcher dispatcher = dctx.getDispatcher();
>> +        GenericValue userLogin = (GenericValue)
>> context.get("userLogin");
>> +        ByteBuffer fileBytes = (ByteBuffer)
>> context.get("uploadedFile");
>> +        String organizationPartyId = (String)
>> context.get("organizationPartyId");
>> +        String encoding = System.getProperty("file.encoding");
>> +        String csvString =
>> Charset.forName(encoding).decode(fileBytes).toString();
>> +        final BufferedReader csvReader = new BufferedReader(new
>> StringReader(csvString));
>> +        final CSVFormatBuilder builder =
>> CSVFormat.newBuilder(',').withQuoteChar('"').withHeader();
>> +        CSVFormat fmt = builder.build();
>> +        List<String> errMsgs = FastList.newInstance();
>> +        List<String> newErrMsgs = FastList.newInstance();
>> +        String lastInvoiceId = null;
>> +        String currentInvoiceId = null;
>> +        String newInvoiceId = null;
>> +        int invoicesCreated = 0;
>> +
>> +        if (fileBytes == null) {
>> +            return ServiceUtil.returnError("Uploaded file data not
>> found");
>> +        }
>> +
>> +        try {
>> +            for(final CSVRecord rec : fmt.parse(csvReader)) {
>> +                currentInvoiceId =  rec.get("invoiceId");
>> +                if (lastInvoiceId == null ||
>> !currentInvoiceId.equals(lastInvoiceId)) {
>> +                    newInvoiceId = null;
>> +                    Map<String, Object> invoice = UtilMisc.toMap(
>> +                        "invoiceTypeId", rec.get("invoiceTypeId"),
>> +                        "partyIdFrom", rec.get("partyIdFrom"),
>> +                        "partyId", rec.get("partyId"),
>> +                        "invoiceDate", rec.get("invoiceDate"),
>> +                        "dueDate", rec.get("dueDate"),
>> +                        "currencyUomId", rec.get("currencyUomId"),
>> +                        "description", rec.get("description"),
>> +                        "referenceNum", rec.get("referenceNum") +
>> "   Imported: orginal InvoiceId: " + currentInvoiceId,
>> +                        "userLogin", userLogin
>> +                        );
>> +
>> +                    // replace values if required
>> +                    if
>> (UtilValidate.isNotEmpty(rec.get("partyIdFromTrans"))) {
>> +                        invoice.put("partyIdFrom",
>> rec.get("partyIdFromTrans"));
>> +                    }
>> +                    if
>> (UtilValidate.isNotEmpty(rec.get("partyIdTrans"))) {
>> +                        invoice.put("partyId",
>> rec.get("partyIdTrans"));
>> +                    }
>> +
>> +                    // invoice validation
>> +                    try {
>> +                        newErrMsgs = FastList.newInstance();
>> +                        if
>> (UtilValidate.isEmpty(invoice.get("partyIdFrom"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Mandatory Party Id From and Party Id From
>> Trans missing for invoice: " + currentInvoiceId);
>> +                        } else if (delegator.findOne("Party",
>> UtilMisc.<String, Object>toMap("partyId",
>> invoice.get("partyIdFrom")), false) == null) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": partyIdFrom: " +
>> invoice.get("partyIdFrom") + " not found for invoice: " +
>> currentInvoiceId);
>> +                        }
>> +                        if
>> (UtilValidate.isEmpty(invoice.get("partyId"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Mandatory Party Id and Party Id Trans
>> missing for invoice: " + currentInvoiceId);
>> +                        } else if (delegator.findOne("Party",
>> UtilMisc.<String, Object>toMap("partyId", invoice.get("partyId")),
>> false) == null) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": partyId: " + invoice.get("partyId") + "
>> not found for invoice: " + currentInvoiceId);
>> +                        }
>> +                        if
>> (UtilValidate.isEmpty(invoice.get("invoiceTypeId"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Mandatory Invoice Type missing for
>> invoice: " + currentInvoiceId);
>> +                        } else if (delegator.findOne("InvoiceType",
>> UtilMisc.<String, Object>toMap("invoiceTypeId",
>> invoice.get("invoiceTypeId")), false) == null) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": InvoiceItem type id: " +
>> invoice.get("invoiceTypeId") + " not found for invoice: " +
>> currentInvoiceId);
>> +                        }
>> +                        GenericValue invoiceType =
>> delegator.findOne("InvoiceType", UtilMisc.<String,
>> Object>toMap("invoiceTypeId", invoice.get("invoiceTypeId")), false);
>> +                        if
>> ("PURCHASE_INVOICE".equals(invoiceType.getString("parentTypeId")) &&
>> !invoice.get("partyId").equals(organizationPartyId)) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": A purchase type invoice should have the
>> partyId 'To' being the organizationPartyId(=" + organizationPartyId +
>> ")! however is " + invoice.get("partyId") +"! invoice: " +
>> currentInvoiceId);
>> +                        }
>> +                        if
>> ("SALES_INVOICE".equals(invoiceType.getString("parentTypeId")) &&
>> !invoice.get("partyIdFrom").equals(organizationPartyId)) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": A sales type invoice should have the
>> partyId 'from' being the organizationPartyId(=" + organizationPartyId
>> + ")! however is " + invoice.get("partyIdFrom") +"! invoice: " +
>> currentInvoiceId);
>> +                        }
>> +
>> +
>> +                    } catch (GenericEntityException e) {
>> +                        Debug.logError("Valication checking problem
>> against database. due to " + e.getMessage(), module);
>> +                    }
>> +
>> +                    if (newErrMsgs.size() > 0) {
>> +                        errMsgs.addAll(newErrMsgs);
>> +                    } else {
>> +                        Map<String, Object> invoiceResult = null;
>> +                        try {
>> +                            invoiceResult =
>> dispatcher.runSync("createInvoice", invoice);
>> +                            } catch (GenericServiceException e) {
>> +                                Debug.logError(e, module);
>> +                                return
>> ServiceUtil.returnError(e.getMessage());
>> +                            }
>> +                        newInvoiceId = (String)
>> invoiceResult.get("invoiceId");
>> +                        invoicesCreated++;
>> +                    }
>> +                    lastInvoiceId = currentInvoiceId;
>> +                }
>> +
>> +
>> +                if (newInvoiceId != null) {
>> +                    Map<String, Object> invoiceItem = UtilMisc.toMap(
>> +                            "invoiceId", newInvoiceId,
>> +                            "invoiceItemSeqId",
>> rec.get("invoiceItemSeqId"),
>> +                            "invoiceItemTypeId",
>> rec.get("invoiceItemTypeId"),
>> +                            "productId", rec.get("productId"),
>> +                            "description", rec.get("itemDescription"),
>> +                            "amount", rec.get("amount"),
>> +                            "quantity", rec.get("quantity"),
>> +                            "userLogin", userLogin
>> +                            );
>> +
>> +                    if
>> (UtilValidate.isNotEmpty(rec.get("productIdTrans"))) {
>> +                        invoiceItem.put("productId",
>> rec.get("productIdTrans"));
>> +                    }
>> +                    // invoice item validation
>> +                    try {
>> +                        newErrMsgs = FastList.newInstance();
>> +                        if
>> (UtilValidate.isEmpty(invoiceItem.get("invoiceItemSeqId"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Mandatory item sequence Id missing for
>> invoice: " + currentInvoiceId);
>> +                        }
>> +                        if
>> (UtilValidate.isEmpty(invoiceItem.get("invoiceItemTypeId"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Mandatory invoice item type missing for
>> invoice: " + currentInvoiceId);
>> +                        } else if
>> (delegator.findOne("InvoiceItemType", UtilMisc.<String,
>> Object>toMap("invoiceItemTypeId",
>> invoiceItem.get("invoiceItemTypeId")), false) == null) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": InvoiceItem Item type id: " +
>> invoiceItem.get("invoiceItemTypeId") + " not found for invoice: " +
>> currentInvoiceId + " Item seqId:" +
>> invoiceItem.get("invoiceItemSeqId"));
>> +                        }
>> +                        if
>> (UtilValidate.isEmpty(invoiceItem.get("productId")) &&
>> UtilValidate.isEmpty(invoiceItem.get("description"))) {
>> +                        }
>> +                        if
>> (UtilValidate.isNotEmpty(invoiceItem.get("productId")) &&
>> delegator.findOne("Product", UtilMisc.<String,
>> Object>toMap("productId", invoiceItem.get("productId")), false) ==
>> null) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Product Id: " +
>> invoiceItem.get("productId") + " not found for invoice: " +
>> currentInvoiceId + " Item seqId:" +
>> invoiceItem.get("invoiceItemSeqId"));
>> +                        }
>> +                        if
>> (UtilValidate.isEmpty(invoiceItem.get("amount")) &&
>> UtilValidate.isEmpty(invoiceItem.get("quantity"))) {
>> +                            newErrMsgs.add("Line number " +
>> rec.getRecordNumber() + ": Either or both quantity and amount is
>> required for invoice: " + currentInvoiceId + " Item seqId:" +
>> invoiceItem.get("invoiceItemSeqId"));
>> +                        }
>> +                    } catch (GenericEntityException e) {
>> +                        Debug.logError("Validation checking problem
>> against database. due to " + e.getMessage(), module);
>> +                    }
>> +
>> +                    if (newErrMsgs.size() > 0) {
>> +                        errMsgs.addAll(newErrMsgs);
>> +                    } else {
>> +                        try {
>> + dispatcher.runSync("createInvoiceItem", invoiceItem);
>> +                        } catch (GenericServiceException e) {
>> +                            Debug.logError(e, module);
>> +                            return
>> ServiceUtil.returnError(e.getMessage());
>> +                        }
>> +                    }
>> +                }
>> +            }
>> +
>> +        } catch (IOException e) {
>> +            Debug.logError(e, module);
>> +            return ServiceUtil.returnError(e.getMessage());
>> +        }
>> +
>> +        if (errMsgs.size() > 0) {
>> +            return ServiceUtil.returnError(errMsgs);
>> +        }
>>   +        Map<String, Object> result =
>> ServiceUtil.returnSuccess(invoicesCreated + " new invoice(s) created");
>> +        result.put("organizationPartyId", organizationPartyId);
>> +        return result;
>> +    }
>>   }
>>
>> Modified:
>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> ---
>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
>> (original)
>> +++
>> ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml
>> Thu Jul 11 03:14:30 2013
>> @@ -753,6 +753,23 @@ under the License.
>>           <security https="true" auth="true"/>
>>           <response name="success" type="view"
>> value="ListGlAccountOrgCsv"/>
>>       </request-map>
>> +
>> +    <!-- Import export -->
>> +    <request-map uri="ImportExport">
>> +        <security https="true" auth="true"/>
>> +        <response name="success" type="view" value="ImportExport"/>
>> +    </request-map>
>> +
>> +    <request-map uri="PartyAccountsExportInvoicesCsv.csv">
>> +        <security https="true" auth="true"/>
>> +        <response name="success" type="view"
>> value="PartyAccountsExportInvoicesCsv"/>
>> +    </request-map>
>> +    <request-map uri="uploadInvoice">
>> +        <security auth="true" https="true"/>
>> +        <event invoke="importInvoice" path="" type="service"/>
>> +        <response name="success" type="request" value="ImportExport"/>
>> +        <response name="error" type="view" value="ImportExport"/>
>> +    </request-map>
>>         <!-- TO BE REMOVED
>>       <request-map uri="EditGlobalGlAccountOrganizations"><security
>> https="true" auth="true"/><response name="success" type="view"
>> value="EditGlobalGlAccountOrganizations"/></request-map>
>> @@ -2768,6 +2785,10 @@ under the License.
>>       <view-map name="ListGlAccountOrgPdf" type="screenfop"
>> page="component://accounting/widget/GlSetupScreens.xml#ListGlAccountOrgPdf"
>> content-type="application/pdf" encoding="none"/>
>>       <view-map name="ListGlAccountOrgCsv" type="screencsv"
>> page="component://accounting/widget/GlSetupScreens.xml#ListGlAccountOrgCsv"
>> content-type="text/csv" encoding="none"/>
>>   +    <!-- import export -->
>> +    <view-map name="ImportExport" type="screen"
>> page="component://accounting/widget/GlSetupScreens.xml#ImportExport"/>
>> +    <view-map name="PartyAccountsExportInvoicesCsv" type="screencsv"
>> page="component://accounting/widget/GlSetupScreens.xml#PartyAccountsExportInvoicesCsv"
>> content-type="text/csv" encoding="none"/>
>> +
>>       <!-- Manual Credit Card Transaction -->
>>       <view-map name="FindGatewayResponses"
>> page="component://accounting/widget/TransactionScreens.xml#FindGatewayResponses"
>> type="screen"/>
>>       <view-map name="ViewGatewayResponse"
>> page="component://accounting/widget/TransactionScreens.xml#ViewGatewayResponse"
>> type="screen"/>
>>
>> Modified: ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml
>> (original)
>> +++ ofbiz/trunk/applications/accounting/widget/GlSetupForms.xml Thu
>> Jul 11 03:14:30 2013
>> @@ -34,6 +34,11 @@ under the License.
>>                   <parameter param-name="organizationPartyId"
>> from-field="partyId"/>
>>               </hyperlink>
>>           </field>
>> +        <field name="importexport" title=" "
>> use-when="hasBasicPermission" widget-style="buttontext">
>> +            <hyperlink target="ImportExport"
>> description="${uiLabelMap.CommonImportExport}">
>> +                <parameter param-name="organizationPartyId"
>> from-field="partyId"/>
>> +            </hyperlink>
>> +        </field>
>>       </form>
>>         <form name="ListGlAccountOrganization" list-name="listIt"
>> target="" title="" type="list" view-size="50"
>> @@ -71,6 +76,55 @@ under the License.
>>           <field name="submitButton"
>> title="${uiLabelMap.AccountingNewCompany}"><submit
>> button-type="button"/></field>
>>       </form>
>>   +    <form name="ExportInvoice" type="single"
>> target="PartyAccountsExportInvoicesCsv.csv" title="" >
>> +        <field name="organizationPartyId"><hidden
>> value="${parameters.organizationPartyId}"/></field>
>> +        <field name="invoiceId"><lookup
>> target-form-name="LookupInvoice"/></field>
>> +        <field name="startDate"><date-time/></field>
>> +        <field name="submitButton"
>> title="${uiLabelMap.CommonSubmit}"><submit
>> button-type="button"/></field>
>> +    </form>
>> +
>> +    <form name="PartyAccountsExportInvoicesCsv" list-name="listIt"
>> target="" title="" type="list" view-size="99999"
>> +        odd-row-style="alternate-row"
>> header-row-style="header-row-2" default-table-style="basic-table
>> hover-bar" paginate="false">
>> +        <actions>
>> +            <entity-condition entity-name="InvoiceExport">
>> +                <condition-list combine="and">
>> +                    <condition-list combine="or">
>> +                        <condition-expr field-name="partyIdFrom"
>> from-field="organizationPartyId" operator="equals"/>
>> +                        <condition-expr field-name="partyId"
>> from-field="organizationPartyId" operator="equals"/>
>> +                    </condition-list>
>> +                    <condition-expr field-name="invoiceDate"
>> operator="greater-equals" from-field="parameters.startDate"
>> ignore-if-empty="true"/>
>> +                    <condition-expr field-name="invoiceId"
>> operator="equals" from-field="parameters.invoiceId"
>> ignore-if-empty="true"/>
>> +                </condition-list>
>> +                <order-by field-name="invoiceId"/>
>> +            </entity-condition>
>> +        </actions>
>> +        <field name="organizationPartyId"><hidden
>> value="${organizationPartyId}"/></field>
>> +        <field name="invoiceId" title="invoiceId"><display/></field>
>> +        <field name="invoiceTypeId"
>> title="invoiceTypeId"><display/></field>
>> +        <field name="invoiceDate"
>> title="invoiceDate"><display/></field>
>> +        <field name="dueDate" title="dueDate"><display/></field>
>> +        <field name="partyIdFrom"
>> title="partyIdFrom"><display/></field>
>> +        <field name="partyIdFromTrans"
>> title="partyIdFromTrans"><display/></field>
>> +        <field name="partyId" title="partyId"><display/></field>
>> +        <field name="partyIdTrans"
>> title="partyIdTrans"><display/></field>
>> +        <field name="currencyUomId"
>> title="currencyUomId"><display/></field>
>> +        <field name="description"
>> title="description"><display/></field>
>> +        <field name="referenceNum"
>> title="referenceNum"><display/></field>
>> +        <field name="invoiceItemSeqId"
>> title="invoiceItemSeqId"><display/></field>
>> +        <field name="invoiceItemTypeId"
>> title="invoiceItemTypeId"><display/></field>
>> +        <field name="productId" title="productId"><display/></field>
>> +        <field name="productIdTrans"
>> title="productIdTrans"><display/></field>
>> +        <field name="itemDescription"
>> title="itemDescription"><display/></field>
>> +        <field name="quantity" title="quantity"><display/></field>
>> +        <field name="amount" title="amount"><display/></field>
>> +    </form>
>> +
>> +    <form name="ImportInvoice" type="upload" target="uploadInvoice"
>> title="" >
>> +        <field name="organizationPartyId"><hidden
>> value="${parameters.organizationPartyId}"/></field>
>> +        <field name="uploadedFile"><file/></field>
>> +        <field name="submitButton"
>> title="${uiLabelMap.CommonUpload}"><submit
>> button-type="button"/></field>
>> +    </form>
>> +
>>       <form name="AssignGlAccount" type="single"
>> target="createGlAccountOrganization" title="" default-map-name="account"
>>           header-row-style="header-row"
>> default-table-style="basic-table">
>>           <field name="organizationPartyId"><hidden/></field>
>>
>> Modified: ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml
>> (original)
>> +++ ofbiz/trunk/applications/accounting/widget/GlSetupScreens.xml Thu
>> Jul 11 03:14:30 2013
>> @@ -51,7 +51,6 @@ under the License.
>>       <screen name="ListCompanies">
>>           <section>
>>               <actions>
>> -                <property-map resource="AccountingUiLabels"
>> map-name="uiLabelMap" global="true"/>
>>                   <set field="titleProperty"
>> value="AccountingAvailableInternalOrganizations"/>
>>                   <set field="headerItem" value="companies"/>
>>                   <set field="labelTitleProperty"
>> value="${uiLabelMap.AccountingAvailableInternalOrganizations}"/>
>> @@ -80,7 +79,6 @@ under the License.
>>       <screen name="AddCompany">
>>           <section>
>>               <actions>
>> -                <property-map resource="AccountingUiLabels"
>> map-name="uiLabelMap" global="true"/>
>>                   <set field="titleProperty"
>> value="AccountingNewCompany"/>
>>               </actions>
>>               <widgets>
>> @@ -94,6 +92,32 @@ under the License.
>>               </widgets>
>>           </section>
>>       </screen>
>> +    <screen name="ImportExport">
>> +        <section>
>> +            <actions>
>> +                <set field="titleProperty" value="CommonImportExport"/>
>> +                <entity-one entity-name="PartyGroup"
>> value-field="partyGroup">
>> +                    <field-map field-name="partyId"
>> from-field="parameters.organizationPartyId"/>
>> +                </entity-one>
>> +            </actions>
>> +            <widgets>
>> +                <decorator-screen name="main-decorator"
>> location="${parameters.mainDecoratorLocation}">
>> +                    <decorator-section name="body">
>> +                        <screenlet
>> title="${uiLabelMap.AccountingInvoice}
>> ${uiLabelMap.CommonImportExport}  ${uiLabelMap.CommonFor}:
>> ${partyGroup.groupName} [${parameters.organizationPartyId}]">
>> +                            <container style="lefthalf">
>> +                                <label
>> style="h2">${uiLabelMap.CommonImport}</label>
>> +                                <include-form name="ImportInvoice"
>> location="component://accounting/widget/GlSetupForms.xml"/>
>> +                            </container>
>> +                            <container style="righthalf">
>> +                                <label
>> style="h2">${uiLabelMap.CommonExport}</label>
>> +                                <include-form name="ExportInvoice"
>> location="component://accounting/widget/GlSetupForms.xml"/>
>> +                            </container>
>> +                         </screenlet>
>> +                    </decorator-section>
>> +                </decorator-screen>
>> +            </widgets>
>> +        </section>
>> +    </screen>
>>       <screen name="ListGlAccountOrganization">
>>           <section>
>>               <actions>
>> @@ -559,6 +583,18 @@ under the License.
>>               </widgets>
>>           </section>
>>       </screen>
>> +    <screen name="PartyAccountsExportInvoicesCsv">
>> +        <section>
>> +            <actions>
>> +                <property-map resource="CommonUiLabels"
>> map-name="uiLabelMap" global="true"/>
>> +                <property-map resource="AccountingUiLabels"
>> map-name="uiLabelMap" global="true"/>
>> +                <set field="organizationPartyId"
>> from-field="parameters.organizationPartyId"/>
>> +            </actions>
>> +            <widgets>
>> +                    <include-form
>> name="PartyAccountsExportInvoicesCsv"
>> location="component://accounting/widget/GlSetupForms.xml"/>
>> +            </widgets>
>> +        </section>
>> +    </screen>
>>       <screen name="FindGlAccountCategory">
>>           <section>
>>               <actions>
>>
>> Added: ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar?rev=1502093&view=auto
>> ==============================================================================
>>
>> Binary file - no diff available.
>>
>> Propchange: ofbiz/trunk/framework/base/lib/commons/commons-csv-1.0.jar
>> ------------------------------------------------------------------------------
>>
>>      svn:mime-type = application/octet-stream
>>
>> Modified: ofbiz/trunk/framework/common/config/CommonUiLabels.xml
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/common/config/CommonUiLabels.xml?rev=1502093&r1=1502092&r2=1502093&view=diff
>> ==============================================================================
>>
>> --- ofbiz/trunk/framework/common/config/CommonUiLabels.xml (original)
>> +++ ofbiz/trunk/framework/common/config/CommonUiLabels.xml Thu Jul 11
>> 03:14:30 2013
>> @@ -5166,6 +5166,12 @@
>>           <value xml:lang="vi">Ảnh</value>
>>           <value xml:lang="zh">图片</value>
>>       </property>
>> +    <property key="CommonImport">
>> +        <value xml:lang="en">Import</value>
>> +    </property>
>> +    <property key="CommonImportExport">
>> +        <value xml:lang="en">Import/Export</value>
>> +    </property>
>>       <property key="CommonIn">
>>           <value xml:lang="ar">داخل</value>
>>           <value xml:lang="cs">V</value>
>>
>>