1 package com.dotmarketing.util; 2 3 import java.util.Vector ; 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 19 public class CalculateShippingAndHandling { 20 21 27 public static float calculateShippingAndHandling(ShoppingCart shoppingCart,int serviceType, String Ship_To_Zip) 28 { 29 float amount = 0; 30 31 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(!freeShipping) 44 { 45 float handling = calculateHandling(shoppingCart); 47 float shipping = calculateShipping(shoppingCart, serviceType, Ship_To_Zip); 49 amount = handling + shipping; 50 amount = Math.round(amount * 100) / (float) 100; 51 } 52 return amount; 54 } 55 56 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 84 public static float calculateShipping(ShoppingCart shoppingCart,int serviceType, String 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 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 xmlRequest = generateXML(serviceTypeStr,packageWeight,Ship_To_Zip); 111 112 113 114 String response = conn.contactService("Rate",xmlRequest); 115 System.out.println("xml Response:"+response); 116 117 Vector <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 e) { 125 e.printStackTrace(); 126 } 127 } 128 return amount; 129 } 130 131 public static StringBuffer generateXML(String ServiceType, float packageWeight, String Ship_To_Zip){ 132 133 StringBuffer xml = new StringBuffer (); 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
|