This is an automated email from the ASF dual-hosted git repository.

nmalin pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git

commit 9c538612f56381d647d5f2b4588249b3e4ee48dd
Author: Nicolas Malin <[email protected]>
AuthorDate: Tue Sep 14 19:59:31 2021 +0200

    Improved: Convert createPaymentAndPaymentGroupForInvoices service from 
mini-lang to groovy DSL (OFBIZ-11490)
    
    Thanks to Sourabh Punyani for initiate the patch
---
 .../groovyScripts/payment/PaymentServices.groovy   | 43 ++++++++++++++++-
 .../minilang/payment/PaymentServices.xml           | 54 ----------------------
 .../accounting/servicedef/services_payment.xml     |  5 +-
 3 files changed, 44 insertions(+), 58 deletions(-)

diff --git 
a/applications/accounting/groovyScripts/payment/PaymentServices.groovy 
b/applications/accounting/groovyScripts/payment/PaymentServices.groovy
index 795713b..f559df0 100644
--- a/applications/accounting/groovyScripts/payment/PaymentServices.groovy
+++ b/applications/accounting/groovyScripts/payment/PaymentServices.groovy
@@ -18,9 +18,9 @@
  */
 import org.apache.ofbiz.accounting.invoice.InvoiceWorker
 import org.apache.ofbiz.accounting.payment.PaymentWorker
-import org.apache.ofbiz.base.util.Debug
 import org.apache.ofbiz.base.util.UtilDateTime
 import org.apache.ofbiz.base.util.UtilFormatOut
+import org.apache.ofbiz.base.util.UtilMisc
 import org.apache.ofbiz.base.util.UtilProperties
 import org.apache.ofbiz.entity.condition.EntityCondition
 import org.apache.ofbiz.entity.condition.EntityOperator
@@ -507,6 +507,47 @@ def cancelCheckRunPayments() {
     return success()
 }
 
