merge release/dyn-1032_used-without-nds

This commit is contained in:
Chika 2022-04-18 13:14:39 +03:00
parent 5776749ae8
commit bd5f5fd3b7
32 changed files with 2399 additions and 10 deletions

View File

@ -9,7 +9,7 @@ public class CreditColumn : BaseColumnWithSum
{
}
public void ComputeValues(PreparedValues preparedValues, SumCreditColumn sumCreditColumn)
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> sumCreditColumn)
{
Values[1] = -sumCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12;
for (var i = 2; i < Values.Length; i++)

View File

@ -0,0 +1,22 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class CreditVATColumn : BaseColumnWithSum
{
public CreditVATColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> sumVATCreditColumn)
{
Values[1] = -sumVATCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12;
for (var i = 2; i < Values.Length; i++)
if (GetValue(i - 1) < 0)
Values[i] = -sumVATCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12;
else
Values[i] = 0;
Values[0] = Sum;
}
}

View File

@ -0,0 +1,23 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class SumCreditColumn : BaseColumn<decimal>
{
public SumCreditColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> sumWithVATColumn)
{
Values[1] = preparedValues.PlPriceWithVAT - sumWithVATColumn.GetValue(1);
Values[2] = Values[1];
for (var i = 3; i < Values.Length; i++)
if (GetValue(i - 1) > 0)
Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod;
else
Values[i] = 0;
}
}

View File

@ -0,0 +1,23 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class SumVATCreditColumn : BaseColumn<decimal>
{
public SumVATCreditColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> VATColumn)
{
Values[1] = VATColumn.GetValue(0) - preparedValues.PlPriceVAT;
Values[2] = Values[1];
for (var i = 3; i < Values.Length; i++)
if (GetValue(i - 1) > 0)
Values[i] = GetValue(i - 1) - GetValue(2) / 12;
else
Values[i] = 0;
}
}

View File

@ -17,6 +17,7 @@ using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperG
using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn;
using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn;
using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn;
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
@ -255,11 +256,18 @@ public static partial class CalculateManager
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
@ -267,6 +275,7 @@ public static partial class CalculateManager
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
@ -333,6 +342,8 @@ public static partial class CalculateManager
npvFinal2Column,
sumCreditColumn,
creditColumn,
sumVATCreditColumn,
creditVATColumn,
subsidyExpensesColumn
}
};

View File

@ -17,6 +17,7 @@ using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperG
using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn;
using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn;
using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn;
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
@ -254,10 +255,16 @@ public static partial class CalculateManager
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
@ -266,6 +273,7 @@ public static partial class CalculateManager
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
@ -332,6 +340,8 @@ public static partial class CalculateManager
npvFinal2Column,
sumCreditColumn,
creditColumn,
sumVATCreditColumn,
creditVATColumn,
subsidyExpensesColumn
}
};

View File

@ -6,6 +6,8 @@ namespace EvoCalculator.Core.Calculation.v3;
public class PostValues : v2.PostValues
{
public decimal ContractEconomyWithVAT;
public PostValues(PreparedValues preparedValues) : base(preparedValues)
{
}
@ -20,4 +22,9 @@ public class PostValues : v2.PostValues
(decimal) _preparedValues.Leasing0K +
_preparedValues.NsibBrutto;
}
public void ComputeContractEconomyWithVAT(BaseColumn<decimal> creditVATColumn)
{
ContractEconomyWithVAT = this.ContractEconomy + creditVATColumn.GetValue(0);
}
}

View File

@ -42,6 +42,8 @@ public class PreparedValues
public int ScheduleOfPayments { get; set; }
public decimal ComissionRub { get; set; }
public decimal PlPrice { get; set; }
public decimal PlPriceWithVAT { get; set; }
public decimal PlPriceVAT { get; set; }
public decimal Discount { get; set; }
public decimal AcceptSum { get; set; }
public string PlTypeId { get; set; }

View File

