Example #1
0
        public virtual List <AdditionalFeeSummaryViewModel> GetShipmentAdditionalFeeSummary(IEnumerable <ShipmentAdditionalFeeViewModel> shipmentAdditionalFeeViewModels, CultureInfo cultureInfo)
        {
            var shipmentAdditionalFeeSummaryList = new List <AdditionalFeeSummaryViewModel>();

            if (shipmentAdditionalFeeViewModels == null)
            {
                return(shipmentAdditionalFeeSummaryList);
            }

            var additionalFeeViewModels = shipmentAdditionalFeeViewModels as IList <ShipmentAdditionalFeeViewModel> ?? shipmentAdditionalFeeViewModels.ToList();

            var taxableAdditionalFeesGroups = additionalFeeViewModels.Where(a => a.Taxable).GroupBy(a => a.DisplayName);

            shipmentAdditionalFeeSummaryList
            .AddRange(taxableAdditionalFeesGroups.Select(additionalFeesGroup => new AdditionalFeeSummaryViewModel
            {
                GroupName   = additionalFeesGroup.Key,
                TotalAmount = LocalizationProvider.FormatPrice(additionalFeesGroup.Sum(a => a.Amount), cultureInfo),
                Taxable     = true
            }));

            var nonTaxableAdditionalFeesGroups = additionalFeeViewModels.Where(a => !a.Taxable).GroupBy(a => a.DisplayName);

            shipmentAdditionalFeeSummaryList
            .AddRange(nonTaxableAdditionalFeesGroups.Select(additionalFeesGroup => new AdditionalFeeSummaryViewModel
            {
                GroupName   = additionalFeesGroup.Key,
                TotalAmount = LocalizationProvider.FormatPrice(additionalFeesGroup.Sum(a => a.Amount), cultureInfo),
                Taxable     = false
            }));

            return(shipmentAdditionalFeeSummaryList);
        }
