Beispiel #1
0
        public void CalculateTotalOrderRowsVat_CalledByCalculateFromCarrier()
        {
            var row = new OrderRowCarrier
            {
                UnitListPrice = 1.67226891m,
                // Currency decimals in this example = 3
                TotalPrice    = 1.672m,
                VATPercentage = 0.19m,
                Quantity      = 1
            };
            var skipRow = new OrderRowCarrier
            {
                UnitListPrice = 1.67226891m,
                // Currency decimals in this example = 3
                TotalPrice    = 1.672m,
                VATPercentage = 0.19m,
                Quantity      = 1,
                CarrierState  =
                {
                    IsMarkedForCreating = false,
                    IsMarkedForDeleting = true
                }
            };

            var order = new OrderCarrier();

            order.OrderRows.Add(row);
            order.OrderRows.Add(row);
            order.OrderRows.Add(skipRow);

            sut.CalculateFromCarrier(order, null);

            Assert.Equal(0.636m, order.TotalOrderRowVAT);
        }
        public static PaymentInfoRowCarrier Build(OrderRowCarrier row, Guid paymentInfoID, int index)
        {
            var result = new PaymentInfoRowCarrier(row, paymentInfoID, index);

            result.TotalPrice     = Math.Abs(row.TotalPrice);
            result.TotalVatAmount = Math.Abs(row.TotalVATAmount);
            return(result);
        }
Beispiel #3
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);
        }
        protected virtual void CalculateOrderRowTotal(OrderRowCarrier orderRowCarrier, Currency currency)
        {
            var price = orderRowCarrier.CampaignID != Guid.Empty
                ? orderRowCarrier.UnitCampaignPrice
                : orderRowCarrier.UnitListPrice;

            var unitDiscount = GetUnitDiscountAmount(currency, price, orderRowCarrier.DiscountPercentage);

            orderRowCarrier.DiscountAmount = unitDiscount * orderRowCarrier.Quantity;
            orderRowCarrier.TotalPrice     = Math.Round(price - unitDiscount, currency.GetDecimals()) * orderRowCarrier.Quantity;
        }
Beispiel #5
0
        public virtual void CalculateOrderRowVat(OrderCarrier order, OrderRowCarrier orderRowCarrier)
        {
            var currency = GetCurrency(order);

            var price = orderRowCarrier.CampaignID != Guid.Empty
                ? orderRowCarrier.UnitCampaignPrice
                : orderRowCarrier.UnitListPrice;

            price -= orderRowCarrier.DiscountAmount / orderRowCarrier.Quantity;

            orderRowCarrier.TotalVATAmount = Math.Round(price * orderRowCarrier.VATPercentage, currency.GetDecimals()) * orderRowCarrier.Quantity;
        }
        public void CalculateOrderRowTotal_NoRoundingIfNoOrderAvailable()
        {
            var row = new OrderRowCarrier
            {
                UnitListPrice = 1.67226891m,
                Quantity      = 1
            };

            sut.CalculateOrderRowTotal(row);

            Assert.Equal(1.67226891m, row.TotalPrice);
        }
        public void Build_OrderRowCarrier(decimal totalPrice, decimal totalVat, decimal expectedPrice, decimal expectedVat)
        {
            var row = new OrderRowCarrier
            {
                // We assume the TotalPrice was rounded by OrderTotalCalculator
                TotalPrice     = totalPrice,
                TotalVATAmount = totalVat,
                VATPercentage  = 0.19m
            };
            var paymentInfoID = Guid.NewGuid();

            var result = PaymentInfoRowBuilder.Build(row, paymentInfoID, 1);

            Assert.Equal(expectedPrice, result.TotalPrice);
            Assert.Equal(expectedVat, result.TotalVatAmount);
        }
        public virtual void CalculateOrderRowTotal(OrderRowCarrier orderRowCarrier)
        {
            var      order    = CalculatorContext.GetCurrentOrderCarrier();
            Currency currency = null;

            if (order != null)
            {
                currency = currencyService.Get(order.CurrencyID);
            }

            if (currency == null)
            {
                currency = new Currency(string.Empty);
            }

            CalculateOrderRowTotal(orderRowCarrier, currency);
        }
Beispiel #9
0
        public void CalculateTotalOrderRowsVat_TakeDiscountAmountIntoAccount()
        {
            var row = new OrderRowCarrier
            {
                UnitListPrice  = 100,
                DiscountAmount = 40,
                TotalPrice     = 160m,
                VATPercentage  = 0.25m,
                Quantity       = 2
            };

            var order = new OrderCarrier();

            order.OrderRows.Add(row);

            sut.CalculateTotalOrderRowsVat(order);

            Assert.Equal(40, order.TotalOrderRowVAT);
        }
Beispiel #10
0
        public void CalculateOrderRowVat()
        {
            var row = new OrderRowCarrier
            {
                UnitListPrice = 1.67226891m,
                // Currency decimals in this example = 3
                TotalPrice    = 1.672m,
                VATPercentage = 0.19m,
                Quantity      = 1
            };

            var order = new OrderCarrier();

            using (CalculatorContext.Use(order))
            {
                sut.CalculateOrderRowVat(row);
            }

            Assert.Equal(0.318m, row.TotalVATAmount);
            Assert.Equal(1.99m, row.TotalPriceWithVAT);
        }
Beispiel #11
0
        public void CalculateOrderRowVat2()
        {
            UseCurrency("EUR");
            var row = new OrderRowCarrier
            {
                UnitListPrice = 1.60483871m,
                // Currency decimals in this example = 2
                TotalPrice    = 1.6m,
                VATPercentage = 0.24m,
                Quantity      = 1
            };

            var order = new OrderCarrier();

            using (CalculatorContext.Use(order))
            {
                sut.CalculateOrderRowVat(row);
            }

            Assert.Equal(0.39m, row.TotalVATAmount);
            Assert.Equal(1.99m, row.TotalPriceWithVAT);
        }
Beispiel #12
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
            });
        }
Beispiel #13
0
 public virtual void CalculateOrderRowVat(OrderRowCarrier orderRowCarrier)
 {
     CalculateOrderRowVat(null, orderRowCarrier);
 }
        private void AddDeliveryRow(OrderCarrier orderCarrier, DeliveryCarrier deliveryCarrier, OrderRowCarrier orderRowCarrier, SecurityToken token)
        {
            if (orderRowCarrier == null)
            {
                return;
            }

            if (deliveryCarrier != null && !deliveryCarrier.CarrierState.IsMarkedForDeleting)
            {
                orderRowCarrier.DeliveryID = deliveryCarrier.ID;
            }
            else
            {
                AddDeliveryRow(orderCarrier, deliveryCarrier ?? new DeliveryCarrier(), orderRowCarrier, token);
            }
        }