@ -6,6 +6,7 @@ namespace EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
public class PreparedValues
{
public DateTime CalcDate { get; set; } = DateTime.Now;
public DateTime DateInput { get; set; }
public DateTime DogDate { get; set; }
public decimal Leasing0K { get; set; }
@ -32,6 +33,9 @@ public class PreparedValues
public ChangingValue<int> Nmper { get; set; }
public ChangingValue<decimal> PlPrice { get; set; }
public decimal PlPriceWithVAT { get; set; }
public decimal PlPriceVAT { get; set; }
public ChangingValue<decimal> Discount { get; set; }
public decimal AgentFLSum { get; set; }

View File

@ -10,8 +10,4 @@
<ProjectReference Include="..\EvoCalculator.Core.Tools\EvoCalculator.Core.Tools.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="v1\Managers\PostValues" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,22 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
public class CreditVATColumn : BaseColumnWithSum
{
public CreditVATColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> nextSumVATCreditColumn)
{
Values[1] = -nextSumVATCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12;
for (var i = 2; i < Values.Length; i++)
if (GetValue(i - 1) < 0)
Values[i] = -nextSumVATCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12;
else
Values[i] = 0;
Values[0] = Sum;
}
}

View File

@ -0,0 +1,22 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
public class SumCreditColumn : BaseColumn<decimal>
{
public SumCreditColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> nextSumWithVATColumn)
{
Values[1] = Values[2] = preparedValues.PlPriceWithVAT - nextSumWithVATColumn.GetValue(1);
for (var i = 3; i < Values.Length; i++)
if (GetValue(i - 1) > 0)
Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod;
else
Values[i] = 0;
}
}

View File

@ -0,0 +1,22 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
public class SumVATCreditColumn : BaseColumn<decimal>
{
public SumVATCreditColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> nextVATColumn)
{
Values[1] = Values[2] = nextVATColumn.GetValue(0) - preparedValues.PlPriceVAT;
for (var i = 3; i < Values.Length; i++)
if (GetValue(i - 1) > 0)
Values[i] = GetValue(i - 1) - GetValue(2) / 12;
else
Values[i] = 0;
}
}

View File

