コード例 #1
0
ファイル: Order.cs プロジェクト: NightOwl888/MerchantTribe
        // 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;
        }
コード例 #2
0
        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;
                }
            }
        }