/// <summary>
        /// PrepareRequest
        /// </summary>
        /// <exception cref="SveaWebPayValidationException"></exception>
        /// <returns>CreateOrderEuRequest</returns>
        public CreateOrderEuRequest PrepareRequest()
        {
            var errors = ValidateOrder();
            if (errors.Length > 0)
            {
                throw new SveaWebPayValidationException(errors);
            }

            var sveaOrder = new CreateOrderEuRequest {Auth = GetPasswordBasedAuthorization()};

            var formatter = new WebServiceRowFormatter<CreateOrderBuilder>(CrOrderBuilder);
            List<OrderRow> formattedOrderRows = formatter.FormatRows();

            // make order rows and put in CreateOrderInformation
            OrderInfo = new CreateOrderInformation
                {
                    CustomerIdentity = CrOrderBuilder.GetSoapPurifiedCustomer(),
                    ClientOrderNumber = CrOrderBuilder.GetClientOrderNumber(),
                    CreatePaymentPlanDetails = CrOrderBuilder.GetCampaignCode() != null
                                                   ? new CreatePaymentPlanDetails
                                                       {
                                                           CampaignCode = CrOrderBuilder.GetCampaignCode(),
                                                           SendAutomaticGiroPaymentForm =
                                                               CrOrderBuilder.GetSendAutomaticGiroPaymentForm()
                                                       }
                                                   : null,
                    OrderDate = CrOrderBuilder.GetOrderDate(),
                    CustomerReference = CrOrderBuilder.GetCustomerReference(),
                    OrderRows = formattedOrderRows.ToArray()
                };

            sveaOrder.CreateOrderInformation = SetOrderType(OrderInfo);

            return sveaOrder;
        }
Пример #2
0
 public void FillMissingValuesInconsistentThrowsOnlyVat()
 {
     var order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                 .AddOrderRow(Item.OrderRow()
                              .SetVatPercent(10));
     var result = WebServiceRowFormatter <CreateOrderBuilder> .FillMissingOrderRowValues(new WebServiceRowFormatter <CreateOrderBuilder> .Order(order));
 }
Пример #3
0
        public void TestFormatFixedDiscountRowsAmountExVatAndVatPercentWithSingleVatRatePresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(4.0M)
                                                    .SetVatPercent(25)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.FixedDiscount()
                                                    .SetDiscountId("0")
                                                    .SetName("Tess")
                                                    .SetDescription("Tester")
                                                    .SetAmountExVat(1.0M)
                                                    .SetVatPercent(25)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();

            OrderRow newRow = newRows[1];

            Assert.That(newRow.ArticleNumber, Is.EqualTo("0"));
            Assert.That(newRow.Description, Is.EqualTo("Tess: Tester"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-1.0M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
Пример #4
0
        public void TestFormatFixedDiscountRowsAmountExVatAndVatPercentWithDifferentVatRatesPresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetVatPercent(25)
                                                    .SetQuantity(2))
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetVatPercent(6)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.FixedDiscount()
                                                    .SetDiscountId("42")
                                                    .SetName(".SetAmountIncVat(100)")
                                                    .SetDescription("testFormatFixedDiscountRowsWithDifferentVatRatesPresent")
                                                    .SetAmountExVat(111)
                                                    .SetVatPercent(25)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();


            // 100 @25% vat = -80 excl. vat
            OrderRow newRow = newRows[2];

            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-111.00M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
Пример #5
0
        public void TestFormatRelativeDiscountRowsWithSingleVatRatePresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetVatPercent(12)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.RelativeDiscount()
                                                    .SetDiscountId("0")
                                                    .SetName(".SetDiscountPercent(20)")
                                                    .SetDescription("TestFormatRelativeDiscountRowsWithSingleVatRatePresent")
                                                    .SetDiscountPercent(20)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();

            OrderRow newRow = newRows[1];

            Assert.That(newRow.ArticleNumber, Is.EqualTo("0"));
            Assert.That(newRow.Description, Is.EqualTo(".SetDiscountPercent(20): TestFormatRelativeDiscountRowsWithSingleVatRatePresent"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-20.00M));
            Assert.That(newRow.VatPercent, Is.EqualTo(12));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0)); // not the same thing as in our WebPayItem...
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
        public void TestFormatFixedDiscountRowsAmountExVatAndVatPercentWithDifferentVatRatesPresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountExVat(100.00M)
                                                                        .SetVatPercent(25)
                                                                        .SetQuantity(2))
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountExVat(100.00M)
                                                                        .SetVatPercent(6)
                                                                        .SetQuantity(1))
                                                       .AddDiscount(Item.FixedDiscount()
                                                                        .SetDiscountId("42")
                                                                        .SetName(".SetAmountIncVat(100)")
                                                                        .SetDescription("testFormatFixedDiscountRowsWithDifferentVatRatesPresent")
                                                                        .SetAmountExVat(111)
                                                                        .SetVatPercent(25)
                                                                        .SetUnit("st"));

            List<OrderRow> newRows = new WebServiceRowFormatter<CreateOrderBuilder>(order).FormatRows();

            // 100 @25% vat = -80 excl. vat
            OrderRow newRow = newRows[2];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-111.00M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
        public void ConvertOrderBuilderToOrder()
        {
            var orderBuilder = new CreateOrderBuilder(SveaConfig.GetDefaultConfig());
            var order        = WebServiceRowFormatter <CreateOrderBuilder> .ConvertToOrder(orderBuilder);

            Assert.That(order.Original, Is.SameAs(orderBuilder));
        }
