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);
        }
示例#2
0
        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);
     }
 }
示例#4
0
        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)
            });
        }
示例#5
0
        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);
        }
示例#6
0
        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
            });
        }
示例#7
0
        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
            });
        }