merge release/http-error-codes

This commit is contained in:
vchikalkin 2023-07-28 10:31:19 +03:00
parent 8eb9dec769
commit 5df209f620
59 changed files with 5981 additions and 6338 deletions

View File

@ -12,8 +12,4 @@
<ProjectReference Include="..\EvoCalculator.Core.Tools\EvoCalculator.Core.Tools.csproj" /> <ProjectReference Include="..\EvoCalculator.Core.Tools\EvoCalculator.Core.Tools.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
</Project> </Project>

View File

@ -2,6 +2,7 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v1.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns;
@ -57,12 +58,12 @@ public class BaseCashflowMSFOColumn : BaseColumnWithNominal
{ {
if (additionalData?.MinCashflowMSFONominal != null) if (additionalData?.MinCashflowMSFONominal != null)
if (Nominal < additionalData.MinCashflowMSFONominal / 100) if (Nominal < additionalData.MinCashflowMSFONominal / 100)
throw new Exception( throw new AppException(
$"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}"); $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}");
if (additionalData?.MaxCashflowMSFONominal != null) if (additionalData?.MaxCashflowMSFONominal != null)
if (Nominal >= additionalData.MaxCashflowMSFONominal / 100) if (Nominal >= additionalData.MaxCashflowMSFONominal / 100)
throw new Exception( throw new AppException(
$"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}"); $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}");
} }
} }

View File

@ -1,6 +1,6 @@
using System; using System.Linq;
using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v1.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns;
@ -14,7 +14,7 @@ public class InterestColumn : BaseColumn<decimal>
{ {
for (var i = 3; i < Values.Skip(1).ToList().Count; i++) for (var i = 3; i < Values.Skip(1).ToList().Count; i++)
if (Values[i] > sumColumn.Values[i]) if (Values[i] > sumColumn.Values[i])
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж");
} }

View File

@ -3,6 +3,7 @@ using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v1.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns;
@ -38,12 +39,12 @@ public class SumColumn : BaseColumnWithXIRR
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
if (Values[1] / Values.Skip(1).Sum() >= 0.5m) if (Values[1] / Values.Skip(1).Sum() >= 0.5m)
throw new Exception( throw new AppException(
"Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж"); "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж");
for (var i = 2; i < Values.Length - 1; i++) for (var i = 2; i < Values.Length - 1; i++)
if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i)) if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i))
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи"); "Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи");
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
@ -27,294 +26,282 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn =
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength); {
dateTempColumn.ComputeValues(preparedValues); dateColumn,
dateTempColumn,
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); percentPaymentColumn,
percentPaymentColumn.ComputeValues(preparedPayments); kaskoNmperGrColumn,
tlmGrColumn,
var kaskoNmperGrColumn = gpsGrColumn,
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected); sumColumn,
kaskoNmperGrColumn.ComputeValues(preparedValues, constants); vatColumn,
kaskoNmperGrColumn.PostCheck(); sumWithVatColumn,
acceptSumColumn,
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, acceptKaskoColumn,
preparedValues.IrrExpected); acceptOsagoColumn,
tlmGrColumn.ComputeValues(preparedPayments, preparedValues); acceptInsuranceColumn,
tlmGrColumn.PostCheck(); deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, npvBonusExpensesColumn,
preparedValues.IrrExpected); kaskoBonusGrSumColumn,
gpsGrColumn.ComputeValues(preparedPayments, preparedValues); agentComissionExpensesColumn,
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn, transExprensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn); nsibExpensesColumn,
tlmExpensesColumn,
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); gpsExpensesColumn,
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn); registrExpensesColumn,
insuranceBonusExpensesColumn,
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); comissionBonusExpensesColumn,
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn); taxColumn,
cashflowColumn,
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); cashflowLeasingColumn,
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, cashflowMsfoColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, cashflowNpvColumn,
ratExpensesColumn, npvWeightColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn); npvColumn,
irrGrColumn,
var npvWeightColumn = new NPVWeightColumn(maxColumnLength); niColumn,
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); interestColumn,
cashflowNsibColumn,
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); revenueColumn,
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); sumCurrentColumn,
sumCurrentNegativeColumn,
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); sumCurrentInterestColumn,
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn); sumCurrentTlmColumn,
sumRepaymentColumn,
var niColumn = new NIColumn(preparedValues.Nmper + 1); extraBonusSumColumn,
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn); cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
var interestColumn = new InterestColumn(preparedValues.Nmper + 1); npvFinalColumn,
interestColumn.ComputeValues(irrGrColumn, niColumn); directorBonusSumColumn,
interestColumn.PostCheck(sumColumn); cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, npvFinal2Column
nsibBruttoGrColumn, nsibExpensesColumn); }
};
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
return new ManagerResult
{
PostValues = postValues,
PreparedValues = preparedValues,
Columns = new
{
dateColumn,
dateTempColumn,
percentPaymentColumn,
kaskoNmperGrColumn,
tlmGrColumn,
gpsGrColumn,
sumColumn,
vatColumn,
sumWithVatColumn,
acceptSumColumn,
acceptKaskoColumn,
acceptOsagoColumn,
acceptInsuranceColumn,
deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
npvBonusExpensesColumn,
kaskoBonusGrSumColumn,
agentComissionExpensesColumn,
ratExpensesColumn,
transExprensesColumn,
nsibExpensesColumn,
tlmExpensesColumn,
gpsExpensesColumn,
registrExpensesColumn,
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn,
taxColumn,
cashflowColumn,
cashflowLeasingColumn,
cashflowMsfoColumn,
cashflowNpvColumn,
npvWeightColumn,
npvColumn,
irrGrColumn,
niColumn,
interestColumn,
cashflowNsibColumn,
revenueColumn,
sumCurrentColumn,
sumCurrentNegativeColumn,
sumCurrentInterestColumn,
sumCurrentTlmColumn,
sumRepaymentColumn,
extraBonusSumColumn,
cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
npvFinalColumn,
directorBonusSumColumn,
cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
npvFinal2Column
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
@ -28,293 +27,281 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn =
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength); {
dateTempColumn.ComputeValues(preparedValues); dateColumn,
dateTempColumn,
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); percentPaymentColumn,
percentPaymentColumn.ComputeValues(preparedPayments); kaskoNmperGrColumn,
tlmGrColumn,
var kaskoNmperGrColumn = gpsGrColumn,
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected); sumColumn,
kaskoNmperGrColumn.ComputeValues(preparedValues, constants); vatColumn,
kaskoNmperGrColumn.PostCheck(); sumWithVatColumn,
acceptSumColumn,
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, acceptKaskoColumn,
preparedValues.IrrExpected); acceptOsagoColumn,
tlmGrColumn.ComputeValues(preparedPayments, preparedValues); acceptInsuranceColumn,
tlmGrColumn.PostCheck(); deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, npvBonusExpensesColumn,
preparedValues.IrrExpected); kaskoBonusGrSumColumn,
gpsGrColumn.ComputeValues(preparedPayments, preparedValues); agentComissionExpensesColumn,
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues( sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn, transExprensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn); nsibExpensesColumn,
tlmExpensesColumn,
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); gpsExpensesColumn,
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn); registrExpensesColumn,
insuranceBonusExpensesColumn,
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); comissionBonusExpensesColumn,
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn); taxColumn,
cashflowColumn,
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); cashflowLeasingColumn,
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, cashflowMsfoColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, cashflowNpvColumn,
ratExpensesColumn, npvWeightColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn); npvColumn,
irrGrColumn,
var npvWeightColumn = new NPVWeightColumn(maxColumnLength); niColumn,
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); interestColumn,
cashflowNsibColumn,
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); revenueColumn,
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); sumCurrentColumn,
sumCurrentNegativeColumn,
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); sumCurrentInterestColumn,
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn); sumCurrentTlmColumn,
sumRepaymentColumn,
var niColumn = new NIColumn(preparedValues.Nmper + 1); extraBonusSumColumn,
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn); cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
var interestColumn = new InterestColumn(preparedValues.Nmper + 1); npvFinalColumn,
interestColumn.ComputeValues(irrGrColumn, niColumn); directorBonusSumColumn,
interestColumn.PostCheck(sumColumn); cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, npvFinal2Column
nsibBruttoGrColumn, nsibExpensesColumn); }
};
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
return new ManagerResult
{
PostValues = postValues,
PreparedValues = preparedValues,
Columns = new
{
dateColumn,
dateTempColumn,
percentPaymentColumn,
kaskoNmperGrColumn,
tlmGrColumn,
gpsGrColumn,
sumColumn,
vatColumn,
sumWithVatColumn,
acceptSumColumn,
acceptKaskoColumn,
acceptOsagoColumn,
acceptInsuranceColumn,
deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
npvBonusExpensesColumn,
kaskoBonusGrSumColumn,
agentComissionExpensesColumn,
ratExpensesColumn,
transExprensesColumn,
nsibExpensesColumn,
tlmExpensesColumn,
gpsExpensesColumn,
registrExpensesColumn,
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn,
taxColumn,
cashflowColumn,
cashflowLeasingColumn,
cashflowMsfoColumn,
cashflowNpvColumn,
npvWeightColumn,
npvColumn,
irrGrColumn,
niColumn,
interestColumn,
cashflowNsibColumn,
revenueColumn,
sumCurrentColumn,
sumCurrentNegativeColumn,
sumCurrentInterestColumn,
sumCurrentTlmColumn,
sumRepaymentColumn,
extraBonusSumColumn,
cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
npvFinalColumn,
directorBonusSumColumn,
cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
npvFinal2Column
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -9,14 +9,14 @@ public class PostValues
{ {
protected PreparedValues _preparedValues; protected PreparedValues _preparedValues;
public decimal BaseCost; public decimal BaseCost { get; set; }
public decimal BonusBase; public decimal BonusBase { get; set; }
public decimal BonusResult; public decimal BonusResult { get; set; }
public double NPVNI; public double NPVNI { get; set; }
public decimal PriceUP; public decimal PriceUP { get; set; }
public double PriceUP_PR; public double PriceUP_PR { get; set; }
public decimal PriceUP_Year; public decimal PriceUP_Year { get; set; }
public double PriceUP_Year_PR; public double PriceUP_Year_PR { get; set; }
public PostValues(PreparedValues preparedValues) public PostValues(PreparedValues preparedValues)
@ -33,7 +33,7 @@ public class PostValues
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats + + Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats +
_preparedValues.Registration + _preparedValues.TrackerCost + _preparedValues.Registration + _preparedValues.TrackerCost +
_preparedValues.TLMCost + _preparedValues.TransportTaxGr) * _preparedValues.TLMCost + _preparedValues.TransportTaxGr) *
(decimal) _preparedValues.Leasing0K + (decimal)_preparedValues.Leasing0K +
_preparedValues.NsibBrutto; _preparedValues.NsibBrutto;
} }
@ -47,13 +47,13 @@ public class PostValues
public void ComputeBonusResult(BaseColumn<decimal> npvBonusExpensesColumn) public void ComputeBonusResult(BaseColumn<decimal> npvBonusExpensesColumn)
{ {
BonusResult = Math.Abs(npvBonusExpensesColumn.Values[0]) - BonusResult = Math.Abs(npvBonusExpensesColumn.Values[0]) -
Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) _preparedValues.SalaryRate / Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal)_preparedValues.SalaryRate /
(decimal) (1 + _preparedValues.SalaryRate); (decimal)(1 + _preparedValues.SalaryRate);
} }
public void ComputeNPVNI(BaseColumn<decimal> npvColumn) public void ComputeNPVNI(BaseColumn<decimal> npvColumn)
{ {
NPVNI = npvColumn.Values.Sum(x => (double) x) / (double) _preparedValues.NpvBase; NPVNI = npvColumn.Values.Sum(x => (double)x) / (double)_preparedValues.NpvBase;
} }
public void ComputePriceUP(BaseColumn<decimal> sumColumn) public void ComputePriceUP(BaseColumn<decimal> sumColumn)
@ -63,7 +63,7 @@ public class PostValues
public void ComputePriceUP_PR() public void ComputePriceUP_PR()
{ {
PriceUP_PR = (double) PriceUP / (double) _preparedValues.PriceUpTotal; PriceUP_PR = (double)PriceUP / (double)_preparedValues.PriceUpTotal;
} }
public void ComputePriceUP_Year() public void ComputePriceUP_Year()
@ -73,6 +73,6 @@ public class PostValues
public void ComputePriceUP_Year_PR() public void ComputePriceUP_Year_PR()
{ {
PriceUP_Year_PR = (double) PriceUP_Year / (double) _preparedValues.PriceUpTotal; PriceUP_Year_PR = (double)PriceUP_Year / (double)_preparedValues.PriceUpTotal;
} }
} }

