You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Mridul Pathak (JIRA)" <ji...@apache.org> on 2007/12/07 07:19:43 UTC

[jira] Commented: (OFBIZ-1483) Implement an automatic GL posting service for purchase invoices

    [ https://issues.apache.org/jira/browse/OFBIZ-1483?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12549316 ] 

Mridul Pathak commented on OFBIZ-1483:
--------------------------------------

Jacopo, Anil
    I am taking up this issue.  Alok will work on this under my supervision and submit the patch.

> Implement an automatic GL posting service for purchase invoices
> ---------------------------------------------------------------
>
>                 Key: OFBIZ-1483
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-1483
>             Project: OFBiz
>          Issue Type: Sub-task
>          Components: accounting
>    Affects Versions: SVN trunk
>            Reporter: Jacopo Cappellato
>
> Name of the service: "createAcctgTransForPurchaseInvoice" or similar
> Service definition:
>     <service name="createAcctgTransForPurchaseInvoice" engine="simple" auth="true"
>         location="org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForPurchaseInvoice">
>         <description>Create an accounting transaction for a purchase invoice</description>
>         <attribute name="invoiceId" type="String" mode="IN" optional="false"/>
>         <attribute name="acctgTransId" type="String" mode="OUT" optional="true"/>
>     </service>
> The eca rule will be:
> <eca service="setInvoiceStatus" event="commit">
>     <condition field-name="invoiceId" operator="is-not-empty"/>
>     <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="createAcctgTransForPurchaseInvoice" mode="sync"/>
> </eca>
> This is the general description: this service will call the createAcctgTransAndEntries with the following input parameters:
> a) acctgTransTypeId="PURCHASE_INVOICE"
> b) partyId = invoice.partyIdFrom
> c) roleTypeId = "BILL_FROM_VENDOR"
> d) invoiceId = invoice.invoiceId
> e) acctgTransEntries: a list composed by the following AcctgTransEntry elements:
> e1) for each element of the InvoiceItems:
> e1.1) compute the value amountFromInvoice = invoiceItem.quantity * invoiceItem.amount (NOTE: if quantity is not set, then default to 1)
> e1.2)  get the list of OrderItemBilling records associated to the item and iterate over them, getting the OrderItem associated and computing the following amount: OrderItemBilling.quantity * OrderItem.unitPrice; compute the sum of all the values in the iteration (amountFromOrder);
> e1.3) if (amountFromInvoice != amountFromOrder and amountFromOrder > 0) then prepare an AcctgTransEntry with the following values:
> -- debitCreditFlag = D
> -- organizationPartyId = invoice.partyId
> -- partyId = invoice.partyIdFrom
> -- roleTypeId = "BILL_FROM_VENDOR"
> -- productId = invoiceItem.productId
> -- glAccountTypeId = PURCHASE_PRICE_VAR
> -- origAmount = amountFromInvoice - amountFromOrder
> -- origCurrencyUomId = invoice.currencyUomId
> e1.4) prepare an AcctgTransEntry with the following values:
> -- debitCreditFlag = D
> -- organizationPartyId = invoice.partyId
> -- partyId = invoice.partyIdFrom
> -- roleTypeId = "BILL_FROM_VENDOR"
> -- productId = invoiceItem.productId
> -- glAccountTypeId = invoiceItem.invoiceItemTypeId
> -- glAccountId = invoiceItem.overrideGlAccountId
> -- origAmount = if (amountFromOrder > 0) then amountFromOrder else amountFromInvoice
> -- origCurrencyUomId = invoice.currencyUomId
> f) one element for the invoice total (the sum of all the items' amount*quantity):
> -- debitCreditFlag = C
> -- organizationPartyId = invoice.partyId
> -- glAccountTypeId = ACCOUNTS_PAYABLE
> -- origAmount = the sum of all the items' amountFromInvoice
> -- origCurrencyUomId = invoice.currencyUomId
> -- partyId = invoice.partyIdFrom
> -- roleTypeId = "BILL_FROM_VENDOR"
> Some more details about the logic:
> 1) get the Invoice record
> 2) if Invoice.invoiceTypeId != PURCHASE_INVOICE return
> 3) get the InvoiceItems and iterate over them to create the entries (e) and compute the total for the entry for the total (f)
> 4) call the createAcctgTransAndEntries service
> Add information on the wiki page: http://docs.ofbiz.org/x/Qw0

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.