KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dotmarketing > util > CalculateShippingAndHandling


1 package com.dotmarketing.util;
2
3 import java.util.Vector JavaDoc;
4
5 import com.dotmarketing.util.Config;
6 import com.dotmarketing.cms.product.model.Holder;
7 import com.dotmarketing.cms.product.model.ShoppingCart;
8 import com.dotmarketing.portlets.discountcode.model.DiscountCode;
9 import com.dotmarketing.portlets.product.model.ProductFormat;
10 import com.dotmarketing.util.ups.UPSConnections;
11 import com.dotmarketing.util.ups.UPSResponseObject;
12 import com.dotmarketing.util.ups.UPSResponseParser;
13
14 /**
15  *
16  * @author Oswaldo Gallango
17  *
18  */

19 public class CalculateShippingAndHandling {
20     
21     /**
22      * This Method get the total cost amount of shipping and handling
23      * in a shopping car
24      * @param shoppingCart
25      * @return the total amout to pay in shipping and handling
26      */

27     public static float calculateShippingAndHandling(ShoppingCart shoppingCart,int serviceType, String JavaDoc Ship_To_Zip)
28     {
29         float amount = 0;
30         
31         //Determine is the user has a free shipping discount
32
boolean freeShipping = false;
33         for(DiscountCode discount : shoppingCart.getDiscountCodes())
34         {
35             if(discount.getFreeShipping())
36             {
37                 freeShipping = true;
38                 break;
39             }
40         }
41         
42         //if not free shipping, calculate the shipping and hanndling amount
43
if(!freeShipping)
44         {
45             //Handling Amount
46
float handling = calculateHandling(shoppingCart);
47             //Shipping Amount
48
float shipping = calculateShipping(shoppingCart, serviceType, Ship_To_Zip);
49             amount = handling + shipping;
50             amount = Math.round(amount * 100) / (float) 100;
51         }
52         //Total Amount
53
return amount;
54     }
55     
56     /**
57      * This Method calculate the handling cost of a shopping car
58      * @param shoppingCart
59      * @return the amount cost of the handling
60      */

61     public static float calculateHandling(ShoppingCart shoppingCart){
62         
63         float amount=0;
64         
65         int itemsQuantity = 0;
66         
67         for(Holder item : shoppingCart.getHolders()){
68             
69             itemsQuantity = itemsQuantity + item.getQuantity();
70         }
71         
72         amount = (Config.getFloatProperty("HANDLING_ITEM_COST") * itemsQuantity) + Config.getFloatProperty("HANDLING_BOXING_COST");
73         
74         return amount;
75     }
76     
77     /**
78      *
79      * @param shoppingCart (product to send)
80      * @param serviceType (Ground, Next Day, Priority)
81      * @param Ship_To_Zip Shipping zip code
82      * @return
83      */

84     public static float calculateShipping(ShoppingCart shoppingCart,int serviceType, String JavaDoc Ship_To_Zip){
85         
86         float amount=0;
87         
88         float packageWeight = 0;
89         for(Holder item : shoppingCart.getHolders()){
90             
91             ProductFormat format = (ProductFormat) item.getFormat();
92             packageWeight = packageWeight + (item.getQuantity() * format.getWeight());
93         }
94         
95         if(packageWeight > 0) {
96             try {
97                 
98                 UPSConnections conn = new UPSConnections();
99                 
100                 String JavaDoc serviceTypeStr = "";
101                 if(serviceType == Config.getIntProperty("SHIPPING_GROUND")){
102                     serviceTypeStr = Config.getStringProperty("UPS_GROUND");
103                 }else if(serviceType == Config.getIntProperty("SHIPPING_PRIORITY")){
104                     serviceTypeStr = Config.getStringProperty("UPS_PRIORITY");
105                 }else{
106                     serviceTypeStr = Config.getStringProperty("UPS_NEXT_DAY");
107                 }
108     
109                 
110                 StringBuffer JavaDoc xmlRequest = generateXML(serviceTypeStr,packageWeight,Ship_To_Zip);
111                 
112                 
113                 
114                 String JavaDoc response = conn.contactService("Rate",xmlRequest);
115                 System.out.println("xml Response:"+response);
116                 
117                 Vector JavaDoc<UPSResponseObject> values = UPSResponseParser.getObjectShippingPrices(response);
118                 for(UPSResponseObject obj : values){
119                     if(obj.getStatusCode().equals("1")){
120                         amount = amount + Float.parseFloat(obj.getTotalValue());
121                     }
122                 }
123                 
124             } catch (Exception JavaDoc e) {
125                 e.printStackTrace();
126             }
127         }
128         return amount;
129     }
130     
131     public static StringBuffer JavaDoc generateXML(String JavaDoc ServiceType, float packageWeight, String JavaDoc Ship_To_Zip){
132         
133         StringBuffer JavaDoc xml = new StringBuffer JavaDoc();
134         
135         xml.append("<?xml version=\"1.0\"?>");
136         xml.append("<RatingServiceSelectionRequest xml:lang=\"en-US\">");
137         xml.append("<Request>");
138         xml.append("<TransactionReference>");
139         xml.append("<CustomerContext>Bare Bones Rate Request</CustomerContext>");
140         xml.append("<XpciVersion>1.0001</XpciVersion>");
141         xml.append("</TransactionReference>");
142         xml.append("<RequestAction>Rate</RequestAction>");
143         xml.append("<RequestOption>Rate</RequestOption>");
144         xml.append("</Request>");
145         xml.append("<PickupType>");
146         xml.append("<Code>"+Config.getStringProperty("UPS_STUDER_PICKUP_TYPE")+"</Code>");
147         xml.append("</PickupType>");
148         xml.append("<Shipment>");
149         xml.append("<Shipper>");
150         xml.append("<Address>");
151         xml.append("<PostalCode>"+Config.getStringProperty("UPS_STUDER_POSTAL_CODE")+"</PostalCode>");
152         xml.append("<CountryCode>"+Config.getStringProperty("UPS_STUDER_COUNTRY")+"</CountryCode>");
153         xml.append("</Address>");
154         xml.append("</Shipper>");
155         xml.append("<ShipTo>");
156         xml.append("<Address>");
157         xml.append("<PostalCode>"+Ship_To_Zip.trim()+"</PostalCode>");
158         xml.append("<CountryCode>"+Config.getStringProperty("UPS_STUDER_COUNTRY")+"</CountryCode>");
159         xml.append("</Address>");
160         xml.append("</ShipTo>");
161         xml.append("<ShipFrom>");
162         xml.append("<Address>");
163         xml.append("<PostalCode>"+Config.getStringProperty("UPS_STUDER_POSTAL_CODE")+"</PostalCode>");
164         xml.append("<CountryCode>"+Config.getStringProperty("UPS_STUDER_COUNTRY")+"</CountryCode>");
165         xml.append("</Address>");
166         xml.append("</ShipFrom>");
167         xml.append("<Service>");
168         xml.append("<Code>"+ServiceType+"</Code>");
169         xml.append("</Service>");
170         xml.append("<Package>");
171         xml.append("<PackagingType>");
172         xml.append("<Code>"+Config.getStringProperty("UPS_STUDER_PACKAGE_TYPE")+"</Code>");
173         xml.append("</PackagingType>");
174         xml.append("<PackageWeight>");
175         xml.append("<UnitOfMeasurement>");
176         xml.append("<Code>"+Config.getStringProperty("UPS_STUDER_MEASURE_UNIT")+"</Code>");
177         xml.append("</UnitOfMeasurement>");
178         xml.append("<Weight>"+packageWeight+"</Weight>");
179         xml.append("</PackageWeight>");
180         xml.append("</Package>");
181         xml.append("</Shipment>");
182         xml.append("</RatingServiceSelectionRequest>");
183         
184         return xml;
185     }
186     
187 }
188
Popular Tags