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>