This is an automated email from the ASF dual-hosted git repository. nmalin pushed a commit to branch 228 in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
commit de1e9e4bb4ef8cf48bf6853a128bd7cf4250e200 Author: Wiebke Pätzold <wiebke.paetz...@ecomify.de> AuthorDate: Fri Aug 21 16:08:08 2020 +0200 Improved: Convert ShoppingListServices.xml mini lang to groovy (OFBIZ-11602) --- .../shoppinglist/ShoppingListServices.groovy | 332 +++++++++++++++++++ .../minilang/shoppinglist/ShoppingListServices.xml | 364 --------------------- .../order/servicedef/services_shoppinglist.xml | 40 +-- 3 files changed, 352 insertions(+), 384 deletions(-) diff --git a/applications/order/groovyScripts/shoppinglist/ShoppingListServices.groovy b/applications/order/groovyScripts/shoppinglist/ShoppingListServices.groovy new file mode 100644 index 0000000..656a7ce --- /dev/null +++ b/applications/order/groovyScripts/shoppinglist/ShoppingListServices.groovy @@ -0,0 +1,332 @@ +/* + * 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. + */ + +import org.apache.ofbiz.base.util.UtilDateTime +import org.apache.ofbiz.base.util.UtilProperties +import org.apache.ofbiz.entity.GenericValue +import org.apache.ofbiz.service.ServiceUtil + + +/** + * Create a ShoppingList + * @return + */ +def createShoppingList() { + GenericValue newEntity = makeValue("ShoppingList") + newEntity.setNonPKFields(parameters) + newEntity.partyId = newEntity.partyId ?: userLogin.partyId + newEntity.shoppingListTypeId = newEntity.shoppingListTypeId ?: "SLT_WISH_LIST" + newEntity.isPublic = newEntity.isPublic ?: "N" + + if (!newEntity.listName) { + newEntity.listName = UtilProperties.getMessage("OrderUiLabels", "OrderNewShoppingList", parameters.locale) ?: "New Shopping List" + } + + if (!newEntity.isActive) { + newEntity.isActive = newEntity.shoppingListTypeId == "SLT_AUTO_REODR" ? "N" : "Y" + } + + newEntity.shoppingListId = delegator.getNextSeqId("ShoppingList") + newEntity.create() + + Map result = success() + result.shoppingListId = newEntity.shoppingListId + result.successMessage = UtilProperties.getMessage("OrderUiLabels", "OrderShoppingListCreatedSuccessfully", parameters.locale) + return result +} + +/** + * Update a ShoppingList + * @return + */ +def updateShoppingList() { + GenericValue shoppingList = from("ShoppingList").where(parameters).queryOne() + shoppingList.setNonPKFields(parameters) + + // don't let auto-reorders be active unless there is some recurrence info + if (shoppingList.shoppingListTypeId == "SLT_AUTO_REODR" && + (!shoppingList.recurrenceInfoId || + !shoppingList.paymentMethodId || + !shoppingList.contactMechId || + !shoppingList.shipmentMethodTypeId)) { + shoppingList.isActive = "N" + } + shoppingList.store() + + Map result = success() + result.successMessage = UtilProperties.getMessage("OrderUiLabels", "OrderShoppingListUpdatedSuccessfully", parameters.locale) + return result +} + +/** + * Create a ShoppingList Item + * @return + */ +def createShoppingListItem() { + Map result = success() + List shoppingListItems = from("ShoppingListItem") + .where(productId: parameters.productId, + shoppingListId: parameters.shoppingListId) + .queryList() + if (!shoppingListItems) { + GenericValue shoppingList = from("ShoppingList").where(parameters).queryOne() + GenericValue product = from("Product").where(parameters).queryOne() + if (!product) { + return error(UtilProperties.getMessage("ProductUiLabels", "ProductErrorProductNotFound", parameters.locale)) + } + GenericValue newEntity = makeValue("ShoppingListItem") + newEntity.setNonPKFields(parameters) + newEntity.shoppingListId = parameters.shoppingListId + delegator.setNextSubSeqId(newEntity, "shoppingListItemSeqId", 5, 1) + newEntity.create() + + result.shoppingListItemSeqId = newEntity.shoppingListItemSeqId + updateLastAdminModified(shoppingList, userLogin) + } else { + GenericValue shoppingListItem = shoppingListItems[0] + + shoppingListItem.quantity = shoppingListItem.quantity ?: (BigDecimal) 0.0 + parameters.quantity = parameters.quantity ?: (BigDecimal) 0.0 + + BigDecimal totalQty = shoppingListItem.quantity + parameters.quantity + Map serviceResult = run service: "updateShoppingListItem", with: [* : shoppingListItem, + quantity: totalQty] + if (!ServiceUtil.isSuccess(serviceResult)) { + return error(serviceResult.errorMessage) + } + result.shoppingListItemSeqId = shoppingListItem.shoppingListItemSeqId + } + return result +} + +/** + * Update a ShoppingListItem + * @return + */ +def updateShoppingListItem() { + GenericValue shoppingList = from("ShoppingList").where(parameters).queryOne() + GenericValue shoppingListItem = from("ShoppingListItem").where(parameters).queryOne() + shoppingListItem.setNonPKFields(parameters) + shoppingListItem.store() + + updateLastAdminModified(shoppingList, userLogin) + return success() +} + +/** + * Remove a ShoppingListItem + * @return + */ +def removeShoppingListItem() { + GenericValue shoppingList = from("ShoppingList").where(parameters).queryOne() + GenericValue shoppingListItem = from("ShoppingListItem").where(parameters).queryOne() + shoppingListItem.remove() + + updateLastAdminModified(shoppingList, userLogin) + return success() +} + +private void updateLastAdminModified(GenericValue shoppingList, GenericValue userLogin) { + if (shoppingList.partyId != userLogin.partyId) { + shoppingList.lastAdminModified = UtilDateTime.nowTimestamp() + shoppingList.store() + } +} + +/** + * Adds a shopping list item if one with the same productId does not exist + * @return + */ +def addDistinctShoppingListItem() { + Map result = success() + List shoppingListItemList = from("ShoppingListItem").where(shoppingListId: parameters.shoppingListId).queryList() + + for (GenericValue shoppingListItem : shoppingListItemList) { + if (parameters.productId == shoppingListItem.productId) { + result.shoppingListItemSeqId = shoppingListItem.shoppingListItemSeqId + return result + } + } + Map serviceResult = run service:"createShoppingListItem", with: parameters + if (!ServiceUtil.isSuccess(serviceResult)) { + return error(serviceResult.errorMessage) + } + + result.shoppingListItemSeqId = serviceResult.shoppingListItemSeqId + return result +} + +/** + * Calculate Deep Total Price for a ShoppingList + * @return + */ +def calculateShoppingListDeepTotalPrice() { + Map result = success() + Map serviceResult = run service: "checkShoppingListItemSecurity", with: parameters + if (!ServiceUtil.isSuccess(serviceResult)) { + return error(serviceResult.errorMessage) + } + if (!serviceResult.hasPermission) { + return error(UtilProperties.getMessage("OrderErrorUiLabels", "OrderSecurityErrorToRunForAnotherParty", parameters.locale)) + } + Map calcPriceInBaseMap = [prodCatalogId: parameters.prodCatalogId, webSiteId: parameters.webSiteId] + ['partyId', 'productStoreId', 'productStoreGroupId', 'currencyUomId', 'autoUserLogin'].each { + if (parameters[it]) { + calcPriceInBaseMap[it] = parameters[it] + } + } + + BigDecimal totalPrice = (BigDecimal) 0.0 + from("ShoppingListItem") + .where(shoppingListId: parameters.shoppingListId) + .cache() + .queryList() + .each { + BigDecimal itemPrice = it.modifiedPrice + if (!itemPrice) { + GenericValue product = from("Product").where(productId: it.productId).cache().queryOne() + Map serviceResultCPP = run service: "calculateProductPrice", with: [* : calcPriceInBaseMap, + product : product, + quantity: it.quantity] + if (!ServiceUtil.isSuccess(serviceResultCPP)) { + return error(serviceResultCPP.errorMessage) + } + itemPrice = serviceResultCPP.price + } + BigDecimal shoppingListItemQuantity = it.quantity ?: (BigDecimal) 1.0 + totalPrice += (itemPrice * shoppingListItemQuantity) + } + + from("ShoppingList") + .where(parentShoppingListId: parameters.shoppingListId, + partyId: userLogin.partyId) + .cache() + .queryList() + .each { + Map serviceResultCSLDTP = run service: "calculateShoppingListDeepTotalPrice", with: [* : calcPriceInBaseMap, + shoppingListId: it.shoppingListId] + if (!ServiceUtil.isSuccess(serviceResultCSLDTP)) { + return error(serviceResultCSLDTP.errorMessage) + } + totalPrice += serviceResultCSLDTP.totalPrice + } + + result.totalPrice = totalPrice + return result +} + +/** + * Checks security on a ShoppingList + * @return + */ +def checkShoppingListSecurity() { + if (userLogin && (userLogin.userLoginId != "anonymous") && + parameters.partyId && (userLogin.partyId != parameters.partyId) + && !security.hasEntityPermission("PARTYMGR", "_${parameters.permissionAction}", parameters.userLogin)) { + return error(UtilProperties.getMessage("OrderErrorUiLabels", "OrderSecurityErrorToRunForAnotherParty", parameters.locale)) + } + + Map result = success() + result.hasPermission = true + return result +} + +/** + * Checks security on a ShoppingListIte + * @return + */ +def checkShoppingListItemSecurity() { + GenericValue shoppingList = from("ShoppingList").where(parameters).queryOne() + if (shoppingList?.partyId && userLogin.partyId != shoppingList.partyId && + !security.hasEntityPermission("PARTYMGR", "_${parameters.permissionAction}", parameters.userLogin)) { + return error(UtilProperties.getMessage("OrderErrorUiLabels", + "OrderSecurityErrorToRunForAnotherParty", + [parentMethodName: parameters.parentMethodName, + permissionAction: parameters.permissionAction], + parameters.locale)) + } + + Map result = success() + result.hasPermission = true + return result +} + +/** + * Add suggestions to a shopping list + * @return + */ +def addSuggestionsToShoppingList() { + Map result = success() + String shoppingListId + // first check the ProductStore.enableAutoSuggestionList indicator + GenericValue orderHeader = from("OrderHeader").where(parameters).queryOne() + if (!(orderHeader?.productStoreId)) { + return result + } + GenericValue productStore = from("ProductStore").where(productStoreId: orderHeader.productStoreId).cache().queryOne() + if (productStore.enableAutoSuggestionList != "Y") { + return result + } + + GenericValue orderRole = from ("OrderRole").where(orderId: parameters.orderId, roleTypeId: "PLACING_CUSTOMER").queryFirst() + GenericValue shoppingList = from("ShoppingList").where(partyId: orderRole.partyId, listName: "Auto Suggestions").queryFirst() + if (!shoppingList) { + Map createShoppingListInMap = [partyId : orderRole.partyId, + listName : "Auto Suggestions", + shoppingListTypeId: "SLT_WISH_LIST", + productStoreId : parameters.productStoreId] + Map serviceResultCSL = dispatcher.runSync("createShoppingList", createShoppingListInMap, 7200, true) + if (!ServiceUtil.isSuccess(serviceResultCSL)) { + return error(serviceResultCSL.errorMessage) + } + shoppingListId = serviceResultCSL.serviceResult + } else { + shoppingListId = shoppingList.shoppingListId + } + List orderItemList = from ("OrderItem").where(orderId: parameters.orderId).orderBy("orderItemSeqId").queryList() + for (GenericValue orderItem : orderItemList) { + if (orderItem.productId) { + linkProductToShoppingList(orderItem.productId, shoppingListId) + GenericValue product = from("Product").where(productId: orderItem.productId).cache().queryOne() + if (product.isVariant == "Y") { + GenericValue virtualProductAssoc = from("ProductAssoc") + .where(productIdTo: orderItem.productId, + productAssocTypeId: "PRODUCT_VARIANT") + .filterByDate() + .queryFirst() + if (virtualProductAssoc) { + linkProductToShoppingList(virtualProductAssoc.productIdTo, shoppingListId) + } + } + } + } + return result +} + +private List<GenericValue> linkProductToShoppingList(String productId, String shoppingListId) { + from("ProductAssoc") + .where(productId: productId, + productAssocTypeId: "PRODUCT_COMPLEMENT") + .filterByDate() + .queryList().each { + run service: "addDistinctShoppingListItem", with: [productId : it.productIdTo, + shoppingListId: shoppingListId, + quantity : (BigDecimal) 1] + } +} diff --git a/applications/order/minilang/shoppinglist/ShoppingListServices.xml b/applications/order/minilang/shoppinglist/ShoppingListServices.xml deleted file mode 100644 index b2d54af..0000000 --- a/applications/order/minilang/shoppinglist/ShoppingListServices.xml +++ /dev/null @@ -1,364 +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"> - <simple-method method-name="createShoppingList" short-description="Create a ShoppingList" login-required="false"> - <make-value entity-name="ShoppingList" value-field="newEntity"/> - <set-nonpk-fields map="parameters" value-field="newEntity"/> - - <if-empty field="newEntity.partyId"> - <set from-field="userLogin.partyId" field="newEntity.partyId"/> - </if-empty> - - <if-empty field="newEntity.shoppingListTypeId"> - <set value="SLT_WISH_LIST" field="newEntity.shoppingListTypeId"/> - </if-empty> - - <if-empty field="newEntity.listName"> - <property-to-field field="newEntity.listName" - resource="OrderUiLabels" property="OrderNewShoppingList" default="New Shopping List"/> - </if-empty> - - <if-empty field="newEntity.isPublic"> - <set value="N" field="newEntity.isPublic"/> - </if-empty> - - <if-empty field="newEntity.isActive"> - <if-compare field="newEntity.shoppingListTypeId" operator="equals" value="SLT_AUTO_REODR"> - <set value="N" field="newEntity.isActive"/> - <else> - <set value="Y" field="newEntity.isActive"/> - </else> - </if-compare> - </if-empty> - - <sequenced-id sequence-name="ShoppingList" field="newEntity.shoppingListId"/> - <field-to-result field="newEntity.shoppingListId" result-name="shoppingListId"/> - <create-value value-field="newEntity"/> - <property-to-field resource="OrderUiLabels" property="OrderShoppingListCreatedSuccessfully" field="successMessage"/> - <field-to-result field="successMessage"/> - </simple-method> - - <simple-method method-name="updateShoppingList" short-description="Update a ShoppingList"> - <entity-one entity-name="ShoppingList" value-field="shoppingList"/> - - <set-nonpk-fields map="parameters" value-field="shoppingList"/> - - <!-- don't let auto-reorders be active unless there is some recurrence info --> - <if> - <condition> - <and> - <if-compare field="shoppingList.shoppingListTypeId" operator="equals" value="SLT_AUTO_REODR"/> - <or> - <if-empty field="shoppingList.recurrenceInfoId"/> - <if-empty field="shoppingList.paymentMethodId"/> - <if-empty field="shoppingList.contactMechId"/> - <if-empty field="shoppingList.shipmentMethodTypeId"/> - </or> - </and> - </condition> - <then> - <set value="N" field="shoppingList.isActive"/> - </then> - </if> - - <store-value value-field="shoppingList"/> - <property-to-field resource="OrderUiLabels" property="OrderShoppingListUpdatedSuccessfully" field="successMessage"/> - <field-to-result field="successMessage"/> - </simple-method> - <simple-method method-name="createShoppingListItem" short-description="Create a ShoppingList Item" login-required="false"> - <entity-and entity-name="ShoppingListItem" list="shoppingListItems"> - <field-map field-name="productId" from-field="parameters.productId"></field-map> - <field-map field-name="shoppingListId" from-field="parameters.shoppingListId"></field-map> - </entity-and> - <if-empty field="shoppingListItems"> - <set field="parentMethodName" value="createShoppingListItem"/> - <set field="permissionAction" value="CREATE"/> - <entity-one entity-name="ShoppingList" value-field="shoppingList"/> - - <entity-one entity-name="Product" value-field="product"/> - <if-empty field="product"> - <add-error> <fail-property resource="ProductUiLabels" property="ProductErrorProductNotFound"/> </add-error> - <check-errors/> - </if-empty> - <make-value entity-name="ShoppingListItem" value-field="newEntity"/> - <set from-field="parameters.shoppingListId" field="newEntity.shoppingListId"/> - <make-next-seq-id value-field="newEntity" seq-field-name="shoppingListItemSeqId" numeric-padding="5"/> - - <set-nonpk-fields map="parameters" value-field="newEntity"/> - <field-to-result field="newEntity.shoppingListItemSeqId" result-name="shoppingListItemSeqId"/> - <create-value value-field="newEntity"/> - - <if-compare-field field="shoppingList.partyId" to-field="userLogin.partyId" operator="not-equals"> - <now-timestamp field="shoppingList.lastAdminModified"/> - <store-value value-field="shoppingList"/> - </if-compare-field> - <else> - <first-from-list list="shoppingListItems" entry="shoppingListItem"/> - <calculate field="totalquantity" > - <calcop operator="add" field="shoppingListItem.quantity"> - <calcop operator="get" field="parameters.quantity"/> - </calcop> - </calculate> - <field-to-result field="shoppingListItem.shoppingListItemSeqId" result-name="shoppingListItemSeqId"/> - <set-service-fields service-name="updateShoppingListItem" map="shoppingListItem" to-map="shoppingListItemParameters"/> - <set field="shoppingListItemParameters.quantity" from-field="totalquantity"/> - <call-service service-name="updateShoppingListItem" in-map-name="shoppingListItemParameters"/> - </else> - </if-empty> - </simple-method> - - <simple-method method-name="updateShoppingListItem" short-description="Update a ShoppingListItem"> - <entity-one entity-name="ShoppingList" value-field="shoppingList"/> - <entity-one entity-name="ShoppingListItem" value-field="shoppingListItem"/> - <set-nonpk-fields map="parameters" value-field="shoppingListItem"/> - <store-value value-field="shoppingListItem"/> - - <if-compare-field field="shoppingList.partyId" to-field="userLogin.partyId" operator="not-equals"> - <now-timestamp field="shoppingList.lastAdminModified"/> - <store-value value-field="shoppingList"/> - </if-compare-field> - </simple-method> - - <simple-method method-name="removeShoppingListItem" short-description="Remove a ShoppingListItem"> - <entity-one entity-name="ShoppingList" value-field="shoppingList"/> - <entity-one entity-name="ShoppingListItem" value-field="shoppingListItem"/> - <remove-value value-field="shoppingListItem"/> - - <if-compare-field field="shoppingList.partyId" to-field="userLogin.partyId" operator="not-equals"> - <now-timestamp field="shoppingList.lastAdminModified"/> - <store-value value-field="shoppingList"/> - </if-compare-field> - </simple-method> - - <simple-method method-name="addDistinctShoppingListItem" - short-description="Adds a shopping list item if one with the same productId does not exist"> - <entity-condition entity-name="ShoppingListItem" list="shoppingListItemList"> - <condition-expr field-name="shoppingListId" from-field="parameters.shoppingListId"/> - </entity-condition> - - <iterate list="shoppingListItemList" entry="shoppingListItem"> - <if-compare-field field="parameters.productId" to-field="shoppingListItem.productId" operator="equals"> - <field-to-result field="shoppingListItem.shoppingListItemSeqId" result-name="shoppingListItemSeqId"/> - <return /> - </if-compare-field> - </iterate> - <call-service service-name="createShoppingListItem" in-map-name="parameters"> - <result-to-result result-name="shoppingListItemSeqId"/> - </call-service> - </simple-method> - - <simple-method method-name="calculateShoppingListDeepTotalPrice" short-description="Calculate Deep Total Price for a ShoppingList"> - <set-service-fields service-name="checkShoppingListItemSecurity" map="parameters" to-map="serviceInMap"/> - <call-service service-name="checkShoppingListItemSecurity" in-map-name="serviceInMap"> - <result-to-field result-name="hasPermission" field="hasPermission"/> - </call-service> - <if-compare field="hasPermission" operator="equals" value="false" type="Boolean"> - <add-error><fail-property resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunForAnotherParty"/></add-error> - </if-compare> - <check-errors/> - - <set from-field="parameters.prodCatalogId" field="calcPriceInBaseMap.prodCatalogId"/> - <set from-field="parameters.webSiteId" field="calcPriceInBaseMap.webSiteId"/> - <set from-field="parameters.partyId" field="calcPriceInBaseMap.partyId"/> - <set from-field="parameters.productStoreId" field="calcPriceInBaseMap.productStoreId"/> - <set from-field="parameters.productStoreGroupId" field="calcPriceInBaseMap.productStoreGroupId"/> - <set from-field="parameters.currencyUomId" field="calcPriceInBaseMap.currencyUomId"/> - <set from-field="parameters.autoUserLogin" field="calcPriceInBaseMap.autoUserLogin"/> - - <entity-and entity-name="ShoppingListItem" list="shoppingListItems" use-cache="true"> - <field-map field-name="shoppingListId" from-field="parameters.shoppingListId"/> - </entity-and> - - <set field="totalPrice" type="BigDecimal" value="0.0"/> - <iterate list="shoppingListItems" entry="shoppingListItem"> - <entity-one entity-name="Product" value-field="product" use-cache="true" auto-field-map="false"> - <field-map field-name="productId" from-field="shoppingListItem.productId"/> - </entity-one> - - <map-to-map map="calcPriceInBaseMap" to-map="calcPriceInMap"/> - <set field="calcPriceInMap.product" from-field="product"/> - <set field="calcPriceInMap.quantity" from-field="shoppingListItem.quantity"/> - <if-not-empty field="shoppingListItem.modifiedPrice"> - <call-service service-name="calculateProductPrice" in-map-name="calcPriceInMap"> - <result-to-field result-name="price" field="calcPriceOutMap.price"/> - </call-service> - </if-not-empty> - <set field="itemPrice" from-field="shoppingListItem.modifiedPrice" default-value="${calcPriceOutMap.price}"/> - <calculate field="totalPrice"> - <calcop operator="add" field="totalPrice"/> - <calcop operator="multiply"> - <calcop operator="get" field="itemPrice"/> - <calcop operator="get" field="shoppingListItem.quantity"/> - </calcop> - </calculate> - <clear-field field="calcPriceInMap"/> - </iterate> - - <entity-and entity-name="ShoppingList" list="childshoppingLists" use-cache="true"> - <field-map field-name="parentShoppingListId" from-field="parameters.shoppingListId"/> - <field-map field-name="partyId" from-field="userLogin.partyId"/> - </entity-and> - <iterate list="childshoppingLists" entry="childshoppingList"> - <map-to-map map="calcPriceInBaseMap" to-map="calcChildPriceInMap"/> - <set from-field="childshoppingList.shoppingListId" field="calcChildPriceInMap.shoppingListId"/> - <call-service service-name="calculateShoppingListDeepTotalPrice" in-map-name="calcChildPriceInMap"> - <result-to-field result-name="totalPrice" field="calcPriceOutMap.totalPrice"/> - </call-service> - <calculate field="totalPrice"> - <calcop operator="get" field="totalPrice"/> - <calcop operator="get" field="calcPriceOutMap.totalPrice"/> - </calculate> - <clear-field field="calcChildPriceInMap"/> - </iterate> - - <field-to-result field="totalPrice" result-name="totalPrice"/> - </simple-method> - - <simple-method method-name="checkShoppingListSecurity" short-description="Checks security on a ShoppingList"> - <set field="hasPermission" value="false" type="Boolean"/> - <if> - <condition> - <and> - <not><if-empty field="userLogin"/></not> - <not><if-compare field="userLogin.userLoginId" operator="equals" value="anonymous"/></not> - <not><if-empty field="parameters.partyId"/></not> - <not><if-compare-field to-field="userLogin.partyId" field="parameters.partyId" operator="equals"/></not> - <not><if-has-permission permission="PARTYMGR" action="_${permissionAction}"/></not> - </and> - </condition> - <then> - <add-error><fail-property resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunForAnotherParty"/></add-error> - </then> - <else> - <set field="hasPermission" value="true" type="Boolean"/> - </else> - </if> - <field-to-result field="hasPermission"/> - </simple-method> - <simple-method method-name="checkShoppingListItemSecurity" short-description="Checks security on a ShoppingListItem"> - <set field="hasPermission" value="false" type="Boolean"/> - <entity-one entity-name="ShoppingList" value-field="shoppingList"/> - <if> - <condition> - <and> - <not><if-empty field="shoppingList.partyId"/></not> - <not><if-compare-field field="userLogin.partyId" to-field="shoppingList.partyId" operator="equals"/></not> - <not><if-has-permission permission="PARTYMGR" action="_${permissionAction}"/></not> - </and> - </condition> - <then> - <add-error><fail-property resource="OrderErrorUiLabels" property="OrderSecurityErrorToRunForAnotherParty"/></add-error> - </then> - <else> - <set field="hasPermission" value="true" type="Boolean"/> - </else> - </if> - <field-to-result field="hasPermission"/> - </simple-method> - <simple-method method-name="addSuggestionsToShoppingList" short-description="Add suggestions to a shopping list"> - <!-- first check the ProductStore.enableAutoSuggestionList indicator --> - <entity-one entity-name="OrderHeader" value-field="orderHeader"/> - <if-empty field="orderHeader.productStoreId"><return/></if-empty> - - <entity-one entity-name="ProductStore" value-field="productStore" auto-field-map="false"> - <field-map field-name="productStoreId" from-field="orderHeader.productStoreId"/> - </entity-one> - <if-compare field="productStore.enableAutoSuggestionList" operator="not-equals" value="Y"><return/></if-compare> - - <entity-condition entity-name="OrderRole" list="orderRoleList"> - <condition-list combine="and"> - <condition-expr field-name="orderId" from-field="parameters.orderId"/> - <condition-expr field-name="roleTypeId" value="PLACING_CUSTOMER"/> - </condition-list> - </entity-condition> - <first-from-list list="orderRoleList" entry="orderRole"/> - - <entity-condition entity-name="ShoppingList" list="shoppingListList"> - <condition-list combine="and"> - <condition-expr field-name="partyId" from-field="orderRole.partyId"/> - <condition-expr field-name="listName" value="Auto Suggestions"/> - </condition-list> - </entity-condition> - <first-from-list list="shoppingListList" entry="shoppingList"/> - <if-empty field="shoppingList"> - <set field="createShoppingListInMap.partyId" from-field="orderRole.partyId"/> - <set field="createShoppingListInMap.listName" value="Auto Suggestions"/> - <set field="createShoppingListInMap.shoppingListTypeId" value="SLT_WISH_LIST"/> - <set field="createShoppingListInMap.productStoreId" from-field="parameters.productStoreId"/> - <call-service service-name="createShoppingList" in-map-name="createShoppingListInMap" require-new-transaction="true"> - <result-to-field result-name="shoppingListId"/> - </call-service> - <else> - <set field="shoppingListId" from-field="shoppingList.shoppingListId"/> - </else> - </if-empty> - - <entity-condition entity-name="OrderItem" list="orderItemList"> - <condition-expr field-name="orderId" from-field="parameters.orderId"/> - <order-by field-name="orderItemSeqId"/> - </entity-condition> - <iterate list="orderItemList" entry="orderItem"> - <if-not-empty field="orderItem.productId"> - <entity-condition entity-name="ProductAssoc" list="compProductAssocList" filter-by-date="true"> - <condition-list combine="and"> - <condition-expr field-name="productId" from-field="orderItem.productId"/> - <condition-expr field-name="productAssocTypeId" value="PRODUCT_COMPLEMENT"/> - </condition-list> - </entity-condition> - <iterate list="compProductAssocList" entry="compProductAssoc"> - <clear-field field="shoppingListParameters"/> - <set field="shoppingListParameters.productId" from-field="compProductAssoc.productIdTo"/> - <set field="shoppingListParameters.shoppingListId" from-field="shoppingListId"/> - <set field="shoppingListParameters.quantity" value="1" type="BigDecimal"/> - <call-service service-name="addDistinctShoppingListItem" in-map-name="shoppingListParameters"/> - </iterate> - <entity-one entity-name="Product" value-field="product" auto-field-map="false" > - <field-map field-name="productId" from-field="orderItem.productId"/> - </entity-one> - <if-compare field="product.isVariant" operator="equals" value="Y"> - <entity-condition entity-name="ProductAssoc" list="virtualProductAssocList" filter-by-date="true"> - <condition-list combine="and"> - <condition-expr field-name="productIdTo" from-field="orderItem.productId"/> - <condition-expr field-name="productAssocTypeId" value="PRODUCT_VARIANT"/> - </condition-list> - </entity-condition> - <first-from-list list="virtualProductAssocList" entry="virtualProductAssoc"/> - <if-not-empty field="virtualProductAssoc"> - <entity-condition entity-name="ProductAssoc" list="compProductAssocList" filter-by-date="true"> - <condition-list combine="and"> - <condition-expr field-name="productId" from-field="virtualProductAssoc.productId"/> - <condition-expr field-name="productAssocTypeId" value="PRODUCT_COMPLEMENT"/> - </condition-list> - </entity-condition> - <iterate list="compProductAssocList" entry="compProductAssoc"> - <clear-field field="shoppingListParameters"/> - <set field="shoppingListParameters.productId" from-field="compProductAssoc.productIdTo"/> - <set field="shoppingListParameters.shoppingListId" from-field="shoppingListId"/> - <set field="shoppingListParameters.quantity" value="1" type="BigDecimal"/> - <call-service service-name="addDistinctShoppingListItem" in-map-name="shoppingListParameters"/> - </iterate> - </if-not-empty> - </if-compare> - </if-not-empty> - </iterate> - </simple-method> -</simple-methods> diff --git a/applications/order/servicedef/services_shoppinglist.xml b/applications/order/servicedef/services_shoppinglist.xml index 43758d9..71b1c02 100644 --- a/applications/order/servicedef/services_shoppinglist.xml +++ b/applications/order/servicedef/services_shoppinglist.xml @@ -30,16 +30,16 @@ under the License. <auto-attributes mode="IN" entity-name="ShoppingList" include="nonpk" optional="true"/> <attribute name="shippingMethodString" type="String" mode="IN" optional="true"/> </service> - <service name="createShoppingList" engine="simple" auth="false" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="createShoppingList"> + <service name="createShoppingList" engine="groovy" auth="false" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="createShoppingList"> <description>Create a shopping list entity</description> <permission-service service-name="checkShoppingListSecurity" main-action="CREATE"/> <implements service="createShoppingListRecurrence"/> <implements service="shoppingListInterface"/> <attribute name="shoppingListId" type="String" mode="OUT" optional="false"/> </service> - <service name="updateShoppingList" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="updateShoppingList"> + <service name="updateShoppingList" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="updateShoppingList"> <description>Update a shopping list entity</description> <permission-service service-name="checkShoppingListSecurity" main-action="UPDATE"/> <implements service="createShoppingListRecurrence"/> @@ -51,14 +51,14 @@ under the License. <permission-service service-name="checkShoppingListSecurity" main-action="DELETE"/> <attribute name="shoppingListId" type="String" mode="IN" optional="false"/> </service> - <service name="checkShoppingListSecurity" engine="simple" auth="false" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="checkShoppingListSecurity"> + <service name="checkShoppingListSecurity" engine="groovy" auth="false" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="checkShoppingListSecurity"> <description>Checks security on a ShoppingList</description> <implements service="permissionInterface"/> <attribute name="partyId" type="String" mode="IN" optional="true"/> </service> - <service name="calculateShoppingListDeepTotalPrice" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="calculateShoppingListDeepTotalPrice"> + <service name="calculateShoppingListDeepTotalPrice" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="calculateShoppingListDeepTotalPrice"> <description>Remove a shopping list entity</description> <attribute name="shoppingListId" type="String" mode="IN" optional="false"/> <attribute name="prodCatalogId" type="String" mode="IN" optional="false"/> @@ -116,8 +116,8 @@ under the License. <attribute name="quantityPurchased" type="BigDecimal" mode="IN" optional="true"/> <attribute name="configId" type="String" mode="IN" optional="true"/> </service> - <service name="createShoppingListItem" engine="simple" auth="false" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="createShoppingListItem"> + <service name="createShoppingListItem" engine="groovy" auth="false" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="createShoppingListItem"> <description>Create a shopping list item</description> <permission-service service-name="checkShoppingListItemSecurity" main-action="CREATE"/> <implements service="shoppingListItemInterface"/> @@ -126,34 +126,34 @@ under the License. <attribute name="productId" type="String" mode="IN" optional="false"/> <attribute name="shoppingListItemSeqId" type="String" mode="OUT" optional="false"/> </service> - <service name="updateShoppingListItem" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="updateShoppingListItem"> + <service name="updateShoppingListItem" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="updateShoppingListItem"> <description>Update a shopping list item</description> <permission-service service-name="checkShoppingListItemSecurity" main-action="UPDATE"/> <implements service="shoppingListItemInterface"/> <attribute name="shoppingListItemSeqId" type="String" mode="IN" optional="false"/> </service> - <service name="removeShoppingListItem" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="removeShoppingListItem"> + <service name="removeShoppingListItem" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="removeShoppingListItem"> <description>Remove a shopping list item</description> <permission-service service-name="checkShoppingListItemSecurity" main-action="DELETE"/> <attribute name="shoppingListId" type="String" mode="IN" optional="false"/> <attribute name="shoppingListItemSeqId" type="String" mode="IN" optional="false"/> </service> - <service name="checkShoppingListItemSecurity" engine="simple" auth="false" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="checkShoppingListItemSecurity"> + <service name="checkShoppingListItemSecurity" engine="groovy" auth="false" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="checkShoppingListItemSecurity"> <description>Checks security on a ShoppingListItem</description> <implements service="permissionInterface"/> <attribute name="partyId" type="String" mode="IN" optional="true"/> <attribute name="shoppingListId" type="String" mode="IN" optional="true"/> </service> - <service name="addSuggestionsToShoppingList" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="addSuggestionsToShoppingList"> + <service name="addSuggestionsToShoppingList" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="addSuggestionsToShoppingList"> <description>Add suggestions to a shopping list</description> <attribute name="orderId" type="String" mode="IN" optional="false"/> </service> - <service name="addDistinctShoppingListItem" engine="simple" auth="true" - location="component://order/minilang/shoppinglist/ShoppingListServices.xml" invoke="addDistinctShoppingListItem"> + <service name="addDistinctShoppingListItem" engine="groovy" auth="true" + location="component://order/groovyScripts/shoppinglist/ShoppingListServices.groovy" invoke="addDistinctShoppingListItem"> <description>Adds a shopping list item if one with the same productId does not exist</description> <implements service="shoppingListItemInterface"/> <attribute name="shoppingListId" type="String" mode="IN" optional="false"/>