53 lines
2.0 KiB
C#
53 lines
2.0 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using EvoCalculator.Core.Models.BaseCalculation.Models.Request;
|
|
using EvoCalculator.Core.Models.BaseCalculation.Models.Response;
|
|
using EvoCalculator.Core.Tools.Array;
|
|
|
|
namespace EvoCalculator.Core.Calculation;
|
|
|
|
public class BaseCalculation
|
|
{
|
|
private double IRR = 0;
|
|
private Constants.Calculation constants = new();
|
|
|
|
public BaseCalculation()
|
|
{
|
|
var envCalculationIRR = Environment.GetEnvironmentVariable("CALCULATION_IRR");
|
|
IRR = float.Parse(envCalculationIRR, CultureInfo.InvariantCulture);
|
|
}
|
|
|
|
public ResponseBaseCalculation Calculate(RequestBaseCalculation requestBaseCalculation)
|
|
{
|
|
var initialPaymentSum =
|
|
requestBaseCalculation.car_price * (decimal)(requestBaseCalculation.initial_payment / 100);
|
|
var redemptionPaymentSum = requestBaseCalculation.car_price *
|
|
(decimal)(requestBaseCalculation.redemption_payment / 100);
|
|
|
|
var IRRperMonth = Math.Pow(1 + IRR / 12, requestBaseCalculation.lease_period - 2);
|
|
var monthlyPayment = (IRR / 12) *
|
|
(double)((requestBaseCalculation.car_price - initialPaymentSum) *
|
|
(decimal)IRRperMonth - redemptionPaymentSum) / (IRRperMonth - 1);
|
|
|
|
var leaseContractSum = (requestBaseCalculation.lease_period - 2) * (decimal)monthlyPayment +
|
|
initialPaymentSum +
|
|
redemptionPaymentSum;
|
|
var taxSavings = leaseContractSum * (decimal)(constants.VatValue / 1.2);
|
|
|
|
var schedule = Array<decimal>.Concat(
|
|
new decimal[] { initialPaymentSum }
|
|
, Enumerable.Repeat((decimal)monthlyPayment, requestBaseCalculation.lease_period - 2).ToArray()
|
|
, new decimal[] { redemptionPaymentSum }
|
|
);
|
|
|
|
|
|
return new ResponseBaseCalculation()
|
|
{
|
|
monthly_payment = (decimal)monthlyPayment,
|
|
tax_savings = taxSavings,
|
|
vat_reimbursement = taxSavings,
|
|
schedule = schedule
|
|
};
|
|
}
|
|
} |