2025-01-23 11:27:51 +03:00

54 lines
2.1 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 vat_reimbursement = leaseContractSum * (decimal)(constants.VatValue / 1.2);
var tax_savings = leaseContractSum * (decimal)(0.25 / 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 = tax_savings,
vat_reimbursement = vat_reimbursement,
schedule = schedule
};
}
}