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