示例#1
0
        public ActionResult <decimal> GetExcludedAmount(decimal totalAmount)
        {
            var vatCalculator = new VatCalculator();
            var vatRate       = taxRepo.getVatRate();

            return(vatCalculator.excludeVat(totalAmount, vatRate));
        }
示例#2
0
        public ActionResult <decimal> GetTotalAmount(decimal amount)
        {
            var vatCalculator = new VatCalculator();
            var vatRate       = taxRepo.getVatRate();

            return(vatCalculator.calculateVat(amount, vatRate));
        }
示例#3
0
        public bool PlaceOrder(OrderDto orderDto, int customerId)
        {
            // load the customer
            Customer customer = _customerRepository.Load(customerId);

            if (customer == null)
            {
                throw new CustomerNotFoundException();
            }

            // do not proceed with order if amount is 0
            if (orderDto.Amount == 0)
            {
                return(false);
            }

            // get the appropriate vat for the customers country
            orderDto.VAT = VatCalculator.GetVat(customer.Country);

            // build and save the order
            var order = OrderMapper.Map(orderDto);

            order.CustomerId = customerId;

            _orderRepository.Add(order);

            return(true);
        }
        public void OrderWithManyItemsHadRelativelyLargeDeviationWhenCalculatingVatOverPartsInsteadOfOverTotal()
        {
            IOC.IntegrationTest();
            IOC.SettingsService.InclVat();
            IOC.VatCalculationStrategy.OverTotal();

            var productInfo1 = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(7500, 2, 21m);
            var productInfo2 = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(200, 25, 21m);
            var productInfo3 = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(200, 50, 21m);
            var productInfo4 = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(200, 50, 21m);
            var productInfo5 = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(200, 25, 21m);
            var order        = DefaultFactoriesAndSharedFunctionality.CreateIncompleteOrderInfo(productInfo1, productInfo2, productInfo3, productInfo4, productInfo5);

            var directlyCalculatedVat = VatCalculator.VatAmountFromWithVat(45000, 21m);

            Assert.AreEqual(7810, directlyCalculatedVat);

            Assert.AreEqual(7810, order.VatTotalInCents);

            Assert.AreEqual(45000, order.GrandtotalInCents);

            Assert.AreEqual(45000 - 7810, order.SubtotalInCents);

            Console.WriteLine(directlyCalculatedVat);
            Console.WriteLine(order.VatTotalInCents);
            Console.WriteLine(order.GrandtotalInCents);


            // todo: this might be a concern:
            // var orderNewDiscount = order.DiscountAmountWithVatInCents;
            // Assert.AreEqual(x, orderNewDiscount); where x should not be 0 but orderNewDiscount is 0
        }
示例#5
0
        public void CalculateVat(int amount, VatCategoryType categoryType, int expectedResult)
        {
            VatCalculator calculator = new VatCalculator();

            decimal result = calculator.CalculateVat((decimal)amount, categoryType);

            Assert.That(result, Is.EqualTo((decimal)expectedResult));
        }
示例#6
0
        private void UseCurrency(string currencyCode = "IQD")
        {
            var currencyService = Substitute.For <CurrencyService>();

            currencyService.Get(Arg.Any <Guid>()).Returns(new Currency(currencyCode));

            sut = new VatCalculator(currencyService);
        }
示例#7
0
        public void Test_CalculateVat_WithVatRate(decimal amount, decimal vatRate, decimal expectedTotalAmount)
        {
            // Act
            var     vatCalculator     = new VatCalculator();
            decimal actualTotalAmount = vatCalculator.calculateVat(amount, vatRate);

            // Assert
            Assert.Equal(expectedTotalAmount, actualTotalAmount);
        }