Пример #8
0
 public void FillMissingValuesInconsistentThrowsExZeroIncSomething()
 {
     var order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                 .AddOrderRow(Item.OrderRow()
                              .SetAmountIncVat(10M)
                              .SetAmountExVat(0));
     var result = WebServiceRowFormatter <CreateOrderBuilder> .FillMissingOrderRowValues(new WebServiceRowFormatter <CreateOrderBuilder> .Order(order));
 }
Пример #9
0
 public void FillMissingValuesAllValuesSetButInconsistently()
 {
     var order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                 .AddOrderRow(Item.OrderRow()
                              .SetVatPercent(10)
                              .SetAmountExVat(33)
                              .SetAmountIncVat(110));
     var result = WebServiceRowFormatter <CreateOrderBuilder> .FillMissingOrderRowValues(new WebServiceRowFormatter <CreateOrderBuilder> .Order(order));
 }
        public void AllPricesAreSpecifiedIncVatForSingleRowIncVat()
        {
            var orderBuilder = new CreateOrderBuilder(SveaConfig.GetDefaultConfig());

            orderBuilder.AddOrderRow(Item.OrderRow().SetAmountIncVat(12.23M));
            var order = new WebServiceRowFormatter <CreateOrderBuilder> .Order(orderBuilder);

            var resultOrder = WebServiceRowFormatter <CreateOrderBuilder> .CheckIfRowsIncVat(true)(order);

            Assert.That(resultOrder.AllPricesAreSpecifiedIncVat, Is.True);
        }
        public void FillMissingValuesGivenIncAndExVatBothZero()
        {
            var order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                        .AddOrderRow(Item.OrderRow()
                                     .SetAmountExVat(0)
                                     .SetAmountIncVat(0));
            var result = WebServiceRowFormatter <CreateOrderBuilder> .FillMissingOrderRowValues(new WebServiceRowFormatter <CreateOrderBuilder> .Order(order));

            AssertVat(result, 0, 0);
            AssertAmountEx(result, 0, 0);
            AssertAmountInc(result, 0, 0);
        }
        public void FillMissingValuesExVatIncVatAndVatGivenConsistently()
        {
            var order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                        .AddOrderRow(Item.OrderRow()
                                     .SetAmountIncVat(125.00M)
                                     .SetAmountExVat(100.00M)
                                     .SetVatPercent(25));
            var result = WebServiceRowFormatter <CreateOrderBuilder> .FillMissingOrderRowValues(new WebServiceRowFormatter <CreateOrderBuilder> .Order(order));

            AssertVat(result, 0, 25);
            AssertAmountEx(result, 0, 100M);
            AssertAmountInc(result, 0, 125M);
        }
        public void SumByVatSingleRow()
        {
            var orderBuilder = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig());
            var order        = new WebServiceRowFormatter <CreateOrderBuilder> .Order(orderBuilder);

            order.NewOrderRows.Add(Item.OrderRow()
                                   .SetVatPercent(25)
                                   .SetQuantity(1)
                                   .SetAmountExVat(100)
                                   .SetAmountIncVat(125));
            var result = WebServiceRowFormatter <CreateOrderBuilder> .CalculateOrderRowTotals(order);

            Assert.That(result.TotalAmountExVat, Is.EqualTo(100));
            Assert.That(result.TotalAmountIncVat, Is.EqualTo(125));
            Assert.That(result.TotalVatAsAmount, Is.EqualTo(25));
            Assert.That(result.TotalAmountPerVatRateIncVat[25], Is.EqualTo(125));
            Assert.That(result.TotalAmountPerVatRateIncVat.Keys.Count, Is.EqualTo(1));
        }
