private ProductPriceModel.PriceItem GetCampaignPrice(OrderRow orderRow, SalesOrder salesOrder) { ProductPriceModel.PriceItem campaignPrice = null; if (salesOrder.Rows.Any(c => c.OrderRowType == OrderRowType.Discount && c.ArticleNumber == orderRow.ArticleNumber)) { bool haveCampaignPrice = false; decimal priceExcludingVat = orderRow.UnitPriceExcludingVat; decimal priceIncludingVat = orderRow.UnitPriceIncludingVat; foreach (var discount in salesOrder.DiscountInfo.Where(x => x.SourceOrderRowSystemIds != null && x.SourceOrderRowSystemIds.Contains(orderRow.SystemId))) { var discountRow = salesOrder.Rows.Single(x => x.SystemId == discount.ResultOrderRowSystemId); if (discountRow.OrderRowType == OrderRowType.Discount && discountRow.ArticleNumber == orderRow.ArticleNumber) { priceExcludingVat += discountRow.UnitPriceExcludingVat; priceIncludingVat += discountRow.UnitPriceIncludingVat; haveCampaignPrice = true; } } if (haveCampaignPrice) { campaignPrice = new ProductPriceModel.PriceItem(0, priceExcludingVat, orderRow.VatRate, priceIncludingVat); } } return(campaignPrice); }
private OrderRowViewModel BuildOrderRow(OrderRowCarrier orderRow, Currency currency, bool includeVat) { var variant = _variantService.Get(orderRow.ArticleNumber); var baseProduct = _baseProductService.Get(variant?.BaseProductSystemId ?? Guid.Empty); var name = variant?.Localizations.CurrentCulture.Name.NullIfWhiteSpace() ?? baseProduct?.Localizations.CurrentCulture.Name.NullIfWhiteSpace() ?? orderRow.ArticleNumber; var url = variant == null ? null : _urlService.GetUrl(variant); var image = (variant?.Fields.GetValue <IList <Guid> >(SystemFieldDefinitionConstants.Images)?.FirstOrDefault() ?? baseProduct?.Fields.GetValue <IList <Guid> >(SystemFieldDefinitionConstants.Images)?.FirstOrDefault()) .MapTo <ImageModel>(); var price = GetPriceModel(orderRow, currency, includeVat); var totalPrice = new ProductPriceModel.PriceItem(decimal.MinusOne, orderRow.TotalPrice, orderRow.VATPercentage, orderRow.TotalPriceWithVAT) { FormatPrice = b => currency.Format(includeVat ? orderRow.TotalPriceWithVAT : orderRow.TotalPrice, b, CultureInfo.CurrentUICulture) }; var unitOfMeasurement = _unitOfMeasurementService.Get(orderRow.SKUCode); var unitOfMeasurementFormatString = $"0.{new string('0', unitOfMeasurement?.DecimalDigits ?? 0)}"; var model = new OrderRowViewModel { ArticleNumber = orderRow.ArticleNumber, Name = name, RowSystemId = orderRow.ID, Quantity = orderRow.Quantity, QuantityString = orderRow.Quantity.ToString(unitOfMeasurementFormatString, CultureInfo.CurrentUICulture.NumberFormat).Replace(",", "."), Url = url, Image = image?.GetUrlToImage(Size.Empty, new Size(200, 120)).Url, TotalPrice = totalPrice.FormatPrice(true), Price = price.Price.FormatPrice(true), CampaignPrice = price.CampaignPrice?.FormatPrice(true), IsFreeGift = orderRow.IsAutoGenerated }; if (orderRow.CampaignID == Guid.Empty) { return(model); } var campaign = _moduleECommerce.Campaigns.GetCampaign(orderRow.CampaignID, _moduleECommerce.AdminToken); if (campaign == null) { return(model); } var requestModel = _requestModelAccessor.RequestModel; var channel = campaign.Data.Channels.Find(x => x.ChannelId == requestModel.ChannelModel.SystemId); if (channel != null && channel.CampainPage != null && channel.CampainPage.EntitySystemId != Guid.Empty) { model.CampaignLink = channel.CampainPage.MapTo <LinkModel>()?.Href; } return(model); }
private decimal GetTotalPrice(ProductPriceModel.PriceItem campaignPrice, bool includeVat, OrderRow orderRow) { if (campaignPrice != null) { var totalExcludingVat = campaignPrice.Price * orderRow.Quantity; var totalIncludingVat = campaignPrice.PriceWithVat * orderRow.Quantity; return(includeVat ? totalIncludingVat : totalExcludingVat); } else { return(includeVat ? orderRow.TotalIncludingVat : orderRow.TotalExcludingVat); } }
private ProductPriceModel.PriceItem GetTotalCampaignPrice(ProductPriceModel.PriceItem campaignPrice, Currency currency, OrderRow orderRow, bool includeVat) { if (campaignPrice == null) { return(null); } var totalExcludingVat = campaignPrice.Price * orderRow.Quantity; var totalIncludingVat = campaignPrice.PriceWithVat * orderRow.Quantity; return(new ProductPriceModel.PriceItem(decimal.MinusOne, totalExcludingVat, orderRow.VatRate, totalIncludingVat) { FormatPrice = b => currency.Format(includeVat ? totalIncludingVat : totalExcludingVat, b, CultureInfo.CurrentUICulture) }); }
private OrderRowViewModel BuildOrderRow(OrderRow orderRow, Currency currency, bool includeVat, SalesOrder salesOrder) { var variant = _variantService.Get(orderRow.ArticleNumber); var baseProduct = _baseProductService.Get(variant?.BaseProductSystemId ?? Guid.Empty); var name = variant?.Localizations.CurrentCulture.Name.NullIfWhiteSpace() ?? baseProduct?.Localizations.CurrentCulture.Name.NullIfWhiteSpace() ?? orderRow.ArticleNumber; var url = variant == null ? null : _urlService.GetUrl(variant); var image = (variant?.Fields.GetValue <IList <Guid> >(SystemFieldDefinitionConstants.Images)?.FirstOrDefault() ?? baseProduct?.Fields.GetValue <IList <Guid> >(SystemFieldDefinitionConstants.Images)?.FirstOrDefault()) .MapTo <ImageModel>(); var price = GetPriceModel(orderRow, currency, includeVat, salesOrder); var totalPrice = new ProductPriceModel.PriceItem(decimal.MinusOne, orderRow.TotalExcludingVat, orderRow.VatRate, orderRow.TotalIncludingVat) { FormatPrice = b => currency.Format(includeVat ? orderRow.TotalIncludingVat : orderRow.TotalExcludingVat, b, CultureInfo.CurrentUICulture) }; var totalCampaignPrice = GetTotalCampaignPrice(price.CampaignPrice, currency, orderRow, includeVat); var unitOfMeasurement = orderRow.UnitOfMeasurementSystemId.HasValue ? _unitOfMeasurementService.Get(orderRow.UnitOfMeasurementSystemId.Value) : null; var unitOfMeasurementFormatString = $"0.{new string('0', unitOfMeasurement?.DecimalDigits ?? 0)}"; var model = new OrderRowViewModel { ArticleNumber = orderRow.ArticleNumber, Name = name, RowSystemId = orderRow.SystemId, Quantity = orderRow.Quantity, QuantityString = orderRow.Quantity.ToString(unitOfMeasurementFormatString, CultureInfo.CurrentUICulture.NumberFormat).Replace(",", "."), Url = url, Image = image?.GetUrlToImage(Size.Empty, new Size(200, 120)).Url, TotalPrice = totalPrice.FormatPrice(true), TotalCampaignPrice = totalCampaignPrice is null ? string.Empty : totalCampaignPrice.FormatPrice(true), Price = price.Price.FormatPrice(true), CampaignPrice = price.CampaignPrice?.FormatPrice(true), IsFreeGift = orderRow.OrderRowType == OrderRowType.Discount, TotalPriceIncludingVat = totalPrice.PriceWithVat, TotalPriceExcludingVat = totalPrice.Price, TotalCampaignPriceIncludingVat = totalCampaignPrice is null ? null : totalCampaignPrice.PriceWithVat, TotalCampaignPriceExcludingVat = totalCampaignPrice is null ? null : totalCampaignPrice.Price }; return(model); }
private ProductPriceModel GetPriceModel(OrderRow orderRow, Currency currency, bool includeVat, SalesOrder salesOrder) { ProductPriceModel.PriceItem campaignPrice = null; if (salesOrder.Rows.Any(c => c.OrderRowType == OrderRowType.Discount && c.ArticleNumber == orderRow.ArticleNumber)) { bool haveCampaignPrice = false; decimal priceExcludingVat = orderRow.UnitPriceExcludingVat; decimal priceIncludingVat = orderRow.UnitPriceIncludingVat; foreach (var discount in salesOrder.DiscountInfo.Where(x => x.SourceOrderRowSystemIds != null && x.SourceOrderRowSystemIds.Contains(orderRow.SystemId))) { var discountRow = salesOrder.Rows.Single(x => x.SystemId == discount.ResultOrderRowSystemId); if (discountRow.OrderRowType == OrderRowType.Discount && discountRow.ArticleNumber == orderRow.ArticleNumber) { priceExcludingVat += discountRow.UnitPriceExcludingVat; priceIncludingVat += discountRow.UnitPriceIncludingVat; haveCampaignPrice = true; } } if (haveCampaignPrice) { campaignPrice = new ProductPriceModel.PriceItem(0, priceExcludingVat, orderRow.VatRate, priceIncludingVat) { FormatPrice = b => currency.Format(includeVat ? priceIncludingVat : priceExcludingVat, b, CultureInfo.CurrentUICulture) }; } } var price = new ProductPriceModel.PriceItem(decimal.MinusOne, orderRow.UnitPriceExcludingVat, orderRow.VatRate, orderRow.UnitPriceIncludingVat) { FormatPrice = b => currency.Format(includeVat ? orderRow.UnitPriceIncludingVat : orderRow.UnitPriceExcludingVat, b, CultureInfo.CurrentUICulture) }; return(new ProductPriceModel { CampaignPrice = campaignPrice, Price = price }); }
private ProductPriceModel GetPriceModel(OrderRowCarrier orderRow, Currency currency, bool includeVat) { ProductPriceModel.CampaignPriceItem campaignPrice = null; if (orderRow.CampaignID != Guid.Empty) { var campaignPriceWithVat = orderRow.UnitCampaignPrice * (1 + orderRow.VATPercentage); campaignPrice = new ProductPriceModel.CampaignPriceItem(0, orderRow.UnitCampaignPrice, orderRow.VATPercentage, campaignPriceWithVat, orderRow.CampaignID) { FormatPrice = b => currency.Format(includeVat ? campaignPriceWithVat : orderRow.UnitCampaignPrice, b, CultureInfo.CurrentUICulture) }; } var priceWithVat = orderRow.UnitListPrice * (1 + orderRow.VATPercentage); var price = new ProductPriceModel.PriceItem(decimal.MinusOne, orderRow.UnitListPrice, orderRow.VATPercentage, priceWithVat) { FormatPrice = b => currency.Format(includeVat ? priceWithVat : orderRow.UnitListPrice, b, CultureInfo.CurrentUICulture) }; return(new ProductPriceModel { CampaignPrice = campaignPrice, Price = price }); }