From cde4b41f54efdda285b6f9f6d928c82c554e6ab6 Mon Sep 17 00:00:00 2001 From: Chika Date: Wed, 15 Jun 2022 14:07:02 +0300 Subject: [PATCH] merge release/dyn-1290_post-flags --- .../PostCalculation/Models/Request/Flags.cs | 6 + .../Models/Request/RequestCalculation.cs | 6 +- .../v2/Managers/CalculateByIRRNoLimit.cs | 251 ++++++++++++++++++ .../v2/PostCalculationController.cs | 2 + 4 files changed, 263 insertions(+), 2 deletions(-) create mode 100644 EvoCalculator.Core.Models/PostCalculation/Models/Request/Flags.cs create mode 100644 EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs diff --git a/EvoCalculator.Core.Models/PostCalculation/Models/Request/Flags.cs b/EvoCalculator.Core.Models/PostCalculation/Models/Request/Flags.cs new file mode 100644 index 0000000..5a23b2e --- /dev/null +++ b/EvoCalculator.Core.Models/PostCalculation/Models/Request/Flags.cs @@ -0,0 +1,6 @@ +namespace EvoCalculator.Core.Models.PostCalculation.Models.Request; + +public class Flags +{ + public bool DISABLE_CHECKS_RESULTS { get; set; } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Models/PostCalculation/Models/Request/RequestCalculation.cs b/EvoCalculator.Core.Models/PostCalculation/Models/Request/RequestCalculation.cs index 44918e9..b33ca4b 100644 --- a/EvoCalculator.Core.Models/PostCalculation/Models/Request/RequestCalculation.cs +++ b/EvoCalculator.Core.Models/PostCalculation/Models/Request/RequestCalculation.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +#nullable enable +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.lib; @@ -16,7 +17,8 @@ public class RequestCalculation : IValidatableObject public ChangingValue TableInsurance { get; set; } = new(); public ChangingValue TableTLMTracker { get; set; } - + + public Flags Flags { get; set; } public IEnumerable Validate(ValidationContext validationContext) { diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs new file mode 100644 index 0000000..745e7ef --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult CalculateByIRRNoLimit(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + nextSumColumn.ComputeValues((decimal) currentSumColumn.IRR + preparedValues.IRRDelta); + nextSumColumn.PostCheck(); + nextSumColumn.RoundValues(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); + + var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants); + nextSumWithVATColumn.ComputeValues(); + nextVATColumn.PostCheck(); + nextSumWithVATColumn.PostCheck(); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, + + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextVATColumn, + nextSumWithVATColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs index 9bac5cd..d48c66b 100644 --- a/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs +++ b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs @@ -26,6 +26,8 @@ public class PostCalculationController : Controller 100000006 => CalculateManager.CalculateByIRRAndSum(requestCalculation), 100000007 => CalculateManager.Suspension(requestCalculation), 100000008 => CalculateManager.ChangingLastPayment(requestCalculation), + 100000000 when requestCalculation.Flags.DISABLE_CHECKS_RESULTS => + CalculateManager.CalculateByIRRNoLimit(requestCalculation), _ => CalculateManager.CalculateDefault(requestCalculation) };