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 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)); }
public void TestBuildPriceCalculatorWithLowPrice() { GetPaymentPlanParamsEuResponse paymentPlanParams = GetParamsForTesting(); List <Dictionary <string, long> > result = WebpayConnection.PaymentPlanPricePerMonth(99.0M, paymentPlanParams); Assert.That(result.Count == 0, Is.True); }
private GetPaymentPlanParamsEuResponse GetParamsForTesting() { var request = WebpayConnection.GetPaymentPlanParams(SveaConfig.GetDefaultConfig()); GetPaymentPlanParamsEuResponse response = request .SetCountryCode(TestingTool.DefaultTestCountryCode) .DoRequest(); return(response); }
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)); }
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)); }
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); }
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)); }
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); }
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); }
/// <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); }