Author: apatel
Date: Thu Sep 23 20:59:05 2010 New Revision: 1000621 URL: http://svn.apache.org/viewvc?rev=1000621&view=rev Log: Fix bug in Gl posting Customer Return Invoice. It was handled as a purchase invoice when its totally different beast. All InvoiceTypes from PURCHASE_INVOICE type tree are still handled like always except for CUST_RTN_INVOICE. Added new service to handle CUST_RTN_INVOICE. Modified: ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml Modified: ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml (original) +++ ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml Thu Sep 23 20:59:05 2010 @@ -45,6 +45,7 @@ under the License. <AcctgTransType acctgTransTypeId="SALES_INVOICE" description="Sales Invoice" hasTable="N" parentTypeId="OBLIGATION_ACCTG_TRA"/><!-- FIXME: replace with "SALES" --> <AcctgTransType acctgTransTypeId="PURCHASE_INVOICE" description="Purchase Invoice" hasTable="N" parentTypeId="OBLIGATION_ACCTG_TRA"/><!-- FIXME: replace with "SALES" --> + <AcctgTransType acctgTransTypeId="CUST_RTN_INVOICE" description="Customer Return" hasTable="N" parentTypeId="OBLIGATION_ACCTG_TRA"/><!-- FIXME: replace with "SALES" --> <AcctgTransType acctgTransTypeId="SALES_SHIPMENT" description="Sales Shipment" hasTable="N" parentTypeId="EXTERNAL_ACCTG_TRANS"/> <AcctgTransType acctgTransTypeId="SHIPMENT_RECEIPT" description="Shipment Receipt" hasTable="N" parentTypeId="EXTERNAL_ACCTG_TRANS"/> <AcctgTransType acctgTransTypeId="MANUFACTURING" description="Manufacturing" hasTable="N" parentTypeId=""/> Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml (original) +++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml Thu Sep 23 20:59:05 2010 @@ -455,6 +455,7 @@ under the License. <simple-method method-name="setInvoiceStatus" short-description="Set The Invoice Status"> <entity-one entity-name="Invoice" value-field="invoice"/> <field-to-result field="invoice.statusId" result-name="oldStatusId"/> + <field-to-result field="invoice.invoiceTypeId" result-name="invoiceTypeId"/> <if-compare-field field="invoice.statusId" to-field="parameters.statusId" operator="not-equals"> <entity-one entity-name="StatusValidChange" value-field="statusChange" auto-field-map="false"> <field-map field-name="statusId" from-field="invoice.statusId"/> Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml (original) +++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml Thu Sep 23 20:59:05 2010 @@ -579,6 +579,10 @@ under the License. <if-compare field="parameters.debitCreditFlag" operator="equals" value="D"/> </and> <and> + <if-compare field="parameters.acctgTransTypeId" operator="equals" value="CUST_RTN_INVOICE"/> + <if-compare field="parameters.debitCreditFlag" operator="equals" value="D"/> + </and> + <and> <if-compare field="parameters.acctgTransTypeId" operator="equals" value="SALES_INVOICE"/> <if-compare field="parameters.debitCreditFlag" operator="equals" value="C"/> </and> @@ -594,11 +598,16 @@ under the License. <set field="parameters.glAccountTypeId" value="UNINVOICED_SHIP_RCPT"/> <call-simple-method method-name="getGlAccountTypeDefaultInline"/> <set field="glAccountTypeDefault" from-field="lookedUpValue"/> - <else> + </if-compare> + <if-compare field="parameters.acctgTransTypeId" operator="equals" value="CUST_RTN_INVOICE"> + <set field="parameters.glAccountTypeId" value="SALES_RETURNS"/> + <call-simple-method method-name="getGlAccountTypeDefaultInline"/> + <set field="glAccountTypeDefault" from-field="lookedUpValue"/> + </if-compare> + <if-compare field="parameters.acctgTransTypeId" operator="equals" value="SALES_INVOICE"> <set field="parameters.glAccountTypeId" value="SALES_ACCOUNT"/> <call-simple-method method-name="getGlAccountTypeDefaultInline"/> <set field="glAccountTypeDefault" from-field="lookedUpValue"/> - </else> </if-compare> <if-not-empty field="glAccountTypeDefault.glAccountId"> <field-to-result field="glAccountTypeDefault.glAccountId" result-name="glAccountId"/> @@ -1877,6 +1886,130 @@ under the License. </if-compare> </simple-method> + <simple-method method-name="createAcctgTransForCustomerReturnInvoice" short-description="Create an accounting transaction for a Customer Return Invoice"> + <!-- retrieve ledger rounding properties --> + <call-simple-method method-name="getGlArithmeticSettingsInline"/> + + <entity-one entity-name="Invoice" value-field="invoice"/> + <get-related-one value-field="invoice" relation-name="InvoiceType" to-value-field="invoiceType"/> + <!-- Check invoiceTypeId. This service works only for CustomerReturns --> + <if-compare field="invoiceType.invoiceTypeId" operator="equals" value="CUST_RTN_INVOICE"> + <set field="totalAmountFromInvoice" type="BigDecimal" value="0"/> + <set field="transPartyRoleTypeId" value="BILL_TO_CUSTOMER"/> + <set field="acctgTransTypeId" value="CUST_RTN_INVOICE"/> + <entity-condition entity-name="InvoiceItem" list="invoiceItems" use-cache="true"> + <condition-list> + <condition-expr field-name="invoiceItemTypeId" operator="not-equals" value="PINV_SALES_TAX"/> + <condition-expr field-name="invoiceItemTypeId" operator="not-equals" value="PITM_SALES_TAX"/> + <condition-expr field-name="invoiceId" operator="equals" from-field="parameters.invoiceId"/> + </condition-list> + </entity-condition> + + <iterate list="invoiceItems" entry="invoiceItem"> + <set field="amountFromOrder" type="BigDecimal" value="0"/> + <set field="amountFromInvoice" type="BigDecimal" value="0"/> + <if-empty field="invoiceItem.quantity"> + <set field="invoiceItem.quantity" value="1"/> + </if-empty> + <!-- This InvoiceItem amount. --> + <calculate field="amountFromInvoice" decimal-scale="${ledgerDecimals}" rounding-mode="${roundingMode}"> + <calcop operator="multiply"> + <calcop operator="get" field="invoiceItem.quantity"/> + <calcop operator="get" field="invoiceItem.amount"/> + </calcop> + </calculate> + <!-- Keep building Invoice Total for use in credit entry --> + <calculate field="totalAmountFromInvoice" decimal-scale="${ledgerDecimals}" rounding-mode="${roundingMode}"> + <calcop operator="add"> + <calcop operator="get" field="totalAmountFromInvoice"/> + <calcop operator="get" field="amountFromInvoice"/> + </calcop> + </calculate> + <!-- Debit --> + <make-value entity-name="AcctgTransEntry" value-field="debitEntry"/> + <set field="debitEntry.debitCreditFlag" value="D"/> + <set field="debitEntry.organizationPartyId" from-field="invoice.partyId"/> + <set field="debitEntry.partyId" from-field="invoice.partyIdFrom"/> + <set field="debitEntry.roleTypeId" from-field="transPartyRoleTypeId"/> + <set field="debitEntry.productId" from-field="invoiceItem.productId"/> + <set field="debitEntry.glAccountTypeId" from-field="invoiceItem.invoiceItemTypeId"/> + <set field="debitEntry.glAccountId" from-field="invoiceItem.overrideGlAccountId"/> + <set field="debitEntry.origAmount" from-field="amountFromInvoice"/> + <set field="debitEntry.origCurrencyUomId" from-field="invoice.currencyUomId"/> + <set field="acctgTransEntries[]" from-field="debitEntry" type="Object"/> + </iterate> + <!-- debit entry for SALES_TAX--> + <call-class-method method-name="getInvoiceTaxAuthPartyAndGeos" class-name="org.ofbiz.accounting.invoice.InvoiceWorker" + ret-field="taxAuthPartyAndGeos"> + <field field="invoice" type="org.ofbiz.entity.GenericValue"/> + </call-class-method> + <iterate-map key="taxAuthPartyId" value="taxAuthGeoIds" map="taxAuthPartyAndGeos"> + <iterate entry="taxAuthGeoId" list="taxAuthGeoIds"> + <clear-field field="debitEntry"/> + <make-value entity-name="AcctgTransEntry" value-field="debitEntry"/> + <set field="debitEntry.debitCreditFlag" value="D"/> + <set field="debitEntry.organizationPartyId" from-field="invoice.partyIdFrom"/> + <call-class-method method-name="getInvoiceTaxTotalForTaxAuthPartyAndGeo" class-name="org.ofbiz.accounting.invoice.InvoiceWorker" + ret-field="taxAmount"> + <field field="invoice" type="GenericValue"/> + <field field="taxAuthPartyId" type="String"/> + <field field="taxAuthGeoId" type="String"/> + </call-class-method> + <set field="debitEntry.origAmount" from-field="taxAmount"/> + <set field="debitEntry.origCurrencyUomId" from-field="invoice.currencyUomId"/> + <set field="debitEntry.partyId" from-field="taxAuthPartyId"/> + <set field="debitEntry.roleTypeId" value="TAX_AUTHORITY"/> + <set field="acctgTransEntries[]" from-field="debitEntry" type="Object"/> + </iterate> + </iterate-map> + <!-- Another entry for tax not attributed to a taxAuthPartyId --> + <clear-field field="debitEntry"/> + <make-value entity-name="AcctgTransEntry" value-field="debitEntry"/> + <set field="debitEntry.debitCreditFlag" value="D"/> + <set field="debitEntry.organizationPartyId" from-field="invoice.partyIdFrom"/> + <call-class-method method-name="getInvoiceUnattributedTaxTotal" class-name="org.ofbiz.accounting.invoice.InvoiceWorker" + ret-field="taxAmount"> + <field field="invoice" type="GenericValue"/> + </call-class-method> + <set field="debitEntry.origAmount" from-field="taxAmount"/> + <set field="debitEntry.origCurrencyUomId" from-field="invoice.currencyUomId"/> + <set field="acctgTransEntries[]" from-field="debitEntry" type="Object"/> + + <!-- Credit --> + <make-value entity-name="AcctgTransEntry" value-field="creditEntry"/> + <set field="creditEntry.debitCreditFlag" value="C"/> + <set field="creditEntry.organizationPartyId" from-field="invoice.partyId"/> + <set field="creditEntry.glAccountTypeId" value="ACCOUNTS_PAYABLE"/> + <calculate field="totalAmountFromInvoice" type="BigDecimal" decimal-scale="${ledgerDecimals}" rounding-mode="${roundingMode}"> + <calcop operator="add"> + <calcop operator="get" field="totalAmountFromInvoice"/> + <calcop operator="get" field="invoiceTaxTotal"/> + </calcop> + </calculate> + <set field="creditEntry.origAmount" from-field="totalAmountFromInvoice"/> + <set field="creditEntry.origCurrencyUomId" from-field="invoice.currencyUomId"/> + <set field="creditEntry.partyId" from-field="invoice.partyIdFrom"/> + <set field="creditEntry.roleTypeId" from-field="transPartyRoleTypeId"/> + <set field="acctgTransEntries[]" from-field="creditEntry" type="Object"/> + + <!-- Set header fields (AcctgTrans) --> + <set field="createAcctgTransAndEntriesInMap.glFiscalTypeId" value="ACTUAL"/> + <set field="createAcctgTransAndEntriesInMap.acctgTransTypeId" from-field="acctgTransTypeId"/> + <set field="createAcctgTransAndEntriesInMap.invoiceId" from-field="invoice.invoiceId"/> + <set field="createAcctgTransAndEntriesInMap.partyId" from-field="invoice.partyIdFrom"/> + <set field="createAcctgTransAndEntriesInMap.roleTypeId" value="BILL_FROM_VENDOR"/> + <set field="createAcctgTransAndEntriesInMap.acctgTransEntries" from-field="acctgTransEntries"/> + <call-service service-name="createAcctgTransAndEntries" in-map-name="createAcctgTransAndEntriesInMap"> + <result-to-field result-name="acctgTransId"/> + </call-service> + <field-to-result field="acctgTransId" result-name="acctgTransId"/> + <else> + <!-- This invoice is not a Customer Return. Return error --> + <add-error><fail-message message="Bad invoiceTypeId [${invoiceType.invoiceTypeId}]. Service createAcctgTransForCustomerReturnInvoice for type CUST_RTN_INVOICE."/></add-error> + </else> + </if-compare> + </simple-method> + <!-- Service for the automatic creation of accounting transaction for Purchase Invoice --> <simple-method method-name="createAcctgTransForPurchaseInvoice" short-description="Create an accounting transaction for a purchase invoice"> <!-- retrieve ledger rounding properties --> Modified: ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml (original) +++ ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml Thu Sep 23 20:59:05 2010 @@ -86,6 +86,7 @@ under the License. <!-- accounting transactions for Purchase (AP) and Sales Invoices (AR) --> <eca service="setInvoiceStatus" event="commit"> <condition field-name="invoiceId" operator="is-not-empty"/> + <condition field-name="invoiceTypeId" operator="not-equals" value="CUST_RTN_INVOICE"/> <condition field-name="statusId" operator="equals" value="INVOICE_READY"/> <condition field-name="oldStatusId" operator="not-equals" value="INVOICE_READY"/> <condition field-name="oldStatusId" operator="not-equals" value="INVOICE_PAID"/> @@ -94,6 +95,14 @@ under the License. </eca> <eca service="setInvoiceStatus" event="commit"> <condition field-name="invoiceId" operator="is-not-empty"/> + <condition field-name="invoiceTypeId" operator="equals" value="CUST_RTN_INVOICE"/> + <condition field-name="statusId" operator="equals" value="INVOICE_READY"/> + <condition field-name="oldStatusId" operator="not-equals" value="INVOICE_READY"/> + <condition field-name="oldStatusId" operator="not-equals" value="INVOICE_PAID"/> + <action service="createAcctgTransForCustomerReturnInvoice" mode="sync"/> + </eca> + <eca service="setInvoiceStatus" event="commit"> + <condition field-name="invoiceId" operator="is-not-empty"/> <condition field-name="statusId" operator="equals" value="INVOICE_CANCELLED"/> <action service="cancelInvoice" mode="sync"/> </eca> Modified: ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml (original) +++ ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml Thu Sep 23 20:59:05 2010 @@ -92,6 +92,7 @@ under the License. <attribute name="statusId" type="String" mode="IN" optional="false"/> <attribute name="statusDate" type="Timestamp" mode="IN" optional="true"/> <attribute name="paidDate" type="Timestamp" mode="IN" optional="true"/> <!-- only relevant for changes to PAID --> + <attribute name="invoiceTypeId" type="String" mode="OUT" optional="true"/> <attribute name="oldStatusId" type="String" mode="OUT" optional="true"/> </service> <service name="copyInvoiceToTemplate" engine="simple" Modified: ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml?rev=1000621&r1=1000620&r2=1000621&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml (original) +++ ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml Thu Sep 23 20:59:05 2010 @@ -453,6 +453,14 @@ under the License. <attribute name="acctgTransId" type="String" mode="OUT" optional="true"/> </service> + <!-- An automatic GL Posting for Customer Return Invoice--> + <service name="createAcctgTransForCustomerReturnInvoice" engine="simple" auth="true" + location="component://accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForCustomerReturnInvoice"> + <description>Create an accounting transaction for a Customer Return invoice</description> + <attribute name="invoiceId" type="String" mode="IN" optional="false"/> + <attribute name="acctgTransId" type="String" mode="OUT" optional="true"/> + </service> + <!-- An automatic GL Posting for Purchase Invoice--> <service name="createAcctgTransForPurchaseInvoice" engine="simple" auth="true" location="component://accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForPurchaseInvoice"> |
Free forum by Nabble | Edit this page |