示例#8
0
        public void Test_CalculateExcludeVat(decimal totalAmount, decimal vatRate, decimal expectedAmount)
        {
            // Act
            var     vatCalculator = new VatCalculator();
            decimal actualAmount  = vatCalculator.excludeVat(totalAmount, vatRate);

            // Assert
            Assert.True(expectedAmount == actualAmount, $"expected {expectedAmount}, actual {actualAmount}");
        }
        public int GetPrice(ISellableUnitPriceSource unit, bool vat, bool discounted = true, bool sale = true, bool ranged = true)
        {
            var unitDiscounted = GetOriginalPrice(unit, discounted, sale, ranged);

            if (vat && !unit.PricesAreIncludingVAT)
            {
                return(VatCalculator.WithVat(unitDiscounted, unit.Vat));
            }
            if (!vat && unit.PricesAreIncludingVAT)
            {
                return(VatCalculator.WithoutVat(unitDiscounted, unit.Vat));
            }
            return(unitDiscounted);
        }
        public void Test_TexController_CalculateVat_with_repo(decimal amount, decimal vatRate, decimal expectedTotalAmount)
        {
            // Arrange
            var vatCalculator = new VatCalculator();
            var mock          = new Mock <IRepository>();

            mock.Setup(r => r.getVatRate()).Returns(vatRate);
            var repo       = mock.Object;
            var vatManager = new VatManager(repo, vatCalculator);

            // Act
            var actualTotalAmount = vatManager.calculateVat(amount);

            // Assert
            Assert.Equal(expectedTotalAmount, actualTotalAmount);
            mock.Verify(r => r.getVatRate(), Times.Once);
        }
        public void Test_TaxController_excludeVat_WithRepo(decimal totalAmount, decimal vatRate, decimal expectedAmount)
        {
            // Arrange
            var vatCalculator = new VatCalculator();
            var mock          = new Mock <IRepository>();

            mock.Setup(r => r.getVatRate()).Returns(vatRate);

            var repo       = mock.Object;
            var vatManager = new VatManager(repo, vatCalculator);

            // Act
            var actualAmount = vatManager.excludeVat(from: totalAmount);

            // Assert
            Assert.True(expectedAmount == actualAmount, $"expected {expectedAmount}, actual {actualAmount}");
        }
示例#12
0
        public void AmountDiscountIncludingVat()
        {
            IOC.IntegrationTest();
            var productInfo = DefaultFactoriesAndSharedFunctionality.CreateProductInfo(1000, 1, 10);
            var order       = DefaultFactoriesAndSharedFunctionality.CreateIncompleteOrderInfo(productInfo);
            var discount    = DefaultFactoriesAndSharedFunctionality.CreateDefaultOrderDiscountWithAmount(500, DiscountOrderCondition.None, 0);

            IOC.OrderDiscountRepository.SetupFake(discount);
            order.OrderDiscountsFactory = () => IO.Container.Resolve <IOrderDiscountService>().GetApplicableDiscountsForOrder(order, order.Localization).ToList();
            order.ResetDiscounts();

            var absoluteDiscountAmount    = 500;
            var AverageOrderVatPercentage = 10m;
            var vatAmountFromWithVat      = VatCalculator.VatAmountFromWithVat(absoluteDiscountAmount, AverageOrderVatPercentage);

            //var vatAmountFromWithoutVat = VatCalculator.VatAmountFromWithoutVat(absoluteDiscountAmount, AverageOrderVatPercentage);
            Assert.AreEqual(45, vatAmountFromWithVat);

            // berekende discount vat = 45,45454545..
            // correct zou zijn 500 - 454 = 46 (zie hieronder)

            // full amount: 909
            // discounted amount: 455
            // discount: 909 - 455 = 454
            //  'discount vat': 500 - 454 = 46

            Assert.AreEqual(1000, order.GetAmount(true, false, true));
            Assert.AreEqual(909, order.GetAmount(false, false, true));
            Assert.AreEqual(500, order.GetAmount(true, true, true));
            Assert.AreEqual(455, order.GetAmount(false, true, true));

            var price = new SimplePrice(order, order.Localization);

            Assert.AreEqual(1000, price.BeforeDiscount.WithVat.ValueInCents);
            Assert.AreEqual(909, price.BeforeDiscount.WithoutVat.ValueInCents);
            Assert.AreEqual(91, price.BeforeDiscount.Vat.ValueInCents);
            Assert.AreEqual(500, price.WithVat.ValueInCents);
            Assert.AreEqual(455, price.WithoutVat.ValueInCents);
            Assert.AreEqual(45, price.Vat.ValueInCents);

            Assert.AreEqual(500, price.Discount.WithVat.ValueInCents);
            Assert.AreEqual(454, price.Discount.WithoutVat.ValueInCents);
        }
示例#13
0
 public void WithoutVatFromWithVat(int amountWithVat, int amountWithoutVat)
 {
     Assert.AreEqual(amountWithoutVat, VatCalculator.WithoutVat(amountWithVat, 19));
 }
示例#14
0
 public void VatAmountFromWithoutVat(int amountWithVat, int vatAmount)
 {
     Assert.AreEqual(vatAmount, VatCalculator.VatAmountFromWithoutVat(amountWithVat, 19));
 }
示例#15
0
 public void WithoutVat()
 {
     Assert.AreEqual(84, VatCalculator.WithoutVat(100, 19));
     Assert.AreEqual(85, VatCalculator.WithoutVat(101, 19));
 }