Example #2
0
        protected virtual string GetShippingPrice(decimal cost, CultureInfo cultureInfo)
        {
            var price = cost == 0
                ? GetFreeShippingPriceLabel(cultureInfo)
                : LocalizationProvider.FormatPrice(cost, cultureInfo);

            return(price);
        }
        public virtual LineItemDetailViewModel GetLineItemDetailViewModel(CreateLineItemDetailViewModelParam param)
        {
            if (param.PreMapAction != null)
            {
                param.PreMapAction.Invoke(param.LineItem);
            }

            var lineItem = param.LineItem;

            var vm = ViewModelMapper.MapTo <LineItemDetailViewModel>(lineItem, param.CultureInfo);

            if (vm.IsValid == null)
            {
                vm.IsValid = true;
            }

            vm.Rewards  = RewardViewModelFactory.CreateViewModel(lineItem.Rewards, param.CultureInfo, RewardLevel.LineItem).ToList();
            vm.IsOnSale = lineItem.CurrentPrice.HasValue && lineItem.DefaultPrice.HasValue &&
                          (int)(lineItem.CurrentPrice.Value * 100) < (int)(lineItem.DefaultPrice.Value * 100);
            vm.IsPriceDiscounted = lineItem.DiscountAmount.GetValueOrDefault(0) > 0;

            decimal lineItemsSavingSale = Math.Abs(decimal.Multiply(
                                                       decimal.Subtract(
                                                           lineItem.CurrentPrice.GetValueOrDefault(0),
                                                           lineItem.DefaultPrice.GetValueOrDefault(0)),
                                                       Convert.ToDecimal(lineItem.Quantity)));

            decimal lineItemsSavingTotal = decimal.Add(lineItem.DiscountAmount.GetValueOrDefault(0), lineItemsSavingSale);

            vm.SavingsTotal = lineItemsSavingTotal.Equals(0) ? string.Empty : LocalizationProvider.FormatPrice(lineItemsSavingTotal, CurrencyProvider.GetCurrency());

            vm.KeyVariantAttributesList = GetKeyVariantAttributes(new GetKeyVariantAttributesParam {
                KvaValues        = lineItem.KvaValues,
                KvaDisplayValues = lineItem.KvaDisplayValues
            }).ToList();

            if (param.ImageDictionary.TryGetValue((lineItem.ProductId, lineItem.VariantId), out ProductMainImage mainImage))
            {
                vm.ImageUrl         = mainImage.ImageUrl;
                vm.FallbackImageUrl = mainImage.FallbackImageUrl;
            }

            vm.ProductUrl = ProductUrlProvider.GetProductUrl(new GetProductUrlParam
            {
                CultureInfo = param.CultureInfo,
                VariantId   = lineItem.VariantId,
                ProductId   = lineItem.ProductId,
                ProductName = lineItem.ProductSummary.DisplayName,
                SKU         = lineItem.Sku
            });

            vm.AdditionalFees = MapLineItemAdditionalFeeViewModel(lineItem, param.CultureInfo).ToList();

            //Because the whole class is not async, we call a .Result here
            _ = MapRecurringOrderFrequencies(vm, lineItem, param.CultureInfo).Result;

            return(vm);
        }
        /// <summary>
        /// Generates the variant price model view item.
        /// </summary>
        /// <param name="cultureInfo"></param>
        /// <param name="variantPriceEntry">The variant price entry.</param>
        /// <returns></returns>
        protected virtual VariantPriceViewModel GenerateVariantPriceVm(CultureInfo cultureInfo, VariantPrice variantPriceEntry)
        {
            var vm = ViewModelMapper.MapTo <VariantPriceViewModel>(variantPriceEntry, cultureInfo);

            vm.IsPriceDiscounted = IsPriceDiscounted(variantPriceEntry.Pricing.Price, variantPriceEntry.DefaultPrice);
            vm.ListPrice         = LocalizationProvider.FormatPrice(variantPriceEntry.Pricing.Price, cultureInfo);

            return(vm);
        }
        /// <summary>
        /// Creates the model view product price.
        /// </summary>
        /// <param name="cultureInfo">The get product price parameter.</param>
        /// <param name="productPrice">The product price.</param>
        /// <returns></returns>
        protected virtual ProductPriceViewModel GenerateProductPriceVm(CultureInfo cultureInfo, ProductPrice productPrice)
        {
            var vm = ViewModelMapper.MapTo <ProductPriceViewModel>(productPrice, cultureInfo);

            vm.IsPriceDiscounted = IsPriceDiscounted(productPrice.Pricing.Price, productPrice.DefaultPrice);
            vm.ListPrice         = LocalizationProvider.FormatPrice(productPrice.Pricing.Price, cultureInfo);
            vm.VariantPrices     = new List <VariantPriceViewModel>();

            return(vm);
        }
 protected virtual string GetProductOrVariantListPrice(Orckestra.Overture.ServiceModel.Products.Product product, Variant variant, CultureInfo culture)
 {
     if (variant != null)
     {
         return(LocalizationProvider.FormatPrice(variant.ListPrice.Value, culture));
     }
     else
     {
         return(LocalizationProvider.FormatPrice(product.ListPrice.Value, culture));
     }
 }
        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);
        }
Example #8
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);
        }
Example #9
0
        public virtual IEnumerable <TaxViewModel> CreateTaxViewModels(IEnumerable <Tax> taxes, CultureInfo cultureInfo)
        {
            if (taxes == null)
            {
                yield break;
            }

            var taxesByCodes = taxes.Where(x => x.TaxTotal.HasValue && x.TaxTotal.Value > 0).GroupBy(t => t.DisplayName);

            foreach (var codeTaxes in taxesByCodes)
            {
                var vm = ViewModelMapper.MapTo <TaxViewModel>(codeTaxes.First(), cultureInfo);

                vm.TaxTotal        = codeTaxes.Sum(t => t.TaxTotal);
                vm.DisplayTaxTotal = vm.TaxTotal.HasValue
                    ? LocalizationProvider.FormatPrice(vm.TaxTotal.Value, CurrencyProvider.GetCurrency())
                    : string.Empty;

                yield return(vm);
            }
        }