Пример #14
0
        public void TestFormatFixedDiscountRowsMixedItemVatSpecAmountIncVatWithDifferentVatRatesPresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetAmountIncVat(125.00M)
                                                    .SetQuantity(2))
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountIncVat(106.00M)
                                                    .SetVatPercent(6)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.FixedDiscount()
                                                    .SetDiscountId("42")
                                                    .SetName(".SetAmountIncVat(100)")
                                                    .SetDescription("testFormatFixedDiscountRowsWithDifferentVatRatesPresent")
                                                    .SetAmountIncVat(100)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();

            Assert.That(newRows[2].ArticleNumber, Is.EqualTo("42"));

            // 100*250/356 = 70.22 incl. 25% vat => 14.04 vat as amount
            OrderRow newRow = newRows[2];

            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent (25%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-70.22M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));

            // 100*106/356 = 29.78 incl. 6% vat => 1.69 vat as amount
            newRow = newRows[3];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent (6%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-29.78M));
            Assert.That(newRow.VatPercent, Is.EqualTo(6));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
Пример #15
0
        public void TestFormatInvoiceFeeRows()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddFee(Item.InvoiceFee()
                                               .SetDescription("Tester")
                                               .SetAmountExVat(4)
                                               .SetVatPercent(25)
                                               .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();

            Assert.That(newRows[0].ArticleNumber, Is.Empty);
            Assert.That(newRows[0].Description, Is.EqualTo("Tester"));
            Assert.That(newRows[0].PricePerUnit, Is.EqualTo(4.0));
            Assert.That(newRows[0].VatPercent, Is.EqualTo(25.0));
            Assert.That(newRows[0].DiscountPercent, Is.EqualTo(0));
            Assert.That(newRows[0].NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRows[0].Unit, Is.EqualTo("st"));
        }
