This is an automated email from the ASF dual-hosted git repository. pgil pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
commit 53a8b812607f9987a1063f18062a5318cafe444c Author: Gil Portenseigne <[email protected]> AuthorDate: Fri Mar 6 15:17:47 2020 +0100 Improved: Convert OrderServices.xml mini-lang to groovyDSL : getOrderedSummaryInformation (OFBIZ-9984) Thanks Julien for your contribution --- .../order/groovyScripts/order/OrderServices.groovy | 67 ++++++++++++++++++++- .../order/minilang/order/OrderServices.xml | 68 ---------------------- applications/order/servicedef/services.xml | 4 +- 3 files changed, 68 insertions(+), 71 deletions(-) diff --git a/applications/order/groovyScripts/order/OrderServices.groovy b/applications/order/groovyScripts/order/OrderServices.groovy index 323b8a8..9fd9b8f 100644 --- a/applications/order/groovyScripts/order/OrderServices.groovy +++ b/applications/order/groovyScripts/order/OrderServices.groovy @@ -18,7 +18,7 @@ */ -import org.apache.ofbiz.base.util.UtilDateTime +import groovy.time.TimeCategory import org.apache.ofbiz.entity.GenericValue import org.apache.ofbiz.entity.condition.EntityConditionBuilder @@ -74,4 +74,69 @@ def getNextOrderId() { return result } +/** + * Service to get Summary Information About Orders for a Customer + */ +def getOrderedSummaryInformation() { + /* + // The permission checking is commented out to make this service work also when triggered from ecommerce + if (!security.hasEntityPermission('ORDERMGR', '_VIEW', session && !parameters.partyId.equals(userLogin.partyId))) { + Map result = error('To get order summary information you must have the ORDERMGR_VIEW permission, or + be logged in as the party to get the summary information for.') + return result + } + */ + Timestamp fromDate = null, thruDate = null + Date now = new Date() + if (monthsToInclude) { + use(TimeCategory) { + thruDate = now.toTimestamp() + fromDate = (now - monthsToInclude.months).toTimestamp() + } + } + + roleTypeId = roleTypeId ?: 'PLACING_CUSTOMER' + orderTypeId = orderTypeId ?: 'SALES_ORDER' + statusId = statusId ?: 'ORDER_COMPLETED' + + //find the existing exchange rates + exprBldr = new EntityConditionBuilder() + + def condition = exprBldr.AND() { + EQUALS(partyId: partyId) + EQUALS(roleTypeId: roleTypeId) + EQUALS(orderTypeId: orderTypeId) + EQUALS(statusId: statusId) + } + + if (fromDate) { + condition = exprBldr.AND(condition) { + condition + exprBldr.OR() { + GREATER_THAN_EQUAL_TO(orderDate: fromDate) + EQUALS(orderDate: null) + } + } + } + + if (thruDate) { + condition = exprBldr.AND(condition) { + condition + exprBldr.OR() { + LESS_THAN_EQUAL_TO(orderDate: thruDate) + EQUALS(orderDate: null) + } + } + } + + orderInfo = select('partyId', 'roleTypeId', 'totalGrandAmount', 'totalSubRemainingAmount', 'totalOrders') + .from('OrderHeaderAndRoleSummary').where(condition).queryFirst() + + // first set the required OUT fields to zero + result = success() + result.totalGrandAmount = orderInfo ? orderInfo.totalGrandAmount : BigDecimal.ZERO + result.totalSubRemainingAmount = orderInfo ? orderInfo.totalSubRemainingAmount : BigDecimal.ZERO + result.totalOrders = orderInfo ? orderInfo.totalOrders : 0l + + return result } diff --git a/applications/order/minilang/order/OrderServices.xml b/applications/order/minilang/order/OrderServices.xml index d357c0a..b4ab784 100644 --- a/applications/order/minilang/order/OrderServices.xml +++ b/applications/order/minilang/order/OrderServices.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="getOrderedSummaryInformation" short-description="Get Summary Information About Orders for a Customer"> - <!-- The permission checking is commented out to make this service work also when triggered from ecommerce --> - <!--if> - <condition> - <and> - <not><if-has-permission permission="ORDERMGR" action="_VIEW"/></not> - <if-compare-field field="parameters.partyId" to-field="userLogin.partyId" operator="not-equals"/> - </and> - </condition> - <then> - <string-to-list string="To get order summary information you must have the ORDERMGR_VIEW permission, or be logged in as the party to get the summary information for." list="error_list"/> - </then> - </if> - <check-errors/> - --> - <if-not-empty field="monthsToInclude"> - <now-timestamp field="nowTimestamp"/> - <!-- TODO: Change this to use the <set-calendar> operation --> - <script>groovy: - calendar = com.ibm.icu.util.Calendar.getInstance() - calendar.setTimeInMillis(nowTimestamp.getTime()) - calendar.add(com.ibm.icu.util.Calendar.MONTH, -monthsToInclude.intValue()) - parameters.put("fromDate", new Timestamp(calendar.getTimeInMillis())) - </script> - <set from-field="nowTimestamp" field="parameters.thruDate"/> - </if-not-empty> - - <if-empty field="parameters.roleTypeId"> - <set value="PLACING_CUSTOMER" field="parameters.roleTypeId"/> - </if-empty> - <if-empty field="parameters.orderTypeId"> - <set value="SALES_ORDER" field="parameters.orderTypeId"/> - </if-empty> - <if-empty field="parameters.statusId"> - <set value="ORDER_COMPLETED" field="parameters.statusId"/> - </if-empty> - - <entity-condition entity-name="OrderHeaderAndRoleSummary" list="orderInfoList"> - <condition-list combine="and"> - <condition-expr field-name="partyId" operator="equals" from-field="parameters.partyId"/> - <condition-expr field-name="roleTypeId" operator="equals" from-field="parameters.roleTypeId"/> - <condition-expr field-name="orderTypeId" operator="equals" from-field="parameters.orderTypeId"/> - <condition-expr field-name="statusId" operator="equals" from-field="parameters.statusId"/> - <condition-expr field-name="orderDate" operator="greater-equals" from-field="parameters.fromDate" ignore-if-null="true"/> - <condition-expr field-name="orderDate" operator="less-equals" from-field="parameters.thruDate" ignore-if-null="true"/> - </condition-list> - <select-field field-name="partyId"/> - <select-field field-name="roleTypeId"/> - <select-field field-name="totalGrandAmount"/> - <select-field field-name="totalSubRemainingAmount"/> - <select-field field-name="totalOrders"/> - </entity-condition> - - <!-- first set the required OUT fields to zero --> - <calculate field="plainDoubleZero"><number value="0.0"/></calculate> - <calculate field="plainLongZero" type="Long"><number value="0"/></calculate> - <field-to-result field="plainDoubleZero" result-name="totalGrandAmount"/> - <field-to-result field="plainDoubleZero" result-name="totalSubRemainingAmount"/> - <field-to-result field="plainLongZero" result-name="totalOrders"/> - - <!-- because we specified the partyId and the roleTypeId, should only be one item in list returned --> - <first-from-list list="orderInfoList" entry="orderInfo"/> - <if-not-empty field="orderInfo"> - <field-to-result field="orderInfo.totalGrandAmount" result-name="totalGrandAmount"/> - <field-to-result field="orderInfo.totalSubRemainingAmount" result-name="totalSubRemainingAmount"/> - <field-to-result field="orderInfo.totalOrders" result-name="totalOrders"/> - </if-not-empty> - </simple-method> <!-- order requirement methods --> <simple-method method-name="createRequirementAndCommitment" short-description="create a requirement and commitment for it"> diff --git a/applications/order/servicedef/services.xml b/applications/order/servicedef/services.xml index 25d68c0..7084e79 100644 --- a/applications/order/servicedef/services.xml +++ b/applications/order/servicedef/services.xml @@ -475,8 +475,8 @@ under the License. <attribute name="orderId" type="String" mode="IN"/> </service> <!-- Order View Services --> - <service name="getOrderedSummaryInformation" engine="simple" - location="component://order/minilang/order/OrderServices.xml" invoke="getOrderedSummaryInformation"> + <service name="getOrderedSummaryInformation" engine="groovy" + location="component://order/groovyScripts/order/OrderServices.groovy" invoke="getOrderedSummaryInformation"> <description>Get Ordered Summary Information</description> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="roleTypeId" type="String" mode="IN" optional="true"/> <!-- defaults to PLACING_CUSTOMER -->