Example #10
0
        /// <summary>
        /// Gets the AdditionalFeeSummaryViewModel.
        /// </summary>
        /// <param name="lineItemDetailViewModels"></param>
        /// <param name="cultureInfo"></param>
        /// <returns></returns>
        public virtual List <AdditionalFeeSummaryViewModel> GetAdditionalFeesSummary(
            IEnumerable <LineItemDetailViewModel> lineItemDetailViewModels,
            CultureInfo cultureInfo)
        {
            var additionalFeesList = new List <AdditionalFeeViewModel>();

            if (lineItemDetailViewModels == null)
            {
                return(new List <AdditionalFeeSummaryViewModel>());
            }

            foreach (var lineItemDetailViewModel in lineItemDetailViewModels
                     .Where(lineItemDetailViewModel => lineItemDetailViewModel.AdditionalFees != null))
            {
                additionalFeesList.AddRange(lineItemDetailViewModel.AdditionalFees);
            }

            var taxableAdditionalFeesGroups = additionalFeesList.Where(a => a.Taxable).GroupBy(a => a.DisplayName);

            var additionalFeeSummaryList = taxableAdditionalFeesGroups
                                           .Select(additionalFeesGroup => new AdditionalFeeSummaryViewModel
            {
                GroupName   = additionalFeesGroup.Key,
                TotalAmount = LocalizationProvider.FormatPrice(additionalFeesGroup.Sum(a => a.TotalAmount), cultureInfo),
                Taxable     = true
            }).ToList();

            var nonTaxableAdditionalFeesGroups = additionalFeesList.Where(a => !a.Taxable).GroupBy(a => a.DisplayName);

            additionalFeeSummaryList.AddRange(nonTaxableAdditionalFeesGroups
                                              .Select(additionalFeesGroup => new AdditionalFeeSummaryViewModel
            {
                GroupName   = additionalFeesGroup.Key,
                TotalAmount = LocalizationProvider.FormatPrice(additionalFeesGroup.Sum(a => a.TotalAmount), cultureInfo),
                Taxable     = false
            }).ToList());

            return(additionalFeeSummaryList);
        }
Example #11
0
        public virtual OrderSummaryPaymentViewModel BuildOrderSummaryPaymentViewModel(Overture.ServiceModel.Orders.Payment payment, CultureInfo cultureInfo)
        {
            var methodDisplayNames = LookupService.GetLookupDisplayNamesAsync(new GetLookupDisplayNamesParam
            {
                CultureInfo = cultureInfo,
                LookupType  = LookupType.Order,
                LookupName  = "PaymentMethodType",
            }).Result;

            var paymentMethodDisplayName = methodDisplayNames.FirstOrDefault(x => x.Key == payment.PaymentMethod.Type.ToString()).Value;

            var paymentVm = new OrderSummaryPaymentViewModel
            {
                FirstName         = payment.BillingAddress == null ? null: payment.BillingAddress.FirstName,
                LastName          = payment.BillingAddress == null? null : payment.BillingAddress.LastName,
                PaymentMethodName = paymentMethodDisplayName,
            };

            paymentVm.BillingAddress = CartViewModelFactory.GetAddressViewModel(payment.BillingAddress, cultureInfo);
            paymentVm.Amount         = LocalizationProvider.FormatPrice((decimal)payment.Amount, cultureInfo);

            return(paymentVm);
        }