View File

@ -1,9 +1,9 @@
using System; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Models.Common.Request; using EvoCalculator.Core.Models.Common.Request;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v2.Columns; namespace EvoCalculator.Core.Calculation.v2.Columns;
@ -47,7 +47,7 @@ public class BaseCashflowMSFOColumn : v1.Columns.BaseCashflowMSFOColumn
if (flags?.DISABLE_CHECKS_RESULTS == false && _preparedValues.PaymentDateNew != null && if (flags?.DISABLE_CHECKS_RESULTS == false && _preparedValues.PaymentDateNew != null &&
this.Nominal < ((additionalData.MinCashflowMSFONominal / 100) - constants.DeltaIRR)) this.Nominal < ((additionalData.MinCashflowMSFONominal / 100) - constants.DeltaIRR))
{ {
throw new Exception( throw new AppException(
"По итогам результата расчета данное изменение графика влечет к убыточности сделки. Скорректируйте вносимые изменения либо получите согласование с адреса calculator@evoleasing.ru"); "По итогам результата расчета данное изменение графика влечет к убыточности сделки. Скорректируйте вносимые изменения либо получите согласование с адреса calculator@evoleasing.ru");
} }
} }

View File

@ -2,6 +2,7 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v2.Columns; namespace EvoCalculator.Core.Calculation.v2.Columns;
@ -30,7 +31,7 @@ public class CreditColumn : BaseColumnWithSum
{ {
var constants = new Constants.Calculation(); var constants = new Constants.Calculation();
var expectedPrepaid = Math.Round(financingSupplierCreditSum * (decimal)(1 + constants.VatValue), 2); var expectedPrepaid = Math.Round(financingSupplierCreditSum * (decimal)(1 + constants.VatValue), 2);
throw new Exception( throw new AppException(
$"Сумма аванса не покрывает потенциальные потери по финансированию поставщика. Увеличьте размер аванса до {expectedPrepaid}"); $"Сумма аванса не покрывает потенциальные потери по финансированию поставщика. Увеличьте размер аванса до {expectedPrepaid}");
} }
} }

View File

