Author: jacopoc Date: Mon Sep 11 04:29:44 2006 New Revision: 442180 URL: http://svn.apache.org/viewvc?view=rev&rev=442180 Log: Implemented support for "always drop-ship" products: if such a product is added to a sales cart, it is automatically assigned into a ship group with the supplier set (if needed, the ship group is also created).
Modified: incubator/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java incubator/ofbiz/trunk/applications/order/webapp/ordermgr/entry/optionsettings.ftl incubator/ofbiz/trunk/applications/product/servicedef/services_view.xml incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/supplier/SupplierProductServices.java Modified: incubator/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java?view=diff&rev=442180&r1=442179&r2=442180 ============================================================================== --- incubator/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java (original) +++ incubator/ofbiz/trunk/applications/order/src/org/ofbiz/order/shoppingcart/ShoppingCartItem.java Mon Sep 11 04:29:44 2006 @@ -893,7 +893,59 @@ // set the item ship group if (resetShipGroup) { cart.clearItemShipInfo(this); - cart.setItemShipGroupQty(this, quantity, 0); + int shipGroupIndex = -1; + if ("PURCHASE_ORDER".equals(cart.getOrderType())) { + shipGroupIndex = 0; + } else { + if (_product != null && "PRODRQM_DS".equals(_product.getString("requirementMethodEnumId"))) { + // this is a drop-ship only product: we need a ship group with supplierPartyId set + Map supplierProductsResult = null; + try { + supplierProductsResult = dispatcher.runSync("getSuppliersForProduct", UtilMisc.toMap("productId", _product.getString("productId"), + "quantity", new Double(quantity), + "currencyUomId", cart.getCurrency(), + "canDropShip", "Y", + "userLogin", cart.getUserLogin())); + List productSuppliers = (List)supplierProductsResult.get("supplierProducts"); + GenericValue supplierProduct = EntityUtil.getFirst(productSuppliers); + if (supplierProduct != null) { + String supplierPartyId = supplierProduct.getString("partyId"); + List shipGroups = cart.getShipGroups(); + for(int i = 0; i < shipGroups.size(); i++) { + ShoppingCart.CartShipInfo csi = (ShoppingCart.CartShipInfo)shipGroups.get(i); + if (supplierPartyId.equals(csi.getSupplierPartyId())) { + shipGroupIndex = i; + break; + } + } + if (shipGroupIndex == -1) { + // create a new ship group + shipGroupIndex = cart.addShipInfo(); + cart.setSupplierPartyId(shipGroupIndex, supplierPartyId); + } + } + } catch (Exception e) { + Debug.logWarning("Error calling getSuppliersForProduct service, result is: " + supplierProductsResult, module); + } + } + // TODO: implement auto drop-ship on low qoh + + if (shipGroupIndex == -1) { + List shipGroups = cart.getShipGroups(); + for(int i = 0; i < shipGroups.size(); i++) { + ShoppingCart.CartShipInfo csi = (ShoppingCart.CartShipInfo)shipGroups.get(i); + if (csi.getSupplierPartyId() == null) { + shipGroupIndex = i; + break; + } + } + if (shipGroupIndex == -1) { + // create a new ship group + shipGroupIndex = cart.addShipInfo(); + } + } + } + cart.setItemShipGroupQty(this, quantity, shipGroupIndex); } } Modified: incubator/ofbiz/trunk/applications/order/webapp/ordermgr/entry/optionsettings.ftl URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/order/webapp/ordermgr/entry/optionsettings.ftl?view=diff&rev=442180&r1=442179&r2=442180 ============================================================================== --- incubator/ofbiz/trunk/applications/order/webapp/ordermgr/entry/optionsettings.ftl (original) +++ incubator/ofbiz/trunk/applications/order/webapp/ordermgr/entry/optionsettings.ftl Mon Sep 11 04:29:44 2006 @@ -31,11 +31,13 @@ <#if cart.getShipmentMethodTypeId(shipGroupIndex)?exists && cart.getCarrierPartyId(shipGroupIndex)?exists> <#assign chosenShippingMethod = cart.getShipmentMethodTypeId(shipGroupIndex) + '@' + cart.getCarrierPartyId(shipGroupIndex)> </#if> +<#assign supplierPartyId = cart.getSupplierPartyId(shipGroupIndex)?if_exists> +<#assign supplier = delegator.findByPrimaryKey("PartyGroup", Static["org.ofbiz.base.util.UtilMisc"].toMap("partyId", supplierPartyId))?if_exists /> <hr class="sepbar"/> <table width="100%" cellpadding="1" border="0" cellpadding="0" cellspacing="0"> <tr> <td colspan="2"> - <div class="head1"><b>${uiLabelMap.OrderShipGroup} # ${currIndex}</b></div> + <div class="head1"><b>${uiLabelMap.OrderShipGroup} # ${currIndex}</b><#if supplier?has_content> - ${supplier.description?default(supplier.partyId)}</#if></div> </td> </tr> Modified: incubator/ofbiz/trunk/applications/product/servicedef/services_view.xml URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/product/servicedef/services_view.xml?view=diff&rev=442180&r1=442179&r2=442180 ============================================================================== --- incubator/ofbiz/trunk/applications/product/servicedef/services_view.xml (original) +++ incubator/ofbiz/trunk/applications/product/servicedef/services_view.xml Mon Sep 11 04:29:44 2006 @@ -85,6 +85,7 @@ <attribute name="partyId" type="String" mode="IN" optional="true"/> <attribute name="currencyUomId" type="String" mode="IN" optional="true"/> <attribute name="quantity" type="Double" mode="IN" optional="true"/> + <attribute name="canDropShip" type="String" mode="IN" optional="true"/> <attribute name="supplierProducts" type="java.util.List" mode="OUT" optional="false"/> </service> <service name="convertFeaturesForSupplier" engine="java" Modified: incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/supplier/SupplierProductServices.java URL: http://svn.apache.org/viewvc/incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/supplier/SupplierProductServices.java?view=diff&rev=442180&r1=442179&r2=442180 ============================================================================== --- incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/supplier/SupplierProductServices.java (original) +++ incubator/ofbiz/trunk/applications/product/src/org/ofbiz/product/supplier/SupplierProductServices.java Mon Sep 11 04:29:44 2006 @@ -62,6 +62,7 @@ String partyId = (String) context.get("partyId"); String currencyUomId = (String) context.get("currencyUomId"); Double quantity =(Double) context.get("quantity"); + String canDropShip = (String) context.get("canDropShip"); try { product = delegator.findByPrimaryKeyCache("Product", UtilMisc.toMap("productId", productId)); if (product == null) { @@ -95,7 +96,12 @@ //minimumOrderQuantity supplierProducts = EntityUtil.filterByCondition(supplierProducts, new EntityExpr("minimumOrderQuantity", EntityOperator.LESS_THAN_EQUAL_TO, quantity)); } - + + // filter the list down by the canDropShip if one is provided + if (canDropShip != null) { + supplierProducts = EntityUtil.filterByAnd(supplierProducts, UtilMisc.toMap("canDropShip", canDropShip)); + } + // filter the list down again by date before returning it supplierProducts = EntityUtil.filterByDate(supplierProducts, UtilDateTime.nowTimestamp(), "availableFromDate", "availableThruDate", true);