示例#16
0
 public void CaclulatingBackAndForthShouldReturnSamePrice(int amount)
 {
     Assert.AreEqual(amount, VatCalculator.WithoutVat(VatCalculator.WithVat(amount, 19), 19));
     Console.WriteLine(VatCalculator.WithoutVat(amount, 19));
     Assert.AreEqual(amount, VatCalculator.WithVat(VatCalculator.WithoutVat(amount, 19), 19));
 }
示例#17
0
    public void InitOrderGrid(ArrayList cartTable, GridView grdOrder)
    {
        if (cartTable.Count > 0)
        {
            DataColumn colQuantity;
            DataColumn colTotalPrice;

            colQuantity              = new DataColumn();
            colQuantity.DataType     = System.Type.GetType("System.Int32");
            colQuantity.ColumnName   = "quantity";
            colQuantity.DefaultValue = 1;

            colTotalPrice            = new DataColumn();
            colTotalPrice.DataType   = System.Type.GetType("System.Double");
            colTotalPrice.ColumnName = "total";

            //String sql = GetCartListSql(cartTable);
            //DataTable dtOrder = DataAccessHelper.GetInstance().GetDataTable(sql);
            grdOrder.Columns[0].HeaderText = "&#160;&#160;" + (string)base.GetGlobalResourceObject("string", "lblCategory");
            grdOrder.Columns[1].HeaderText = (string)base.GetGlobalResourceObject("string", "productdescription");
            //grdOrder.Columns[2].HeaderText = (string)base.GetGlobalResourceObject("string", "price");
            grdOrder.Columns[3].HeaderText = (string)base.GetGlobalResourceObject("string", "price");
            grdOrder.Columns[4].HeaderText = (string)base.GetGlobalResourceObject("string", "quantity");
            grdOrder.Columns[5].HeaderText = (string)base.GetGlobalResourceObject("string", "total");
            //dtOrder.Columns.Add(colTotalPrice);
            // dtOrder.Columns.Add(colQuantity);

            //int rowCount = dtOrder.Rows.Count;
            DataTable dtOrder = new DataTable();
            dtOrder.Columns.Add("articlecode");
            dtOrder.Columns.Add("productType");
            dtOrder.Columns.Add("title");
            dtOrder.Columns.Add("subtitle");
            dtOrder.Columns.Add("publisher");
            dtOrder.Columns.Add("price");
            dtOrder.Columns.Add("quantity");
            dtOrder.Columns.Add("total");
            dtOrder.Columns.Add("vatpc");
            dtOrder.Columns.Add("deliverytime");
            int i = 0;

            enu = cartTable.GetEnumerator();


            while (enu.MoveNext())
            {
                DataRow row = dtOrder.NewRow();
                order = (Order)enu.Current;



                row["articlecode"]  = order.articlecode.ToString();
                row["productType"]  = order.productType.ToString();
                row["publisher"]    = order.publisherName.ToString();
                row["title"]        = order.productdescription.ToString();
                row["subtitle"]     = order.subtitle.ToString();
                row["deliverytime"] = order.deliveryTime;


                double discount = Math.Round((order.price * (order.discountpc / 100)), 2);

                double price = Math.Round((order.price - discount), 2);

                row["price"]    = string.Format("{0:F2}", price);
                row["quantity"] = order.quantity.ToString();
                row["vatpc"]    = string.Format("{0:F2}", order.vatpc);
                qty            += (int)order.quantity;



                double total = Math.Round((price * order.quantity), 2);


                double vatIncludePrice = VatCalculator.GetVatIncludedPrice(total, order.vatpc);

                totalVat += (vatIncludePrice - total);

                totalPrice  += total;
                row["total"] = string.Format("{0:F2}", total);
                dtOrder.Rows.Add(row);
                i++;
            }



            totalVat            = Math.Round(totalVat, 2);
            grdOrder.DataSource = dtOrder;
            grdOrder.DataBind();

            double totalShippingCosts = CalculateShippingCostsWithVat(cartTable);

            double grandTotalPrice = Math.Round((totalPrice + totalVat + totalShippingCosts), 2);

            ViewState["GrandTotalPrice"] = grandTotalPrice;

            ViewState["TotalVat"]      = totalVat;
            ViewState["TotalNetPrice"] = totalPrice;

            ViewState["TotalShippingCosts"] = totalShippingCosts;

            // Session["gtotal"] = string.Format("{0:F2}", grandTotoal);
            lblSubTotal.Text     = "€ " + string.Format("{0:F2}", totalPrice.ToString()) + " ";
            lblVat.Text          = "€ " + string.Format("{0:F2}", totalVat.ToString()) + " ";
            lblTotal.Text        = "€ " + string.Format("{0:F2}", grandTotalPrice.ToString()) + " ";
            lblShippingCost.Text = "€ " + string.Format("{0:F2}", totalShippingCosts.ToString()) + " ";
        }
        else
        {
            grdOrder.DataSource = null;
            grdOrder.DataBind();
            grdOrder.Visible     = false;
            lblSubTotal.Text     = "€ 0 ";
            lblVat.Text          = "€ 0 ";
            lblTotal.Text        = "€ 0 ";
            lblShippingCost.Text = "€ 0 ";
        }
    }
 public int WithVat(bool pricesAreIncludingVAT, int originalTotal, decimal vat, int summedParts)
 {
     return(pricesAreIncludingVAT ? originalTotal : VatCalculator.WithVat(originalTotal, vat));
 }