@ -3,6 +3,7 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Models.Common.Request; using EvoCalculator.Core.Models.Common.Request;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v2.Columns; namespace EvoCalculator.Core.Calculation.v2.Columns;
@ -31,7 +32,7 @@ public class SumColumn : v1.Columns.SumColumn
if (flags?.DISABLE_CHECKS_RESULTS == false) if (flags?.DISABLE_CHECKS_RESULTS == false)
if (_preparedValues.LastPaymentFix == false && Values[^1] / _preparedValues.PlPrice < 0.01m) if (_preparedValues.LastPaymentFix == false && Values[^1] / _preparedValues.PlPrice < 0.01m)
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика, при заданных параметрах последний платеж меньше 1%"); "Невозможно осуществить расчет графика, при заданных параметрах последний платеж меньше 1%");
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
@ -41,304 +40,292 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck(flags);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck(flags);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
return new ManagerResult
{ {
PostValues = postValues, dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, tlmGrColumn,
dateTempColumn, gpsGrColumn,
percentPaymentColumn, sumColumn,
kaskoNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, negativeCashflowColumn,
insuranceBonusExpensesColumn, nsibBruttoGrColumn,
comissionBonusExpensesColumn, taxColumn,
expensesColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, subsidyExpensesColumn
npvFinal2Column, }
sumCreditColumn, };
creditColumn,
subsidyExpensesColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
@ -41,303 +40,291 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
return new ManagerResult
{ {
PostValues = postValues, dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, tlmGrColumn,
dateTempColumn, gpsGrColumn,
percentPaymentColumn, sumColumn,
kaskoNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, negativeCashflowColumn,
insuranceBonusExpensesColumn, nsibBruttoGrColumn,
comissionBonusExpensesColumn, taxColumn,
expensesColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, subsidyExpensesColumn
npvFinal2Column, }
sumCreditColumn, };
creditColumn,
subsidyExpensesColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -6,7 +6,7 @@ namespace EvoCalculator.Core.Calculation.v2;
public class PostValues : v1.PostValues public class PostValues : v1.PostValues
{ {
public decimal ContractEconomy; public decimal ContractEconomy { get; set; }
public PostValues(PreparedValues preparedValues) : base(preparedValues) public PostValues(PreparedValues preparedValues) : base(preparedValues)
{ {
@ -19,7 +19,7 @@ public class PostValues : v1.PostValues
directorBonusSumColumn.GetValue(0); directorBonusSumColumn.GetValue(0);
// if (Value < 0) // if (Value < 0)
// throw new Exception( // throw new AppException(
// "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ"); // "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ");
} }
} }

View File

@ -1,7 +1,5 @@
using System; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v3.Columns; namespace EvoCalculator.Core.Calculation.v3.Columns;

View File

@ -2,6 +2,7 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Calculation.v3.Columns; namespace EvoCalculator.Core.Calculation.v3.Columns;
@ -18,7 +19,7 @@ public class FinGAPNmperGrColumn : BaseColumnWithSum
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
if (Math.Abs(Math.Round(Values[0])) != Math.Round(preparedValues.InsuranceFinGAPNmper)) if (Math.Abs(Math.Round(Values[0])) != Math.Round(preparedValues.InsuranceFinGAPNmper))
throw new Exception( throw new AppException(
$"Ошибка во время расчета столбца {GetType().Name}: не совпадает сумма итого"); $"Ошибка во время расчета столбца {GetType().Name}: не совпадает сумма итого");
} }

View File

@ -1,6 +1,4 @@
using System.Linq; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns; namespace EvoCalculator.Core.Calculation.v3.Columns;

View File

@ -1,6 +1,5 @@
using System; using System;
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.Interfaces.Columns; using EvoCalculator.Core.Base.Interfaces.Columns;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Calculation.v3.Columns; using EvoCalculator.Core.Calculation.v3.Columns;
@ -9,7 +7,6 @@ using EvoCalculator.Core.Models.Calculation.Models.Request;
using EvoCalculator.Core.Tools.Validation; using EvoCalculator.Core.Tools.Validation;
using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn; using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn;
using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn; using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn;
using CashflowMSFOColumnVT1 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT1;
using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2; using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2;
using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn; using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn; using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn;
@ -47,347 +44,335 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
var piColumn = new PIColumnVT2(61, preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn,
percentPaymentColumn, postValues, sumColumn, sumCreditColumn, creditPaymentColumn,
vatRecoverableColumn, vatColumn, sumWithVatColumn, creditColumn);
piColumn.ComputeValues((decimal)preparedValues.NpvniExpected);
sumColumn.PostCheck(flags);
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
vatColumn.PostCheck();
sumWithVatColumn.PostCheck();
creditColumn.PostCheck(preparedValues, sumColumn);
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
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();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
var piColumn = new PIColumnVT2(61, preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn,
percentPaymentColumn, postValues, sumColumn, sumCreditColumn, creditPaymentColumn,
vatRecoverableColumn, vatColumn, sumWithVatColumn, creditColumn);
piColumn.ComputeValues((decimal)preparedValues.NpvniExpected);
sumColumn.PostCheck(flags);
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
vatColumn.PostCheck();
sumWithVatColumn.PostCheck();
creditColumn.PostCheck(preparedValues, sumColumn);
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
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();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
PostValues = postValues, dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, finGAPNmperGrColumn,
dateTempColumn, tlmGrColumn,
percentPaymentColumn, gpsGrColumn,
kaskoNmperGrColumn, sumColumn,
finGAPNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, evoKaskoNmperGrColumn,
insuranceBonusExpensesColumn, negativeCashflowColumn,
comissionBonusExpensesColumn, nsibBruttoGrColumn,
expensesColumn, taxColumn,
evoKaskoNmperGrColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, sumVATCreditColumn,
npvFinal2Column, creditVATColumn,
sumCreditColumn, subsidyExpensesColumn,
creditColumn, vatRecoverableColumn,
sumVATCreditColumn, creditPaymentColumn,
creditVATColumn, cashflowMsfoWithCfColumn,
subsidyExpensesColumn, piColumn
vatRecoverableColumn, }
creditPaymentColumn, };
cashflowMsfoWithCfColumn,
piColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;
@ -46,352 +45,340 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck(flags);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
creditColumn.PostCheck(preparedValues, sumColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
creditPaymentColumn.ComputeValues(preparedValues, sumCreditColumn, creditColumn);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck(flags);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
creditColumn.PostCheck(preparedValues, sumColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
creditPaymentColumn.ComputeValues(preparedValues, sumCreditColumn, creditColumn);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
PostValues = postValues, dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, finGAPNmperGrColumn,
dateTempColumn, tlmGrColumn,
percentPaymentColumn, gpsGrColumn,
kaskoNmperGrColumn, sumColumn,
finGAPNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, evoKaskoNmperGrColumn,
insuranceBonusExpensesColumn, negativeCashflowColumn,
comissionBonusExpensesColumn, nsibBruttoGrColumn,
expensesColumn, taxColumn,
evoKaskoNmperGrColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, sumVATCreditColumn,
npvFinal2Column, creditVATColumn,
sumCreditColumn, subsidyExpensesColumn,
creditColumn, vatRecoverableColumn,
sumVATCreditColumn, creditPaymentColumn,
creditVATColumn, cashflowMsfoWithCfColumn,
subsidyExpensesColumn, piColumn
vatRecoverableColumn, }
creditPaymentColumn, };
cashflowMsfoWithCfColumn,
piColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,5 +1,4 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v2.Columns;
@ -46,351 +45,339 @@ public static partial class CalculateManager
? preparedValues.Nmper + 1 ? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2; : preparedValues.NmperDeprecation + 2;
try
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
creditColumn.PostCheck(preparedValues, sumColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
creditPaymentColumn.ComputeValues(preparedValues, sumCreditColumn, creditColumn);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues,
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
finGAPNmperGrColumn.ComputeValues();
finGAPNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
evoKaskoNmperGrColumn.ComputeValues();
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn
, preparedPayments
);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
acceptKaskoColumn.ComputeValues(preparedValues);
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
acceptOsagoColumn.ComputeValues(preparedValues);
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(maxColumnLength);
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
ratExpensesColumn.ComputeValues(preparedValues);
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
transExprensesColumn.ComputeValues(preparedValues);
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
nsibExpensesColumn.ComputeValues(preparedValues);
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
registrExpensesColumn.ComputeValues(preparedValues);
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
comissionBonusExpensesColumn.ComputeValues(preparedValues);
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
subsidyExpensesColumn);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
subsidyExpensesColumn);
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
var niColumn = new NIColumn(preparedValues.Nmper + 1);
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
sumCurrentColumn.ComputeValues(sumWithVatColumn);
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
sumCurrentInterestColumn.ComputeValues(interestColumn);
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn);
var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength);
cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
postValues.ComputeDirectorBonus();
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
postValues.ComputeRegionalDirectorBonus();
postValues.ComputeRegionalDirectorExtraBonus(cashflowMsfoColumn);
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn);
var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength);
cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
creditColumn.PostCheck(preparedValues, sumColumn);
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
creditPaymentColumn.ComputeValues(preparedValues, sumCreditColumn, creditColumn);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
.Max());
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();
postValues.ComputePriceUP_Year_PR();
postValues.ComputeNPVNI(npvColumn);
postValues.ComputeBonusResult(npvBonusExpensesColumn);
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
return new ManagerResult
{ {
PostValues = postValues, dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, finGAPNmperGrColumn,
dateTempColumn, tlmGrColumn,
percentPaymentColumn, gpsGrColumn,
kaskoNmperGrColumn, sumColumn,
finGAPNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, evoKaskoNmperGrColumn,
insuranceBonusExpensesColumn, negativeCashflowColumn,
comissionBonusExpensesColumn, nsibBruttoGrColumn,
expensesColumn, taxColumn,
evoKaskoNmperGrColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, sumVATCreditColumn,
npvFinal2Column, creditVATColumn,
sumCreditColumn, subsidyExpensesColumn,
creditColumn, vatRecoverableColumn,
sumVATCreditColumn, creditPaymentColumn,
creditVATColumn, cashflowMsfoWithCfColumn,
subsidyExpensesColumn, piColumn
vatRecoverableColumn, }
creditPaymentColumn, };
cashflowMsfoWithCfColumn,
piColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -6,12 +6,12 @@ namespace EvoCalculator.Core.Calculation.v3;
public class PostValues : v2.PostValues public class PostValues : v2.PostValues
{ {
public decimal ContractEconomyWithVAT; public decimal ContractEconomyWithVAT { get; set; }
public decimal DirectorBonus; public decimal DirectorBonus { get; set; }
public decimal DirectorExtraBonus; public decimal DirectorExtraBonus { get; set; }
public decimal RegionalDirectorBonus; public decimal RegionalDirectorBonus { get; set; }
public decimal RegionalDirectorExtraBonus; public decimal RegionalDirectorExtraBonus { get; set; }
public double PlanIRRMSFO; public double PlanIRRMSFO { get; set; }
private readonly Constants.Calculation _constants; private readonly Constants.Calculation _constants;
public PostValues(PreparedValues _preparedValues) : base(_preparedValues) public PostValues(PreparedValues _preparedValues) : base(_preparedValues)

View File

@ -6,8 +6,4 @@
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1"/>
</ItemGroup>
</Project> </Project>

View File

@ -7,12 +7,11 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj"/> <ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1"/> <PackageReference Include="TridentGoalSeek" Version="1.0.5" />
<PackageReference Include="TridentGoalSeek" Version="1.0.5"/>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -10,7 +10,6 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="TridentGoalSeek" Version="1.0.5" /> <PackageReference Include="TridentGoalSeek" Version="1.0.5" />
</ItemGroup> </ItemGroup>

View File

@ -4,6 +4,7 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Tools.Array; using EvoCalculator.Core.Tools.Array;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -79,7 +80,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
public void PostCheck() public void PostCheck()
{ {
if (Values.Length != Dates.Length) if (Values.Length != Dates.Length)
throw new Exception( throw new AppException(
$"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений"); $"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений");
} }
} }

