merge release/dyn-1290_post-flags

This commit is contained in:
Chika 2022-06-15 14:07:02 +03:00
parent 334f666c26
commit cde4b41f54
4 changed files with 263 additions and 2 deletions

View File

@ -0,0 +1,6 @@
namespace EvoCalculator.Core.Models.PostCalculation.Models.Request;
public class Flags
{
public bool DISABLE_CHECKS_RESULTS { get; set; }
}

View File

@ -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<TableInsuranceRow[]> TableInsurance { get; set; } = new();
public ChangingValue<TableTLMTrackerRow[]> TableTLMTracker { get; set; }
public Flags Flags { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{

View File

@ -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<string>
{
ex.Message
}
};
}
}
}

View File

@ -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)
};