@ -0,0 +1,303 @@
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.Next.DateTempColumn;
using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn;
using SumVATCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumVATCreditColumn;
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
public static partial class CalculateManager
{
public static ManagerResult CalculateByIRRAndSum(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
*/
var nextValues = new NextValues(preparedValues);
/*
* TECH
*/
var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1);
techNextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1);
techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn);
TLMDateColumn techNextTlmDateColumn = null;
TLMCostColumn techNextTlmCostColumn = null;
TLMGrColumn techNextTlmGrColumn = null;
var techTlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, techNextDateColumn);
if (techTlmData != null)
{
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
}
nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, currentTablePayments);
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextSumWithVATColumn.ComputeValues();
/*
* TECH
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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();
}
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
currentTablePayments);
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
nextSumWithVATColumn.ComputeValues(techNextSumWithVATColumn.GetValue(0));
nextSumColumn.PostCheck();
nextVATColumn.PostCheck();
nextSumWithVATColumn.PostCheck();
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 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);
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
techNextDateColumn,
techNextDateTempColumn,
techNextTlmDateColumn,
techNextTlmCostColumn,
techNextTlmGrColumn,
techNextSumColumn,
techNextVATColumn,
techNextSumWithVATColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextVATColumn,
nextSumWithVATColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
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

@ -0,0 +1,223 @@
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.Next;
using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper;
using EvoCalculator.Core.PostCalculation.v2.Columns.Next;
using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn;
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
public static partial class CalculateManager
{
public static ManagerResult CalculateByTotalExpected(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;
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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 SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
nextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected);
nextSumWithVATColumn.PostCheck();
nextVATColumn.PostCheck();
nextSumColumn.PostCheck();
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 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);
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
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

@ -0,0 +1,252 @@
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 CalculateDefault(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(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);
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
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

@ -0,0 +1,218 @@
using System;
using System.Collections.Generic;
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.Next;
using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper;
using EvoCalculator.Core.PostCalculation.v2.Columns.Next;
using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn;
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
public static partial class CalculateManager
{
public static ManagerResult ChangingLastPayment(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;
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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 SumColumnVT4(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
nextSumColumn.ComputeValues();
var nextVATColumn = new VATColumnVT2();
nextVATColumn.ComputeValues(preparedValues, currentTablePayments, constants);
var nextSumWithVATColumn = new SumWithVATColumnVT3();
nextSumWithVATColumn.ComputeValues(preparedValues, currentTablePayments, constants);
// nextSumWithVATColumn.PostCheck();
// nextVATColumn.PostCheck();
// nextSumColumn.PostCheck();
var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT2();
nextNSIBBruttoGrColumn.ComputeValues(currentTablePayments);
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 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);
// nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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 SumRepaymentColumnVT2();
nextSumRepaymentColumn.ComputeValues(currentTablePayments);
// 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 RevenueColumnVT2();
nextRevenueColumn.ComputeValues(currentTablePayments);
var nextNSIBExpensesColumn = new NSIBExpensesColumnVT2();
nextNSIBExpensesColumn.ComputeValues(currentTablePayments);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
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

@ -0,0 +1,349 @@
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.Next;
using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper;
using EvoCalculator.Core.PostCalculation.v2.Columns.Next;
using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn;
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
public static partial class CalculateManager
{
public static ManagerResult EarlyRedemption(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;
var nextValues = new NextValues(preparedValues);
/*
* TECH
*/
var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Current + 1);
techNextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Current + 1);
techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn);
TLMDateColumn techNextTlmDateColumn = null;
TLMCostColumn techNextTlmCostColumn = null;
TLMGrColumn techNextTlmGrColumn = null;
var techTlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, techNextDateColumn);
if (techTlmData != null)
{
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1);
techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
}
nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
currentTablePayments);
var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Current + 1, techNextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Current + 1);
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
var techNextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Current + 1, preparedValues,
techNextSumColumn, currentTablePayments, techNextVATColumn, constants, nextValues);
techNextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected);
var techNextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Current + 1,
preparedValues,
currentTablePayments, techNextSumColumn);
var nsibRequiredValue = currentTablePayments
.Where((x, i) => i >= preparedValues.EditPaymentNumber - 1)
.Sum(x => x.NSIBBruttoPayment);
techNextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue);
var techNextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Current + 1);
techNextSubsidyExpensesColumn.ComputeValues(preparedValues);
nextValues.ComputeAcquisitionExpenses(nextTableInsurance);
var techNextCashflowMSFOColumn = new CashflowMSFOColumn();
techNextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, techNextSumColumn,
techNextTlmCostColumn,
techNextSubsidyExpensesColumn, techNextNSIBBruttoGrColumn, nextTableInsurance,
techNextDateTempColumn,
techNextTlmDateColumn);
var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn,
techNextCashflowMSFOColumn);
techNextCashflowMSFOColumn.PostCheck();
var techNextIRRGrColumn = new IRRGrColumn(techNextCashflowMSFOForNIColumn.Values.Length);
techNextIRRGrColumn.ComputeValues(techNextCashflowMSFOForNIColumn, techNextCashflowMSFOColumn);
var techNextNIColumn = new NIColumn(techNextCashflowMSFOForNIColumn.Values.Length);
techNextNIColumn.ComputeValues(techNextCashflowMSFOForNIColumn, techNextIRRGrColumn);
var techNextInterestColumn = new InterestColumn(techNextCashflowMSFOForNIColumn.Values.Length);
techNextInterestColumn.ComputeValues(techNextNIColumn, techNextIRRGrColumn);
var techNextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Current + 1);
techNextSumCurrentColumn.ComputeValues(techNextSumWithVATColumn);
var techNextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Current + 1);
techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance);
var techNextSumCurrentInterestColumn =
new SumCurrentInterestColumn(techNextCashflowMSFOForNIColumn.Values.Length);
techNextSumCurrentInterestColumn.ComputeValues(techNextInterestColumn);
var techNextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Current + 1);
techNextSumCurrentTLMColumn.ComputeValues(techNextTlmGrColumn);
var techNextSumRepaymentColumn = new SumRepaymentColumnVT1();
techNextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments,
techNextSumCurrentNegativeColumn,
techNextSumCurrentColumn, techNextSumCurrentTLMColumn, techNextSumCurrentInterestColumn,
techNextSumWithVATColumn,
techNextDateTempColumn, techNextCashflowMSFOForNIColumn, constants);
/*
* TECH
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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();
}
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
currentTablePayments);
var nextSumColumn = new SumColumnVT3(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments, constants,
techNextSumRepaymentColumn);
nextSumColumn.ComputeValues();
nextSumColumn.PostCheck();
nextSumColumn.RoundValues();
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 nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
currentTablePayments, nextSumColumn);
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 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);
// nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
techNextDateColumn,
techNextDateTempColumn,
techNextTlmDateColumn,
techNextTlmCostColumn,
techNextTlmGrColumn,
techNextSumColumn,
techNextVATColumn,
techNextSumWithVATColumn,
techNextNSIBBruttoGrColumn,
techNextSubsidyExpensesColumn,
techNextCashflowMSFOColumn,
techNextCashflowMSFOForNIColumn,
techNextIRRGrColumn,
techNextNIColumn,
techNextInterestColumn,
techNextSumCurrentColumn,
techNextSumCurrentNegativeColumn,
techNextSumCurrentInterestColumn,
techNextSumCurrentTLMColumn,
techNextSumRepaymentColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextVATColumn,
nextSumWithVATColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
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

@ -0,0 +1,306 @@
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 PERWithChangingTheTerm(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(currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
var nextValues = new NextValues(preparedValues);
/*
* TECH
*/
var techNextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
techNextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var techNextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn);
TLMDateColumn techNextTlmDateColumn = null;
TLMCostColumn techNextTlmCostColumn = null;
TLMGrColumn techNextTlmGrColumn = null;
var techTlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, techNextDateColumn);
if (techTlmData != null)
{
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
}
nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
currentTablePayments);
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextSumWithVATColumn.ComputeValues();
nextValues.ComputeSumTotal(techNextSumWithVATColumn);
nextValues.ComputeNmper(nextTablePayments, currentTablePayments);
/*
* TECH
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(nextValues.Nmper + 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(nextValues.Nmper + 1);
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
nextTlmGrColumn.PostCheck();
}
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
currentTablePayments);
var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1);
var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
nextSumWithVATColumn.ComputeValues(nextValues.SumTotal);
nextSumWithVATColumn.PostCheck();
nextVATColumn.PostCheck();
nextSumColumn.PostCheck();
var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(nextValues.Nmper + 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(nextValues.Nmper + 1);
nextSubsidyExpensesColumn.ComputeValues(preparedValues);
nextValues.ComputeAcquisitionExpenses(nextTableInsurance);
var nextCashflowMSFOColumn = new CashflowMSFOColumn();
nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
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);
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
var nextSumCurrentColumn = new SumCurrentColumn(nextValues.Nmper + 1);
nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn);
var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1);
nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance);
var nextSumCurrentInterestColumn =
new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn);
var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(nextValues.Nmper + 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);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
techNextDateColumn,
techNextDateTempColumn,
techNextTlmDateColumn,
techNextTlmCostColumn,
techNextTlmGrColumn,
techNextSumColumn,
techNextVATColumn,
techNextSumWithVATColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextVATColumn,
nextSumWithVATColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
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

@ -0,0 +1,265 @@
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 PERWithoutChangingTheTerm(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(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 techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextSumWithVATColumn.ComputeValues();
nextValues.ComputeSumTotal(techNextSumWithVATColumn);
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues,
nextValues, currentTablePayments, nextTablePayments);
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
nextSumWithVATColumn.ComputeValues(nextValues.SumTotal);
nextSumColumn.PostCheck();
nextSumWithVATColumn.PostCheck();
nextVATColumn.PostCheck();
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 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);
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
techNextSumColumn,
techNextVATColumn,
techNextSumWithVATColumn,
nextSumColumn,
nextVATColumn,
nextSumWithVATColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
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

@ -0,0 +1,222 @@
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.Next;
using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper;
using EvoCalculator.Core.PostCalculation.v2.Columns.Next;
using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn;
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
public static partial class CalculateManager
{
public static ManagerResult Suspension(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;
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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 SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
nextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected);
// nextSumWithVATColumn.PostCheck();
// nextVATColumn.PostCheck();
// nextSumColumn.PostCheck();
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 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);
// nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
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(nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
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

@ -0,0 +1,19 @@
using System.Linq;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
namespace EvoCalculator.Core.PostCalculation.v2;
public class PostValues : v1.PostValues
{
public decimal ContractEconomyWithVAT;
public PostValues(PreparedValues preparedValues) : base(preparedValues)
{
}
public void ComputeContractEconomyWithVAT(BaseColumn<decimal> nextCreditVATColumn)
{
ContractEconomyWithVAT = this.ContractEconomy + nextCreditVATColumn.GetValue(0);
}
}

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Xunit;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers;

View File

@ -1,4 +1,5 @@
using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using System;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using Microsoft.AspNetCore.Mvc;
@ -8,9 +9,22 @@ namespace EvoCalculator.Core.Controllers.PostCalculation;
[Route("api/[controller]")]
public class PostCalculationController
{
private Func<RequestCalculation, ActionResult<ManagerResult>> GetCalculateVersion(DateTime targetDate)
{
var envDateV2 = Environment.GetEnvironmentVariable("POST_CALCULATION_V2_DATE");
var calculationV2Date = DateTime.Parse(envDateV2);
if (targetDate >= calculationV2Date) return new v2.PostCalculationController().Calculate;
return new v1.PostCalculationController().Calculate;
}
[HttpPost("[action]")]
public ActionResult<ManagerResult> Calculate([FromBody] RequestCalculation requestCalculation)
{
return new v1.PostCalculationController().Calculate(requestCalculation);
var calcDate = requestCalculation.PreparedValues.CalcDate;
var calculateMethod = GetCalculateVersion(calcDate);
return calculateMethod(requestCalculation);
}
}

View File

@ -4,6 +4,7 @@ using EvoCalculator.Core.PostCalculation.v1.Managers;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Controllers.PostCalculation.v1;

View File

@ -0,0 +1,46 @@
using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v2.Managers;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Controllers.PostCalculation.v2;
[ApiExplorerSettings(IgnoreApi = true)]
[ApiController]
[ApiVersion("2.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class PostCalculationController : Controller
{
[HttpPost("[action]")]
public ActionResult<ManagerResult> Calculate([FromBody] RequestCalculation requestCalculation)
{
// TEMP
requestCalculation.TableInsurance.Next = requestCalculation.TableInsurance.Current;
var result = requestCalculation.PreparedValues.CalcType switch
{
100000001 => CalculateManager.CalculateByTotalExpected(requestCalculation),
100000003 => CalculateManager.EarlyRedemption(requestCalculation),
100000004 => CalculateManager.PERWithoutChangingTheTerm(requestCalculation),
100000005 => CalculateManager.PERWithChangingTheTerm(requestCalculation),
100000006 => CalculateManager.CalculateByIRRAndSum(requestCalculation),
100000007 => CalculateManager.Suspension(requestCalculation),
100000008 => CalculateManager.ChangingLastPayment(requestCalculation),
_ => CalculateManager.CalculateDefault(requestCalculation)
};
var hasErrors = result.Errors is {Count: > 0};
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
}
}

View File

@ -25,7 +25,8 @@
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"calculation_v2_date": "2021-09-02",
"calculation_v3_date": "2022-03-30"
"calculation_v3_date": "2022-03-30",
"post_calculation_v2_date": "2022-04-14"
}
}
}