Hi Hans,
Isn't the following code at line 732 in
InvoiceServices.createInvoiceForOrder is doing the same thing?
[snip]
// check for previous order payments
List<GenericValue> orderPaymentPrefs =
delegator.findByAnd("OrderPaymentPreference",
UtilMisc.toMap("orderId", orderId));
List<GenericValue> currentPayments =
FastList.newInstance();
for (GenericValue paymentPref : orderPaymentPrefs) {
List<GenericValue> payments =
paymentPref.getRelated("Payment");
currentPayments.addAll(payments);
}
// apply these payments to the invoice if they have any
remaining amount to apply
for (GenericValue payment : currentPayments) {
BigDecimal notApplied =
PaymentWorker.getPaymentNotApplied(payment);
if (notApplied.signum() > 0) {
Map<String, Object> appl = FastMap.newInstance();
appl.put("paymentId", payment.get("paymentId"));
appl.put("invoiceId", invoiceId);
appl.put("billingAccountId", billingAccountId);
appl.put("amountApplied", notApplied);
appl.put("userLogin", userLogin);
Map<String, Object> createPayApplResult =
dispatcher.runSync("createPaymentApplication", appl);
if (ServiceUtil.isError(createPayApplResult)) {
return
ServiceUtil
.returnError
(UtilProperties
.getMessage
(resource,"AccountingErrorCreatingInvoiceFromOrder",locale), null,
null, createPayApplResult);
}
}
Regards
Vikas
On May 12, 2010, at 2:50 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>