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); }
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 }); }