public CallResult <List <ShippingMethodViewModel> > GetShippingOptionsModel(IUnitOfWork db, ITime time, ILogService log, IShipmentApi rateProvider, IWeightService weightService, IShippingService shippingService, IList <OrderItemRateInfo> orderItems) { var result = new CallResult <List <ShippingMethodViewModel> >(); var fromAddress = FromAddress.GetAddressDto(); var toAddress = ToAddress.GetAddressDto(); if (AddressHelper.IsEmpty(fromAddress) || AddressHelper.IsEmpty(toAddress)) { result.Status = CallStatus.Fail; result.Message = "Empty from/to address"; } result = GetShippingOptionsWithRate(db, log, time, rateProvider, shippingService, fromAddress, toAddress, time.GetAppNowTime(), WeightLb ?? 0, (decimal)(WeightOz ?? 0), 0, new OrderRateInfo() { Items = orderItems, }); return(result); }
public CallResult <List <ShippingMethodViewModel> > GetShippingOptionsModel(IUnitOfWork db, ITime time, ILogService log, IShipmentApi rateProvider, IShippingService shippingService, IWeightService weightService) { var result = new CallResult <List <ShippingMethodViewModel> >(); if (String.IsNullOrEmpty(OrderID)) { result.Status = CallStatus.Fail; result.Message = "Empty Order Id"; return(result); } var fromAddress = FromAddress.GetAddressDto(); var toAddress = ToAddress.GetAddressDto(); if (AddressHelper.IsEmpty(fromAddress) || AddressHelper.IsEmpty(toAddress)) { result.Status = CallStatus.Fail; result.Message = "Empty from/to address"; } var orders = db.ItemOrderMappings.GetFilteredOrdersWithItems(weightService, new OrderSearchFilter() { Market = MarketType.None, EqualOrderNumber = OrderID, IgnoreBatchFilter = true, IncludeNotify = false, UnmaskReferenceStyles = false, IncludeSourceItems = true, }); if (!orders.Any()) { result.Status = CallStatus.Fail; result.Message = "Cannot find order Id"; return(result); } //NOTE: no need to use Items from model, we always buy label for all items, only needs a custom weight var orderItems = OrderHelper.BuildAndGroupOrderItems(orders.SelectMany(o => o.Items).ToList()); orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems); var sourceOrderItems = OrderHelper.BuildAndGroupOrderItems(orders.SelectMany(o => o.SourceItems).ToList()); sourceOrderItems = OrderHelper.GroupBySourceItemOrderId(sourceOrderItems); var shipDate = db.Dates.GetOrderShippingDate(null); var mainOrder = orders.FirstOrDefault(); result = MailViewModel.GetShippingOptionsWithRate(db, log, time, rateProvider, shippingService, fromAddress, toAddress, shipDate, WeightLb ?? 0, (decimal)(WeightOz ?? 0), new ItemPackageDTO() { PackageLength = PackageLength, PackageWidth = PackageWidth, PackageHeight = PackageHeight, }, 0, new OrderRateInfo() { OrderNumber = mainOrder.OrderId, Items = orderItems, SourceItems = sourceOrderItems, EstimatedShipDate = ShippingUtils.AlignMarketDateByEstDayEnd(mainOrder.LatestShipDate, (MarketType)mainOrder.Market), TotalPrice = orders.Sum(o => o.TotalPrice), Currency = mainOrder.TotalPriceCurrency, }); return(result); }