View File

@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Errors;
using EvoCalculator.Core.Tools.GroupColumns; using EvoCalculator.Core.Tools.GroupColumns;
using EvoCalculator.Core.Tools.GroupColumns.Models; using EvoCalculator.Core.Tools.GroupColumns.Models;
@ -37,7 +37,7 @@ public class InterestColumn : BaseColumn<decimal>
}); });
if (negativeValuesCount > 1) if (negativeValuesCount > 1)
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж");
} }
} }

View File

@ -4,6 +4,7 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -96,7 +97,7 @@ public class BaseSumColumn : BaseColumnWithNominal
checkTools.CheckColumnForZeroValue(Values.Skip(2)); checkTools.CheckColumnForZeroValue(Values.Skip(2));
if (Values[1] / Values.Skip(1).Sum() >= (decimal) 0.5) if (Values[1] / Values.Skip(1).Sum() >= (decimal) 0.5)
throw new Exception( throw new AppException(
"Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж. Измените параметры для расчета."); "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж. Измените параметры для расчета.");
} }
} }

View File

@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.lib; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.lib;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Tools.Array; using EvoCalculator.Core.Tools.Array;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -115,7 +116,7 @@ public class TLMCostColumn : BaseColumnWithSum
public void PostCheck() public void PostCheck()
{ {
if (Values.Length != Dates.Length) if (Values.Length != Dates.Length)
throw new Exception( throw new AppException(
$"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений"); $"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений");
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Current;
@ -14,277 +12,264 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
} }
catch (Exception ex)
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)
{ {
return new ManagerResult nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
{ nextTlmDateColumn.ComputeValues(tlmData);
Errors = new List<string> nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
{ nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
ex.Message 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -12,200 +10,187 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Current;
@ -14,227 +12,215 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) 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(preparedValues, currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* var nextValues = new NextValues(preparedValues);
* CURRENT nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
*/ currentTablePayments);
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 nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
* NEXT preparedValues, nextValues, currentTablePayments, nextTablePayments);
*/ nextSumColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextSumColumn.PostCheck();
nextDateColumn.ComputeValues(preparedValues, currentTablePayments); nextSumColumn.RoundValues();
var nextDateTempColumn = new Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); 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);
TLMDateColumn nextTlmDateColumn = null; var nextCashflowMSFOColumn = new CashflowMSFOColumn();
TLMCostColumn nextTlmCostColumn = null; nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
TLMGrColumn nextTlmGrColumn = null; nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var tlmData = new Helper().GetTLMData(preparedValues var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
, currentTableTLMTracker, nextTableTLMTracker nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants);
, nextDateColumn);
if (tlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); currentDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); currentDateTemp = currentDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); currentSumColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
nextTlmCostColumn.PostCheck(); nextDateColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextDateTempColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextTlmDateColumn,
nextTlmGrColumn.PostCheck(); nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using System.Collections.Generic;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper;
@ -11,196 +9,183 @@ public static partial class CalculateManager
{ {
public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; // nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; // nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
// nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
// nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -12,326 +10,313 @@ public static partial class CalculateManager
{ {
public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
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; nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
TLMCostColumn techNextTlmCostColumn = null; currentTablePayments);
TLMGrColumn techNextTlmGrColumn = null;
var techTlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, techNextDateColumn);
if (techTlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); techNextDateColumn,
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, techNextDateTempColumn,
techNextTlmDateColumn); techNextTlmDateColumn,
techNextTlmCostColumn,
var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); techNextTlmGrColumn,
techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn, techNextSumColumn,
techNextCashflowMSFOColumn); techNextVATColumn,
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, techNextSumWithVATColumn,
techNextDateTempColumn, techNextCashflowMSFOForNIColumn, constants); techNextNSIBBruttoGrColumn,
techNextSubsidyExpensesColumn,
/* techNextCashflowMSFOColumn,
* TECH techNextCashflowMSFOForNIColumn,
*/ techNextIRRGrColumn,
techNextNIColumn,
/* techNextInterestColumn,
* NEXT techNextSumCurrentColumn,
*/ techNextSumCurrentNegativeColumn,
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); techNextSumCurrentInterestColumn,
nextDateColumn.ComputeValues(preparedValues, currentTablePayments); techNextSumCurrentTLMColumn,
techNextSumRepaymentColumn,
var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); nextDateColumn,
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
TLMDateColumn nextTlmDateColumn = null; nextTlmGrColumn,
TLMCostColumn nextTlmCostColumn = null; nextSumColumn,
TLMGrColumn nextTlmGrColumn = null; nextVATColumn,
nextSumWithVATColumn,
var tlmData = new Helper().GetTLMData(preparedValues nextNSIBBruttoGrColumn,
, currentTableTLMTracker, nextTableTLMTracker nextSubsidyExpensesColumn,
, nextDateColumn); nextCashflowMSFOColumn,
nextCashflowMSFOForNIColumn,
if (tlmData != null) nextIRRGrColumn,
{ nextNIColumn,
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextInterestColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextSumCurrentColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextSumCurrentNegativeColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextSumCurrentInterestColumn,
nextTlmCostColumn.PostCheck(); nextSumCurrentTLMColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumRepaymentColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextCashflowMSFOFinalColumn,
nextTlmGrColumn.PostCheck(); nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Current;
@ -14,281 +12,268 @@ public static partial class CalculateManager
{ {
public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) 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(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 DateColumnVT1(preparedValues.Nmper.Next + 1);
techNextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var techNextDateTempColumn = new 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; }
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
* CURRENT currentTablePayments);
*/
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 DateColumnVT1(preparedValues.Nmper.Next + 1);
techNextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var techNextDateTempColumn = new Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn);
TLMDateColumn techNextTlmDateColumn = null; var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
TLMCostColumn techNextTlmCostColumn = null; preparedValues, nextValues, currentTablePayments, nextTablePayments);
TLMGrColumn techNextTlmGrColumn = null; techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
var techTlmData = new Helper().GetTLMData(preparedValues var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
, currentTableTLMTracker, nextTableTLMTracker techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
, techNextDateColumn);
if (techTlmData != null) var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
{ techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); techNextSumWithVATColumn.ComputeValues();
techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); nextValues.ComputeSumTotal(techNextSumWithVATColumn);
techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextValues.ComputeNmper(nextTablePayments, currentTablePayments);
techNextTlmCostColumn.PostCheck(); /*
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); * TECH
techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); */
}
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new Columns.Next.DateTempColumn(nextValues.Nmper + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn);
nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, TLMDateColumn nextTlmDateColumn = null;
currentTablePayments); 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();
}
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments); currentTablePayments);
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn,
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); preparedValues, nextValues, currentTablePayments, nextTablePayments);
var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1);
techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextSumWithVATColumn.ComputeValues();
nextValues.ComputeSumTotal(techNextSumWithVATColumn); var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues,
nextValues.ComputeNmper(nextTablePayments, currentTablePayments); nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
/* nextSumWithVATColumn.ComputeValues(nextValues.SumTotal);
* TECH 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
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 * NEXT
*/ */
var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new Columns.Next.DateTempColumn(nextValues.Nmper + 1); var postValues = new PostValues(preparedValues);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
TLMDateColumn nextTlmDateColumn = null; return new ManagerResult
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{ {
return new ManagerResult PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
Errors = new List<string> currentDateColumn,
{ currentDateTemp = currentDateTempColumn,
ex.Message 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Current;
@ -14,240 +12,227 @@ public static partial class CalculateManager
{ {
public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) 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(preparedValues, currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* var nextValues = new NextValues(preparedValues);
* CURRENT nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
*/ currentTablePayments);
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 techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
* NEXT preparedValues, nextValues, currentTablePayments, nextTablePayments);
*/ techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); 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);
TLMDateColumn nextTlmDateColumn = null; var nextCashflowMSFOColumn = new CashflowMSFOColumn();
TLMCostColumn nextTlmCostColumn = null; nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
TLMGrColumn nextTlmGrColumn = null; nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var tlmData = new Helper().GetTLMData(preparedValues var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
, currentTableTLMTracker, nextTableTLMTracker nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn,
, nextDateColumn); nextCashflowMSFOColumn);
nextCashflowMSFOColumn.PostCheck();
if (tlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); currentDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); currentDateTemp = currentDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); currentSumColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
nextTlmGrColumn.PostCheck();
}
nextDateColumn,
var nextValues = new NextValues(preparedValues); nextDateTempColumn,
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, nextTlmDateColumn,
currentTablePayments); nextTlmCostColumn,
nextTlmGrColumn,
techNextSumColumn,
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, techNextVATColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments); techNextSumWithVATColumn,
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); nextSumColumn,
nextVATColumn,
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, nextSumWithVATColumn,
nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); nextNSIBBruttoGrColumn,
nextSumRepaymentColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); nextCashflowMSFOForNIColumn,
nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); nextIRRGrColumn,
nextNIColumn,
var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); nextInterestColumn,
nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, nextSumCurrentColumn,
preparedValues); nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); nextSumCurrentTLMColumn,
nextSumCreditColumn.ComputeValues(preparedValues, nextValues, constants, nextSumColumn); nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); nextCashflowMSFOFinal2Column,
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); nextSumCreditColumn,
nextCreditColumn,
nextValues.Nmper = preparedValues.Nmper.Next; nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); nextRevenueColumn
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -12,200 +10,187 @@ public static partial class CalculateManager
{ {
public static ManagerResult Suspension(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; // nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; // nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
// nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
// nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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, nextValues, constants, nextSumColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
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 PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, 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,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,20 +1,20 @@
using System; using System.Linq;
using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.PostCalculation.v1; namespace EvoCalculator.Core.PostCalculation.v1;
public class NextValues public class NextValues
{ {
public decimal AcquisitionExpenses; public decimal AcquisitionExpenses { get; set; }
public decimal BaseCost; public decimal BaseCost { get; set; }
public decimal NiAtInception; public decimal NiAtInception { get; set; }
public decimal NiAtInceptionMSFO; public decimal NiAtInceptionMSFO { get; set; }
public int Nmper; public int Nmper { get; set; }
public decimal SumTotal { get; set; }
protected PreparedValues preparedValues; protected PreparedValues preparedValues;
public decimal SumTotal;
public NextValues(PreparedValues preparedValues) public NextValues(PreparedValues preparedValues)
{ {
@ -73,7 +73,7 @@ public class NextValues
+ preparedValues.InceptDelta; + preparedValues.InceptDelta;
if (AcquisitionExpenses <= 0) if (AcquisitionExpenses <= 0)
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета."); "Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета.");
} }
@ -134,7 +134,7 @@ public class NextValues
// PostCheck // PostCheck
if (BaseCost <= 0) if (BaseCost <= 0)
throw new Exception( throw new AppException(
"Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета."); "Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета.");
} }
@ -167,14 +167,14 @@ public class NextValues
} }
if (i == 0) if (i == 0)
throw new Exception( throw new AppException(
"Невозможно осуществить расчет ЧДП с изменением срока. Необходимо увеличить сумму ЧДП"); "Невозможно осуществить расчет ЧДП с изменением срока. Необходимо увеличить сумму ЧДП");
Nmper = preparedValues.Nmper.Current - i + 1; Nmper = preparedValues.Nmper.Current - i + 1;
// PostCheck // PostCheck
if (Nmper < 13 && preparedValues.BalanceHolder.Next == 100000001) if (Nmper < 13 && preparedValues.BalanceHolder.Next == 100000001)
throw new Exception( throw new AppException(
"По итогам расчета срок лизинга получается меньше 13, при балансе ЛД это запрещено. Измените параметры для расчета"); "По итогам расчета срок лизинга получается меньше 13, при балансе ЛД это запрещено. Измените параметры для расчета");
} }
@ -182,6 +182,6 @@ public class NextValues
{ {
SumTotal = preparedValues.TotalExpected SumTotal = preparedValues.TotalExpected
- (preparedValues.TotalExpected - nextSumWithVATColumn.GetValue(0)) - (preparedValues.TotalExpected - nextSumWithVATColumn.GetValue(0))
* (decimal) preparedValues.Repayment; * (decimal)preparedValues.Repayment;
} }
} }

