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);
             


Reply via email to