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

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


The following commit(s) were added to refs/heads/trunk by this push:
     new 15bcc92  Improved: Converted updatePayment service from mini-lang to 
groovy. (OFBIZ-11480) Thanks Devanshu Vyas for reporting and Priya Sharma for 
the patch.
     new c7e0856  Merge branch 'trunk' of 
https://gitbox.apache.org/repos/asf/ofbiz-framework into trunk
15bcc92 is described below

commit 15bcc92dd1ba3a3f62f7695f39ce5ffb87e18d44
Author: Suraj Khurana <sur...@apache.org>
AuthorDate: Sat May 23 17:48:54 2020 +0530

    Improved: Converted updatePayment service from mini-lang to groovy.
    (OFBIZ-11480)
    Thanks Devanshu Vyas for reporting and Priya Sharma for the patch.
---
 .../groovyScripts/payment/PaymentServices.groovy   | 50 ++++++++++++++++
 .../minilang/payment/PaymentServices.xml           | 68 ----------------------
 .../accounting/servicedef/services_payment.xml     |  4 +-
 3 files changed, 52 insertions(+), 70 deletions(-)

diff --git 
a/applications/accounting/groovyScripts/payment/PaymentServices.groovy 
b/applications/accounting/groovyScripts/payment/PaymentServices.groovy
index 5e2749b..4032017 100644
--- a/applications/accounting/groovyScripts/payment/PaymentServices.groovy
+++ b/applications/accounting/groovyScripts/payment/PaymentServices.groovy
@@ -63,6 +63,55 @@ def createPayment() {
     result.paymentId = paymentId
     return result
 }