Пример #16
0
        private DeliverOrderEuRequest PrepareRequestInternal(bool useIncVatRequestIfPossible)
        {
            var errors = ValidateOrder();

            if (errors.Length > 0)
            {
                throw new SveaWebPayValidationException(errors);
            }

            var formatter = new WebServiceRowFormatter <DeliverOrderBuilder>(_order, useIncVatRequestIfPossible);

            DeliverInvoiceDetails deliverInvoiceDetails = null;

            if (_order.GetOrderType() == CONST.OrderType.INVOICE)
            {
                deliverInvoiceDetails = new DeliverInvoiceDetails
                {
                    InvoiceDistributionType = ConvertInvoiceDistributionType(_order.GetInvoiceDistributionType()),
                    InvoiceIdToCredit       = _order.GetCreditInvoice(),
                    IsCreditInvoice         = _order.GetCreditInvoice().HasValue,
                    NumberOfCreditDays      = _order.GetNumberOfCreditDays(),
                    OrderRows = formatter.FormatRows().ToArray()
                };
            }

            _orderInformation = new DeliverOrderInformation
            {
                DeliverInvoiceDetails = deliverInvoiceDetails,
                OrderType             = ConvertOrderType(_order.GetOrderType()),
                SveaOrderId           = _order.GetOrderId()
            };

            _sveaDeliverOrder = new DeliverOrderEuRequest
            {
                Auth = GetStoreAuthorization(),
                DeliverOrderInformation = _orderInformation
            };

            return(_sveaDeliverOrder);
        }
        /// <summary>
        /// PrepareRequest
        /// </summary>
        /// <exception cref="SveaWebPayValidationException"></exception>
        /// <returns>CreateOrderEuRequest</returns>
        public CreateOrderEuRequest PrepareRequest()
        {
            var errors = ValidateOrder();

            if (errors.Length > 0)
            {
                throw new SveaWebPayValidationException(errors);
            }

            var sveaOrder = new CreateOrderEuRequest {
                Auth = GetPasswordBasedAuthorization()
            };

            var             formatter          = new WebServiceRowFormatter <CreateOrderBuilder>(CrOrderBuilder);
            List <OrderRow> formattedOrderRows = formatter.FormatRows();

            // make order rows and put in CreateOrderInformation
            OrderInfo = new CreateOrderInformation
            {
                CustomerIdentity         = CrOrderBuilder.GetSoapPurifiedCustomer(),
                ClientOrderNumber        = CrOrderBuilder.GetClientOrderNumber(),
                CreatePaymentPlanDetails = CrOrderBuilder.GetCampaignCode() != null
                                                   ? new CreatePaymentPlanDetails
                {
                    CampaignCode = CrOrderBuilder.GetCampaignCode(),
                    SendAutomaticGiroPaymentForm =
                        CrOrderBuilder.GetSendAutomaticGiroPaymentForm()
                }
                                                   : null,
                OrderDate         = CrOrderBuilder.GetOrderDate(),
                CustomerReference = CrOrderBuilder.GetCustomerReference(),
                OrderRows         = formattedOrderRows.ToArray(),
                PeppolId          = CrOrderBuilder.GetPeppolId()
            };

            sveaOrder.CreateOrderInformation = SetOrderType(OrderInfo);

            return(sveaOrder);
        }
Пример #18
0
        public void TestFormatRelativeDiscountRowsWithDifferentVatRatesPresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetVatPercent(25)
                                                    .SetQuantity(2))
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(100.00M)
                                                    .SetVatPercent(6)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.RelativeDiscount()
                                                    .SetDiscountId("42")
                                                    .SetName(".SetDiscountPercent(10)")
                                                    .SetDescription("TestFormatRelativeDiscountRowsWithDifferentVatRatesPresent")
                                                    .SetDiscountPercent(10)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();


            OrderRow newRow = newRows[2];

            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetDiscountPercent(10): TestFormatRelativeDiscountRowsWithDifferentVatRatesPresent (25%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-20.00M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1)); // 1 "discount unit"
            Assert.That(newRow.Unit, Is.EqualTo("st"));

            newRow = newRows[3];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetDiscountPercent(10): TestFormatRelativeDiscountRowsWithDifferentVatRatesPresent (6%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-10.00));
            Assert.That(newRow.VatPercent, Is.EqualTo(6));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1)); // 1 "discount unit"
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
Пример #19
0
        /// <summary>
        /// PrepareRequest
        /// </summary>
        /// <exception cref="SveaWebPayValidationException"></exception>
        /// <returns>SveaRequest</returns>
        public DeliverOrderEuRequest PrepareRequest()
        {
            var errors = ValidateOrder();
            if (errors.Length > 0)
            {
                throw new SveaWebPayValidationException(errors);
            }

            var formatter = new WebServiceRowFormatter<DeliverOrderBuilder>(_order);

            DeliverInvoiceDetails deliverInvoiceDetails = null;
            if (_order.GetOrderType() == OrderType.INVOICE)
            {
                deliverInvoiceDetails = new DeliverInvoiceDetails
                    {
                        InvoiceDistributionType = ConvertInvoiceDistributionType(_order.GetInvoiceDistributionType()),
                        InvoiceIdToCredit = _order.GetCreditInvoice(),
                        IsCreditInvoice = _order.GetCreditInvoice().HasValue,
                        NumberOfCreditDays = _order.GetNumberOfCreditDays(),
                        OrderRows = formatter.FormatRows().ToArray()
                    };
            }

            _orderInformation = new DeliverOrderInformation
                {
                    DeliverInvoiceDetails = deliverInvoiceDetails,
                    OrderType = ConvertOrderType(_order.GetOrderType()),
                    SveaOrderId = _order.GetOrderId()
                };

            _sveaDeliverOrder = new DeliverOrderEuRequest
                {
                    Auth = GetStoreAuthorization(),
                    DeliverOrderInformation = _orderInformation
                };

            return _sveaDeliverOrder;
        }