View File

@ -8,7 +8,7 @@ public class PostValues
{ {
protected PreparedValues _preparedValues; protected PreparedValues _preparedValues;
public decimal ContractEconomy; public decimal ContractEconomy { get; set; }
public PostValues(PreparedValues preparedValues) public PostValues(PreparedValues preparedValues)
{ {

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -18,286 +16,273 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
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(nextCreditVATColumn);
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)
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)
{ {
return new ManagerResult nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
{ nextTlmDateColumn.ComputeValues(tlmData);
Errors = new List<string> nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
{ nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
ex.Message 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(nextCreditVATColumn);
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
}
};
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -17,235 +15,222 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateByIRRNoLimit(RequestCalculation requestCalculation) public static ManagerResult CalculateByIRRNoLimit(RequestCalculation requestCalculation)
{ {
try var constants = new Constants.Calculation();
var preparedValues = requestCalculation.PreparedValues;
var currentTablePayments = requestCalculation.TablePayments.Current;
var nextTablePayments = requestCalculation.TablePayments.Next;
var currentTableInsurance = requestCalculation?.TableInsurance?.Current;
var nextTableInsurance = requestCalculation?.TableInsurance?.Next;
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn);
TLMDateColumn nextTlmDateColumn = null;
TLMCostColumn nextTlmCostColumn = null;
TLMGrColumn nextTlmGrColumn = null;
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* var nextValues = new NextValues(preparedValues);
* CURRENT nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
*/ currentTablePayments);
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 nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
* NEXT preparedValues, nextValues, currentTablePayments, nextTablePayments);
*/ nextSumColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextSumColumn.PostCheck();
nextDateColumn.ComputeValues(preparedValues, currentTablePayments); nextSumColumn.RoundValues();
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); 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);
TLMDateColumn nextTlmDateColumn = null; var nextCashflowMSFOColumn = new CashflowMSFOColumn();
TLMCostColumn nextTlmCostColumn = null; nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
TLMGrColumn nextTlmGrColumn = null; nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var tlmData = new Helper().GetTLMData(preparedValues var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
, currentTableTLMTracker, nextTableTLMTracker nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants);
, nextDateColumn);
if (tlmData != null) var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants);
nextSumWithVATColumn.ComputeValues();
nextVATColumn.PostCheck();
nextSumWithVATColumn.PostCheck();
var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn,
nextCashflowMSFOColumn);
nextCashflowMSFOColumn.PostCheck();
var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn);
var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn);
var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn);
var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn);
var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance);
var nextSumCurrentInterestColumn =
new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn);
var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn);
var nextSumRepaymentColumn = new SumRepaymentColumnVT1();
nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn,
nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn,
nextDateTempColumn, nextCashflowMSFOForNIColumn, constants);
nextSumRepaymentColumn.PostCheck();
var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn();
nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues);
var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column();
nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn,
preparedValues);
var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2);
nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn);
var nextCreditVATColumn = new CreditVATColumn(12 + 4);
nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn);
var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1);
nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1);
nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1);
nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn);
nextValues.ComputeNiAtInception(currentTablePayments);
nextValues.ComputeNiAtInceptionMSFO();
/*
* NEXT
*/
var postValues = new v2.PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); currentDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); currentDateTemp = currentDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); currentSumColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
nextTlmCostColumn.PostCheck(); nextDateColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextDateTempColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextTlmDateColumn,
nextTlmGrColumn.PostCheck(); 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
} }
};
var nextValues = new NextValues(preparedValues);
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
currentTablePayments);
var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments);
nextSumColumn.ComputeValues((decimal) currentSumColumn.IRR + preparedValues.IRRDelta);
nextSumColumn.PostCheck();
nextSumColumn.RoundValues();
var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
currentTablePayments, nextSumColumn);
var nsibRequiredValue = currentTablePayments
.Where((x, i) => i >= preparedValues.EditPaymentNumber - 1)
.Sum(x => x.NSIBBruttoPayment);
nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue);
var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1);
nextSubsidyExpensesColumn.ComputeValues(preparedValues);
nextValues.ComputeAcquisitionExpenses(nextTableInsurance);
var nextCashflowMSFOColumn = new CashflowMSFOColumn();
nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants);
var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
nextSumColumn, currentTablePayments, nextVATColumn, constants);
nextSumWithVATColumn.ComputeValues();
nextVATColumn.PostCheck();
nextSumWithVATColumn.PostCheck();
var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn,
nextCashflowMSFOColumn);
nextCashflowMSFOColumn.PostCheck();
var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn);
var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn);
var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn);
var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn);
var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance);
var nextSumCurrentInterestColumn =
new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn);
var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1);
nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn);
var nextSumRepaymentColumn = new SumRepaymentColumnVT1();
nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn,
nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn,
nextDateTempColumn, nextCashflowMSFOForNIColumn, constants);
nextSumRepaymentColumn.PostCheck();
var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn();
nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues);
var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column();
nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn,
preparedValues);
var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn);
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
nextValues.Nmper = preparedValues.Nmper.Next;
var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2);
nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn);
var nextCreditVATColumn = new CreditVATColumn(12 + 4);
nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn);
var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1);
nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1);
nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1);
nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn);
nextValues.ComputeNiAtInception(currentTablePayments);
nextValues.ComputeNiAtInceptionMSFO();
/*
* NEXT
*/
var postValues = new v2.PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -15,209 +13,196 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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(nextCreditVATColumn);
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

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -17,236 +15,223 @@ public static partial class CalculateManager
{ {
public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) 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(preparedValues, currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn);
TLMDateColumn nextTlmDateColumn = null;
TLMCostColumn nextTlmCostColumn = null;
TLMGrColumn nextTlmGrColumn = null;
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* var nextValues = new NextValues(preparedValues);
* CURRENT nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
*/ currentTablePayments);
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 nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
* NEXT preparedValues, nextValues, currentTablePayments, nextTablePayments);
*/ nextSumColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextSumColumn.PostCheck();
nextDateColumn.ComputeValues(preparedValues, currentTablePayments); nextSumColumn.RoundValues();
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); 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);
TLMDateColumn nextTlmDateColumn = null; var nextCashflowMSFOColumn = new CashflowMSFOColumn();
TLMCostColumn nextTlmCostColumn = null; nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
TLMGrColumn nextTlmGrColumn = null; nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var tlmData = new Helper().GetTLMData(preparedValues var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
, currentTableTLMTracker, nextTableTLMTracker nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants);
, nextDateColumn);
if (tlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); currentDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); currentDateTemp = currentDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); currentSumColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
nextTlmCostColumn.PostCheck(); nextDateColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextDateTempColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextTlmDateColumn,
nextTlmGrColumn.PostCheck(); 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
} }
};
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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
nextSumColumn,
nextNSIBBruttoGrColumn,
nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
}
};
}
catch (Exception ex)
{
return new ManagerResult
{
Errors = new List<string>
{
ex.Message
}
};
}
} }
} }

