Beispiel #1
0
        ParcelCosting MakeParcelCosting(IParcel parcel, ParcelCostingParameters costParams)
        {
            var result = new ParcelCosting {
                Parcel      = parcel,
                CostingType = costParams.CostingType,
                ParcelCost  = costParams.BaseCost
            };

            var overweight = parcel.Weight - costParams.MaxWeight;

            if (overweight > 0)
            {
                result.ParcelCost += Math.Ceiling(overweight) * costParams.CostPerExtraKg;
            }

            return(result);
        }
Beispiel #2
0
        public IOrderCosting CalculateCosts(IOrder order)
        {
            var parcelCosts = order?.Parcels?.Select(CalculateParcelCost).ToList() ?? new List <ParcelCosting>();

            parcelCosts.AddRange(CalculateBestDiscounts(parcelCosts));

            if (order?.SpeedyShipping == true)
            {
                var speedyCost = new ParcelCosting {
                    ParcelCost  = parcelCosts.Sum(p => p.ParcelCost),
                    CostingType = ParcelCostingType.SpeedyShipping
                };
                parcelCosts.Add(speedyCost);
            }

            return(new OrderCosting {
                TotalCost = parcelCosts.Sum(p => p.ParcelCost),
                ParcelCosts = parcelCosts
            });
        }