Пример #20
0
        public void TestFormatRelativeDiscountRows()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                       .AddOrderRow(Item.OrderRow()
                                                    .SetAmountExVat(4)
                                                    .SetVatPercent(25)
                                                    .SetQuantity(1))
                                       .AddDiscount(Item.RelativeDiscount()
                                                    .SetDiscountId("0")
                                                    .SetName("Tess")
                                                    .SetDescription("Tester")
                                                    .SetDiscountPercent(10)
                                                    .SetUnit("st"));

            List <OrderRow> newRows = new WebServiceRowFormatter <CreateOrderBuilder>(order).FormatRows();

            Assert.That(newRows[1].ArticleNumber, Is.EqualTo("0"));
            Assert.That(newRows[1].Description, Is.EqualTo("Tess: Tester (25%)"));
            Assert.That(newRows[1].PricePerUnit, Is.EqualTo(-0.4));
            Assert.That(newRows[1].VatPercent, Is.EqualTo(25));
            Assert.That(newRows[1].NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRows[1].Unit, Is.EqualTo("st"));
        }
        public void TestFormatFixedDiscountRows()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountExVat(4)
                                                                        .SetVatPercent(25)
                                                                        .SetQuantity(1))
                                                       .AddDiscount(Item.FixedDiscount()
                                                                        .SetDiscountId("0")
                                                                        .SetName("Tess")
                                                                        .SetDescription("Tester")
                                                                        .SetAmountIncVat(1)
                                                                        .SetUnit("st"));

            List<OrderRow> newRows = new WebServiceRowFormatter<CreateOrderBuilder>(order).FormatRows();

            Assert.That(newRows[1].ArticleNumber, Is.EqualTo("0"));
            Assert.That(newRows[1].Description, Is.EqualTo("Tess: Tester"));
            Assert.That(newRows[1].PricePerUnit, Is.EqualTo(-0.8M));
            Assert.That(newRows[1].VatPercent, Is.EqualTo(25.0M));
            Assert.That(newRows[1].DiscountPercent, Is.EqualTo(0));
            Assert.That(newRows[1].NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRows[1].Unit, Is.EqualTo("st"));
        }
        public void TestFormatRelativeDiscountRowsWithSingleVatRatePresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountExVat(100.00M)
                                                                        .SetVatPercent(12)
                                                                        .SetQuantity(1))
                                                       .AddDiscount(Item.RelativeDiscount()
                                                                        .SetDiscountId("0")
                                                                        .SetName(".SetDiscountPercent(20)")
                                                                        .SetDescription("TestFormatRelativeDiscountRowsWithSingleVatRatePresent")
                                                                        .SetDiscountPercent(20)
                                                                        .SetUnit("st"));

            List<OrderRow> newRows = new WebServiceRowFormatter<CreateOrderBuilder>(order).FormatRows();

            OrderRow newRow = newRows[1];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("0"));
            Assert.That(newRow.Description, Is.EqualTo(".SetDiscountPercent(20): TestFormatRelativeDiscountRowsWithSingleVatRatePresent"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-20.00M));
            Assert.That(newRow.VatPercent, Is.EqualTo(12));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0)); // not the same thing as in our WebPayItem...
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
        public void TestFormatFixedDiscountRowsMixedItemVatSpecAmountIncVatWithDifferentVatRatesPresent()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountExVat(100.00M)
                                                                        .SetAmountIncVat(125.00M)
                                                                        .SetQuantity(2))
                                                       .AddOrderRow(Item.OrderRow()
                                                                        .SetAmountIncVat(106.00M)
                                                                        .SetVatPercent(6)
                                                                        .SetQuantity(1))
                                                       .AddDiscount(Item.FixedDiscount()
                                                                        .SetDiscountId("42")
                                                                        .SetName(".SetAmountIncVat(100)")
                                                                        .SetDescription("testFormatFixedDiscountRowsWithDifferentVatRatesPresent")
                                                                        .SetAmountIncVat(100)
                                                                        .SetUnit("st"));

            List<OrderRow> newRows = new WebServiceRowFormatter<CreateOrderBuilder>(order).FormatRows();

            // 100*250/356 = 70.22 incl. 25% vat => 14.04 vat as amount
            OrderRow newRow = newRows[2];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent (25%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-56.18M));
            Assert.That(newRow.VatPercent, Is.EqualTo(25));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));

            // 100*106/356 = 29.78 incl. 6% vat => 1.69 vat as amount
            newRow = newRows[3];
            Assert.That(newRow.ArticleNumber, Is.EqualTo("42"));
            Assert.That(newRow.Description, Is.EqualTo(".SetAmountIncVat(100): testFormatFixedDiscountRowsWithDifferentVatRatesPresent (6%)"));
            Assert.That(newRow.PricePerUnit, Is.EqualTo(-28.09M));
            Assert.That(newRow.VatPercent, Is.EqualTo(6));
            Assert.That(newRow.DiscountPercent, Is.EqualTo(0));
            Assert.That(newRow.NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRow.Unit, Is.EqualTo("st"));
        }
        public void TestFormatInvoiceFeeRows()
        {
            CreateOrderBuilder order = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                       .AddFee(Item.InvoiceFee()
                                                                   .SetDescription("Tester")
                                                                   .SetAmountExVat(4)
                                                                   .SetVatPercent(25)
                                                                   .SetUnit("st"));

            List<OrderRow> newRows = new WebServiceRowFormatter<CreateOrderBuilder>(order).FormatRows();

            Assert.That(newRows[0].ArticleNumber, Is.Empty);
            Assert.That(newRows[0].Description, Is.EqualTo("Tester"));
            Assert.That(newRows[0].PricePerUnit, Is.EqualTo(4.0));
            Assert.That(newRows[0].VatPercent, Is.EqualTo(25.0));
            Assert.That(newRows[0].DiscountPercent, Is.EqualTo(0));
            Assert.That(newRows[0].NumberOfUnits, Is.EqualTo(1));
            Assert.That(newRows[0].Unit, Is.EqualTo("st"));
        }
 private void AssertVat(WebServiceRowFormatter <CreateOrderBuilder> .Order result, int item, int vat)
 {
     Assert.That(result.NewOrderRows[item].GetVatPercent(), Is.EqualTo(vat));
 }
 private void AssertAmountEx(WebServiceRowFormatter <CreateOrderBuilder> .Order result, int item, decimal amount)
 {
     Assert.That(result.NewOrderRows[item].GetAmountExVat(), Is.EqualTo(amount));
 }