Beispiel #1
0
        public List <Dictionary <string, long> > Calculate(decimal amount, GetPaymentPlanParamsEuResponse paymentPlanParams)
        {
            var pricesPerMonth = new List <Dictionary <string, long> >();

            if (null == paymentPlanParams)
            {
                return(pricesPerMonth);
            }

            foreach (var campaignCode in paymentPlanParams.CampaignCodes)
            {
                decimal fromAmount           = campaignCode.FromAmount;
                decimal toAmount             = campaignCode.ToAmount;
                decimal monthlyAnnuityFactor = campaignCode.MonthlyAnnuityFactor;
                decimal notificationFee      = campaignCode.NotificationFee;

                if (!(fromAmount <= amount) || !(amount <= toAmount))
                {
                    continue;
                }

                var priceMap      = new Dictionary <String, long>();
                var pricePerMonth = (long)Math.Round(amount * monthlyAnnuityFactor + notificationFee);
                priceMap.Add("campaignCode", campaignCode.CampaignCode);
                priceMap.Add("pricePerMonth", pricePerMonth);
                pricesPerMonth.Add(priceMap);
            }

            return(pricesPerMonth);
        }
Beispiel #2
0
        public void TestDeliverPaymentPlanOrderResult()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParamResponse = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                                                                      .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                                      .DoRequest();
            long code = paymentPlanParamResponse.CampaignCodes[0].CampaignCode;

            CreateOrderEuResponse createOrderResponse = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                                        .AddOrderRow(TestingTool.CreatePaymentPlanOrderRow())
                                                        .AddCustomerDetails(
                TestingTool.CreateIndividualCustomer())
                                                        .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                        .SetCustomerReference(
                TestingTool.DefaultTestClientOrderNumber)
                                                        .SetClientOrderNumber(TestingTool.DefaultTestClientOrderNumber)
                                                        .SetOrderDate(TestingTool.DefaultTestDate)
                                                        .SetCurrency(TestingTool.DefaultTestCurrency)
                                                        .UsePaymentPlanPayment(code)
                                                        .DoRequest();

            DeliverOrderEuResponse deliverOrderResponse = WebpayConnection.DeliverOrder(SveaConfig.GetDefaultConfig())
                                                          .AddOrderRow(TestingTool.CreateExVatBasedOrderRow())
                                                          .SetOrderId(
                createOrderResponse.CreateOrderResult
                .SveaOrderId)
                                                          .SetNumberOfCreditDays(1)
                                                          .SetInvoiceDistributionType(
                InvoiceDistributionType.POST)
                                                          .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                          .DeliverPaymentPlanOrder()
                                                          .DoRequest();

            Assert.That(deliverOrderResponse.Accepted, Is.True);
        }
        public List<Dictionary<string, long>> Calculate(decimal amount, GetPaymentPlanParamsEuResponse paymentPlanParams)
        {
            var pricesPerMonth = new List<Dictionary<string, long>>();

            if (null == paymentPlanParams)
            {
                return pricesPerMonth;
            }

            foreach (var campaignCode in paymentPlanParams.CampaignCodes)
            {
                decimal fromAmount = campaignCode.FromAmount;
                decimal toAmount = campaignCode.ToAmount;
                decimal monthlyAnnuityFactor = campaignCode.MonthlyAnnuityFactor;
                decimal notificationFee = campaignCode.NotificationFee;

                if (!(fromAmount <= amount) || !(amount <= toAmount))
                {
                    continue;
                }

                var priceMap = new Dictionary<String, long>();
                var pricePerMonth = (long)Math.Round(amount * monthlyAnnuityFactor + notificationFee);
                priceMap.Add("campaignCode", campaignCode.CampaignCode);
                priceMap.Add("pricePerMonth", pricePerMonth);
                pricesPerMonth.Add(priceMap);
            }

            return pricesPerMonth;
        }
        public void TestBuildPriceCalculator()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParams = GetParamsForTesting();

            List <Dictionary <string, long> > result = WebpayConnection.PaymentPlanPricePerMonth(11200.0M, paymentPlanParams);

            Assert.That(result[0]["campaignCode"], Is.EqualTo(213060));
            Assert.That(result[0]["pricePerMonth"], Is.EqualTo(317));
            Assert.That(result[1]["campaignCode"], Is.EqualTo(222065));
            Assert.That(result[1]["pricePerMonth"], Is.EqualTo(11200));
            Assert.That(result[2]["campaignCode"], Is.EqualTo(222066));
            Assert.That(result[2]["pricePerMonth"], Is.EqualTo(11200));
            Assert.That(result[3]["campaignCode"], Is.EqualTo(223060));
            Assert.That(result[3]["pricePerMonth"], Is.EqualTo(11229));
            Assert.That(result[4]["campaignCode"], Is.EqualTo(223062));
            Assert.That(result[4]["pricePerMonth"], Is.EqualTo(11229));
            Assert.That(result[5]["campaignCode"], Is.EqualTo(223065));
            Assert.That(result[5]["pricePerMonth"], Is.EqualTo(11200));
            Assert.That(result[6]["campaignCode"], Is.EqualTo(223066));
            Assert.That(result[6]["pricePerMonth"], Is.EqualTo(11200));
            Assert.That(result[7]["campaignCode"], Is.EqualTo(310012));
            Assert.That(result[7]["pricePerMonth"], Is.EqualTo(993));
            Assert.That(result[8]["campaignCode"], Is.EqualTo(410012));
            Assert.That(result[8]["pricePerMonth"], Is.EqualTo(1066));
            Assert.That(result[9]["campaignCode"], Is.EqualTo(410024));
            Assert.That(result[9]["pricePerMonth"], Is.EqualTo(574));
        }
