I don't like the idea of the system taking guesses at creating payment applications. Why not present something in the UI when a user is entering a payment or invoice that allows them to select an outstanding invoice or payment to apply it to?
This just seems like it could get messy for companies who process a large number of repeat orders. If the system guesses wrong then somebody has to manually go through and clean up the mess. Regards Scott HotWax Media http://www.hotwaxmedia.com On 12/05/2010, at 9:20 PM, hans...@apache.org wrote: > Author: hansbak > Date: Wed May 12 09:20:44 2010 > New Revision: 943417 > > URL: http://svn.apache.org/viewvc?rev=943417&view=rev > Log: > if an invoice is approved or a payment is set to sent or received this > service will try to find a matching payment/invoice and when found create the > payment application > > Modified: > > ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml > ofbiz/trunk/applications/accounting/servicedef/secas_invoice.xml > ofbiz/trunk/applications/accounting/servicedef/secas_payment.xml > ofbiz/trunk/applications/accounting/servicedef/services_payment.xml > > Modified: > ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml?rev=943417&r1=943416&r2=943417&view=diff > ============================================================================== > --- > ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml > (original) > +++ > ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml > Wed May 12 09:20:44 2010 > @@ -814,4 +814,79 @@ under the License. > <call-service service-name="updatePayment" > in-map-name="updatePayment"/> > <field-to-result field="parameters.paymentId" > result-name="paymentId"/> > </simple-method> > -</simple-methods> > \ No newline at end of file > + > + <simple-method method-name="createMatchingPaymentApplication" > short-description="Create a payment application if either the invoice of > payment could be found"> > + <if-not-empty field="parameters.invoiceId"> > + <entity-one value-field="invoice" entity-name="Invoice"/> > + <if-not-empty field="invoice"> > + <call-class-method method-name="getInvoiceTotal" > class-name="org.ofbiz.accounting.invoice.InvoiceWorker" > ret-field="invoiceTotal"> > + <field field="invoice" type="GenericValue"/> > + </call-class-method> > + <entity-condition list="payments" entity-name="Payment"> > + <condition-list combine="and"> > + <condition-expr field-name="statusId" > value="PMNT_CONFIRMED" operator="not-equals"/> > + <condition-expr field-name="partyIdFrom" > from-field="invoice.partyId" operator="equals"/> > + <condition-expr field-name="partyIdTo" > from-field="invoice.partyIdFrom" operator="equals"/> > + <condition-expr field-name="amount" > from-field="invoiceTotal" operator="equals"/> > + </condition-list> > + <order-by field-name="effectiveDate"/> > + </entity-condition> > + <if-not-empty field="payments"> > + <!-- check if already applied --> > + <entity-and list="paymentAppls" > entity-name="PaymentApplication"> > + <field-map field-name="paymentId" > from-field="payments[0].paymentId"/> > + </entity-and> > + <if-empty field="paymentAppls"> > + <set field="createAppl.paymentId" > from-field="payments[0].paymentId"/> > + <set field="createAppl.invoiceId" > from-field="parameters.invoiceId"/> > + <set field="createAppl.amountApplied" > from-field="invoiceTotal"/> > + </if-empty> > + </if-not-empty> > + </if-not-empty> > + </if-not-empty> > + > + <if-not-empty field="parameters.paymentId"> > + <entity-one value-field="payment" entity-name="Payment"/> > + <if-not-empty field="payment"> > + <entity-condition list="invoices" entity-name="Invoice"> > + <condition-list combine="and"> > + <condition-expr field-name="statusId" > value="INVOICE_READY" operator="not-equals"/> > + <condition-expr field-name="statusId" > value="INVOICE_PAID" operator="not-equals"/> > + <condition-expr field-name="statusId" > value="INVOICE_CANCELLED" operator="not-equals"/> > + <condition-expr field-name="statusId" > value="INVOICE_WRITEOFF" operator="not-equals"/> > + <condition-expr field-name="partyIdFrom" > from-field="payment.partyIdTo"/> > + <condition-expr field-name="partyId" > from-field="payment.partyIdFrom"/> > + </condition-list> > + <order-by field-name="invoiceDate"/> > + </entity-condition> > + <iterate entry="invoice" list="invoices"> > + <call-class-method method-name="getInvoiceTotal" > class-name="org.ofbiz.accounting.invoice.InvoiceWorker" > ret-field="invoiceTotal"> > + <field field="invoice" type="GenericValue"/> > + </call-class-method> > + <if-compare-field operator="equals" field="invoiceTotal" > to-field="payment.amount"> > + <set field="invoiceId" > from-field="invoice.invoiceId"/> > + </if-compare-field> > + </iterate> > + <if-not-empty field="invoiceId"> > + <entity-and list="paymentAppls" > entity-name="PaymentApplication"> > + <field-map field-name="invoiceId" > from-field="invoiceId"/> > + </entity-and> > + <if-empty field="paymentAppls"> > + <set field="createAppl.paymentId" > from-field="parameters.paymentId"/> > + <set field="createAppl.invoiceId" > from-field="invoiceId"/> > + <set field="createAppl.amountApplied" > from-field="payment.amount"/> > + </if-empty> > + </if-not-empty> > + </if-not-empty> > + </if-not-empty> > + > + > + <if-not-empty field="createAppl.paymentId"> > + <if-not-empty field="createAppl.invoiceId"> > + <call-service service-name="createPaymentApplication" > in-map-name="createAppl"/> > + <set field="successMessage" value="also application > created"/> > + </if-not-empty> > + </if-not-empty> > + </simple-method> > + > +</simple-methods> > > Modified: ofbiz/trunk/applications/accounting/servicedef/secas_invoice.xml > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/secas_invoice.xml?rev=943417&r1=943416&r2=943417&view=diff > ============================================================================== > --- ofbiz/trunk/applications/accounting/servicedef/secas_invoice.xml > (original) > +++ ofbiz/trunk/applications/accounting/servicedef/secas_invoice.xml Wed May > 12 09:20:44 2010 > @@ -31,4 +31,11 @@ under the License. > <condition field-name="invoiceTypeId" operator="equals" > value="COMMISSION_INVOICE"/> > <action service="removeInvoiceItemAssocOnCancelInvoice" mode="sync"/> > </eca> > + > + <eca service="setInvoiceStatus" event="commit"> > + <condition operator="equals" field-name="statusId" > value="INVOICE_APPROVED"/> > + <condition operator="not-equals" field-name="oldStatusId" > value="INVOICE_APPROVED"/> > + <action service="createMatchingPaymentApplication" mode="sync"/> > + </eca> > + > </service-eca> > > Modified: ofbiz/trunk/applications/accounting/servicedef/secas_payment.xml > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/secas_payment.xml?rev=943417&r1=943416&r2=943417&view=diff > ============================================================================== > --- ofbiz/trunk/applications/accounting/servicedef/secas_payment.xml > (original) > +++ ofbiz/trunk/applications/accounting/servicedef/secas_payment.xml Wed May > 12 09:20:44 2010 > @@ -67,4 +67,17 @@ under the License. > <condition field-name="statusId" operator="equals" > value="FINACT_TRNS_CANCELED"/> > <action service="setFinAccountTransStatus" mode="sync"/> > </eca> > + > + <eca service="setPaymentStatus" event="commit"> > + <condition operator="equals" field-name="statusId" > value="PMNT_RECEIVED"/> > + <condition operator="not-equals" field-name="oldStatusId" > value="PMNT_RECEIVED"/> > + <action service="createMatchingPaymentApplication" mode="sync"/> > + </eca> > + > + <eca service="setPaymentStatus" event="commit"> > + <condition operator="equals" field-name="statusId" > value="PMNT_SENT"/> > + <condition operator="not-equals" field-name="oldStatusId" > value="PMNT_SENT"/> > + <action service="createMatchingPaymentApplication" mode="sync"/> > + </eca> > + > </service-eca> > > Modified: ofbiz/trunk/applications/accounting/servicedef/services_payment.xml > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_payment.xml?rev=943417&r1=943416&r2=943417&view=diff > ============================================================================== > --- ofbiz/trunk/applications/accounting/servicedef/services_payment.xml > (original) > +++ ofbiz/trunk/applications/accounting/servicedef/services_payment.xml Wed > May 12 09:20:44 2010 > @@ -240,4 +240,11 @@ under the License. > <attribute name="orderId" type="String" mode="IN" optional="false"/> > <attribute name="paymentId" type="String" mode="OUT" > optional="false"/> > </service> > + > + <service name="createMatchingPaymentApplication" engine="simple" > + > location="component://accounting/script/org/ofbiz/accounting/payment/PaymentServices.xml" > invoke="createMatchingPaymentApplication" auth="true"> > + <description>Create a payment application if either the invoice of > payment could be found</description> > + <attribute name="paymentId" type="String" mode="IN" optional="true"/> > + <attribute name="invoiceId" type="String" mode="IN" optional="true"/> > + </service> > </services> > >
smime.p7s
Description: S/MIME cryptographic signature