Example #12
0
        /// <summary>
        /// Gets an OrderSummaryViewModel from a Cart.
        /// </summary>
        /// <param name="cart"></param>
        /// <param name="cultureInfo"></param>
        /// <returns></returns>
        public virtual OrderSummaryViewModel GetOrderSummaryViewModel(
            Overture.ServiceModel.Orders.Cart cart,
            CultureInfo cultureInfo)
        {
            var orderSummary = ViewModelMapper.MapTo <OrderSummaryViewModel>(cart, cultureInfo);

            orderSummary.Shippings              = GetShippingsViewModel(cart, cultureInfo);
            orderSummary.Shipping               = GetShippingFee(cart, cultureInfo);
            orderSummary.IsShippingTaxable      = cart.GetActiveShipments().FirstOrDefault().IsShippingTaxable(); //used in the cart/checkout
            orderSummary.HasReward              = cart.DiscountTotal.HasValue && cart.DiscountTotal.Value > 0;
            orderSummary.CheckoutRedirectAction = GetCheckoutRedirectAction(cart);
            orderSummary.Rewards = RewardViewModelFactory.CreateViewModel(cart.GetActiveShipments().SelectMany(x => x.Rewards), cultureInfo, RewardLevel.FulfillmentMethod, RewardLevel.Shipment).ToList();
            var     allLineItems           = cart.GetActiveShipments().SelectMany(x => x.LineItems).ToList();
            decimal sumAllLineItemsSavings =
                Math.Abs(allLineItems.Sum(
                             l => decimal.Multiply(decimal.Subtract(l.CurrentPrice.GetValueOrDefault(0), l.DefaultPrice.GetValueOrDefault(0)), Convert.ToDecimal(l.Quantity))));

            decimal savingsTotal = decimal.Add(cart.DiscountTotal.GetValueOrDefault(0), sumAllLineItemsSavings);

            orderSummary.SavingsTotal = savingsTotal.Equals(0) ? string.Empty : LocalizationProvider.FormatPrice(savingsTotal, cultureInfo);

            return(orderSummary);
        }
 private string GetDisplayPrice(double?price)
 {
     return(price.HasValue ? LocalizationProvider.FormatPrice((decimal)price.Value, CurrencyProvider.GetCurrency()) : null);
 }
Example #14
0
 protected virtual string GetDisplayPrice(decimal?price, CultureInfo cultureInfo)
 {
     return(price != null?LocalizationProvider.FormatPrice((decimal)price, cultureInfo) : null);
 }
 protected virtual string GetProductOrVariantListPrice(Orckestra.Overture.ServiceModel.Products.Product product, Variant variant, CultureInfo culture)
 {
     return(variant != null
         ? LocalizationProvider.FormatPrice(variant.ListPrice.Value, CurrencyProvider.GetCurrency())
         : LocalizationProvider.FormatPrice(product.ListPrice.Value, CurrencyProvider.GetCurrency()));
 }
