Added: ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy
URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy?rev=1831783&view=auto ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy (added) +++ ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy Thu May 17 14:03:46 2018 @@ -0,0 +1,377 @@ +/* + * 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 java.sql.Timestamp +import org.apache.ofbiz.base.util.UtilDateTime +import org.apache.ofbiz.base.util.UtilMisc +import org.apache.ofbiz.entity.GenericValue +import org.apache.ofbiz.entity.util.EntityQuery +import org.apache.ofbiz.order.shoppingcart.ShoppingCart +import org.apache.ofbiz.testtools.GroovyScriptTestCase +import org.apache.ofbiz.service.ServiceUtil + +class ProductPromoCondTest extends GroovyScriptTestCase { + + Map prepareConditionMap(ShoppingCart cart, String condValue) { + return prepareConditionMap(cart, condValue, false) + } + + Map prepareConditionMap(ShoppingCart cart, String condValue, boolean persist) { + GenericValue productPromoCond = delegator.makeValue("ProductPromoCond", [condValue: condValue]) + if (persist) { + GenericValue productPromo = delegator.makeValue("ProductPromo", [productPromoId: 'TEST']) + delegator.createOrStore(productPromo) + GenericValue productPromoRule = delegator.makeValue("ProductPromoRule", [productPromoId: 'TEST', productPromoRuleId:'01']) + delegator.createOrStore(productPromoRule) + productPromoCond.productPromoId = 'TEST' + productPromoCond.productPromoRuleId = '01' + productPromoCond.productPromoCondSeqId = '01' + delegator.createOrStore(productPromoCond) + } + return [shoppingCart: cart, nowTimestamp: UtilDateTime.nowTimestamp(), productPromoCond: productPromoCond] + } + + ShoppingCart loadOrder(String orderId) { + GenericValue permUserLogin = EntityQuery.use(delegator).from("UserLogin").where("userLoginId", "system").cache().queryOne() + Map<String, Object> serviceCtx = [orderId: orderId, + skipInventoryChecks: true, // the items are already reserved, no need to check again + skipProductChecks: true, // the products are already in the order, no need to check their validity now + includePromoItems: false, + createAsNewOrder: 'Y', + userLogin: permUserLogin] + Map<String, Object> loadCartResp = dispatcher.runSync("loadCartFromOrder", serviceCtx) + + return loadCartResp.shoppingCart + } + + /** + * This test check if the function productPartyID work correctly + * 1. test success with a valid partyId + * 2. test failed with passing non valid value + */ + void testPartyIdPromo() { + String condValue = "FrenchCustomer" + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + cart.setOrderPartyId(condValue) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondPartyID", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + cart.setOrderPartyId("OtherPartyId") + serviceResult = dispatcher.runSync("productPromoCondPartyID", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase != 0 + } + + /** + * This test check if the function productNewACCT work correctly + * 1. test success if the customer is subscribed more than the "condValue" + * 2. test failed with passing non valid value + */ + void testNewACCTPromo() { + String condValue = "1095" + GenericValue frenchCustomer = delegator.makeValue("Party", [partyId: "FrenchCustomer", createdDate: Timestamp.valueOf("2010-01-01 00:00:00")]) + frenchCustomer.store() + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + Timestamp nowTimestamp = UtilDateTime.nowTimestamp() + cart.setOrderPartyId("FrenchCustomer") + cart.getPartyDaysSinceCreated(nowTimestamp) + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondNewACCT", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase >= 0 + + //2.test promo nonvalid + frenchCustomer.createdDate = nowTimestamp + frenchCustomer.store() + cart.getPartyDaysSinceCreated(nowTimestamp) + serviceResult = dispatcher.runSync("productPromoCondNewACCT", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase < 0 + } + + /** + * This test check if the function productPartyClass work correctly + * 1. test success if the login user is from part of classification of the promoCondition + * 2. test failed with passing non valid value + */ + void testPartyClassPromo() { + String condValue = "PROMO_TEST" + GenericValue partyClassGroup = delegator.makeValue("PartyClassificationGroup", [partyClassificationGroupId: condValue]) + delegator.createOrStore(partyClassGroup) + GenericValue partyClassification = delegator.makeValue("PartyClassification", + [partyId: "FrenchCustomer", partyClassificationGroupId: condValue, + fromDate: Timestamp.valueOf("2010-01-01 00:00:00"), + thruDate: null]) + delegator.createOrStore(partyClassification) + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + cart.setOrderPartyId("FrenchCustomer") + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondPartyClass", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + partyClassification.refresh() + partyClassification.thruDate = Timestamp.valueOf("2010-01-01 00:00:00") + partyClassification.store() + serviceResult = dispatcher.runSync("productPromoCondPartyClass", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 1 + } + + /** + * This test check if the function productPartyGM work correctly + * 1. test success if the login user is from part of the Group member of the promoCondition + * 2. test failed with passing non valid value + */ + void testPartyGMPromo() { + String condValue = "HUMAN_RES" + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + cart.setOrderPartyId(condValue) + GenericValue partyRole = delegator.makeValue("PartyRole", [partyId: "FrenchCustomer", roleTypeId: "_NA_"]) + delegator.createOrStore(partyRole) + partyRole.partyId = condValue + delegator.createOrStore(partyRole) + GenericValue relation = delegator.makeValue("PartyRelationship", [partyIdFrom: "FrenchCustomer", roleTypeIdFrom: "_NA_", + partyIdTo: condValue, roleTypeIdTo: "_NA_", + fromDate: Timestamp.valueOf("2010-01-01 00:00:00"), + partyRelationshipTypeId: "GROUP_ROLLUP"]) + delegator.createOrStore(relation) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondPartyGM", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + cart.setOrderPartyId("OtherPartyId") + serviceResult = dispatcher.runSync("productPromoCondPartyGM", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 1 + } + + /** + * This test check if the function productRoleType work correctly + * 1. test success if the login user role type is equal to the condValue + * 2. test failed with passing non valid value + */ + void testRoleTypePromo() { + String condValue = "APPROVER" + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + cart.setOrderPartyId("FrenchCustomer") + GenericValue partyRole = delegator.makeValue("PartyRole", [partyId: "FrenchCustomer", roleTypeId: condValue]) + delegator.createOrStore(partyRole) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondRoleType", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + cart.setOrderPartyId("OtherPartyId") + serviceResult = dispatcher.runSync("productPromoCondRoleType", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase != 0 + } + + /** + * This test check if the function productGeoID work correctly + * 1. test success if the shipping address is equal to the condValue + * 2. test failed with passing non valid value + */ + void testCondGeoIdPromo() { + ShoppingCart cart = loadOrder("DEMO10090") + cart.setShippingContactMechId(0, "9200") + GenericValue productPromoCond = EntityQuery.use(delegator).from("ProductPromoCond").where("productPromoId", "9022", "productPromoRuleId", "01", "productPromoCondSeqId", "01").queryOne() + + // call service promo + Map<String, Object> serviceContext = [shoppingCart: cart, nowTimestamp: UtilDateTime.nowTimestamp(), productPromoCond: productPromoCond] + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondGeoID", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + cart = loadOrder("DEMO10091") + cart.setShippingContactMechId(0, "10000") + serviceContext.shoppingCart = cart + serviceResult = dispatcher.runSync("productPromoCondGeoID", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase != 0 + } + + /** + * This test check if the function productOrderTotal work correctly + * 1. test success if the order total is equal or greater than the condValue + * 2. test failed with passing non valid value + */ + void testCondOrderTotalPromo() { + String condValue = "34.56" + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(loadOrder("DEMO10090"), condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondOrderTotal", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + serviceContext.shoppingCart = loadOrder("Demo1002") + serviceResult = dispatcher.runSync("productPromoCondOrderTotal", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase > 0 + } + + /** + * This test check if the function productPromoRecurrence work correctly + * 1. test success if the recurrence is equal to the condValue + * 2. test failed with passing non valid value + */ + void testRecurrencePromo() { + String condValue = "TEST_PROMO" + ShoppingCart cart = new ShoppingCart(delegator, "9000", Locale.getDefault(), "EUR") + GenericValue reccurenceRule = delegator.makeValue("RecurrenceRule", [recurrenceRuleId: condValue, frequency: "DAILY", intervalNumber: 1l, + countNumber: -1l, byDayList: "MO,TU,WE,TH,FR,SA,SU"]) + delegator.createOrStore(reccurenceRule) + GenericValue reccurenceInfo = delegator.makeValue("RecurrenceInfo", [recurrenceInfoId: condValue, startDateTime: Timestamp.valueOf("2008-01-01 00:00:00.000"), + recurrenceRuleId: condValue, recurrenceCount: 0l]) + delegator.createOrStore(reccurenceInfo) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondPromoRecurrence", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + condValue = "3" + serviceContext = prepareConditionMap(cart, condValue) + serviceResult = dispatcher.runSync("productPromoCondPromoRecurrence", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase != 0 + } + + /** + * This test check if the function productShipTotal work correctly + * 1. test success if ship total is greater than the condValue + * 2. test failed with passing non valid value + */ + void testShipTotalPromo() { + String condValue = "20" + BigDecimal amount = BigDecimal.valueOf(25) + ShoppingCart cart = loadOrder("DEMO10090") + cart.setItemShipGroupEstimate(amount, 0) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondOrderShipTotal", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase > 0 + + //2.test promo nonvalid + amount = BigDecimal.valueOf(19) + cart.setItemShipGroupEstimate(amount, 0) + serviceResult = dispatcher.runSync("productPromoCondOrderShipTotal", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase <= 0 + } + + /** + * This test check if the function productAmount work correctly + * 1. test success if the amount of specific product is equal to the condValue + * 2. test failed with passing non valid value + */ + void testProductAmountPromo() { + String condValue = "30" + String orderId = "DEMO10090" + ShoppingCart cart = loadOrder(orderId) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, condValue, true) + GenericValue productPromoProduct = delegator.makeValue("ProductPromoProduct", + [productPromoId: 'TEST', productPromoRuleId: '01', productPromoCondSeqId: '01', + productId: 'GZ-2644', productPromoApplEnumId: 'PPPA_INCLUDE', productPromoActionSeqId: '_NA_']) + delegator.createOrStore(productPromoProduct) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondProductAmount", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase == 0 + + //2.test promo nonvalid + condValue = "50" + serviceContext = prepareConditionMap(cart, condValue, true) + serviceResult = dispatcher.runSync("productPromoCondProductAmount", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase != 0 + } + + /** + * This test check if the function productTotal work correctly + * 1. test success if the total amount of product is equal or greater than the condValue + * 2. test failed with passing non valid value + */ + void testProductTotalPromo() { + String orderId = "Demo1002" + ShoppingCart cart = loadOrder(orderId) + + // call service promo + Map<String, Object> serviceContext = prepareConditionMap(cart, "50", true) + GenericValue productPromoProduct = delegator.makeValue("ProductPromoProduct", + [productPromoId: 'TEST', productPromoRuleId: '01', productPromoCondSeqId: '01', + productId: 'WG-1111', productPromoApplEnumId: 'PPPA_INCLUDE', productPromoActionSeqId: '_NA_']) + delegator.createOrStore(productPromoProduct) + Map<String, Object> serviceResult = dispatcher.runSync("productPromoCondProductTotal", serviceContext) + + //Check result service + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase >= 0 + + + //2.test promo nonvalid + cart = loadOrder(orderId) + serviceContext = prepareConditionMap(cart, "150", true) + serviceResult = dispatcher.runSync("productPromoCondProductTotal", serviceContext) + assert ServiceUtil.isSuccess(serviceResult) + assert serviceResult.compareBase < 0 + } +} Propchange: ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/ofbiz-framework/trunk/applications/product/groovyScripts/product/test/ProductPromoCondTests.groovy ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ofbiz/ofbiz-framework/trunk/applications/product/ofbiz-component.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/ofbiz-component.xml?rev=1831783&r1=1831782&r2=1831783&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/ofbiz-component.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/ofbiz-component.xml Thu May 17 14:03:46 2018 @@ -32,7 +32,8 @@ under the License. <entity-resource type="data" reader-name="seed" loader="main" location="data/FacilitySecurityPermissionSeedData.xml"/> <entity-resource type="data" reader-name="seed" loader="main" location="data/ApiSchemaDhl.xml"/> <entity-resource type="data" reader-name="seed" loader="main" location="data/ProductPortletData.xml"/> - + <entity-resource type="data" reader-name="seed" loader="main" location="data/PromoCustomMethodData.xml"/> + <entity-resource type="data" reader-name="seed-initial" loader="main" location="data/ProductScheduledServices.xml"/> <entity-resource type="data" reader-name="seed-initial" loader="main" location="data/CatalogSystemPropertyData.xml"/> @@ -70,6 +71,7 @@ under the License. <test-suite loader="main" location="testdef/GroupOrderTest.xml"/> <test-suite loader="main" location="testdef/ProductTagTest.xml"/> <test-suite loader="main" location="testdef/ProductTest.xml"/> + <test-suite loader="main" location="testdef/ProductPromoTests.xml"/> <webapp name="catalog" title="Catalog" Modified: ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_pricepromo.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_pricepromo.xml?rev=1831783&r1=1831782&r2=1831783&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_pricepromo.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/servicedef/services_pricepromo.xml Thu May 17 14:03:46 2018 @@ -156,7 +156,7 @@ under the License. <auto-attributes include="pk" mode="IN" optional="false"/> <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="productPromoActionSeqId" mode="OUT"/> - <override name="productPromoActionEnumId" optional="false"/> + <override name="customMethodId" optional="false" /> </service> <service name="updateProductPromoAction" default-entity-name="ProductPromoAction" engine="entity-auto" invoke="update" auth="true"> <description>Update a ProductPromo</description> @@ -368,4 +368,158 @@ under the License. <description>Delete a ProductPriceAutoNotice</description> <auto-attributes include="pk" mode="IN" optional="false"/> </service> -</services> + + <!-- ProductPricePromoCond services --> + <service name="interfaceProductPromoCond" engine="interface" location="" invoke=""> + <attribute name="productPromoCond" type="org.apache.ofbiz.entity.GenericValue" mode="IN"/> + <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN"/> + <attribute name="nowTimestamp" type="Timestamp" mode="IN"/> + <attribute name="directResult" type="Boolean" mode="OUT" optional="true"/> + <attribute name="compareBase" type="Integer" mode="OUT" optional="true"/> + <attribute name="operatorEnumId" type="String" mode="OUT" optional="true"/> + </service> + <service name="productPromoCondProductAmount" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productAmount"> + <description>Product promo condition service on the product amount</description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondProductTotal" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productTotal"> + <description>Product promo condition service on the product Total</description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondProductQuant" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productQuant"> + <description>Product promo condition service on quantity </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondNewACCT" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productNewACCT"> + <description>Product promo condition service on Account Days Since Created </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondPartyID" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productPartyID"> + <description>Product promo condition service on party ID </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondPartyGM" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productPartyGM"> + <description>Product promo condition service on party group member </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondPartyClass" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productPartyClass"> + <description>Product promo condition service on party Classification </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondRoleType" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productRoleType"> + <description>Product promo condition service on role type </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondGeoID" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productGeoID"> + <description>Product promo condition service on shipping destination </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondOrderTotal" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productOrderTotal"> + <description>Product promo condition service on cart sub-total </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondOrderHist" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productOrderHist"> + <description>Product promo condition service on Order sub-total X in last Y Months </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondOrderYear" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productOrderYear"> + <description>Product promo condition service on Order sub-total X since beginning of current year </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondOrderLastYear" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productOrderLastYear"> + <description>Product promo condition service on Order sub-total X last year </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondPromoRecurrence" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productPromoRecurrence"> + <description>Product promo condition service on promotion recurrence </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondOrderShipTotal" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productShipTotal"> + <description>Product promo condition service on promotion recurrence </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondListPriceMinAmount" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productListPriceMinAmount"> + <description>Product promo condition service on shipping total </description> + <implements service="interfaceProductPromoCond"/> + </service> + <service name="productPromoCondListPriceMinPercent" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoCondServices.groovy" invoke="productListPriceMinPercent"> + <description>Product promo condition service on shipping total </description> + <implements service="interfaceProductPromoCond"/> + </service> + + <!-- ProductPricePromoAction services --> + <service name="interfaceProductPromoAction" engine="interface" location="" invoke=""> + <attribute name="productPromoAction" type="org.apache.ofbiz.entity.GenericValue" mode="IN"/> + <attribute name="shoppingCart" type="org.apache.ofbiz.order.shoppingcart.ShoppingCart" mode="IN"/> + <attribute name="nowTimestamp" type="Timestamp" mode="IN"/> + <attribute name="actionResultInfo" type="org.apache.ofbiz.order.shoppingcart.product.ProductPromoWorker$ActionResultInfo" mode="INOUT" /> + <attribute name="cartItemModifyException" type="org.apache.ofbiz.order.shoppingcart.CartItemModifyException" mode="OUT" optional="true"/> + </service> + <service name="productPromoActGiftGWP" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productGWP"> + <description>Product promo Action gift with purchase </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActFreeShip" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productActFreeShip"> + <description>Product promo Action free shipping </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActProdDISC" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productDISC"> + <description>Product promo Action product discount % </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActProdAMDISC" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productAMDISC"> + <description>Product promo Action product discount </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActProdPrice" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productPrice"> + <description>Product promo Action product price </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActOrderPercent" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productOrderPercent"> + <description>Product promo Action order percent </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActOrderAmount" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productOrderAmount"> + <description>Product promo Action order amount </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActProdSpecialPrice" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productSpecialPrice"> + <description>Product promo Action product special price </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActTaxPercent" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productTaxPercent"> + <description>Product promo Action product tax percent </description> + <implements service="interfaceProductPromoAction"/> + </service> + <service name="productPromoActShipCharge" engine="groovy" auth="false" + location="component://product/groovyScripts/product/promo/ProductPromoActionServices.groovy" invoke="productShipCharge"> + <description>Product promo Action product shipping charge </description> + <implements service="interfaceProductPromoAction"/> + </service> +</services> Modified: ofbiz/ofbiz-framework/trunk/applications/product/template/promo/EditProductPromoRules.ftl URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/template/promo/EditProductPromoRules.ftl?rev=1831783&r1=1831782&r2=1831783&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/template/promo/EditProductPromoRules.ftl (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/template/promo/EditProductPromoRules.ftl Thu May 17 14:03:46 2018 @@ -80,15 +80,15 @@ under the License. <input type="hidden" name="productPromoRuleId" value="${(productPromoCond.productPromoRuleId)!}"/> <input type="hidden" name="productPromoCondSeqId" value="${(productPromoCond.productPromoCondSeqId)!}"/> <select name="inputParamEnumId" size="1"> - <#if (productPromoCond.inputParamEnumId)??> - <#assign inputParamEnum = productPromoCond.getRelatedOne("InputParamEnumeration", true)> - <option value="${productPromoCond.inputParamEnumId}"><#if inputParamEnum??>${(inputParamEnum.get("description",locale))!}<#else>[${(productPromoCond.inputParamEnumId)!}]</#if></option> - <option value="${(productPromoCond.inputParamEnumId)!}"> </option> + <#if (productPromoCond.customMethodId)??> + <#assign customMethod = productPromoCond.getRelatedOne("CustomMethod", true)> + <option value="${productPromoCond.customMethodId}"><#if customMethod??>${(customMethod.get("description",locale))!}<#else>[${(productPromoCond.customMethodId)!}]</#if></option> + <option value="${(productPromoCond.customMethodId)!}"> </option> <#else> <option value=""> </option> </#if> - <#list inputParamEnums as inputParamEnum> - <option value="${(inputParamEnum.enumId)!}">${(inputParamEnum.get("description",locale))!}</option> + <#list inputParamCustomMethods as inputParamCustomMethod> + <option value="${(inputParamCustomMethod.customMethodId)!}">${(inputParamCustomMethod.get("description",locale))!}</option> </#list> </select> <select name="operatorEnumId" size="1"> @@ -240,9 +240,9 @@ under the License. <input type="hidden" name="productPromoId" value="${(productPromoRule.productPromoId)!}" /> <input type="hidden" name="productPromoRuleId" value="${(productPromoRule.productPromoRuleId)!}" /> <span class="label"><b>${uiLabelMap.CommonNew}</b> </span> - <select name="inputParamEnumId" size="1"> - <#list inputParamEnums as inputParamEnum> - <option value="${(inputParamEnum.enumId)!}">${(inputParamEnum.get("description",locale))!}</option> + <select name="customMethodId" size="1"> + <#list inputParamCustomMethods as inputParamCustomMethod> + <option value="${(inputParamCustomMethod.customMethodId)!}">${(inputParamCustomMethod.get("description",locale))!}</option> </#list> </select> <select name="operatorEnumId" size="1"> @@ -268,7 +268,7 @@ under the License. </table> </td> </tr> - <tr><td><hr /></td><td colspan="2"></td></tr> + <tr><td><hr/> </td><td colspan="2"></td></tr> <tr valign="top" class="row-level-one<#if "1" == ruleClass> alternate-row</#if>"> <td align="right" class="label">${uiLabelMap.ProductActionForRule} ${(productPromoRule.productPromoRuleId)!} :</td> <td colspan="2"> @@ -284,16 +284,16 @@ under the License. <input type="hidden" name="productPromoId" value="${(productPromoAction.productPromoId)!}" /> <input type="hidden" name="productPromoRuleId" value="${(productPromoAction.productPromoRuleId)!}" /> <input type="hidden" name="productPromoActionSeqId" value="${(productPromoAction.productPromoActionSeqId)!}" /> - <select name="productPromoActionEnumId" size="1"> - <#if (productPromoAction.productPromoActionEnumId)??> + <select name="customMethodId" size="1"> + <#if (productPromoAction.customMethodId)??> <#assign productPromoActionCurEnum = productPromoAction.getRelatedOne("ActionEnumeration", true)> - <option value="${(productPromoAction.productPromoActionEnumId)!}"><#if productPromoActionCurEnum??>${(productPromoActionCurEnum.get("description",locale))!}<#else>[${(productPromoAction.productPromoActionEnumId)!}]</#if></option> - <option value="${(productPromoAction.productPromoActionEnumId)!}"> </option> + <option value="${(productPromoAction.customMethodId)!}"><#if productPromoActionCurEnum??>${(productPromoActionCurEnum.get("description",locale))!}<#else>[${(productPromoAction.customMethodId)!}]</#if></option> + <option value="${(productPromoAction.customMethodId)!}"> </option> <#else> <option value=""> </option> </#if> - <#list productPromoActionEnums as productPromoActionEnum> - <option value="${(productPromoActionEnum.enumId)!}">${(productPromoActionEnum.get("description",locale))!}</option> + <#list PromoActionCustomMethods as PromoActionCustomMethod> + <option value="${(PromoActionCustomMethod.customMethodId)!}">${(PromoActionCustomMethod.get("description",locale))!}</option> </#list> </select> <input type="hidden" name="orderAdjustmentTypeId" value="${(productPromoAction.orderAdjustmentTypeId)!}" /> @@ -400,7 +400,6 @@ under the License. <form method="post" action="<@ofbizUrl>createProductPromoProduct</@ofbizUrl>" name="createProductPromoProductActions"> <input type="hidden" name="productPromoId" value="${productPromoId}" /> <input type="hidden" name="productPromoRuleId" value="${productPromoAction.productPromoRuleId}" /> - <input type="hidden" name="productPromoActionSeqId" value="${productPromoAction.productPromoActionSeqId}" /> <input type="hidden" name="productPromoCondSeqId" value="_NA_" /> <@htmlTemplate.lookupField formName="createProductPromoProductActions" name="productId" id="productId" fieldFormName="LookupProduct"/> <select name="productPromoApplEnumId"> @@ -427,10 +426,11 @@ under the License. <form method="post" action="<@ofbizUrl>createProductPromoAction</@ofbizUrl>" name="createProductPromoAction"> <input type="hidden" name="productPromoId" value="${(productPromoRule.productPromoId)!}" /> <input type="hidden" name="productPromoRuleId" value="${(productPromoRule.productPromoRuleId)!}" /> + <input type="hidden" name="customMethodId" value="${(productPromoAction.customMethodId)!}" /> <span class="label"><b>${uiLabelMap.CommonNew}:</b> </span> - <select name="productPromoActionEnumId" size="1"> - <#list productPromoActionEnums as productPromoActionEnum> - <option value="${(productPromoActionEnum.enumId)!}">${(productPromoActionEnum.get("description",locale))!}</option> + <select name="customMethodId" size="1"> + <#list PromoActionCustomMethods as PromoActionCustomMethod> + <option value="${(PromoActionCustomMethod.customMethodId)!}">${(PromoActionCustomMethod.get("description",locale))!}</option> </#list> </select> <input type="hidden" name="orderAdjustmentTypeId" value="PROMOTION_ADJUSTMENT" /> Added: ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml?rev=1831783&view=auto ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml (added) +++ ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml Thu May 17 14:03:46 2018 @@ -0,0 +1,32 @@ +<?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. +--> + +<test-suite suite-name="productPromoTests" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/test-suite.xsd"> + + <test-group case-name="product-Conditions-tests"> + <groovy-test-suite name="prodCond" location="component://product/groovyScripts/product/test/ProductPromoCondTests.groovy"/> + <!--groovy-test-suite name="productPromoCondTests" location="component://product/groovyScripts/product/test/ProductPromoCondTests.groovy"/--> + </test-group> + <test-group case-name="product-Action-tests"> + <groovy-test-suite name="productPromoActionTests" location="component://product/groovyScripts/product/test/ProductPromoActionTests.groovy"/> + </test-group> +</test-suite> Propchange: ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/ofbiz-framework/trunk/applications/product/testdef/ProductPromoTests.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Modified: ofbiz/ofbiz-framework/trunk/applications/product/widget/catalog/PromoScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/product/widget/catalog/PromoScreens.xml?rev=1831783&r1=1831782&r2=1831783&view=diff ============================================================================== --- ofbiz/ofbiz-framework/trunk/applications/product/widget/catalog/PromoScreens.xml (original) +++ ofbiz/ofbiz-framework/trunk/applications/product/widget/catalog/PromoScreens.xml Thu May 17 14:03:46 2018 @@ -160,9 +160,9 @@ under the License. </entity-condition> <!-- General Data for Drop-downs, etc --> - <entity-condition entity-name="Enumeration" list="inputParamEnums" use-cache="true"> - <condition-expr field-name="enumTypeId" value="PROD_PROMO_IN_PARAM"/> - <order-by field-name="sequenceId"/> + <entity-condition entity-name="CustomMethod" list="inputParamCustomMethods" use-cache="true"> + <condition-expr field-name="customMethodTypeId" value="PRODUCT_PROMO_COND"/> + <order-by field-name="customMethodName"/> </entity-condition> <entity-condition entity-name="CarrierShipmentMethod" list="carrierShipmentMethods" use-cache="true"> <order-by field-name="shipmentMethodTypeId"/> @@ -171,9 +171,9 @@ under the License. <condition-expr field-name="enumTypeId" value="PROD_PROMO_COND"/> <order-by field-name="sequenceId"/> </entity-condition> - <entity-condition entity-name="Enumeration" list="productPromoActionEnums" use-cache="true"> - <condition-expr field-name="enumTypeId" value="PROD_PROMO_ACTION"/> - <order-by field-name="sequenceId"/> + <entity-condition entity-name="CustomMethod" list="PromoActionCustomMethods" use-cache="true"> + <condition-expr field-name="customMethodTypeId" value="PRODUCT_PROMO_ACTION"/> + <order-by field-name="customMethodName"/> </entity-condition> <entity-condition entity-name="Enumeration" list="productPromoApplEnums" use-cache="true"> <condition-expr field-name="enumTypeId" value="PROD_PROMO_PCAPPL"/> |
Free forum by Nabble | Edit this page |