Beispiel #5
0
        public void TestBuildPriceCalculatorWithLowPrice()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParams = GetParamsForTesting();

            List <Dictionary <string, long> > result = WebpayConnection.PaymentPlanPricePerMonth(99.0M, paymentPlanParams);

            Assert.That(result.Count == 0, Is.True);
        }
Beispiel #6
0
        private GetPaymentPlanParamsEuResponse GetParamsForTesting()
        {
            var request = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig());
            GetPaymentPlanParamsEuResponse response = request
                                                      .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                      .DoRequest();

            return(response);
        }
Beispiel #7
0
        public void TestGetPaymentPlanParams()
        {
            GetPaymentPlanParamsEuResponse response =
                WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                .SetCountryCode(TestingTool.DefaultTestCountryCode)
                .DoRequest();

            Assert.That(response.ResultCode, Is.EqualTo(0));
            Assert.That(response.Accepted, Is.True);
            Assert.That(response.CampaignCodes.Length, Is.GreaterThan(0));
        }
Beispiel #8
0
        public void TestBuildPriceCalculator()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParams = GetParamsForTesting();

            List <Dictionary <string, long> > result = WebpayConnection.PaymentPlanPricePerMonth(2000.0M, paymentPlanParams);

            Assert.That(result[0]["campaignCode"], Is.EqualTo(213060));
            Assert.That(result[0]["pricePerMonth"], Is.EqualTo(2029));
            Assert.That(result[1]["campaignCode"], Is.EqualTo(223060));
            Assert.That(result[1]["pricePerMonth"], Is.EqualTo(2029));
            Assert.That(result[2]["campaignCode"], Is.EqualTo(310012));
            Assert.That(result[2]["pricePerMonth"], Is.EqualTo(202));
        }
Beispiel #9
0
        public void TestGetPaymentPlanParams()
        {
            GetPaymentPlanParamsEuResponse response =
                WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                .SetCountryCode(TestingTool.DefaultTestCountryCode)
                .DoRequest();

            Assert.That(response.ResultCode, Is.EqualTo(0));
            Assert.IsTrue(response.Accepted);
            Assert.That(response.CampaignCodes.Length, Is.EqualTo(4));
            Assert.That(response.CampaignCodes[0].CampaignCode, Is.EqualTo(213060));
            Assert.That(response.CampaignCodes[1].CampaignCode, Is.EqualTo(223060));
            Assert.That(response.CampaignCodes[2].CampaignCode, Is.EqualTo(310012));
            Assert.That(response.CampaignCodes[3].CampaignCode, Is.EqualTo(410024));
        }
        public List <Dictionary <string, long> > Calculate(decimal amount, GetPaymentPlanParamsEuResponse paymentPlanParams)
        {
            var pricesPerMonth = new List <Dictionary <string, long> >();

            if (paymentPlanParams == null)
            {
                return(pricesPerMonth);
            }

            foreach (var campaignCode in paymentPlanParams.CampaignCodes)
            {
                if (!(campaignCode.FromAmount <= amount) || !(amount <= campaignCode.ToAmount))
                {
                    continue;
                }

                var priceMap         = new Dictionary <String, long>();
                var numberOfPayments = Math.Max(1, campaignCode.ContractLengthInMonths - campaignCode.NumberOfPaymentFreeMonths);

                var    paymentFactor = CalculatePaymentFactor(numberOfPayments, (double)campaignCode.InterestRatePercent / 100);
                double pricePerMonth;

                switch (campaignCode.PaymentPlanType)
                {
                case PaymentPlanTypeCode.InterestAndAmortizationFree:
                    pricePerMonth = Math.Round((double)campaignCode.InitialFee + (double)amount + (double)campaignCode.NotificationFee);
                    break;

                case PaymentPlanTypeCode.InterestFree:
                    pricePerMonth = Math.Round(((double)campaignCode.InitialFee + (double)amount + ((double)campaignCode.NotificationFee * numberOfPayments)) / numberOfPayments);
                    break;

                case PaymentPlanTypeCode.Standard:
                    pricePerMonth = Math.Round(((double)campaignCode.InitialFee + ((double)amount * paymentFactor + (double)campaignCode.NotificationFee) * numberOfPayments) / numberOfPayments);
                    break;

                default:
                    throw new SveaWebPayException("Invalid PaymentPlanTypeCode");
                }

                priceMap.Add("campaignCode", campaignCode.CampaignCode);
                priceMap.Add("pricePerMonth", (long)pricePerMonth);
                pricesPerMonth.Add(priceMap);
            }

            return(pricesPerMonth);
        }