Example #16
0
 protected virtual string GetDisplayPrice(decimal?price, string currencyIso)
 {
     return(price != null?LocalizationProvider.FormatPrice((decimal)price, currencyIso) : null);
 }
        public virtual async Task <RecurringOrderTemplateLineItemViewModel> MapToTemplateLineItemViewModel(MapToTemplateLineItemViewModelParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.RecurringOrderlineItem == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.RecurringOrderlineItem)), nameof(param));
            }
            if (param.CultureInfo == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.CultureInfo)), nameof(param));
            }
            if (param.BaseUrl == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.BaseUrl)), nameof(param));
            }
            if (param.RecurringScheduleUrl == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.RecurringScheduleUrl)), nameof(param));
            }

            var recrurringLineItem = param.RecurringOrderlineItem;

            var vm = ViewModelMapper.MapTo <RecurringOrderTemplateLineItemViewModel>(recrurringLineItem, param.CultureInfo);

            if (vm.IsValid == null)
            {
                vm.IsValid = true;
            }

            if (param.ImageDictionnary.TryGetValue(Tuple.Create(recrurringLineItem.ProductId, recrurringLineItem.VariantId), out ProductMainImage mainImage))
            {
                vm.ImageUrl         = mainImage.ImageUrl;
                vm.FallbackImageUrl = mainImage.FallbackImageUrl;
            }

            var getProductRequest = new Overture.ServiceModel.Requests.Products.GetProductRequest
            {
                ProductId            = recrurringLineItem.ProductId,
                ScopeId              = recrurringLineItem.ScopeId,
                CultureName          = param.CultureInfo.Name,
                IncludePriceLists    = true,
                IncludeRelationships = false,
                IncludeVariants      = true
            };

            var getProductResponse = await OvertureClient.SendAsync(getProductRequest).ConfigureAwait(false);

            if (getProductResponse == null || (getProductResponse != null && recrurringLineItem.VariantId != string.Empty &&
                                               recrurringLineItem.VariantId != null &&
                                               getProductResponse.Variants.SingleOrDefault(v => v.Id == recrurringLineItem.VariantId) == null))
            {
                var deleteRecurringLineItem = new DeleteRecurringOrderLineItemsRequest
                {
                    CustomerId = recrurringLineItem.CustomerId,
                    RecurringOrderLineItemIds = new List <Guid> {
                        recrurringLineItem.RecurringOrderLineItemId
                    },
                    ScopeId = recrurringLineItem.ScopeId
                };
                await OvertureClient.SendAsync(deleteRecurringLineItem);

                return(await Task.FromResult <RecurringOrderTemplateLineItemViewModel>(null));
            }

            var variant = getProductResponse.Variants.SingleOrDefault(v => v.Id == recrurringLineItem.VariantId);

            vm.FormattedNextOccurence = vm.NextOccurence == DateTime.MinValue
                    ? string.Empty
                    : string.Format(param.CultureInfo, "{0:D}", vm.NextOccurence);

            vm.NextOccurenceValue = vm.NextOccurence == DateTime.MinValue
                    ? string.Empty
                    : vm.NextOccurence.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);

            vm.Id             = recrurringLineItem.RecurringOrderLineItemId;
            vm.ProductSummary = new RecurringProductSummaryViewModel
            {
                DisplayName = ProductHelper.GetProductOrVariantDisplayName(getProductResponse, variant, param.CultureInfo)
            };

            var productsPricesVm = await ProductPriceViewService.CalculatePricesAsync(new GetProductsPriceParam
            {
                CultureInfo = param.CultureInfo,
                Scope       = recrurringLineItem.ScopeId,
                ProductIds  = new List <string>()
                {
                    recrurringLineItem.ProductId
                }
            });

            var productPriceVm = productsPricesVm.ProductPrices.SingleOrDefault(p => p.ProductId == recrurringLineItem.ProductId);

            if (productPriceVm != null)
            {
                var variantPriceVm = productPriceVm.VariantPrices.SingleOrDefault(v => v.VariantId == recrurringLineItem.VariantId);
                if (variantPriceVm != null)
                {
                    vm.DefaultListPrice = variantPriceVm.DefaultListPrice;
                    vm.ListPrice        = variantPriceVm.ListPrice;
                }
                else
                {
                    vm.DefaultListPrice = productPriceVm.DefaultListPrice;
                    vm.ListPrice        = productPriceVm.ListPrice;
                }
            }
            vm.IsOnSale = string.CompareOrdinal(vm.DefaultListPrice, vm.ListPrice) != 0;

            var conv = decimal.TryParse(vm.ListPrice, NumberStyles.Currency, param.CultureInfo.NumberFormat, out decimal price);

            if (conv)
            {
                vm.TotalWithoutDiscount = LocalizationProvider.FormatPrice((decimal)vm.Quantity * price, param.CultureInfo);

                vm.Total = LocalizationProvider.FormatPrice((decimal)vm.Quantity * price, param.CultureInfo);
            }

            //Adding brand display name
            var brandLookup = await OvertureClient.SendAsync(new GetProductLookupRequest { LookupName = "Brand" });

            var brandId = getProductResponse.Brand;

            if (brandId != null)
            {
                string brandValue = Convert.ToString(brandId);
                vm.ProductSummary.Brand = brandLookup?.GetDisplayName(brandValue, param.CultureInfo.Name) ?? brandId;
            }

            var list = await ProductHelper.GetKeyVariantAttributes(getProductResponse, variant, param.CultureInfo, OvertureClient);

            if (list != null && list.Count > 0)
            {
                vm.KeyVariantAttributesList = list.ToList();
            }

            vm.ShippingMethodName = recrurringLineItem.FulfillmentMethodName;

            vm.ProductUrl = ProductUrlProvider.GetProductUrl(new GetProductUrlParam
            {
                CultureInfo = param.CultureInfo,
                VariantId   = recrurringLineItem.VariantId,
                ProductId   = recrurringLineItem.ProductId,
                ProductName = vm.ProductSummary.DisplayName,
                SKU         = recrurringLineItem.Sku
            });

            var recurringScheduleEditUrl = RecurringScheduleUrlProvider.GetRecurringScheduleDetailsUrl(new GetRecurringScheduleDetailsUrlParam
            {
                CultureInfo         = param.CultureInfo,
                RecurringScheduleId = vm.Id.ToString()
            });

            vm.EditUrl     = recurringScheduleEditUrl;
            vm.ScheduleUrl = param.RecurringScheduleUrl;

            var program = await RecurringOrderRepository.GetRecurringOrderProgram(recrurringLineItem.ScopeId, recrurringLineItem.RecurringOrderProgramName);

            var programViewModel = RecurringOrderProgramViewModelFactory.CreateRecurringOrderProgramViewModel(program, param.CultureInfo);

            vm.RecurringOrderProgramFrequencies = programViewModel?.Frequencies;

            return(vm);
        }
        public virtual OrderSummaryPaymentViewModel BuildOrderSummaryPaymentViewModel(Overture.ServiceModel.Orders.Payment payment, CultureInfo cultureInfo)
        {
            var creditCartNumber  = string.Empty;
            var expiryDate        = string.Empty;
            var paymentMethodName = string.Empty;

            if (payment.PaymentMethod.PropertyBag != null)
            {
                //TODO : use viewmodelmapper through cartviewmodelfactory ( already exist )
                if (payment.PaymentMethod.Type == PaymentMethodType.SavedCreditCard)
                {
                    if (payment.PaymentMethod.PropertyBag.ContainsKey(SavedCardMask))
                    {
                        creditCartNumber = payment.PaymentMethod.PropertyBag[SavedCardMask].ToString();
                    }

                    if (payment.PaymentMethod.PropertyBag.ContainsKey(SavedExpiryDate))
                    {
                        expiryDate = payment.PaymentMethod.PropertyBag[SavedExpiryDate].ToString();
                    }

                    if (payment.PaymentMethod.PropertyBag.ContainsKey(SavedCardType))
                    {
                        paymentMethodName = payment.PaymentMethod.PropertyBag[SavedCardType].ToString();
                    }
                }
                else
                {
                    if (payment.PaymentMethod.PropertyBag.ContainsKey(CreditCardPaymentProperties.CreditCardNumberLastDigitsKey))
                    {
                        creditCartNumber = payment.PaymentMethod.PropertyBag[CreditCardPaymentProperties.CreditCardNumberLastDigitsKey].ToString();
                    }

                    if (payment.PaymentMethod.PropertyBag.ContainsKey(CreditCardPaymentProperties.CreditCardExpiryDateKey))
                    {
                        expiryDate = payment.PaymentMethod.PropertyBag[CreditCardPaymentProperties.CreditCardExpiryDateKey].ToString();
                    }

                    if (payment.PaymentMethod.PropertyBag.ContainsKey(CreditCardPaymentProperties.CreditCardBrandKey))
                    {
                        paymentMethodName = payment.PaymentMethod.PropertyBag[CreditCardPaymentProperties.CreditCardBrandKey].ToString();
                    }
                }
            }

            DateTime expirationDate;
            bool     hasExpired = false;

            if (DateTime.TryParse(expiryDate, out expirationDate))
            {
                hasExpired = expirationDate < DateTime.UtcNow;
            }

            var paymentVm = new OrderSummaryPaymentViewModel
            {
                FirstName         = payment.BillingAddress.FirstName,
                LastName          = payment.BillingAddress.LastName,
                PaymentMethodName = paymentMethodName,
                CreditCardNumber  = creditCartNumber,
                ExpiryDate        = expiryDate,
                IsExpired         = hasExpired
            };

            paymentVm.BillingAddress = CartViewModelFactory.GetAddressViewModel(payment.BillingAddress, cultureInfo);
            paymentVm.Amount         = LocalizationProvider.FormatPrice((decimal)payment.Amount, cultureInfo);

            return(paymentVm);
        }