Improved: Convert PromoServices.xml mini-lang to groovyDSL (OFBIZ-9350) (OFBIZ-12668)

Convert services createProductPromoCond and updateProductPromoCond from minilang to groovyDSL

Thanks to Tom Gibert for the help
diff --git a/applications/product/groovyScripts/product/promo/PromoServices.groovy b/applications/product/groovyScripts/product/promo/PromoServices.groovy
new file mode 100644
index 0000000..e825798
--- /dev/null
+++ b/applications/product/groovyScripts/product/promo/PromoServices.groovy
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package product.promo
+
+import org.apache.ofbiz.entity.GenericValue
+
+def createProductPromoCond() {
+    if (parameters.carrierShipmentMethod) {
+        parameters.otherValue = parameters.carrierShipmentMethod
+    }
+    GenericValue newEntity = makeValue("ProductPromoCond", parameters)
+    delegator.setNextSubSeqId(newEntity, "productPromoCondSeqId", 2, 1)
+    newEntity.create()
+    return success([productPromoCondSeqId: newEntity.productPromoCondSeqId])
+}
+
+def updateProductPromoCond() {
+    GenericValue lookedUpValue = from("ProductPromoCond").where(parameters).queryOne()
+    if (lookedUpValue) {
+        if (parameters.carrierShipmentMethod) {
+            parameters.otherValue = parameters.carrierShipmentMethod
+        }
+        lookedUpValue.setNonPKFields(parameters)
+        lookedUpValue.store()
+        return success()
+    }
+    return error(label("ServiceErrorUiLabels", "ServiceValueNotFound"))
+}
\ No newline at end of file
diff --git a/applications/product/minilang/product/promo/PromoServices.xml b/applications/product/minilang/product/promo/PromoServices.xml
deleted file mode 100644
index 358c16f..0000000
--- a/applications/product/minilang/product/promo/PromoServices.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-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">
-
-    <!-- ProductPromoCond methods -->
-    <simple-method method-name="createProductPromoCond" short-description="Create an ProductPromoCond">
-        <make-value entity-name="ProductPromoCond" value-field="newEntity"/>
-        <set-nonpk-fields map="parameters" value-field="newEntity"/>
-        <if-not-empty field="parameters.carrierShipmentMethod">
-            <set field="newEntity.otherValue" from-field="parameters.carrierShipmentMethod"/>
-        </if-not-empty>
-        <set-pk-fields map="parameters" value-field="newEntity"/>
-        <make-next-seq-id value-field="newEntity" seq-field-name="productPromoCondSeqId" numeric-padding="2"/>
-        <field-to-result field="newEntity.productPromoCondSeqId" result-name="productPromoCondSeqId"/>
-
-        <create-value value-field="newEntity"/>
-    </simple-method>
-    <simple-method method-name="updateProductPromoCond" short-description="Update an ProductPromoCond">
-        <make-value entity-name="ProductPromoCond" value-field="lookupPKMap"/>
-        <set-pk-fields map="parameters" value-field="lookupPKMap"/>
-        <find-by-primary-key entity-name="ProductPromoCond" map="lookupPKMap" value-field="lookedUpValue"/>
-        <set-nonpk-fields map="parameters" value-field="lookedUpValue"/>
-        <if-not-empty field="parameters.carrierShipmentMethod">
-            <set field="lookedUpValue.otherValue" from-field="parameters.carrierShipmentMethod"/>
-        </if-not-empty>
-        <store-value value-field="lookedUpValue"/>
-    </simple-method>
-</simple-methods>
diff --git a/applications/product/servicedef/services_pricepromo.xml b/applications/product/servicedef/services_pricepromo.xml
index 4753bda..5f3f8fc 100644
--- a/applications/product/servicedef/services_pricepromo.xml
+++ b/applications/product/servicedef/services_pricepromo.xml
@@ -256,21 +256,21 @@
         <attribute name="codeLength" type="Integer" mode="IN" optional="true" default-value="8"/>
         <attribute name="promoCodeLayout" type="String" mode="IN" optional="true" default-value="sequence"/>
     </service>
-
-    <service name="createProductPromoCond" default-entity-name="ProductPromoCond" engine="simple"
-                location="component://product/minilang/product/promo/PromoServices.xml" invoke="createProductPromoCond" auth="true">
+    
+    <service name="createProductPromoCond" default-entity-name="ProductPromoCond" engine="groovy" invoke="createProductPromoCond"
+             location="component://product/groovyScripts/product/promo/PromoServices.groovy" auth="true">
         <description>Create a ProductPromo</description>
         <permission-service service-name="productPriceGenericPermission" main-action="CREATE"/>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
+        <auto-attributes include="pk" mode="IN"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>
         <attribute name="carrierShipmentMethod" type="String" mode="IN" optional="true"/>
         <override name="productPromoCondSeqId" mode="OUT"/>
     </service>
-    <service name="updateProductPromoCond" default-entity-name="ProductPromoCond" engine="simple"
-                location="component://product/minilang/product/promo/PromoServices.xml" invoke="updateProductPromoCond" auth="true">
+    <service name="updateProductPromoCond" default-entity-name="ProductPromoCond" engine="groovy" invoke="updateProductPromoCond"
+             location="component://product/groovyScripts/product/promo/PromoServices.groovy" auth="true">
         <description>Update a ProductPromo</description>
         <permission-service service-name="productPriceGenericPermission" main-action="UPDATE"/>
-        <auto-attributes include="pk" mode="IN" optional="false"/>
+        <auto-attributes include="pk" mode="IN"/>
         <auto-attributes include="nonpk" mode="IN" optional="true"/>
         <attribute name="carrierShipmentMethod" type="String" mode="IN" optional="true"/>
     </service>