View File

@ -1,6 +1,4 @@
using System; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using System.Collections.Generic;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
@ -14,205 +12,192 @@ public static partial class CalculateManager
{ {
public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; // nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; // nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
// nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
// nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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(nextCreditVATColumn);
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

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -15,335 +13,322 @@ public static partial class CalculateManager
{ {
public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
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; nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
TLMCostColumn techNextTlmCostColumn = null; currentTablePayments);
TLMGrColumn techNextTlmGrColumn = null;
var techTlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, techNextDateColumn);
if (techTlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); techNextDateColumn,
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, techNextDateTempColumn,
techNextTlmDateColumn); techNextTlmDateColumn,
techNextTlmCostColumn,
var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); techNextTlmGrColumn,
techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn, techNextSumColumn,
techNextCashflowMSFOColumn); techNextVATColumn,
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, techNextSumWithVATColumn,
techNextDateTempColumn, techNextCashflowMSFOForNIColumn, constants); techNextNSIBBruttoGrColumn,
techNextSubsidyExpensesColumn,
/* techNextCashflowMSFOColumn,
* TECH techNextCashflowMSFOForNIColumn,
*/ techNextIRRGrColumn,
techNextNIColumn,
/* techNextInterestColumn,
* NEXT techNextSumCurrentColumn,
*/ techNextSumCurrentNegativeColumn,
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); techNextSumCurrentInterestColumn,
nextDateColumn.ComputeValues(preparedValues, currentTablePayments); techNextSumCurrentTLMColumn,
techNextSumRepaymentColumn,
var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); nextDateColumn,
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
TLMDateColumn nextTlmDateColumn = null; nextTlmGrColumn,
TLMCostColumn nextTlmCostColumn = null; nextSumColumn,
TLMGrColumn nextTlmGrColumn = null; nextVATColumn,
nextSumWithVATColumn,
var tlmData = new Helper().GetTLMData(preparedValues nextNSIBBruttoGrColumn,
, currentTableTLMTracker, nextTableTLMTracker nextSubsidyExpensesColumn,
, nextDateColumn); nextCashflowMSFOColumn,
nextCashflowMSFOForNIColumn,
if (tlmData != null) nextIRRGrColumn,
{ nextNIColumn,
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextInterestColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextSumCurrentColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextSumCurrentNegativeColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextSumCurrentInterestColumn,
nextTlmCostColumn.PostCheck(); nextSumCurrentTLMColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumRepaymentColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextCashflowMSFOFinalColumn,
nextTlmGrColumn.PostCheck(); nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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(nextCreditVATColumn);
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

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -17,290 +15,277 @@ public static partial class CalculateManager
{ {
public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) 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(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 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)
{ {
var constants = new Constants.Calculation(); techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; techNextTlmCostColumn.PostCheck();
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; }
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn,
* CURRENT currentTablePayments);
*/
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 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; var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
TLMCostColumn techNextTlmCostColumn = null; preparedValues, nextValues, currentTablePayments, nextTablePayments);
TLMGrColumn techNextTlmGrColumn = null; techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
var techTlmData = new Helper().GetTLMData(preparedValues var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
, currentTableTLMTracker, nextTableTLMTracker techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
, techNextDateColumn);
if (techTlmData != null) var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
{ techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); techNextSumWithVATColumn.ComputeValues();
techNextTlmDateColumn.ComputeValues(techTlmData);
techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); nextValues.ComputeSumTotal(techNextSumWithVATColumn);
techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextValues.ComputeNmper(nextTablePayments, currentTablePayments);
techNextTlmCostColumn.PostCheck(); /*
techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); * TECH
techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); */
}
/*
* 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);
nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, TLMDateColumn nextTlmDateColumn = null;
currentTablePayments); 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();
}
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments); currentTablePayments);
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR);
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn,
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); preparedValues, nextValues, currentTablePayments, nextTablePayments);
var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1);
techNextSumColumn, currentTablePayments, techNextVATColumn, constants);
techNextSumWithVATColumn.ComputeValues();
nextValues.ComputeSumTotal(techNextSumWithVATColumn); var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues,
nextValues.ComputeNmper(nextTablePayments, currentTablePayments); nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues);
/* nextSumWithVATColumn.ComputeValues(nextValues.SumTotal);
* TECH 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 * NEXT
*/ */
var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(nextValues.Nmper + 1); var postValues = new v2.PostValues(preparedValues);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn);
TLMDateColumn nextTlmDateColumn = null; return new ManagerResult
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(nextCreditVATColumn);
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 PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
Errors = new List<string> currentDateColumn,
{ currentDateTemp = currentDateTempColumn,
ex.Message 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
}
};
} }
} }

