private void CreateTestFixedDiscountRow()
 {
     _order.AddDiscount(Item.FixedDiscount()
                        .SetDiscountId("1")
                        .SetAmountIncVat(100.00M)
                        .SetDescription("FixedDiscount"));
 }
        public void TestIncvatOrderWithFixedDiscountAsExvatOnlyHasPriceIncludingVatTrue()
        {
            CreateOrderBuilder order = CreateOnlyIncvatOrderAndFeeRowsOrder();

            order.
            AddDiscount(
                Item.FixedDiscount()
                .SetAmountExVat(10.0M)
                .SetDiscountId("fixedDiscount")
                .SetName("fixedDiscount: 10e")
                )
            ;
            const bool expectPriceIncludingVatTrue = true;

            CreateOrderEuRequest request = order.UseInvoicePayment().PrepareRequest();

            // all order rows
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PricePerUnit, 72.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PriceIncludingVat, expectPriceIncludingVatTrue);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PricePerUnit, 33.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PriceIncludingVat, expectPriceIncludingVatTrue);
            // all shipping fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PricePerUnit, 17.60);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PriceIncludingVat, expectPriceIncludingVatTrue);
            // all invoice fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PricePerUnit, 8.80);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PriceIncludingVat, expectPriceIncludingVatTrue);
            // all discount rows
            // expected: fixedDiscount: 10 exvat => split across 10*60/(60+30) @20% => 6.6666...7*1.20=8 and  10*30/(60+30) @10% => 3.33333...*1.20
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PricePerUnit, -8); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[4].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PriceIncludingVat, expectPriceIncludingVatTrue);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PricePerUnit, -3.67); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[5].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PriceIncludingVat, expectPriceIncludingVatTrue);

            // See file IntegrationTest/WebService/Payment/FixedDiscountRowsIntegrationTest for service response tests.
        }
        public void TestMixedOrderWithFixedDiscountAsIncvatOnlyHasPriceIncludingVatFalse()
        {
            CreateOrderBuilder order = CreateMixedExvatAndIncvatOrderAndFeeRowsOrder();

            order.
            AddDiscount(
                Item.FixedDiscount()
                .SetAmountIncVat(10.0M)
                //.SetVatPercent(10)
                .SetDiscountId("fixedDiscount")
                .SetName("fixedDiscount: 10i")
                )
            ;
            CreateOrderEuRequest request = order.UseInvoicePayment().PrepareRequest();

            // all order rows
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PricePerUnit, 60.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PriceIncludingVat, false);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PricePerUnit, 30.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PriceIncludingVat, false);
            // all shipping fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PricePerUnit, 16.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PriceIncludingVat, false);
            // all invoice fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PricePerUnit, 8.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PriceIncludingVat, false);
            // all discount rows
            // expected: fixedDiscount: 10 incvat => split across 10i *(72/72+33) @20% + 10i *(33/72+33) @10% => 6.8571i @20% + 3.1428i @10% =>5.71 + 2.86
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PricePerUnit, -5.71); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[4].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PriceIncludingVat, false);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PricePerUnit, -2.86); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[5].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PriceIncludingVat, false);

            // See file IntegrationTest/WebService/Payment/FixedDiscountRowsIntegrationTest for service response tests.
        }
        public void TestIncvatOrderWithFixedDiscountAsExvatAndVatpercentHasPriceIncludingVatFalse()
        {
            CreateOrderBuilder order = CreateOnlyIncvatOrderAndFeeRowsOrder();

            order.
            AddDiscount(
                Item.FixedDiscount()
                .SetAmountExVat(10.0M)
                .SetVatPercent(10)
                .SetDiscountId("fixedDiscount")
                .SetName("fixedDiscount: 10e@10%")
                )
            ;
            const bool expectingPricesIncludingVatFalse = true;

            CreateOrderEuRequest request = order.UseInvoicePayment().PrepareRequest();

            // all order rows
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PricePerUnit, 72.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PriceIncludingVat, expectingPricesIncludingVatFalse);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PricePerUnit, 33.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PriceIncludingVat, expectingPricesIncludingVatFalse);
            // all shipping fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PricePerUnit, 17.60);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PriceIncludingVat, expectingPricesIncludingVatFalse);
            // all invoice fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PricePerUnit, 8.80);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PriceIncludingVat, expectingPricesIncludingVatFalse);
            // all discount rows
            // expected: fixedDiscount: 10exvat @10% = -11.0M0
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PricePerUnit, -11.0M);
            AssertEquals(request.CreateOrderInformation.OrderRows[4].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PriceIncludingVat, expectingPricesIncludingVatFalse);
            Assert.That(request.CreateOrderInformation.OrderRows.Length, Is.EqualTo(5));

            // See file IntegrationTest/WebService/Payment/FixedDiscountRowsIntegrationTest for service response tests.
        }
        public void TestMixedOrderWithFixedDiscountAsExvatOnlyHasPriceIncludingVatFalse()
        {
            CreateOrderBuilder order = CreateMixedExvatAndIncvatOrderAndFeeRowsOrder();

            order.
            AddDiscount(
                Item.FixedDiscount()
                .SetAmountExVat(10.0M)
                //.SetVatPercent(10)
                .SetDiscountId("fixedDiscount")
                .SetName("fixedDiscount: 10e")
                );

            CreateOrderEuRequest request = order.UseInvoicePayment().PrepareRequest();

            // all order rows
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PricePerUnit, 60.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[0].PriceIncludingVat, false);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PricePerUnit, 30.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[1].PriceIncludingVat, false);
            // all shipping fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PricePerUnit, 16.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[2].PriceIncludingVat, false);
            // all invoice fee rows
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PricePerUnit, 8.00);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[3].PriceIncludingVat, false);
            // all discount rows
            // expected: fixedDiscount: 10 exvat => split across 10e *(60/60+30) @20% + 10e *(30/60+30) @10% => 6.67e @20% + 3.33e @10%
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PricePerUnit, -6.67); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[4].VatPercent, 20);
            AssertEquals(request.CreateOrderInformation.OrderRows[4].PriceIncludingVat, false);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PricePerUnit, -3.33); //=WS
            AssertEquals(request.CreateOrderInformation.OrderRows[5].VatPercent, 10);
            AssertEquals(request.CreateOrderInformation.OrderRows[5].PriceIncludingVat, false);
        }