protected virtual AddressViewModel GetBillingAddressViewModel(CreateOrderDetailViewModelParam param) { var validPayment = param.Order.Cart.Payments.Where(x => !x.IsVoided()).FirstOrDefault(); var payment = validPayment ?? param.Order.Cart.Payments.FirstOrDefault(); return(payment == null ? null : CartViewModelFactory.GetAddressViewModel(payment.BillingAddress, param.CultureInfo)); }
protected virtual void MapAdditionalFees(OrderDetailViewModel viewModel, CreateOrderDetailViewModelParam param) { CartViewModelFactory.MapShipmentsAdditionalFees(GetActiveShipments(param.Order), viewModel.OrderSummary, param.CultureInfo); var allLineItems = viewModel.Shipments.SelectMany(x => x.LineItems).ToList(); viewModel.OrderSummary.AdditionalFeeSummaryList = CartViewModelFactory.GetAdditionalFeesSummary(allLineItems, param.CultureInfo); }
protected virtual string GetOrderStatusDisplayName(CreateOrderDetailViewModelParam param) { return(LocalizationProvider.GetLocalizedString(new GetLocalizedParam { Category = "General", Key = $"L_OrderStatus_{param.Order.OrderStatus}", CultureInfo = param.CultureInfo })); }
protected virtual List <OrderShipmentDetailViewModel> GetShipmentViewModels(CreateOrderDetailViewModelParam param) { var shipmentVms = new List <OrderShipmentDetailViewModel>(); foreach (var shipment in GetActiveShipments(param.Order)) { var shipmentVm = GetOrderShipmentDetailViewModel(shipment, param); shipmentVms.Add(shipmentVm); } return(shipmentVms); }
protected virtual AddressViewModel GetShippingAddressViewModel(CreateOrderDetailViewModelParam param) { Shipment shipment = GetActiveShipments(param.Order).FirstOrDefault(); if (shipment == null) { return(new AddressViewModel()); } // ReSharper disable once PossibleNullReferenceException (The address can be null we will create one) return(CartViewModelFactory.GetAddressViewModel(shipment.Address, param.CultureInfo)); }
protected virtual OrderShippingMethodViewModel GetShippingMethodViewModel(CreateOrderDetailViewModelParam param) { if (param.Order.Cart.Shipments == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.Order.Cart.Shipments)), nameof(param)); } var shipment = GetActiveShipments(param.Order).FirstOrDefault(); var shippingMethodVm = GetShippingMethodViewModel(shipment, param); return(shippingMethodVm); }
protected virtual bool HasOwnDraft(CreateOrderDetailViewModelParam param) { var draftCartName = param.Order.Id.GetDraftCartName(); if (draftCartName == null) { return(false); } var orderDraft = param.OrderCartDrafts?.FirstOrDefault(d => d.Name == draftCartName); return(orderDraft != null && orderDraft.IsCurrentApplicationOwner()); }
protected virtual async Task <CompleteCheckoutViewModel> MapOrderToCompleteCheckoutViewModel(Overture.ServiceModel.Orders.Order order, CompleteCheckoutParam param) { if (order == null) { return(null); } var orderStatuses = await LookupService.GetLookupDisplayNamesAsync(new GetLookupDisplayNamesParam { CultureInfo = param.CultureInfo, LookupType = LookupType.Order, LookupName = "OrderStatus", }).ConfigureAwait(false); var productImageInfo = new ProductImageInfo { ImageUrls = await ImageService.GetImageUrlsAsync(order.Cart.GetLineItems()).ConfigureAwait(false) }; var getVmOrderParam = new CreateOrderDetailViewModelParam { Order = order, CultureInfo = param.CultureInfo, OrderStatuses = orderStatuses, OrderDetailBaseUrl = OrderUrlProvider.GetOrderDetailsBaseUrl(param.CultureInfo), BaseUrl = param.BaseUrl, ProductImageInfo = productImageInfo, }; var orderViewModel = OrderDetailsViewModelFactory.CreateLightViewModel(getVmOrderParam); var completeCheckoutViewModel = new CompleteCheckoutViewModel { OrderNumber = order.OrderNumber, Order = orderViewModel, CustomerEmail = order.Cart.Customer.Email, CustomerFirstName = order.Cart.Customer.FirstName, CustomerLastName = order.Cart.Customer.LastName, Affiliation = order.Cart.OrderLocation?.Name, Revenu = order.Cart.Total, Tax = order.Cart.TaxTotal, Shipping = order.Cart.FulfillmentCost, ShippingOptions = order.Cart.Shipments?.FirstOrDefault()?.FulfillmentMethod.FulfillmentMethodType.ToString().ToLowerInvariant(), BillingCurrency = order.Cart.BillingCurrency, Coupons = MapCoupons(order, param.CultureInfo), LineItems = orderViewModel?.Shipments.FirstOrDefault()?.LineItems }; return(completeCheckoutViewModel); }
protected virtual OrderShippingMethodViewModel GetShippingMethodViewModel(CreateOrderDetailViewModelParam param) { if (param.Order.Cart.Shipments == null) { throw new ArgumentNullException("param.Order.Cart.Shipments"); } var shipments = GetActiveShipments(param.Order); var shipment = shipments.FirstOrDefault(); var shippingMethodVm = GetShippingMethodViewModel(shipment, param); return(shippingMethodVm); }
protected virtual OrderDetailInfoViewModel GetOrderInfosViewModel(CreateOrderDetailViewModelParam param) { if (param.Order.Cart.Total == null) { throw new ArgumentNullException("param.Order.Cart.Total"); } var orderInfos = ViewModelMapper.MapTo <OrderDetailInfoViewModel>(param.Order, param.CultureInfo); orderInfos.OrderStatus = param.OrderStatuses[param.Order.OrderStatus]; orderInfos.OrderStatusRaw = param.Order.OrderStatus; orderInfos.BillingCurrency = param.Order.Cart.BillingCurrency; orderInfos.PricePaid = LocalizationProvider.FormatPrice((decimal)param.Order.Cart.Total, param.CultureInfo); return(orderInfos); }
protected virtual OrderDetailInfoViewModel GetOrderInfosViewModel(CreateOrderDetailViewModelParam param) { if (param.Order.Cart.Total == null) { throw new ArgumentException(GetMessageOfNull(nameof(param.Order.Cart.Total)), nameof(param)); } var orderInfos = ViewModelMapper.MapTo <OrderDetailInfoViewModel>(param.Order, param.CultureInfo); orderInfos.OrderStatus = GetOrderStatusDisplayName(param); orderInfos.OrderStatusRaw = param.Order.OrderStatus; orderInfos.BillingCurrency = param.Order.Cart.BillingCurrency; orderInfos.PricePaid = LocalizationProvider.FormatPrice((decimal)param.Order.Cart.Total, CurrencyProvider.GetCurrency()); orderInfos.HasOwnDraft = HasOwnDraft(param); return(orderInfos); }
public virtual LightOrderDetailViewModel CreateLightViewModel(CreateOrderDetailViewModelParam param) { if (param == null) { throw new ArgumentNullException(nameof(param)); } if (param.CultureInfo == null) { throw new ArgumentException(nameof(param.CultureInfo)); } if (param.Order == null) { throw new ArgumentException(nameof(param.Order)); } if (param.OrderStatuses == null) { throw new ArgumentException(nameof(param.OrderStatuses)); } if (param.ProductImageInfo == null) { throw new ArgumentException(nameof(param.ProductImageInfo)); } var viewModel = new LightOrderDetailViewModel(); viewModel.OrderInfos = GetOrderInfosViewModel(param); viewModel.Shipments = GetShipmentViewModels(param); var orderDetailUrl = UrlFormatter.AppendQueryString(param.OrderDetailBaseUrl, new NameValueCollection { { "id", param.Order.OrderNumber } }); viewModel.Url = orderDetailUrl; return(viewModel); }
protected virtual List <OrderSummaryPaymentViewModel> GetPaymentViewModels(CreateOrderDetailViewModelParam param) { var paymentVMs = new List <OrderSummaryPaymentViewModel>(); var validPayments = param.Order.Cart.Payments.Where(x => !x.IsVoided()).ToList(); var payments = validPayments.Any() ? validPayments : param.Order.Cart.Payments.ToList(); foreach (var payment in payments) { OrderSummaryPaymentViewModel model; try { var paymentProvider = PaymentProviderFactory.ResolveProvider(payment.PaymentMethod.PaymentProviderName); model = paymentProvider.BuildOrderSummaryPaymentViewModel(payment, param.CultureInfo); } catch (ArgumentException) { model = new OrderSummaryPaymentViewModel(); } paymentVMs.Add(model); } return(paymentVMs); }
protected virtual OrderShippingMethodViewModel GetShippingMethodViewModel(Shipment shipment, CreateOrderDetailViewModelParam param) { if (param.Order.Cart.Shipments == null) { throw new ArgumentNullException("param.Order.Cart.Shipments"); } if (shipment == null) { return(new OrderShippingMethodViewModel()); } var shippingMethodVm = ViewModelMapper.MapTo <OrderShippingMethodViewModel>(shipment.FulfillmentMethod, param.CultureInfo); if (param.Order.Cart.FulfillmentCost == 0) { var freeLabel = LocalizationProvider.GetLocalizedString(new GetLocalizedParam { Category = "ShoppingCart", Key = "L_Free", CultureInfo = param.CultureInfo }); shippingMethodVm.Cost = freeLabel; } shippingMethodVm.Taxable = shipment.IsShippingTaxable(); return(shippingMethodVm); }
protected virtual OrderShipmentDetailViewModel GetOrderShipmentDetailViewModel(Shipment shipment, CreateOrderDetailViewModelParam param) { var shipmentVm = new OrderShipmentDetailViewModel(); var index = param.Order.Cart.Shipments.IndexOf(shipment); if (index >= 0) { shipmentVm.Index = (index + 1).ToString(); } if (shipment.FulfillmentScheduledTimeBeginDate.HasValue) { shipmentVm.ScheduledShipDate = LocalizationHelper.LocalizedFormat("General", "ShortDateFormat", shipment.FulfillmentScheduledTimeBeginDate.Value, param.CultureInfo); } shipmentVm.LineItems = LineItemViewModelFactory.CreateViewModel(new CreateListOfLineItemDetailViewModelParam { Cart = param.Order.Cart, LineItems = shipment.LineItems, CultureInfo = param.CultureInfo, ImageInfo = param.ProductImageInfo, BaseUrl = param.BaseUrl }).ToList(); if (param.ShipmentsNotes != null && param.ShipmentsNotes.ContainsKey(shipment.Id)) { var notes = param.ShipmentsNotes[shipment.Id]; shipmentVm.Comments = notes; } shipmentVm.Rewards = RewardViewModelFactory.CreateViewModel(shipment.Rewards, param.CultureInfo, RewardLevel.FulfillmentMethod, RewardLevel.Shipment).ToList(); shipmentVm.ShippingAddress = CartViewModelFactory.GetAddressViewModel(shipment.Address, param.CultureInfo); var fulfillmentMethodName = shipment.FulfillmentMethod.Name; var shippingTrackingProvider = ShippingTrackingProviderFactory.ResolveProvider(fulfillmentMethodName); shipmentVm.TrackingInfo = shippingTrackingProvider.GetTrackingInfoViewModel(shipment, param.CultureInfo); shipmentVm.History = GetOrderChangesViewModel(param.OrderChanges, param.CultureInfo, _shipmentStatus); if (!string.IsNullOrWhiteSpace(shipment.Status)) { shipmentVm.ShipmentStatusName = shipment.Status; if (param.ShipmentStatuses.TryGetValue(shipment.Status, out string shipmentStatusLookup)) { shipmentVm.ShipmentStatus = shipmentStatusLookup; } if (shipmentVm.History.Any(h => h.NewValue.Equals(shipment.Status))) { shipmentVm.ShipmentStatusDate = shipmentVm.History.OrderByDescending(x => x.Date).First(h => h.NewValue.Equals(shipment.Status)).Date; } } else { shipmentVm.ShipmentStatusName = string.Empty; shipmentVm.ShipmentStatus = string.Empty; shipmentVm.ShipmentStatusDate = string.Empty; } shipmentVm.ShippingMethod = GetShippingMethodViewModel(shipment, param); return(shipmentVm); }
/// <summary> /// Creates an OrderDetailViewModel, containing all the informations about the order, the shipments and lineitems. /// </summary> /// <param name="param"></param> /// <returns></returns> public virtual OrderDetailViewModel CreateViewModel(CreateOrderDetailViewModelParam param) { if (param == null) { throw new ArgumentNullException("param"); } if (param.CultureInfo == null) { throw new ArgumentException("param.CultureInfo"); } if (param.Order == null) { throw new ArgumentException("param.Order"); } if (param.OrderStatuses == null) { throw new ArgumentException("param.OrderStatuses"); } if (param.ShipmentStatuses == null) { throw new ArgumentException("param.ShipmentStatuses"); } if (param.OrderChanges == null) { throw new ArgumentException("param.OrderChanges"); } if (param.ProductImageInfo == null) { throw new ArgumentException("param.ProductImageInfo"); } if (param.ProductImageInfo.ImageUrls == null) { throw new ArgumentException("param.ImageUrls"); } if (string.IsNullOrWhiteSpace(param.BaseUrl)) { throw new ArgumentException("param.BaseUrl"); } if (string.IsNullOrWhiteSpace(param.CountryCode)) { throw new ArgumentException("param.CountryCode"); } var viewModel = new OrderDetailViewModel(); var shipments = GetActiveShipments(param.Order); #pragma warning disable 618 viewModel.OrderInfos = GetOrderInfosViewModel(param); viewModel.History = GetOrderChangesViewModel(param.OrderChanges, param.CultureInfo, _orderStatus); viewModel.BillingAddress = GetBillingAddressViewModel(param); viewModel.ShippingAddress = GetShippingAddressViewModel(param); viewModel.Shipments = GetShipmentViewModels(param); viewModel.ShippingMethod = GetShippingMethodViewModel(param); viewModel.Payments = GetPaymentViewModels(param); viewModel.OrderSummary = CartViewModelFactory.GetOrderSummaryViewModel(param.Order.Cart, param.CultureInfo); viewModel.OrderSummary.Taxes = TaxViewModelFactory.CreateTaxViewModels(shipments.SelectMany(s => s.Taxes).ToList(), param.CultureInfo).ToList(); MapAdditionalFees(viewModel, param); #pragma warning restore 618 // Reverse the items order in the Cart so the last added item will be the first in the list if (viewModel.Shipments != null && viewModel.Shipments.Any()) { viewModel.Shipments.ForEach(x => x.LineItems.Reverse()); } return(viewModel); }