View File

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -17,249 +15,236 @@ public static partial class CalculateManager
{ {
public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) 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(preparedValues, currentDateColumn);
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
currentSumColumn.ComputeValues(preparedValues, currentTablePayments);
/*
* CURRENT
*/
/*
* NEXT
*/
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn);
TLMDateColumn nextTlmDateColumn = null;
TLMCostColumn nextTlmCostColumn = null;
TLMGrColumn nextTlmGrColumn = null;
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; nextTlmGrColumn.PostCheck();
}
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/* var nextValues = new NextValues(preparedValues);
* CURRENT nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
*/ currentTablePayments);
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 techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
* NEXT preparedValues, nextValues, currentTablePayments, nextTablePayments);
*/ techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); 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);
TLMDateColumn nextTlmDateColumn = null; var nextCashflowMSFOColumn = new CashflowMSFOColumn();
TLMCostColumn nextTlmCostColumn = null; nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
TLMGrColumn nextTlmGrColumn = null; nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
nextTlmDateColumn);
var tlmData = new Helper().GetTLMData(preparedValues var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
, currentTableTLMTracker, nextTableTLMTracker nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn,
, nextDateColumn); nextCashflowMSFOColumn);
nextCashflowMSFOColumn.PostCheck();
if (tlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); currentDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); currentDateTemp = currentDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); currentSumColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
nextTlmGrColumn.PostCheck();
}
nextDateColumn,
var nextValues = new NextValues(preparedValues); nextDateTempColumn,
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, nextTlmDateColumn,
currentTablePayments); nextTlmCostColumn,
nextTlmGrColumn,
techNextSumColumn,
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, techNextVATColumn,
preparedValues, nextValues, currentTablePayments, nextTablePayments); techNextSumWithVATColumn,
techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); nextSumColumn,
nextVATColumn,
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, nextSumWithVATColumn,
nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); nextNSIBBruttoGrColumn,
nextSumRepaymentColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); nextCashflowMSFOForNIColumn,
nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); nextIRRGrColumn,
nextNIColumn,
var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); nextInterestColumn,
nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, nextSumCurrentColumn,
preparedValues); nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); nextSumCurrentTLMColumn,
nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); nextCashflowMSFOFinal2Column,
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); nextSumCreditColumn,
nextCreditColumn,
nextValues.Nmper = preparedValues.Nmper.Next; nextSumVATCreditColumn,
nextCreditVATColumn,
var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); nextNSIBExpensesColumn,
nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); nextCashflowNSIBColumn,
nextRevenueColumn
var nextCreditVATColumn = new CreditVATColumn(12 + 4); }
nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); };
var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1);
nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1);
nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1);
nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn);
nextValues.ComputeNiAtInception(currentTablePayments);
nextValues.ComputeNiAtInceptionMSFO();
/*
* NEXT
*/
var postValues = new v2.PostValues(preparedValues);
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{
currentDateColumn,
currentDateTemp = currentDateTempColumn,
currentSumColumn,
nextDateColumn,
nextDateTempColumn,
nextTlmDateColumn,
nextTlmCostColumn,
nextTlmGrColumn,
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

@ -1,6 +1,4 @@
using System; using System.Linq;
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1;
@ -15,208 +13,195 @@ public static partial class CalculateManager
{ {
public static ManagerResult Suspension(RequestCalculation requestCalculation) 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)
{ {
var constants = new Constants.Calculation(); nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
var preparedValues = requestCalculation.PreparedValues; nextTlmDateColumn.ComputeValues(tlmData);
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
var currentTablePayments = requestCalculation.TablePayments.Current; nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
var nextTablePayments = requestCalculation.TablePayments.Next; // nextTlmCostColumn.PostCheck();
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
var currentTableInsurance = requestCalculation?.TableInsurance?.Current; nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
var nextTableInsurance = requestCalculation?.TableInsurance?.Next; // nextTlmGrColumn.PostCheck();
}
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; var nextValues = new NextValues(preparedValues);
TLMCostColumn nextTlmCostColumn = null; nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
TLMGrColumn nextTlmGrColumn = null; currentTablePayments);
var tlmData = new Helper().GetTLMData(preparedValues
, currentTableTLMTracker, nextTableTLMTracker
, nextDateColumn);
if (tlmData != null) 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(nextCreditVATColumn);
return new ManagerResult
{
PostValues = postValues,
NextValues = nextValues,
PreparedValues = preparedValues,
Columns = new
{ {
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); nextDateColumn,
nextTlmDateColumn.ComputeValues(tlmData); nextDateTempColumn,
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); nextTlmDateColumn,
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); nextTlmCostColumn,
// nextTlmCostColumn.PostCheck(); nextTlmGrColumn,
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); nextSumColumn,
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); nextNSIBBruttoGrColumn,
// nextTlmGrColumn.PostCheck(); nextSubsidyExpensesColumn,
nextCashflowMSFOColumn,
nextVATColumn,
nextSumWithVATColumn,
nextCashflowMSFOForNIColumn,
nextIRRGrColumn,
nextNIColumn,
nextInterestColumn,
nextSumCurrentColumn,
nextSumCurrentNegativeColumn,
nextSumCurrentInterestColumn,
nextSumCurrentTLMColumn,
nextSumRepaymentColumn,
nextCashflowMSFOFinalColumn,
nextCashflowMSFOFinal2Column,
nextSumCreditColumn,
nextCreditColumn,
nextSumVATCreditColumn,
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
} }
};
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(nextCreditVATColumn);
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

