예제 #1
0
        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);
        }
예제 #3
0
 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));
        }
예제 #6
0
        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);
        }
예제 #7
0
        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());
        }
예제 #8
0
        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);
        }
예제 #11
0
        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);
        }
예제 #12
0
        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);
        }