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