Author: doogie
Date: Tue May 4 21:19:41 2010 New Revision: 941048 URL: http://svn.apache.org/viewvc?rev=941048&view=rev Log: Add flag to ProductPromoAction, that tells PROMO_GWP to use all available item quantities as the new GWP quantity. This requires the quantity field to be null, and useCartQuantity to be 'Y'. This allows insanely huge quantities to be used on items that have GWP promos attached. Under testing, I've added products with a quantity of 10000 and 50000 items, with no variation in speed. Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java ofbiz/trunk/applications/product/entitydef/entitymodel.xml ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl Modified: ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java?rev=941048&r1=941047&r2=941048&view=diff ============================================================================== --- ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java (original) +++ ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/product/ProductPromoWorker.java Tue May 4 21:19:41 2010 @@ -1266,7 +1266,24 @@ public class ProductPromoWorker { if (Debug.verboseOn()) Debug.logVerbose("Not adding promo item, already there; action: " + productPromoAction, module); actionResultInfo.ranAction = false; } else { - BigDecimal quantity = productPromoAction.get("quantity") == null ? BigDecimal.ZERO : productPromoAction.getBigDecimal("quantity"); + BigDecimal quantity; + if (productPromoAction.get("quantity") != null) { + quantity = productPromoAction.getBigDecimal("quantity"); + } else { + if ("Y".equals(productPromoAction.get("useCartQuantity"))) { + quantity = BigDecimal.ZERO; + List used = getCartItemsUsed(cart, productPromoAction); + Iterator usedIt = used.iterator(); + while (usedIt.hasNext()) { + ShoppingCartItem item = (ShoppingCartItem) usedIt.next(); + BigDecimal available = item.getPromoQuantityAvailable(); + quantity = quantity.add(available).add(item.getPromoQuantityCandidateUseActionAndAllConds(productPromoAction)); + item.addPromoQuantityCandidateUse(available, productPromoAction, false); + } + } else { + quantity = BigDecimal.ZERO; + } + } List optionProductIds = FastList.newInstance(); String productId = productPromoAction.getString("productId"); Modified: ofbiz/trunk/applications/product/entitydef/entitymodel.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel.xml?rev=941048&r1=941047&r2=941048&view=diff ============================================================================== --- ofbiz/trunk/applications/product/entitydef/entitymodel.xml (original) +++ ofbiz/trunk/applications/product/entitydef/entitymodel.xml Tue May 4 21:19:41 2010 @@ -3392,6 +3392,7 @@ under the License. <field name="amount" type="fixed-point"></field> <field name="productId" type="id"></field> <field name="partyId" type="id"></field> + <field name="useCartQuantity" type="indicator"></field> <prim-key field="productPromoId"/> <prim-key field="productPromoRuleId"/> <prim-key field="productPromoActionSeqId"/> Modified: ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl?rev=941048&r1=941047&r2=941048&view=diff ============================================================================== --- ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl (original) +++ ofbiz/trunk/applications/product/webapp/catalog/promo/EditProductPromoRules.ftl Tue May 4 21:19:41 2010 @@ -280,6 +280,18 @@ under the License. ${uiLabelMap.ProductItemId}: <input type="text" size="15" name="productId" value="${(productPromoAction.productId)?if_exists}" /> ${uiLabelMap.PartyParty}: <input type="text" size="10" name="partyId" value="${(productPromoAction.partyId)?if_exists}" /> ${uiLabelMap.ServiceName}: <input type="text" size="20" name="serviceName" value="${(productPromoAction.serviceName)?if_exists}" /> + ${uiLabelMap.UseCartQuantity}: + <select name="useCartQuantity"> + <#if (productPromoAction.useCartQuantity)?exists> + <#assign productPromoActionCurEnum = productPromoAction.getRelatedOneCache("ActionEnumeration")> + <option value="${(productPromoAction.useCartQuantity)?if_exists}"><#if (productPromoAction.useCartQuantity.equal("Y"))>${uiLabelMap.CommonY}<#else>${uiLabelMap.CommonN}</#if></option> + <option value="${(productPromoAction.useCartQuantity)?if_exists}"> </option> + <#else> + <option value=""> </option> + </#if> + <option value="N">${uiLabelMap.CommonN}</option> + <option value="Y">${uiLabelMap.CommonY}</option> + </select> <input type="submit" value="${uiLabelMap.CommonUpdate}" /> </form> </div> @@ -394,6 +406,11 @@ under the License. ${uiLabelMap.ProductItemId}: <input type="text" size="15" name="productId" /> ${uiLabelMap.PartyParty}: <input type="text" size="10" name="partyId" /> ${uiLabelMap.ServiceName}: <input type="text" size="20" name="serviceName" /> + ${uiLabelMap.UseCartQuantity}: + <select name="useCartQuantity"> + <option value="N">${uiLabelMap.CommonN}</option> + <option value="Y">${uiLabelMap.CommonY}</option> + </select> <input type="submit" value="${uiLabelMap.CommonCreate}" /> </form> </div> |
Free forum by Nabble | Edit this page |