+def createPaymentAndPaymentGroupForInvoices() {
+    Map result
+    GenericValue paymentMethod = 
from("PaymentMethod").where("paymentMethodId", 
parameters.paymentMethodId).queryOne()
+
+    if (paymentMethod) {
+        GenericValue finAccount = from("FinAccount").where("finAccountId", 
paymentMethod.finAccountId).queryOne()
+        if (finAccount.statusId == "FNACT_MANFROZEN") {
+            return error(UtilProperties.getMessage('AccountingErrorUiLabels', 
'AccountingFinAccountInactiveStatusError', locale))
+        } else if (finAccount.statusId == "FNACT_CANCELLED") {
+            return error(UtilProperties.getMessage('AccountingErrorUiLabels', 
'AccountingFinAccountStatusNotValidError', locale))
+        }
+    }
+    Map partyInvoices = [:]
+    parameters.invoiceIds.each {invoiceId ->
+        GenericValue invoice = from("Invoice").where("invoiceId", 
invoiceId).queryOne()
+        UtilMisc.addToListInMap(invoice, partyInvoices, invoice.partyIdFrom)
+    }
+    List paymentIds = []
+    partyInvoices.each { partyId, invoice ->
+        if (parameters.checkStartNumber) {
+            parameters.checkStartNumber = parameters.checkStartNumber + 1
+        }
+        result = run service: 'createPaymentAndApplicationForParty', with: [*  
                : parameters,
+                                                                            
paymentMethodTypeId: paymentMethod.paymentMethodTypeId,
+                                                                            
finAccountId       : paymentMethod.finAccountId,
+                                                                            
partyId            : partyId,
+                                                                            
invoices           : invoice]
+        paymentIds << result.paymentId
+    }
+    if (paymentIds) {
+        result = run service: 'createPaymentGroupAndMember', with: [paymentIds 
       : paymentIds,
+                                                                    
paymentGroupTypeId: 'CHECK_RUN',
+                                                                    
paymentGroupName  : "Payment group for Check 
Run(InvoiceIds-${parameters.invoiceIds})"]
+        paymentGroupId = result.paymentGroupId
+    }
+    if (!result.paymentGroupId) {
+        return error(UtilProperties.getMessage("AccountingUiLabels", 
"AccountingNoInvoicesReadyOrOutstandingAmountZero", parameters.locale))
+    }
+    return result
+}
+
 def createPaymentFromOrder() {
     Map serviceResult = success()
 
diff --git a/applications/accounting/minilang/payment/PaymentServices.xml 
b/applications/accounting/minilang/payment/PaymentServices.xml
index 642e9a0..c91e74f 100644
--- a/applications/accounting/minilang/payment/PaymentServices.xml
+++ b/applications/accounting/minilang/payment/PaymentServices.xml
@@ -211,60 +211,6 @@ under the License.
         </iterate>
     </simple-method>
 
-    <simple-method method-name="createPaymentAndPaymentGroupForInvoices" 
short-description="Creates Payments, PaymentApplications and PaymentGroup for 
the same">
-        <entity-one entity-name="PaymentMethod" value-field="paymentMethod" 
auto-field-map="true"/>
-        <entity-one entity-name="FinAccount" value-field="finAccount" 
auto-field-map="false">
-            <field-map field-name="finAccountId" 
from-field="paymentMethod.finAccountId"/>
-        </entity-one>
-        <if-compare field="finAccount.statusId" operator="equals" 
value="FNACT_MANFROZEN">
-            <add-error>
-                <fail-property resource="AccountingErrorUiLabels.xml" 
property="AccountingFinAccountInactiveStatusError"/>
-            </add-error>
-        </if-compare>
-        <if-compare field="finAccount.statusId" operator="equals" 
value="FNACT_CANCELLED">
-            <add-error>
-                <fail-property resource="AccountingErrorUiLabels.xml" 
property="AccountingFinAccountStatusNotValidError"/>
-            </add-error>
-        </if-compare>
-        <check-errors/>
-        <set field="invoices" type="List"/>
-        <iterate list="parameters.invoiceIds" entry="invoiceId">
-            <entity-one entity-name="Invoice" value-field="invoice" 
auto-field-map="true"/>
-            <clear-field field="invoices"/>
-            <set field="invoices" 
from-field="partyInvoices.${invoice.partyIdFrom}"/>
-            <field-to-list field="invoice" list="invoices"/>
-            <set field="partyInvoices.${invoice.partyIdFrom}" 
from-field="invoices"/>
-        </iterate>
-        <clear-field field="invoices"/>
-        <iterate-map map="partyInvoices" key="partyId" value="invoices">
-            <set-service-fields 
service-name="createPaymentAndApplicationForParty" map="parameters" 
to-map="createPaymentAndApplicationForPartyMap"/>
-            <set 
field="createPaymentAndApplicationForPartyMap.paymentMethodTypeId" 
from-field="paymentMethod.paymentMethodTypeId"/>
-            <set field="createPaymentAndApplicationForPartyMap.finAccountId" 
from-field="paymentMethod.finAccountId"/>
-            <set field="createPaymentAndApplicationForPartyMap.partyId" 
from-field="partyId"/>
-            <set field="createPaymentAndApplicationForPartyMap.invoices" 
from-field="invoices"/>
-            <if-not-empty field="parameters.checkStartNumber">
-                 <set field="parameters.checkStartNumber" 
value="${parameters.checkStartNumber + 1}" type="Long"/>
-            </if-not-empty>
-            <call-service service-name="createPaymentAndApplicationForParty" 
in-map-name="createPaymentAndApplicationForPartyMap">
-                <result-to-field result-name="paymentId" field="paymentId"/>
-            </call-service>
-            <field-to-list field="paymentId" list="paymentIds"/>
-        </iterate-map>
-        <if-not-empty field="paymentIds">
-            <set field="createPaymentGroupAndMemberMap.paymentIds" 
from-field="paymentIds"/>
-            <set field="createPaymentGroupAndMemberMap.paymentGroupTypeId" 
value="CHECK_RUN"/>
-            <set field="createPaymentGroupAndMemberMap.paymentGroupName" 
value="Payment group for Check Run(InvoiceIds-${parameters.invoiceIds})"/>
-            <call-service service-name="createPaymentGroupAndMember" 
in-map-name="createPaymentGroupAndMemberMap">
-                <result-to-field result-name="paymentGroupId"/>
-                <result-to-result result-name="paymentGroupId"/>
-            </call-service>
-        </if-not-empty>
-        <if-empty field="paymentGroupId">
-            <property-to-field 
property="AccountingNoInvoicesReadyOrOutstandingAmountZero" 
resource="AccountingUiLabels" field="errorMessage"/>
-            <field-to-result field="errorMessage" result-name="errorMessage"/>
-        </if-empty>
-    </simple-method>
-
     <simple-method method-name="createPaymentGroupAndMember" 
short-description="creates PaymentGroup and PaymentGroupMembers">
         <if-empty field="parameters.fromDate">
             <now-timestamp field="parameters.fromDate"/>
diff --git a/applications/accounting/servicedef/services_payment.xml 
b/applications/accounting/servicedef/services_payment.xml
index 233dff2..3941c9d 100644
--- a/applications/accounting/servicedef/services_payment.xml
+++ b/applications/accounting/servicedef/services_payment.xml
@@ -163,8 +163,8 @@ under the License.
         <description>cancel payment batch</description>
         <attribute name="paymentGroupId" type="String" mode="IN" 
optional="false"/>
     </service>
-    <service name="createPaymentAndPaymentGroupForInvoices" engine="simple"
-            
location="component://accounting/minilang/payment/PaymentServices.xml" 
invoke="createPaymentAndPaymentGroupForInvoices" auth="true">
+    <service name="createPaymentAndPaymentGroupForInvoices" engine="groovy"
+            
location="component://accounting/groovyScripts/payment/PaymentServices.groovy" 
invoke="createPaymentAndPaymentGroupForInvoices" auth="true">
         <description>Creates Payments, Payment Application and Payment Group 
for the same</description>
         <attribute name="organizationPartyId" type="String" mode="IN" 
optional="false"/>
         <attribute name="checkStartNumber" type="Long" mode="IN" 
optional="true"/>
@@ -172,7 +172,6 @@ under the License.
         <attribute name="paymentMethodTypeId" type="String" mode="IN" 
optional="true"/>
         <attribute name="paymentMethodId" type="String" mode="IN" 
optional="false"/>
         <attribute name="paymentGroupId" type="String" mode="OUT" 
optional="true"/>
-        <attribute name="errorMessage" type="String" optional="true" 
mode="OUT"/>
     </service>
     <service name="createPaymentAndApplicationForParty" engine="groovy"
             
location="component://accounting/groovyScripts/payment/PaymentServices.groovy" 
invoke="createPaymentAndApplicationForParty" auth="true">

Reply via email to