+def updatePayment() {
+    Map lookupPayment = delegator.makeValue("Payment")
+    lookupPayment.setPKFields(parameters)
+    GenericValue payment = from("Payment").where("paymentId", 
lookupPayment.paymentId).queryOne()
+    if (!security.hasEntityPermission("ACCOUNTING", "_UPDATE", 
parameters.userLogin) &&
+        (!security.hasEntityPermission("PAY_INFO", "_UPDATE", 
parameters.userLogin) &&
+        userLogin.partyId != payment.partyIdFrom && userLogin.partyId != 
payment.partyIdTo)) {
+        return error(UtilProperties.getResourceBundleMap("AccountingUiLabels", 
locale)?.AccountingUpdatePaymentPermissionError)
+    }
+    if ("PMNT_NOT_PAID" != payment.statusId) {
+        // check if only status change
+        GenericValue newPayment = delegator.makeValue("Payment")
+        GenericValue oldPayment = delegator.makeValue("Payment")
+        newPayment.setNonPKFields(payment)
+        oldPayment.setNonPKFields(payment)
+        newPayment.setNonPKFields(parameters)
+
+        // fields :- comments, paymentRefNum, finAccountTransId, 
statusIhStatus does not allow an update of the information are editable for 
Payment
+        oldPayment.statusId = newPayment.statusId
+        oldPayment.comments = newPayment.comments
+        oldPayment.paymentRefNum = newPayment.paymentRefNum ?: null
+        oldPayment.finAccountTransId = newPayment.finAccountTransId ?: null
+        if (!oldPayment.equals(newPayment)) {
+            return 
error(UtilProperties.getResourceBundleMap("AccountingUiLabels", 
locale)?.AccountingPSUpdateNotAllowedBecauseOfStatus)
+        }
+    }
+    statusIdSave = payment.statusId  // do not allow status change here
+    payment.setNonPKFields(parameters)
+    payment.statusId = statusIdSave  // do not allow status change here
+    payment.effectiveDate = payment.effectiveDate ?: 
UtilDateTime.nowTimestamp()
+    if (payment.paymentMethodId) {
+        paymentMethod = from("PaymentMethod").where("paymentMethodId", 
payment.paymentMethodId).queryOne()
+        if (payment.paymentMethodTypeId != paymentMethod.paymentMethodTypeId) {
+            Debug.logInfo("Replacing passed payment method type [" + 
parameters.paymentMethodTypeId + "] with payment method type [" +
+                paymentMethod.paymentMethodTypeId + "] for payment method [" + 
parameters.paymentMethodId +"]", MODULE)
+        }
+        payment.paymentMethodTypeId = paymentMethod.paymentMethodTypeId
+    }
+    payment.store()
+    if (parameters.statusId) {
+        if (parameters.statusId != statusIdSave) {
+            Map param = 
dispatcher.getDispatchContext().makeValidContext('setPaymentStatus', 
ModelService.IN_PARAM, parameters)
+            param.paymentId = payment.paymentId
+            serviceResult = run service: 'setPaymentStatus', with: param
+            if (!ServiceUtil.isSuccess(serviceResult)) return 
error(serviceResult)
+        }
+    }
+    return success()
+}
 def createPaymentAndApplicationForParty() {
     paymentAmount = 0
     List invoiceIds = []
@@ -206,3 +255,4 @@ def massChangePaymentStatus() {
     return serviceResult
 }
 
+
diff --git a/applications/accounting/minilang/payment/PaymentServices.xml 
b/applications/accounting/minilang/payment/PaymentServices.xml
index 9ce7e3b..3d8b2cc 100644
--- a/applications/accounting/minilang/payment/PaymentServices.xml
+++ b/applications/accounting/minilang/payment/PaymentServices.xml
@@ -20,74 +20,6 @@ under the License.
 <simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  xmlns="http://ofbiz.apache.org/Simple-Method"; 
xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method 
http://ofbiz.apache.org/dtds/simple-methods.xsd";>
 
-    <simple-method method-name="updatePayment" short-description="Update a 
Payment">
-        <make-value entity-name="Payment" value-field="lookupPayment"/>
-        <set-pk-fields value-field="lookupPayment" map="parameters"/>
-
-        <find-by-primary-key entity-name="Payment" map="lookupPayment" 
value-field="payment"/>
-        <if>
-            <condition>
-                <and>
-                    <not><if-has-permission permission="ACCOUNTING" 
action="_UPDATE"/></not>
-                    <not><if-has-permission permission="PAY_INFO" 
action="_UPDATE"/></not>
-                    <not><if-compare-field field="userLogin.partyId" 
to-field="payment.partyIdFrom" operator="equals"/></not>
-                    <not><if-compare-field field="userLogin.partyId" 
to-field="payment.partyIdTo" operator="equals"/></not>
-                </and>
-            </condition>
-            <then>
-                <add-error>
-                    <fail-property resource="AccountingUiLabels" 
property="AccountingUpdatePaymentPermissionError"/>
-                </add-error>
-            </then>
-        </if>
-        <check-errors/>
-
-        <if-compare field="payment.statusId" value="PMNT_NOT_PAID" 
operator="not-equals">
-            <!-- check if only status change -->
-            <make-value entity-name="Payment" value-field="newPayment"/>
-            <make-value entity-name="Payment" value-field="oldPayment"/>
-            <set-nonpk-fields map="payment" value-field="newPayment"/>
-            <set-nonpk-fields map="payment" value-field="oldPayment"/>
-            <set-nonpk-fields map="parameters" value-field="newPayment"/>
-            <!-- fields :- comments, paymentRefNum, finAccountTransId, 
statusId can editable for Payment -->
-            <set field="oldPayment.statusId" from-field="newPayment.statusId"/>
-            <set field="oldPayment.comments" from-field="newPayment.comments"/>
-            <set field="oldPayment.paymentRefNum" 
from-field="newPayment.paymentRefNum" set-if-null="true"/>
-            <set field="oldPayment.finAccountTransId" 
from-field="newPayment.finAccountTransId" set-if-null="true"/>
-            <if-compare-field field="oldPayment" to-field="newPayment" 
operator="not-equals">
-                <add-error>
-                    <fail-property resource="AccountingUiLabels" 
property="AccountingPSUpdateNotAllowedBecauseOfStatus"/>
-                </add-error>
-            </if-compare-field>
-        </if-compare>
-        <check-errors/>
-
-        <set field="statusIdSave" from-field="payment.statusId"/><!-- do not 
allow status change here -->
-        <set-nonpk-fields map="parameters" value-field="payment"/>
-        <set field="payment.statusId" from-field="statusIdSave"/><!-- do not 
allow status change here -->
-
-        <if-empty field="payment.effectiveDate">
-            <now-timestamp field="payment.effectiveDate"/>
-        </if-empty>
-        <if-not-empty field="payment.paymentMethodId">
-            <entity-one entity-name="PaymentMethod" 
value-field="paymentMethod">
-                <field-map field-name="paymentMethodId" 
from-field="payment.paymentMethodId"/>
-            </entity-one>
-            <if-compare-field field="payment.paymentMethodTypeId" 
to-field="paymentMethod.paymentMethodTypeId" operator="not-equals">
-                <log level="info" message="Replacing passed payment method 
type [${payment.paymentMethodTypeId}] with payment method type 
[${paymentMethod.paymentMethodTypeId}] for payment method 
[${payment.paymentMethodId}]"/>
-            </if-compare-field>
-            <set field="payment.paymentMethodTypeId" 
from-field="paymentMethod.paymentMethodTypeId"/>
-        </if-not-empty>
-        <store-value value-field="payment"/>
-
-        <if-not-empty field="parameters.statusId">
-            <if-compare-field field="parameters.statusId" 
to-field="statusIdSave" operator="not-equals">
-                <set-service-fields service-name="setPaymentStatus" 
map="parameters" to-map="param"/>
-                <call-service service-name="setPaymentStatus" 
in-map-name="param"/>
-                <check-errors/>
-            </if-compare-field>
-        </if-not-empty>
-    </simple-method>
     <simple-method method-name="createPaymentApplication" 
short-description="Create a Payment Application">
         <if-empty field="parameters.invoiceId">
             <if-empty field="parameters.billingAccountId">
diff --git a/applications/accounting/servicedef/services_payment.xml 
b/applications/accounting/servicedef/services_payment.xml
index 00099dd..0207643 100644
--- a/applications/accounting/servicedef/services_payment.xml
+++ b/applications/accounting/servicedef/services_payment.xml
@@ -37,8 +37,8 @@ under the License.
         <override name="amount" optional="false"/>
     </service>
 
-    <service name="updatePayment" engine="simple" default-entity-name="Payment"
-        location="component://accounting/minilang/payment/PaymentServices.xml" 
invoke="updatePayment" auth="true">
+    <service name="updatePayment" engine="groovy" default-entity-name="Payment"
+        
location="component://accounting/groovyScripts/payment/PaymentServices.groovy" 
invoke="updatePayment" auth="true">
         <description>Update a Payment</description>
         <auto-attributes include="pk" mode="IN" optional="false"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>

Reply via email to