public IShippable CloneShippable() { Shippable clone = new Shippable(); clone.BoxValue = this.BoxValue; clone.QuantityOfItemsInBox = this.QuantityOfItemsInBox; clone.BoxWeightType = this.BoxWeightType; clone.BoxWeight = this.BoxWeight; clone.BoxLengthType = this.BoxLengthType; clone.BoxLength = this.BoxLength; clone.BoxWidth = this.BoxWidth; clone.BoxHeight = this.BoxHeight; return clone; }
public IShippable CloneShippable() { Shippable clone = new Shippable(); clone.BoxValue = this.BoxValue; clone.QuantityOfItemsInBox = this.QuantityOfItemsInBox; clone.BoxWeightType = this.BoxWeightType; clone.BoxWeight = this.BoxWeight; clone.BoxLengthType = this.BoxLengthType; clone.BoxLength = this.BoxLength; clone.BoxWidth = this.BoxWidth; clone.BoxHeight = this.BoxHeight; return(clone); }
protected void btnTest_Click(object sender, EventArgs e) { this.SaveData(); var testSettings = new FedExGlobalServiceSettings(); testSettings.AccountNumber = this.AccountNumberField.Text; testSettings.DefaultDropOffType = (DropOffType)int.Parse(this.lstDropOffType.SelectedValue); testSettings.DefaultPackaging = (PackageType)int.Parse(this.lstPackaging.SelectedValue); testSettings.DiagnosticsMode = true; testSettings.ForceResidentialRates = this.chkResidential.Checked; testSettings.MeterNumber = this.MeterNumberField.Text.Trim(); testSettings.UseListRates = this.chkListRates.Checked; testSettings.UserKey = this.KeyField.Text.Trim(); testSettings.UserPassword = this.PasswordField.Text.Trim(); var logger = new MerchantTribe.Web.Logging.TextLogger(); var testSvc = new MerchantTribe.Shipping.FedEx.FedExProvider(testSettings, logger); testSvc.Settings.ServiceCode = int.Parse(this.lstServicesTest.SelectedValue); testSvc.Settings.Packaging = (int)testSettings.DefaultPackaging; var testShipment = new Shipment(); testShipment.DestinationAddress = this.DestinationAddress.GetAsAddress(); testShipment.SourceAddress = this.SourceAddress.GetAsAddress(); var testItem = new Shippable(); testItem.BoxHeight = decimal.Parse(this.TestHeight.Text); testItem.BoxLength = decimal.Parse(this.TestLength.Text); testItem.BoxWidth = decimal.Parse(this.TestWidth.Text); testItem.BoxLengthType = LengthType.Inches; testItem.BoxWeight = decimal.Parse(this.TestWeight.Text); testItem.BoxWeightType = MerchantTribe.Shipping.WeightType.Pounds; testShipment.Items.Add(testItem); StringBuilder sb = new StringBuilder(); sb.Append("Starting Rate Test at " + DateTime.Now + "<br />"); var rates = testSvc.RateShipment(testShipment); foreach (var r in rates) { sb.Append("Rate Found: " + r.EstimatedCost.ToString("C") + " | " + r.DisplayName + " (" + r.ServiceCodes + ", " + r.ServiceId + ")<br />"); } sb.Append("<br />"); sb.Append("LOG:<br />"); foreach (var m in logger.Messages) { sb.Append(m + "<br />"); } sb.Append("Finished Rate Test at " + DateTime.Now); this.litTestOuput.Text = sb.ToString(); }
public List<Shipment> OptimizeSingleGroup(IShipment shipment) { decimal MAXWEIGHT = 70; // Set Max Weight for Ground Services if (this.Settings.ServiceCode == (int)ServiceType.FEDEXGROUND || this.Settings.ServiceCode == (int)ServiceType.GROUNDHOMEDELIVERY) { MAXWEIGHT = 150; } List<Shipment> result = new List<Shipment>(); List<IShippable> itemsToSplit = new List<IShippable>(); foreach (IShippable item in shipment.Items) { if (IsOversized(item)) { Shipment s1 = Shipment.CloneAddressesFromInterface(shipment); s1.Items.Add(item.CloneShippable()); result.Add(s1); } else { itemsToSplit.Add(item); } } IShippable tempPackage = new Shippable(); foreach (IShippable pak in itemsToSplit) { if (MAXWEIGHT - tempPackage.BoxWeight >= pak.BoxWeight) { // add to current box tempPackage.BoxWeight += pak.BoxWeight; tempPackage.QuantityOfItemsInBox += pak.QuantityOfItemsInBox; tempPackage.BoxValue += pak.BoxValue; } else { // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { Shipment s2 = Shipment.CloneAddressesFromInterface(shipment); s2.Items.Add(tempPackage.CloneShippable()); result.Add(s2); tempPackage = new Shippable(); } // create new box if (pak.BoxWeight > MAXWEIGHT) { //Loop to break up > maxWeight Packages int currentItemsInBox = pak.QuantityOfItemsInBox; decimal currentWeight = pak.BoxWeight; while (currentWeight > 0) { if (currentWeight > MAXWEIGHT) { IShippable newP = pak.CloneShippable(); newP.BoxWeight = MAXWEIGHT; if (currentItemsInBox > 0) { currentItemsInBox -= 1; newP.QuantityOfItemsInBox = 1; } Shipment s3 = Shipment.CloneAddressesFromInterface(shipment); s3.Items.Add(newP.CloneShippable()); result.Add(s3); currentWeight = currentWeight - MAXWEIGHT; if (currentWeight < 0) { currentWeight = 0; } } else { // Create a new shippable box IShippable newP = pak.CloneShippable(); newP.BoxWeight = currentWeight; if (currentItemsInBox > 0) { newP.QuantityOfItemsInBox = currentItemsInBox; } Shipment s4 = Shipment.CloneAddressesFromInterface(shipment); s4.Items.Add(newP.CloneShippable()); result.Add(s4); currentWeight = 0; } } } else { tempPackage = pak.CloneShippable(); } } } // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { Shipment s5 = Shipment.CloneAddressesFromInterface(shipment); s5.Items.Add(tempPackage.CloneShippable()); result.Add(s5); tempPackage = new Shippable(); } return result; }
private List<IShippable> OptimizeSingleGroup(IShipment shipment) { const decimal MAXWEIGHT = 70; List<IShippable> result = new List<IShippable>(); List<IShippable> itemsToSplit = new List<IShippable>(); foreach (IShippable item in shipment.Items) { if (IsOversized(item)) { result.Add(item.CloneShippable()); } else { itemsToSplit.Add(item); } } IShippable tempPackage = new Shippable(); foreach (IShippable pak in itemsToSplit) { if (MAXWEIGHT - tempPackage.BoxWeight >= pak.BoxWeight) { // add to current box tempPackage.BoxWeight += pak.BoxWeight; tempPackage.QuantityOfItemsInBox += pak.QuantityOfItemsInBox; tempPackage.BoxValue += pak.BoxValue; } else { // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { result.Add(tempPackage.CloneShippable()); tempPackage = new Shippable(); } // create new box if (pak.BoxWeight > MAXWEIGHT) { //Loop to break up > maxWeight Packages int currentItemsInBox = pak.QuantityOfItemsInBox; decimal currentWeight = pak.BoxWeight; while (currentWeight > 0) { if (currentWeight > MAXWEIGHT) { IShippable newP = pak.CloneShippable(); newP.BoxWeight = MAXWEIGHT; if (currentItemsInBox > 0) { currentItemsInBox -= 1; newP.QuantityOfItemsInBox = 1; } result.Add(newP); currentWeight = currentWeight - MAXWEIGHT; if (currentWeight < 0) { currentWeight = 0; } } else { // Create a new shippable box IShippable newP = pak.CloneShippable(); newP.BoxWeight = currentWeight; if (currentItemsInBox > 0) { newP.QuantityOfItemsInBox = currentItemsInBox; } result.Add(newP); currentWeight = 0; } } } else { tempPackage = pak.CloneShippable(); } } } // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { result.Add(tempPackage.CloneShippable()); tempPackage = new Shippable(); } return result; }
public List<IShippable> OptimizePackagesToMaxWeight(IShipment shipment) { List<IShippable> result = new List<IShippable>(); List<IShippable> itemsToSplit = new List<IShippable>(); // drop off oversize items right away foreach (IShippable item in shipment.Items) { if (IsOversized(item)) { result.Add(item.CloneShippable()); } else { itemsToSplit.Add(item); } } IShippable tempPackage = new Shippable(); foreach (IShippable pak in itemsToSplit) { if (_MaxWeight - tempPackage.BoxWeight >= pak.BoxWeight) { // add to current box tempPackage.BoxWeight += pak.BoxWeight; tempPackage.QuantityOfItemsInBox += pak.QuantityOfItemsInBox; tempPackage.BoxValue += pak.BoxValue; } else { // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { result.Add(tempPackage.CloneShippable()); tempPackage = new Shippable(); } // create new box if (pak.BoxWeight > _MaxWeight) { //Loop to break up > maxWeight Packages int currentItemsInBox = pak.QuantityOfItemsInBox; decimal currentWeight = pak.BoxWeight; while (currentWeight > 0) { if (currentWeight > _MaxWeight) { IShippable newP = pak.CloneShippable(); newP.BoxWeight = _MaxWeight; if (currentItemsInBox > 0) { currentItemsInBox -= 1; newP.QuantityOfItemsInBox = 1; } result.Add(newP); currentWeight = currentWeight - _MaxWeight; if (currentWeight < 0) { currentWeight = 0; } } else { // Create a new shippable box IShippable newP = pak.CloneShippable(); newP.BoxWeight = currentWeight; if (currentItemsInBox > 0) { newP.QuantityOfItemsInBox = currentItemsInBox; } result.Add(newP); currentWeight = 0; } } } else { tempPackage = pak.CloneShippable(); } } } // Save the temp package if it has items if (tempPackage.BoxWeight > 0 || tempPackage.QuantityOfItemsInBox > 0) { result.Add(tempPackage.CloneShippable()); tempPackage = new Shippable(); } return result; }