@ -6,7 +6,7 @@ namespace EvoCalculator.Core.PostCalculation.v2;
public class PostValues : v1.PostValues public class PostValues : v1.PostValues
{ {
public decimal ContractEconomyWithVAT; public decimal ContractEconomyWithVAT { get; set; }
public PostValues(PreparedValues preparedValues) : base(preparedValues) public PostValues(PreparedValues preparedValues) : base(preparedValues)
{ {

View File

@ -10,7 +10,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="xunit" Version="2.4.1" /> <PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using EvoCalculator.Core.Tools.Errors;
namespace EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Tools.Check;
@ -10,12 +11,12 @@ public class CheckTools
string errorMsg = string errorMsg =
"Невозможно осуществить расчет графика. При заданных параметрах получаются отрицательные значения") "Невозможно осуществить расчет графика. При заданных параметрах получаются отрицательные значения")
{ {
if (Values.Skip(1).ToList().Exists(x => x < 0)) throw new Exception(errorMsg); if (Values.Skip(1).ToList().Exists(x => x < 0)) throw new AppException(errorMsg);
} }
public void CheckColumnForZeroValue(IEnumerable<decimal> Values, string errorMsg = public void CheckColumnForZeroValue(IEnumerable<decimal> Values, string errorMsg =
"Невозможно осуществить расчет графика. При заданных параметрах получаются нулевые значения платежей") "Невозможно осуществить расчет графика. При заданных параметрах получаются нулевые значения платежей")
{ {
if (Values.Skip(1).ToList().Exists(x => x == 0)) throw new Exception(errorMsg); if (Values.Skip(1).ToList().Exists(x => x == 0)) throw new AppException(errorMsg);
} }
} }

View File

@ -0,0 +1,23 @@
using System;
using System.Runtime.Serialization;
namespace EvoCalculator.Core.Tools.Errors;
public class AppException : Exception
{
public AppException()
{
}
protected AppException(SerializationInfo info, StreamingContext context) : base(info, context)
{
}
public AppException(string message) : base(message)
{
}
public AppException(string message, Exception innerException) : base(message, innerException)
{
}
}

View File

@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj"/> <ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -2,8 +2,6 @@
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace EvoCalculator.Core.Controllers.Calculation.v1; namespace EvoCalculator.Core.Controllers.Calculation.v1;
@ -22,15 +20,6 @@ public class CalculationController : Controller
_ => CalculateManager.CalculateDefault(requestCalculation) _ => CalculateManager.CalculateDefault(requestCalculation)
}; };
var hasErrors = result.Errors is {Count: > 0}; return result;
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
} }
} }

View File

@ -2,8 +2,6 @@
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace EvoCalculator.Core.Controllers.Calculation.v2; namespace EvoCalculator.Core.Controllers.Calculation.v2;
@ -22,15 +20,6 @@ public class CalculationController : Controller
_ => CalculateManager.CalculateDefault(requestCalculation) _ => CalculateManager.CalculateDefault(requestCalculation)
}; };
var hasErrors = result.Errors is {Count: > 0}; return result;
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
} }
} }

View File

@ -2,8 +2,6 @@
using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace EvoCalculator.Core.Controllers.Calculation.v3; namespace EvoCalculator.Core.Controllers.Calculation.v3;
@ -23,15 +21,6 @@ public class CalculationController : Controller
_ => CalculateManager.CalculateDefault(requestCalculation) _ => CalculateManager.CalculateDefault(requestCalculation)
}; };
var hasErrors = result.Errors is {Count: > 0}; return result;
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
} }
} }

View File

@ -1,9 +1,6 @@
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v1.Managers;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Controllers.PostCalculation.v1; namespace EvoCalculator.Core.Controllers.PostCalculation.v1;
@ -29,15 +26,6 @@ public class PostCalculationController : Controller
_ => CalculateManager.CalculateDefault(requestCalculation) _ => CalculateManager.CalculateDefault(requestCalculation)
}; };
var hasErrors = result.Errors is {Count: > 0}; return result;
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
} }
} }

View File

@ -1,9 +1,6 @@
using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Manager;
using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.Models.PostCalculation.Models.Request;
using EvoCalculator.Core.PostCalculation.v2.Managers;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager;
namespace EvoCalculator.Core.Controllers.PostCalculation.v2; namespace EvoCalculator.Core.Controllers.PostCalculation.v2;
@ -31,15 +28,6 @@ public class PostCalculationController : Controller
_ => CalculateManager.CalculateDefault(requestCalculation) _ => CalculateManager.CalculateDefault(requestCalculation)
}; };
var hasErrors = result.Errors is {Count: > 0}; return result;
var statusCode = hasErrors ? 500 : 200;
return StatusCode(statusCode, JsonConvert.SerializeObject(
result,
new JsonSerializerSettings
{
Formatting = Formatting.Indented,
ContractResolver = new CamelCasePropertyNamesContractResolver()
}));
} }
} }

View File

@ -7,7 +7,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NSwag.AspNetCore" Version="13.15.4" /> <PackageReference Include="NSwag.AspNetCore" Version="13.15.4" />
</ItemGroup> </ItemGroup>

View File

@ -1,5 +1,11 @@
using System;
using System.Collections.Generic;
using System.Net;
using System.Text.Json;
using EvoCalculator.Core.Tools.Errors;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
@ -21,7 +27,11 @@ public class Startup
// This method gets called by the runtime. Use this method to add services to the container. // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
services.AddControllers(); services.AddControllers().AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.WriteIndented = true;
});
services.AddApiVersioning(opt => services.AddApiVersioning(opt =>
{ {
@ -44,6 +54,28 @@ public class Startup
app.UseSwaggerUi3(c => { c.DocumentTitle = DocsName; }); app.UseSwaggerUi3(c => { c.DocumentTitle = DocsName; });
app.UseRouting(); app.UseRouting();
app.Use(async (context, next) =>
{
var response = context.Response;
response.ContentType = "application/json";
try
{
await next(context);
}
catch (Exception ex)
{
response.StatusCode = ex switch
{
AppException e => (int)HttpStatusCode.BadRequest,
_ => (int)HttpStatusCode.InternalServerError
};
var result = new { Errors = new List<string> { ex.Message } };
await response.WriteAsJsonAsync(result);
}
});
app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
} }
} }