Beispiel #11
0
        public void TestResultGetPaymentPlanParams()
        {
            GetPaymentPlanParamsEuResponse response = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                                                      .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                      .DoRequest();

            Assert.IsTrue(response.Accepted);
            Assert.That(response.CampaignCodes[0].CampaignCode, Is.EqualTo(213060));
            Assert.That(response.CampaignCodes[0].Description, Is.EqualTo("Köp nu betala om 3 månader (räntefritt)"));
            Assert.That(response.CampaignCodes[0].PaymentPlanType, Is.EqualTo(PaymentPlanTypeCode.InterestAndAmortizationFree));
            Assert.That(response.CampaignCodes[0].ContractLengthInMonths, Is.EqualTo(3));
            Assert.That(response.CampaignCodes[0].InitialFee, Is.EqualTo(100));
            Assert.That(response.CampaignCodes[0].NotificationFee, Is.EqualTo(29));
            Assert.That(response.CampaignCodes[0].InterestRatePercent, Is.EqualTo(0));
            Assert.That(response.CampaignCodes[0].NumberOfInterestFreeMonths, Is.EqualTo(3));
            Assert.That(response.CampaignCodes[0].NumberOfPaymentFreeMonths, Is.EqualTo(3));
            Assert.That(response.CampaignCodes[0].FromAmount, Is.EqualTo(1000));
            Assert.That(response.CampaignCodes[0].ToAmount, Is.EqualTo(50000));
        }
Beispiel #12
0
        private long createPaymentPlanAndReturnOrderId()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParam = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                                                              .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                              .DoRequest();
            long code = paymentPlanParam.CampaignCodes[0].CampaignCode;

            CreateOrderEuResponse response = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                             .AddOrderRow(TestingTool.CreatePaymentPlanOrderRow())
                                             .AddCustomerDetails(TestingTool.CreateIndividualCustomer())
                                             .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                             .SetCustomerReference(TestingTool.DefaultTestCustomerReferenceNumber)
                                             .SetClientOrderNumber(TestingTool.DefaultTestClientOrderNumber)
                                             .SetOrderDate(TestingTool.DefaultTestDate)
                                             .SetCurrency(TestingTool.DefaultTestCurrency)
                                             .UsePaymentPlanPayment(code)
                                             .DoRequest();

            return(response.CreateOrderResult.SveaOrderId);
        }
Beispiel #13
0
        public void TestPaymentPlanRequestReturnsAcceptedResult()
        {
            GetPaymentPlanParamsEuResponse paymentPlanParam = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig())
                                                              .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                                              .DoRequest();
            long code = paymentPlanParam.CampaignCodes[0].CampaignCode;

            CreateOrderEuResponse response = WebpayConnection.CreateOrder(SveaConfig.GetDefaultConfig())
                                             .AddOrderRow(TestingTool.CreatePaymentPlanOrderRow())
                                             .AddCustomerDetails(TestingTool.CreateIndividualCustomer())
                                             .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                             .SetCustomerReference(TestingTool.DefaultTestCustomerReferenceNumber)
                                             .SetClientOrderNumber(TestingTool.DefaultTestClientOrderNumber)
                                             .SetOrderDate(TestingTool.DefaultTestDate)
                                             .SetCurrency(TestingTool.DefaultTestCurrency)
                                             .SetCountryCode(TestingTool.DefaultTestCountryCode)
                                             .UsePaymentPlanPayment(code)
                                             .DoRequest();

            Assert.That(response.Accepted, Is.True);
        }
Beispiel #14
0
 /// <summary>
 /// Calculate the prices per month for the payment plan campaigns
 /// </summary>
 /// <param name="amount"></param>
 /// <param name="paymentPlanParams"></param>
 /// <returns>PaymentPlanPricePerMonth</returns>
 public static List <Dictionary <string, long> > PaymentPlanPricePerMonth(decimal amount, GetPaymentPlanParamsEuResponse paymentPlanParams)
 {
     return(new PaymentPlanPricePerMonth().Calculate(amount, paymentPlanParams));
 }
 /// <summary>
 /// Calculate the prices per month for the payment plan campaigns
 /// </summary>
 /// <param name="amount"></param>
 /// <param name="paymentPlanParams"></param>
 /// <returns>PaymentPlanPricePerMonth</returns>
 public static List<Dictionary<string, long>> PaymentPlanPricePerMonth(decimal amount, GetPaymentPlanParamsEuResponse paymentPlanParams)
 {
     return new PaymentPlanPricePerMonth().Calculate(amount, paymentPlanParams);
 }