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


Reply via email to