svn commit: r514748 - in /ofbiz/trunk/applications/product: servicedef/services_shipment_ups.xml src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r514748 - in /ofbiz/trunk/applications/product: servicedef/services_shipment_ups.xml src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java

sichen
Author: sichen
Date: Mon Mar  5 09:50:49 2007
New Revision: 514748

URL: http://svn.apache.org/viewvc?view=rev&rev=514748
Log:
Passing a list of package weights to UPS rate inquire services will override the splitting of packages and calculation of package weights via shippableItemInfo

Modified:
    ofbiz/trunk/applications/product/servicedef/services_shipment_ups.xml
    ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java

Modified: ofbiz/trunk/applications/product/servicedef/services_shipment_ups.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment_ups.xml?view=diff&rev=514748&r1=514747&r2=514748
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_shipment_ups.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_shipment_ups.xml Mon Mar  5 09:50:49 2007
@@ -31,6 +31,8 @@
                 will return a Map of serviceCode -> rate</description>
         <implements service="calcShipmentEstimateInterface"/>
         <attribute name="upsRateInquireMode" type="String" mode="IN" optional="true"/>
+        <!-- Passing in a list of package weights will override the splitting of packages and calculation of package weights by item -->
+        <attribute name="packageWeights" type="List" mode="IN" optional="true"/>
         <attribute name="upsRateCodeMap" type="Map" mode="OUT" optional="false"/>
     </service>
 
@@ -68,6 +70,8 @@
         <attribute name="carrierPartyId" type="String" mode="IN" optional="false"/>
         <attribute name="carrierRoleTypeId" type="String" mode="IN" optional="false"/>
         <attribute name="productStoreId" type="String" mode="IN" optional="false"/>
+        <!-- Passing in a list of package weights will override the splitting of packages and calculation of package weights by item -->
+        <attribute name="packageWeights" type="List" mode="IN" optional="true"/>
         <attribute name="shippableItemInfo" type="List" mode="IN" optional="false"/>
         <attribute name="shippableWeight" type="Double" mode="IN" optional="false"/>
         <attribute name="shippableQuantity" type="Double" mode="IN" optional="false"/>

Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java?view=diff&rev=514748&r1=514747&r2=514748
==============================================================================
--- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java (original)
+++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/thirdparty/ups/UpsServices.java Mon Mar  5 09:50:49 2007
@@ -1348,6 +1348,7 @@
         String shipmentMethodTypeId = (String) context.get("shipmentMethodTypeId");
         String shippingContactMechId = (String) context.get("shippingContactMechId");
 
+        List packageWeights = (List) context.get("packageWeights");
         List shippableItemInfo = (List) context.get("shippableItemInfo");
         Double shippableTotal = (Double) context.get("shippableTotal");
         Double shippableQuantity = (Double) context.get("shippableQuantity");
@@ -1481,7 +1482,16 @@
             maxWeight = 99;
         }
 
-        splitEstimatePackages(rateRequestDoc, shipmentElement, shippableItemInfo, maxWeight);
+        // Passing in a list of package weights overrides the calculation of same via shippableItemInfo
+        if (UtilValidate.isEmpty(packageWeights)) {
+            splitEstimatePackages(rateRequestDoc, shipmentElement, shippableItemInfo, maxWeight);
+        } else {
+            Iterator i = packageWeights.iterator();
+            while (i.hasNext()) {
+                Double packageWeight = (Double) i.next();
+                addPackageElement(rateRequestDoc, shipmentElement, packageWeight.doubleValue());
+            }
+        }
 
         // service options
         UtilXml.addChildElement(shipmentElement, "ShipmentServiceOptions", rateRequestDoc);
@@ -1547,18 +1557,20 @@
         Iterator i = packages.iterator();
         while (i.hasNext()) {
             Map packageMap = (Map) i.next();
-            double packageWeight = calcPackageWeight(packageMap, shippableItemInfo, 0);          
-
-            // package info
-            Element packageElement = UtilXml.addChildElement(shipmentElement, "Package", requestDoc);
-            Element packagingTypeElement = UtilXml.addChildElement(packageElement, "PackagingType", requestDoc);
-            UtilXml.addChildElementValue(packagingTypeElement, "Code", "00", requestDoc);
-            UtilXml.addChildElementValue(packagingTypeElement, "Description", "Unknown PackagingType", requestDoc);
-            UtilXml.addChildElementValue(packageElement, "Description", "Package Description", requestDoc);
-            Element packageWeightElement = UtilXml.addChildElement(packageElement, "PackageWeight", requestDoc);
-            UtilXml.addChildElementValue(packageWeightElement, "Weight", Double.toString(packageWeight), requestDoc);
+            double packageWeight = calcPackageWeight(packageMap, shippableItemInfo, 0);    
+            addPackageElement(requestDoc, shipmentElement, packageWeight);
         }
     }
+            
+    private static void addPackageElement(Document requestDoc, Element shipmentElement, double packageWeight) {
+        Element packageElement = UtilXml.addChildElement(shipmentElement, "Package", requestDoc);
+        Element packagingTypeElement = UtilXml.addChildElement(packageElement, "PackagingType", requestDoc);
+        UtilXml.addChildElementValue(packagingTypeElement, "Code", "00", requestDoc);
+        UtilXml.addChildElementValue(packagingTypeElement, "Description", "Unknown PackagingType", requestDoc);
+        UtilXml.addChildElementValue(packageElement, "Description", "Package Description", requestDoc);
+        Element packageWeightElement = UtilXml.addChildElement(packageElement, "PackageWeight", requestDoc);
+        UtilXml.addChildElementValue(packageWeightElement, "Weight", Double.toString(packageWeight), requestDoc);
+    }
 
     private static List getPackageSplit(List shippableItemInfo, double maxWeight) {
         // create the package list w/ the first pacakge
@@ -1844,6 +1856,7 @@
        // String shippingContactMechId = (String) context.get("shippingContactMechId");
         String shippingPostalCode = (String) context.get("shippingPostalCode");
         String shippingCountryCode = (String) context.get("shippingCountryCode");
+        List packageWeights = (List) context.get("packageWeights");
         List shippableItemInfo = (List) context.get("shippableItemInfo");
         Double shippableTotal = (Double) context.get("shippableTotal");
         Double shippableQuantity = (Double) context.get("shippableQuantity");
@@ -1985,7 +1998,16 @@
             maxWeight = 99;
         }
         
-        splitEstimatePackages(rateRequestDoc, shipmentElement, shippableItemInfo, maxWeight);
+        // Passing in a list of package weights overrides the calculation of same via shippableItemInfo
+        if (UtilValidate.isEmpty(packageWeights)) {
+            splitEstimatePackages(rateRequestDoc, shipmentElement, shippableItemInfo, maxWeight);
+        } else {
+            Iterator i = packageWeights.iterator();
+            while (i.hasNext()) {
+                Double packageWeight = (Double) i.next();
+                addPackageElement(rateRequestDoc, shipmentElement, packageWeight.doubleValue());
+            }
+        }
 
         // service options
         UtilXml.addChildElement(shipmentElement, "ShipmentServiceOptions", rateRequestDoc);