// Misc. public List<Shipping.ShippingGroup> GetShippingGroups() { List<Shipping.ShippingGroup> result = new List<Shipping.ShippingGroup>(); foreach (LineItem item in this.Items) { // skip non-shipping items; if (item.ShippingSchedule == -1) continue; Shipping.ShippingGroup packageToAddTo = null; if (!item.ShipSeparately) { if (item.ShipFromMode == Shipping.ShippingMode.ShipFromManufacturer) { foreach (Shipping.ShippingGroup package in result) { if ((package.ShippingMode == Shipping.ShippingMode.ShipFromManufacturer) & (!package.ShipSeperately)) { if (package.ShipId == item.ShipFromNotificationId) { packageToAddTo = package; break; } } } } else if (item.ShipFromMode == Shipping.ShippingMode.ShipFromSite) { foreach (Shipping.ShippingGroup package in result) { if ((package.ShippingMode == Shipping.ShippingMode.ShipFromSite) & (!package.ShipSeperately)) { packageToAddTo = package; break; } } } else if (item.ShipFromMode == Shipping.ShippingMode.ShipFromVendor) { foreach (Shipping.ShippingGroup package in result) { if ((package.ShippingMode == Shipping.ShippingMode.ShipFromVendor) & (!package.ShipSeperately)) { if (package.ShipId == item.ShipFromNotificationId) { packageToAddTo = package; break; } } } } else { //Throw New ApplicationException("Unrecognized shipping mode.") // Assume ship from store if no other mode located foreach (Shipping.ShippingGroup package in result) { if ((package.ShippingMode == Shipping.ShippingMode.ShipFromSite) & (!package.ShipSeperately)) { packageToAddTo = package; break; } } } } if ((packageToAddTo == null)) { packageToAddTo = new Shipping.ShippingGroup(); packageToAddTo.DestinationAddress = this.ShippingAddress; packageToAddTo.ShippingMode = item.ShipFromMode; packageToAddTo.SourceAddress = item.ShipFromAddress; packageToAddTo.ShipId = item.ShipFromNotificationId; packageToAddTo.ShipSeperately = item.ShipSeparately; if ((!item.ShipSeparately)) { result.Add(packageToAddTo); } } if ((item.ShipSeparately)) { if (((item.Quantity - item.QuantityShipped) > 1)) { for (int i = 0; i <= (int)(item.Quantity - item.QuantityShipped) - 1; i++) { Orders.LineItem newLineItem = item.Clone(true); newLineItem.Quantity = 1; Shipping.ShippingGroup newPackage = packageToAddTo.Clone(false); newPackage.Items.Add(newLineItem); result.Add(newPackage); } } else { packageToAddTo.Items.Add(item); result.Add(packageToAddTo); } } else { packageToAddTo.Items.Add(item); } } return result; }
public override void GenerateDimensions(Shipping.ShippingGroup @group) { if (@group.Items != null) { decimal longestDimension = 0; decimal totalVolume = 0; @group.Length = 0; @group.Weight = 0; @group.Height = 0; @group.Width = 0; bool dimensionsSet = false; if (@group.Items.Count == 1) { if (@group.Items[0].Quantity == 1) { @group.Length = @group.Items[0].ProductShippingLength; @group.Height = @group.Items[0].ProductShippingHeight; @group.Width = @group.Items[0].ProductShippingWidth; @group.Weight = @group.Items[0].GetTotalWeight(); dimensionsSet = true; } } if (!dimensionsSet) { for (int i = 0; i <= @group.Items.Count - 1; i++) { if (@group.Items[i].ProductShippingLength > longestDimension) { longestDimension = @group.Items[i].ProductShippingLength; } if (@group.Items[i].ProductShippingWidth > longestDimension) { longestDimension = @group.Items[i].ProductShippingWidth; } if ((@group.Items[i].ProductShippingHeight * (@group.Items[i].Quantity - @group.Items[i].QuantityShipped)) > longestDimension) { longestDimension = (@group.Items[i].ProductShippingHeight * (@group.Items[i].Quantity - @group.Items[i].QuantityShipped)); } totalVolume += (@group.Items[i].Quantity - @group.Items[i].QuantityShipped) * (@group.Items[i].ProductShippingLength * @group.Items[i].ProductShippingWidth * @group.Items[i].ProductShippingHeight); @group.Weight += @group.Items[i].GetTotalWeight(); } //Estimate Package Size based on Volume @group.Length = longestDimension; if ((longestDimension > 0) & (totalVolume > 0)) { @group.Width = (decimal)Math.Sqrt((double)(totalVolume / longestDimension)); } @group.Height = @group.Width; } if (@group.Width < 1) { @group.Width = 1; } if (@group.Height < 1) { @group.Height = 1; } if (@group.Length < 1) { @group.Length = 1; } } }