示例#19
0
    public void InitOrderGrid(ArrayList cartTable, GridView grdOrder)
    {
        if (cartTable.Count > 0)
        {
            DataColumn colQuantity;
            DataColumn colTotalPrice;

            colQuantity              = new DataColumn();
            colQuantity.DataType     = System.Type.GetType("System.Int32");
            colQuantity.ColumnName   = "quantity";
            colQuantity.DefaultValue = 1;

            colTotalPrice            = new DataColumn();
            colTotalPrice.DataType   = System.Type.GetType("System.Double");
            colTotalPrice.ColumnName = "total";

            //String sql = GetCartListSql(cartTable);
            //DataTable dtOrder = dbHandler.GetDataTable(sql);
            grdOrder.Columns[0].HeaderText = "&#160;&#160;" + (string)base.GetGlobalResourceObject("string", "lblCategory");
            grdOrder.Columns[1].HeaderText = (string)base.GetGlobalResourceObject("string", "productdescription");
            //grdOrder.Columns[2].HeaderText = (string)base.GetGlobalResourceObject("string", "price");
            grdOrder.Columns[3].HeaderText = (string)base.GetGlobalResourceObject("string", "price");
            grdOrder.Columns[4].HeaderText = (string)base.GetGlobalResourceObject("string", "quantity");
            grdOrder.Columns[5].HeaderText = (string)base.GetGlobalResourceObject("string", "total");
            //dtOrder.Columns.Add(colTotalPrice);
            // dtOrder.Columns.Add(colQuantity);

            //int rowCount = dtOrder.Rows.Count;
            DataTable dtOrder = new DataTable();
            dtOrder.Columns.Add("articlecode");
            dtOrder.Columns.Add("productType");
            dtOrder.Columns.Add("title");
            dtOrder.Columns.Add("subtitle");
            dtOrder.Columns.Add("publisher");
            dtOrder.Columns.Add("price");
            dtOrder.Columns.Add("quantity");
            dtOrder.Columns.Add("total");
            dtOrder.Columns.Add("vatpc");
            dtOrder.Columns.Add("deliverytime");
            int       i         = 0;
            ArrayList shopItems = (ArrayList)Session["order"];
            enu = shopItems.GetEnumerator();
            while (enu.MoveNext())
            {
                DataRow row = dtOrder.NewRow();
                order = (Order)enu.Current;
                row["articlecode"]  = order.articlecode.ToString();
                row["productType"]  = order.productType.ToString();
                row["publisher"]    = order.publisherName.ToString();
                row["title"]        = order.productdescription.ToString();
                row["subtitle"]     = order.subtitle.ToString();
                row["price"]        = string.Format("{0:F2}", order.vatIncludedPrice);
                row["quantity"]     = order.quantity.ToString();
                row["vatpc"]        = string.Format("{0:F2}", order.vatpc);
                row["deliverytime"] = order.deliveryTime;
                qty += (int)order.quantity;
                Session["CartItems"] = qty;
                double total = Math.Round((order.vatIncludedPrice * order.quantity), 2);


                double vatIncludePrice = VatCalculator.GetVatIncludedPrice(total, order.vatpc);

                totalPrice  += total;
                row["total"] = string.Format("{0:F2}", total);
                dtOrder.Rows.Add(row);
                i++;
            }


            grdOrder.DataSource = dtOrder;
            grdOrder.DataBind();
            lblHeaderTotPrice.Text = (string)base.GetGlobalResourceObject("string", "total") + "  " + (string)base.GetGlobalResourceObject("string", "price");
            lblTotalPrice.Text     = string.Format("{0:F2}", totalPrice);
        }
        else
        {
            grdOrder.DataSource = null;
            grdOrder.DataBind();
            lblTotalPrice.Text   = "0";
            grdOrder.Visible     = false;
            lblEmptyCart.Visible = true;
            btnContinue.Enabled  = false;
        }
    }
 public int Vat(bool pricesIncludingVat, int originalTotal, decimal vat, int summedParts)
 {
     return(VatCalculator.VatAmountFromOriginal(pricesIncludingVat, originalTotal, vat));
 }