diff --git a/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj b/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj index bf92fb3..4d10a7b 100644 --- a/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj +++ b/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj @@ -12,8 +12,4 @@ - - - - diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs index 1196567..c86d335 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs @@ -2,6 +2,7 @@ using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v1.Columns; @@ -57,12 +58,12 @@ public class BaseCashflowMSFOColumn : BaseColumnWithNominal { if (additionalData?.MinCashflowMSFONominal != null) if (Nominal < additionalData.MinCashflowMSFONominal / 100) - throw new Exception( + throw new AppException( $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}"); if (additionalData?.MaxCashflowMSFONominal != null) if (Nominal >= additionalData.MaxCashflowMSFONominal / 100) - throw new Exception( + throw new AppException( $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}"); } } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs index 4274f4d..9c3a2a5 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs @@ -1,6 +1,6 @@ -using System; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v1.Columns; @@ -14,7 +14,7 @@ public class InterestColumn : BaseColumn { for (var i = 3; i < Values.Skip(1).ToList().Count; i++) if (Values[i] > sumColumn.Values[i]) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs index 5ec602b..cff0733 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs @@ -3,6 +3,7 @@ using System.Linq; using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Tools.Check; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v1.Columns; @@ -38,12 +39,12 @@ public class SumColumn : BaseColumnWithXIRR new CheckTools().CheckColumnForLessThanZeroValue(Values); if (Values[1] / Values.Skip(1).Sum() >= 0.5m) - throw new Exception( + throw new AppException( "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж"); for (var i = 2; i < Values.Length - 1; i++) if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i)) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs index 48b08a2..733e097 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; @@ -27,294 +26,282 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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, + 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, - 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, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + 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 - { - 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 - { - ex.Message - } - }; - } + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs index e500caa..850cb95 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; @@ -28,293 +27,281 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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, + 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, - 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, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + 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 - { - 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 - { - ex.Message - } - }; - } + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/PostValues.cs b/EvoCalculator.Core.Calculation/v1/PostValues.cs index 3870b47..dab6a84 100644 --- a/EvoCalculator.Core.Calculation/v1/PostValues.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues.cs @@ -9,14 +9,14 @@ public class PostValues { protected PreparedValues _preparedValues; - public decimal BaseCost; - public decimal BonusBase; - public decimal BonusResult; - public double NPVNI; - public decimal PriceUP; - public double PriceUP_PR; - public decimal PriceUP_Year; - public double PriceUP_Year_PR; + public decimal BaseCost { get; set; } + public decimal BonusBase { get; set; } + public decimal BonusResult { get; set; } + public double NPVNI { get; set; } + public decimal PriceUP { get; set; } + public double PriceUP_PR { get; set; } + public decimal PriceUP_Year { get; set; } + public double PriceUP_Year_PR { get; set; } public PostValues(PreparedValues preparedValues) @@ -33,7 +33,7 @@ public class PostValues + Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + _preparedValues.Rats + _preparedValues.Registration + _preparedValues.TrackerCost + _preparedValues.TLMCost + _preparedValues.TransportTaxGr) * - (decimal) _preparedValues.Leasing0K + + (decimal)_preparedValues.Leasing0K + _preparedValues.NsibBrutto; } @@ -47,13 +47,13 @@ public class PostValues public void ComputeBonusResult(BaseColumn npvBonusExpensesColumn) { BonusResult = Math.Abs(npvBonusExpensesColumn.Values[0]) - - Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) _preparedValues.SalaryRate / - (decimal) (1 + _preparedValues.SalaryRate); + Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal)_preparedValues.SalaryRate / + (decimal)(1 + _preparedValues.SalaryRate); } public void ComputeNPVNI(BaseColumn 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 sumColumn) @@ -63,7 +63,7 @@ public class PostValues public void ComputePriceUP_PR() { - PriceUP_PR = (double) PriceUP / (double) _preparedValues.PriceUpTotal; + PriceUP_PR = (double)PriceUP / (double)_preparedValues.PriceUpTotal; } public void ComputePriceUP_Year() @@ -73,6 +73,6 @@ public class PostValues public void ComputePriceUP_Year_PR() { - PriceUP_Year_PR = (double) PriceUP_Year / (double) _preparedValues.PriceUpTotal; + PriceUP_Year_PR = (double)PriceUP_Year / (double)_preparedValues.PriceUpTotal; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs index 833e9ac..6bf4e64 100644 --- a/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs @@ -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.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Common.Request; +using EvoCalculator.Core.Tools.Errors; 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 && this.Nominal < ((additionalData.MinCashflowMSFONominal / 100) - constants.DeltaIRR)) { - throw new Exception( + throw new AppException( "По итогам результата расчета данное изменение графика влечет к убыточности сделки. Скорректируйте вносимые изменения либо получите согласование с адреса calculator@evoleasing.ru"); } } diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs index 3159570..b313be6 100644 --- a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs +++ b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs @@ -2,6 +2,7 @@ using System.Linq; using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v2.Columns; @@ -30,7 +31,7 @@ public class CreditColumn : BaseColumnWithSum { var constants = new Constants.Calculation(); var expectedPrepaid = Math.Round(financingSupplierCreditSum * (decimal)(1 + constants.VatValue), 2); - throw new Exception( + throw new AppException( $"Сумма аванса не покрывает потенциальные потери по финансированию поставщика. Увеличьте размер аванса до {expectedPrepaid}"); } } diff --git a/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs index 03c8a18..50dfabc 100644 --- a/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs +++ b/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs @@ -3,6 +3,7 @@ using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Common.Request; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v2.Columns; @@ -31,7 +32,7 @@ public class SumColumn : v1.Columns.SumColumn if (flags?.DISABLE_CHECKS_RESULTS == false) if (_preparedValues.LastPaymentFix == false && Values[^1] / _preparedValues.PlPrice < 0.01m) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах последний платеж меньше 1%"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs index c66d953..12f0838 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; @@ -41,304 +40,292 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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 + PostValues = postValues, + PreparedValues = preparedValues, + Columns = new { - 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, - sumCreditColumn, - creditColumn, - subsidyExpensesColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + 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, + sumCreditColumn, + creditColumn, + subsidyExpensesColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs index a7ea203..94d5907 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; @@ -41,303 +40,291 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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 + PostValues = postValues, + PreparedValues = preparedValues, + Columns = new { - 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, - sumCreditColumn, - creditColumn, - subsidyExpensesColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + 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, + sumCreditColumn, + creditColumn, + subsidyExpensesColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/PostValues.cs b/EvoCalculator.Core.Calculation/v2/PostValues.cs index 937c9ce..bd5edae 100644 --- a/EvoCalculator.Core.Calculation/v2/PostValues.cs +++ b/EvoCalculator.Core.Calculation/v2/PostValues.cs @@ -6,7 +6,7 @@ namespace EvoCalculator.Core.Calculation.v2; public class PostValues : v1.PostValues { - public decimal ContractEconomy; + public decimal ContractEconomy { get; set; } public PostValues(PreparedValues preparedValues) : base(preparedValues) { @@ -19,7 +19,7 @@ public class PostValues : v1.PostValues directorBonusSumColumn.GetValue(0); // if (Value < 0) - // throw new Exception( + // throw new AppException( // "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Columns/EvoKaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/EvoKaskoNmperGrColumn.cs index b9bd1e7..c89e37b 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/EvoKaskoNmperGrColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/EvoKaskoNmperGrColumn.cs @@ -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.Tools.Check; namespace EvoCalculator.Core.Calculation.v3.Columns; diff --git a/EvoCalculator.Core.Calculation/v3/Columns/FinGAPNmperGrColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/FinGAPNmperGrColumn.cs index 1f8fc2e..457ac16 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/FinGAPNmperGrColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/FinGAPNmperGrColumn.cs @@ -2,6 +2,7 @@ using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Tools.Check; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Calculation.v3.Columns; @@ -18,7 +19,7 @@ public class FinGAPNmperGrColumn : BaseColumnWithSum { new CheckTools().CheckColumnForLessThanZeroValue(Values); if (Math.Abs(Math.Round(Values[0])) != Math.Round(preparedValues.InsuranceFinGAPNmper)) - throw new Exception( + throw new AppException( $"Ошибка во время расчета столбца {GetType().Name}: не совпадает сумма итого"); } diff --git a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs index 46ffcda..1488562 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs @@ -1,6 +1,4 @@ -using System.Linq; -using EvoCalculator.Core.Base.Columns; -using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v3.Columns; diff --git a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs index 55a3837..9bab04f 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Interfaces.Columns; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs index ae38623..a4a702b 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v3.Columns; @@ -9,7 +7,6 @@ using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Tools.Validation; using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn; 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 CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn; using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn; @@ -47,347 +44,335 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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 + PostValues = postValues, + PreparedValues = preparedValues, + Columns = new { - PostValues = postValues, - PreparedValues = preparedValues, - Columns = new - { - dateColumn, - dateTempColumn, - percentPaymentColumn, - kaskoNmperGrColumn, - finGAPNmperGrColumn, - tlmGrColumn, - gpsGrColumn, - sumColumn, - vatColumn, - sumWithVatColumn, - acceptSumColumn, - acceptKaskoColumn, - acceptOsagoColumn, - acceptInsuranceColumn, - deprecationLpColumn, - deprecationLdColumn, - deprecationColumn, - npvBonusExpensesColumn, - kaskoBonusGrSumColumn, - agentComissionExpensesColumn, - ratExpensesColumn, - transExprensesColumn, - nsibExpensesColumn, - tlmExpensesColumn, - gpsExpensesColumn, - registrExpensesColumn, - insuranceBonusExpensesColumn, - comissionBonusExpensesColumn, - expensesColumn, - evoKaskoNmperGrColumn, - 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, - sumCreditColumn, - creditColumn, - sumVATCreditColumn, - creditVATColumn, - subsidyExpensesColumn, - vatRecoverableColumn, - creditPaymentColumn, - cashflowMsfoWithCfColumn, - piColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + dateColumn, + dateTempColumn, + percentPaymentColumn, + kaskoNmperGrColumn, + finGAPNmperGrColumn, + tlmGrColumn, + gpsGrColumn, + sumColumn, + vatColumn, + sumWithVatColumn, + acceptSumColumn, + acceptKaskoColumn, + acceptOsagoColumn, + acceptInsuranceColumn, + deprecationLpColumn, + deprecationLdColumn, + deprecationColumn, + npvBonusExpensesColumn, + kaskoBonusGrSumColumn, + agentComissionExpensesColumn, + ratExpensesColumn, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + evoKaskoNmperGrColumn, + 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, + sumCreditColumn, + creditColumn, + sumVATCreditColumn, + creditVATColumn, + subsidyExpensesColumn, + vatRecoverableColumn, + creditPaymentColumn, + cashflowMsfoWithCfColumn, + piColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs index c7ead1e..cf023d9 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; @@ -46,352 +45,340 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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 + PostValues = postValues, + PreparedValues = preparedValues, + Columns = new { - PostValues = postValues, - PreparedValues = preparedValues, - Columns = new - { - dateColumn, - dateTempColumn, - percentPaymentColumn, - kaskoNmperGrColumn, - finGAPNmperGrColumn, - tlmGrColumn, - gpsGrColumn, - sumColumn, - vatColumn, - sumWithVatColumn, - acceptSumColumn, - acceptKaskoColumn, - acceptOsagoColumn, - acceptInsuranceColumn, - deprecationLpColumn, - deprecationLdColumn, - deprecationColumn, - npvBonusExpensesColumn, - kaskoBonusGrSumColumn, - agentComissionExpensesColumn, - ratExpensesColumn, - transExprensesColumn, - nsibExpensesColumn, - tlmExpensesColumn, - gpsExpensesColumn, - registrExpensesColumn, - insuranceBonusExpensesColumn, - comissionBonusExpensesColumn, - expensesColumn, - evoKaskoNmperGrColumn, - 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, - sumCreditColumn, - creditColumn, - sumVATCreditColumn, - creditVATColumn, - subsidyExpensesColumn, - vatRecoverableColumn, - creditPaymentColumn, - cashflowMsfoWithCfColumn, - piColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + dateColumn, + dateTempColumn, + percentPaymentColumn, + kaskoNmperGrColumn, + finGAPNmperGrColumn, + tlmGrColumn, + gpsGrColumn, + sumColumn, + vatColumn, + sumWithVatColumn, + acceptSumColumn, + acceptKaskoColumn, + acceptOsagoColumn, + acceptInsuranceColumn, + deprecationLpColumn, + deprecationLdColumn, + deprecationColumn, + npvBonusExpensesColumn, + kaskoBonusGrSumColumn, + agentComissionExpensesColumn, + ratExpensesColumn, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + evoKaskoNmperGrColumn, + 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, + sumCreditColumn, + creditColumn, + sumVATCreditColumn, + creditVATColumn, + subsidyExpensesColumn, + vatRecoverableColumn, + creditPaymentColumn, + cashflowMsfoWithCfColumn, + piColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs index e64e2b9..2b0f2dd 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Linq; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; @@ -46,351 +45,339 @@ public static partial class CalculateManager ? preparedValues.Nmper + 1 : 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); - 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 + PostValues = postValues, + PreparedValues = preparedValues, + Columns = new { - PostValues = postValues, - PreparedValues = preparedValues, - Columns = new - { - dateColumn, - dateTempColumn, - percentPaymentColumn, - kaskoNmperGrColumn, - finGAPNmperGrColumn, - tlmGrColumn, - gpsGrColumn, - sumColumn, - vatColumn, - sumWithVatColumn, - acceptSumColumn, - acceptKaskoColumn, - acceptOsagoColumn, - acceptInsuranceColumn, - deprecationLpColumn, - deprecationLdColumn, - deprecationColumn, - npvBonusExpensesColumn, - kaskoBonusGrSumColumn, - agentComissionExpensesColumn, - ratExpensesColumn, - transExprensesColumn, - nsibExpensesColumn, - tlmExpensesColumn, - gpsExpensesColumn, - registrExpensesColumn, - insuranceBonusExpensesColumn, - comissionBonusExpensesColumn, - expensesColumn, - evoKaskoNmperGrColumn, - 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, - sumCreditColumn, - creditColumn, - sumVATCreditColumn, - creditVATColumn, - subsidyExpensesColumn, - vatRecoverableColumn, - creditPaymentColumn, - cashflowMsfoWithCfColumn, - piColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + dateColumn, + dateTempColumn, + percentPaymentColumn, + kaskoNmperGrColumn, + finGAPNmperGrColumn, + tlmGrColumn, + gpsGrColumn, + sumColumn, + vatColumn, + sumWithVatColumn, + acceptSumColumn, + acceptKaskoColumn, + acceptOsagoColumn, + acceptInsuranceColumn, + deprecationLpColumn, + deprecationLdColumn, + deprecationColumn, + npvBonusExpensesColumn, + kaskoBonusGrSumColumn, + agentComissionExpensesColumn, + ratExpensesColumn, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + evoKaskoNmperGrColumn, + 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, + sumCreditColumn, + creditColumn, + sumVATCreditColumn, + creditVATColumn, + subsidyExpensesColumn, + vatRecoverableColumn, + creditPaymentColumn, + cashflowMsfoWithCfColumn, + piColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/PostValues.cs b/EvoCalculator.Core.Calculation/v3/PostValues.cs index 0cad0fd..979e304 100644 --- a/EvoCalculator.Core.Calculation/v3/PostValues.cs +++ b/EvoCalculator.Core.Calculation/v3/PostValues.cs @@ -6,12 +6,12 @@ namespace EvoCalculator.Core.Calculation.v3; public class PostValues : v2.PostValues { - public decimal ContractEconomyWithVAT; - public decimal DirectorBonus; - public decimal DirectorExtraBonus; - public decimal RegionalDirectorBonus; - public decimal RegionalDirectorExtraBonus; - public double PlanIRRMSFO; + public decimal ContractEconomyWithVAT { get; set; } + public decimal DirectorBonus { get; set; } + public decimal DirectorExtraBonus { get; set; } + public decimal RegionalDirectorBonus { get; set; } + public decimal RegionalDirectorExtraBonus { get; set; } + public double PlanIRRMSFO { get; set; } private readonly Constants.Calculation _constants; public PostValues(PreparedValues _preparedValues) : base(_preparedValues) diff --git a/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj b/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj index e844a81..7b8dd53 100644 --- a/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj +++ b/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj @@ -6,8 +6,4 @@ default - - - - diff --git a/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj b/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj index 6e1e1e6..7230fc7 100644 --- a/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj +++ b/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj @@ -7,12 +7,11 @@ - + - - + diff --git a/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj b/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj index 320c82c..f6f66dd 100644 --- a/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj +++ b/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj @@ -10,7 +10,6 @@ - diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs index 4e00f03..e3a647b 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs @@ -4,6 +4,7 @@ using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Tools.Array; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -79,7 +80,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal public void PostCheck() { if (Values.Length != Dates.Length) - throw new Exception( + throw new AppException( $"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/InterestColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/InterestColumn.cs index 5d64460..4c07e03 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/InterestColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/InterestColumn.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Linq; 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.Models; @@ -37,7 +37,7 @@ public class InterestColumn : BaseColumn }); if (negativeValuesCount > 1) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumColumn/BaseSumColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumColumn/BaseSumColumn.cs index fe487d4..75a1636 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumColumn/BaseSumColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumColumn/BaseSumColumn.cs @@ -4,6 +4,7 @@ using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Tools.Check; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -96,7 +97,7 @@ public class BaseSumColumn : BaseColumnWithNominal checkTools.CheckColumnForZeroValue(Values.Skip(2)); if (Values[1] / Values.Skip(1).Sum() >= (decimal) 0.5) - throw new Exception( + throw new AppException( "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж. Измените параметры для расчета."); } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/TLMCostColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/TLMCostColumn.cs index 134a532..354f6c5 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/TLMCostColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/TLMCostColumn.cs @@ -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.PreparedTables; using EvoCalculator.Core.Tools.Array; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -115,7 +116,7 @@ public class TLMCostColumn : BaseColumnWithSum public void PostCheck() { if (Values.Length != Dates.Length) - throw new Exception( + throw new AppException( $"Ошибка во время расчета столбца {GetType().Name}: не совпадает длина массива значений"); } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs index 649a6b0..2ce9ff9 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; @@ -14,277 +12,264 @@ public static partial class CalculateManager { public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) { - var constants = new Constants.Calculation(); - var preparedValues = requestCalculation.PreparedValues; - - var currentTablePayments = requestCalculation.TablePayments.Current; - var nextTablePayments = requestCalculation.TablePayments.Next; - - var currentTableInsurance = requestCalculation?.TableInsurance?.Current; - var nextTableInsurance = requestCalculation?.TableInsurance?.Next; - - var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; - var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; - - /* - * CURRENT - */ - var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); - currentDateColumn.ComputeValues(currentTablePayments); - - var currentDateTempColumn = - new DateTempColumn(preparedValues.Nmper.Current + 1); - currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); - - var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); - /* - * CURRENT - */ - - var nextValues = new NextValues(preparedValues); - - /* - * TECH - */ - var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1); - techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); - - var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); - techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); - - - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; - - var techTlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , techNextDateColumn); - - if (techTlmData != null) - { - techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); - techNextTlmDateColumn.ComputeValues(techTlmData); - techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); - techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - techNextTlmCostColumn.PostCheck(); - techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); - techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, currentTablePayments); - - - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); - - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); - /* - * TECH - */ - - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); - - var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); - - - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; - - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); - - if (tlmData != null) - { - nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); - nextTlmDateColumn.ComputeValues(tlmData); - nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); - nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - nextTlmCostColumn.PostCheck(); - nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); - nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); - nextTlmGrColumn.PostCheck(); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - - var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(techNextSumWithVATColumn.GetValue(0)); - nextSumColumn.PostCheck(); - nextVATColumn.PostCheck(); - nextSumWithVATColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, - nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); - nextSumRepaymentColumn.PostCheck(); - - var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); - nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); - - var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); - nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, - preparedValues); - - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - nextSumCreditColumn.ComputeValues(preparedValues, 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 - } - }; + 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); } - 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 - { - Errors = new List - { - ex.Message - } - }; + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs index 64062b0..cc32858 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -12,200 +10,187 @@ public static partial class CalculateManager { public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs index 7b661b5..0c22327 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; @@ -14,227 +12,215 @@ public static partial class CalculateManager { public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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(); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, 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 nextDateTempColumn = new Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + 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; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); - 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } -} \ No newline at end of file +} + diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs index bf91c95..fb9efac 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; @@ -11,196 +9,183 @@ public static partial class CalculateManager { public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs index cccadf9..d2d2239 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -12,326 +10,313 @@ public static partial class CalculateManager { public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Current + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Current + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) { - 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); + techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); + techNextTlmDateColumn.ComputeValues(techTlmData); + techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); + techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + techNextTlmCostColumn.PostCheck(); + techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1); + techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); + } - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); - 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); - 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, + techNextDateColumn, 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, + techNextTlmDateColumn, + techNextTlmCostColumn, + techNextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs index 9fa7e57..5136d1f 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; @@ -14,281 +12,268 @@ public static partial class CalculateManager { public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR); - var techTlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , techNextDateColumn); + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - 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); - } + var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants); + techNextSumWithVATColumn.ComputeValues(); + + nextValues.ComputeSumTotal(techNextSumWithVATColumn); + nextValues.ComputeNmper(nextTablePayments, currentTablePayments); + /* + * TECH + */ + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new Columns.Next.DateTempColumn(nextValues.Nmper + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); - nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, - currentTablePayments); + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(nextValues.Nmper + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); + var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1); - nextValues.ComputeSumTotal(techNextSumWithVATColumn); - nextValues.ComputeNmper(nextTablePayments, currentTablePayments); - /* - * TECH - */ + 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 nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); - var nextDateTempColumn = new Columns.Next.DateTempColumn(nextValues.Nmper + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + var postValues = new PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; - - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); - - if (tlmData != null) - { - nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); - nextTlmDateColumn.ComputeValues(tlmData); - nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); - nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - nextTlmCostColumn.PostCheck(); - nextTlmGrColumn = new TLMGrColumn(nextValues.Nmper + 1); - nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); - nextTlmGrColumn.PostCheck(); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - - var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); - nextSumWithVATColumn.PostCheck(); - nextVATColumn.PostCheck(); - nextSumColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(nextValues.Nmper + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(nextValues.Nmper + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(nextValues.Nmper + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(nextValues.Nmper + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, - nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); - nextSumRepaymentColumn.PostCheck(); - - var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); - nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); - - var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); - nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, - preparedValues); - - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - nextSumCreditColumn.ComputeValues(preparedValues, 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 { - return new ManagerResult + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new { - Errors = new List - { - ex.Message - } - }; - } + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs index 909308a..e44e0e4 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; @@ -14,240 +12,227 @@ public static partial class CalculateManager { public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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(); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR); - var nextDateTempColumn = new Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + 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); - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + 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); - 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(); - } + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, - - var nextValues = new NextValues(preparedValues); - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); - - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); - - nextValues.ComputeSumTotal(techNextSumWithVATColumn); - - var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues, - nextValues, currentTablePayments, nextTablePayments); - var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); - nextSumColumn.PostCheck(); - nextSumWithVATColumn.PostCheck(); - nextVATColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + nextSumColumn, + nextVATColumn, 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, - 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 - { - ex.Message - } - }; - } + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs index 7e1fa30..4b9a7db 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -12,200 +10,187 @@ public static partial class CalculateManager { public static ManagerResult Suspension(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/NextValues.cs b/EvoCalculator.Core.PostCalculation/v1/NextValues.cs index 084bb69..83ccf51 100644 --- a/EvoCalculator.Core.PostCalculation/v1/NextValues.cs +++ b/EvoCalculator.Core.PostCalculation/v1/NextValues.cs @@ -1,20 +1,20 @@ -using System; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.PostCalculation.v1; public class NextValues { - public decimal AcquisitionExpenses; - public decimal BaseCost; - public decimal NiAtInception; - public decimal NiAtInceptionMSFO; - public int Nmper; + public decimal AcquisitionExpenses { get; set; } + public decimal BaseCost { get; set; } + public decimal NiAtInception { get; set; } + public decimal NiAtInceptionMSFO { get; set; } + public int Nmper { get; set; } + public decimal SumTotal { get; set; } protected PreparedValues preparedValues; - public decimal SumTotal; public NextValues(PreparedValues preparedValues) { @@ -73,7 +73,7 @@ public class NextValues + preparedValues.InceptDelta; if (AcquisitionExpenses <= 0) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета."); } @@ -134,7 +134,7 @@ public class NextValues // PostCheck if (BaseCost <= 0) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета."); } @@ -167,14 +167,14 @@ public class NextValues } if (i == 0) - throw new Exception( + throw new AppException( "Невозможно осуществить расчет ЧДП с изменением срока. Необходимо увеличить сумму ЧДП"); Nmper = preparedValues.Nmper.Current - i + 1; // PostCheck if (Nmper < 13 && preparedValues.BalanceHolder.Next == 100000001) - throw new Exception( + throw new AppException( "По итогам расчета срок лизинга получается меньше 13, при балансе ЛД это запрещено. Измените параметры для расчета"); } @@ -182,6 +182,6 @@ public class NextValues { SumTotal = preparedValues.TotalExpected - (preparedValues.TotalExpected - nextSumWithVATColumn.GetValue(0)) - * (decimal) preparedValues.Repayment; + * (decimal)preparedValues.Repayment; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/PostValues.cs b/EvoCalculator.Core.PostCalculation/v1/PostValues.cs index 98e511f..366e3fe 100644 --- a/EvoCalculator.Core.PostCalculation/v1/PostValues.cs +++ b/EvoCalculator.Core.PostCalculation/v1/PostValues.cs @@ -8,7 +8,7 @@ public class PostValues { protected PreparedValues _preparedValues; - public decimal ContractEconomy; + public decimal ContractEconomy { get; set; } public PostValues(PreparedValues preparedValues) { diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs index 175642e..7c98bd9 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -18,286 +16,273 @@ public static partial class CalculateManager { public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) { - var constants = new Constants.Calculation(); - var preparedValues = requestCalculation.PreparedValues; - - var currentTablePayments = requestCalculation.TablePayments.Current; - var nextTablePayments = requestCalculation.TablePayments.Next; - - var currentTableInsurance = requestCalculation?.TableInsurance?.Current; - var nextTableInsurance = requestCalculation?.TableInsurance?.Next; - - var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; - var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; - - /* - * CURRENT - */ - var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); - currentDateColumn.ComputeValues(currentTablePayments); - - var currentDateTempColumn = - new DateTempColumn(preparedValues.Nmper.Current + 1); - currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); - - var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); - /* - * CURRENT - */ - - var nextValues = new NextValues(preparedValues); - - /* - * TECH - */ - var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1); - techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); - - var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); - techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); - - - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; - - var techTlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , techNextDateColumn); - - if (techTlmData != null) - { - techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); - techNextTlmDateColumn.ComputeValues(techTlmData); - techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); - techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - techNextTlmCostColumn.PostCheck(); - techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); - techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, currentTablePayments); - - - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); - - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); - /* - * TECH - */ - - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); - - var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); - - - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; - - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); - - if (tlmData != null) - { - nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); - nextTlmDateColumn.ComputeValues(tlmData); - nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); - nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - nextTlmCostColumn.PostCheck(); - nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); - nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); - nextTlmGrColumn.PostCheck(); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - - var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(techNextSumWithVATColumn.GetValue(0)); - nextSumColumn.PostCheck(); - nextVATColumn.PostCheck(); - nextSumWithVATColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, - nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); - nextSumRepaymentColumn.PostCheck(); - - var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); - nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); - - var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); - nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, - preparedValues); - - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); - - var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); - nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); - - nextValues.Nmper = preparedValues.Nmper.Next; - - var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); - nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); - - var nextCreditVATColumn = new CreditVATColumn(12 + 4); - nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); - - var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); - nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); - nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); - nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); - - - nextValues.ComputeNiAtInception(currentTablePayments); - nextValues.ComputeNiAtInceptionMSFO(); - /* - * NEXT - */ - - var postValues = new v2.PostValues(preparedValues); - postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); - postValues.ComputeContractEconomyWithVAT(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 - } - }; + 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); } - 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 - { - Errors = new List - { - ex.Message - } - }; + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs index 745e7ef..601af24 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -17,235 +15,222 @@ public static partial class CalculateManager { public static ManagerResult CalculateByIRRNoLimit(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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; + 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(); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, 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 nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + 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; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); - 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); - 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(); + 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 } - - - var nextValues = new NextValues(preparedValues); - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - - var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - nextSumColumn.ComputeValues((decimal) currentSumColumn.IRR + preparedValues.IRRDelta); - nextSumColumn.PostCheck(); - nextSumColumn.RoundValues(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); - - var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants); - nextSumWithVATColumn.ComputeValues(); - nextVATColumn.PostCheck(); - nextSumWithVATColumn.PostCheck(); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - - var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, - nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); - nextSumRepaymentColumn.PostCheck(); - - var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); - nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); - - var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); - nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, - preparedValues); - - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); - - var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); - nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); - - nextValues.Nmper = preparedValues.Nmper.Next; - - var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); - nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); - - var nextCreditVATColumn = new CreditVATColumn(12 + 4); - nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); - - - var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); - nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); - nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); - nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); - - - nextValues.ComputeNiAtInception(currentTablePayments); - nextValues.ComputeNiAtInceptionMSFO(); - /* - * NEXT - */ - - var postValues = new v2.PostValues(preparedValues); - postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); - postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn); - - - return new ManagerResult - { - PostValues = postValues, - NextValues = nextValues, - PreparedValues = preparedValues, - Columns = new - { - currentDateColumn, - currentDateTemp = currentDateTempColumn, - currentSumColumn, - - nextDateColumn, - nextDateTempColumn, - nextTlmDateColumn, - nextTlmCostColumn, - nextTlmGrColumn, - nextSumColumn, - nextNSIBBruttoGrColumn, - nextSubsidyExpensesColumn, - nextCashflowMSFOColumn, - nextVATColumn, - nextSumWithVATColumn, - nextCashflowMSFOForNIColumn, - nextIRRGrColumn, - nextNIColumn, - nextInterestColumn, - nextSumCurrentColumn, - nextSumCurrentNegativeColumn, - nextSumCurrentInterestColumn, - nextSumCurrentTLMColumn, - nextSumRepaymentColumn, - nextCashflowMSFOFinalColumn, - nextCashflowMSFOFinal2Column, - nextSumCreditColumn, - nextCreditColumn, - nextSumVATCreditColumn, - nextCreditVATColumn, - nextNSIBExpensesColumn, - nextCashflowNSIBColumn, - nextRevenueColumn - } - }; - } - catch (Exception ex) - { - return new ManagerResult - { - Errors = new List - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs index ecbe967..462af71 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -15,209 +13,196 @@ public static partial class CalculateManager { public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs index ce95557..8064108 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -17,236 +15,223 @@ public static partial class CalculateManager { public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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(); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, 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 nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + 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; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); - 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs index 6b95c73..324e9fe 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; @@ -14,205 +12,192 @@ public static partial class CalculateManager { public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs index bc6893d..d5986f1 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -15,335 +13,322 @@ public static partial class CalculateManager { public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Current + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Current + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) { - 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); + techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); + techNextTlmDateColumn.ComputeValues(techTlmData); + techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); + techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + techNextTlmCostColumn.PostCheck(); + techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1); + techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); + } - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); - 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); - 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, + techNextDateColumn, 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, + techNextTlmDateColumn, + techNextTlmCostColumn, + techNextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs index 895ae4e..2990c91 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -17,290 +15,277 @@ public static partial class CalculateManager { public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); - TLMDateColumn techNextTlmDateColumn = null; - TLMCostColumn techNextTlmCostColumn = null; - TLMGrColumn techNextTlmGrColumn = null; + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR); - var techTlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , techNextDateColumn); + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - 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); - } + var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants); + techNextSumWithVATColumn.ComputeValues(); + + nextValues.ComputeSumTotal(techNextSumWithVATColumn); + nextValues.ComputeNmper(nextTablePayments, currentTablePayments); + /* + * TECH + */ + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(nextValues.Nmper + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); - nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, - currentTablePayments); + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(nextValues.Nmper + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); + var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1); - nextValues.ComputeSumTotal(techNextSumWithVATColumn); - nextValues.ComputeNmper(nextTablePayments, currentTablePayments); - /* - * TECH - */ + 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 nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); - var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(nextValues.Nmper + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn); - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; - - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); - - if (tlmData != null) - { - nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); - nextTlmDateColumn.ComputeValues(tlmData); - nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); - nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); - nextTlmCostColumn.PostCheck(); - nextTlmGrColumn = new TLMGrColumn(nextValues.Nmper + 1); - nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); - nextTlmGrColumn.PostCheck(); - } - - - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - - var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); - nextSumWithVATColumn.PostCheck(); - nextVATColumn.PostCheck(); - nextSumColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(nextValues.Nmper + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(nextValues.Nmper + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(nextValues.Nmper + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(nextValues.Nmper + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, - nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); - nextSumRepaymentColumn.PostCheck(); - - var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); - nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); - - var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); - nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, - preparedValues); - - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); - - var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); - nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); - - var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); - nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); - - var nextCreditVATColumn = new CreditVATColumn(12 + 4); - nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); - - var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); - nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); - nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); - - var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); - nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); - - - nextValues.ComputeNiAtInception(currentTablePayments); - nextValues.ComputeNiAtInceptionMSFO(); - - /* - * NEXT - */ - - var postValues = new v2.PostValues(preparedValues); - postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); - postValues.ComputeContractEconomyWithVAT(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 { - return new ManagerResult + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new { - Errors = new List - { - ex.Message - } - }; - } + 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 + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs index 117bb21..1a6de69 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -17,249 +15,236 @@ public static partial class CalculateManager { public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(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(); - 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; + 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(); + } - /* - * 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); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); - /* - * NEXT - */ - var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); - nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR); - var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); - nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + 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); - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); - var tlmData = new Helper().GetTLMData(preparedValues - , currentTableTLMTracker, nextTableTLMTracker - , nextDateColumn); + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + 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); - 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(); - } + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, - - var nextValues = new NextValues(preparedValues); - nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, - currentTablePayments); - - - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, - preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); - - var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); - - var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - techNextSumColumn, currentTablePayments, techNextVATColumn, constants); - techNextSumWithVATColumn.ComputeValues(); - - nextValues.ComputeSumTotal(techNextSumWithVATColumn); - - var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues, - nextValues, currentTablePayments, nextTablePayments); - var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); - - var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, - nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); - nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); - nextSumColumn.PostCheck(); - nextSumWithVATColumn.PostCheck(); - nextVATColumn.PostCheck(); - - var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, - currentTablePayments, nextSumColumn); - var nsibRequiredValue = currentTablePayments - .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) - .Sum(x => x.NSIBBruttoPayment); - nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); - - var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); - nextSubsidyExpensesColumn.ComputeValues(preparedValues); - - nextValues.ComputeAcquisitionExpenses(nextTableInsurance); - - - var nextCashflowMSFOColumn = new CashflowMSFOColumn(); - nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, - nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); - - var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); - nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, - nextCashflowMSFOColumn); - nextCashflowMSFOColumn.PostCheck(); - - var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); - - var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); - - var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); - nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); - - var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); - - var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); - - var nextSumCurrentInterestColumn = - new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); - nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); - - var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); - - var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); - nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, - nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + nextSumColumn, + nextVATColumn, 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, - 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 - { - ex.Message - } - }; - } + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs index 306e0e7..78f8800 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1; @@ -15,208 +13,195 @@ public static partial class CalculateManager { public static ManagerResult Suspension(RequestCalculation requestCalculation) { - try + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) { - 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); + 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(); + } - TLMDateColumn nextTlmDateColumn = null; - TLMCostColumn nextTlmCostColumn = null; - TLMGrColumn nextTlmGrColumn = null; + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + 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); - 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(); + 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 } - - - 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 - { - ex.Message - } - }; - } + }; } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/PostValues.cs b/EvoCalculator.Core.PostCalculation/v2/PostValues.cs index e2f1b84..7c7d200 100644 --- a/EvoCalculator.Core.PostCalculation/v2/PostValues.cs +++ b/EvoCalculator.Core.PostCalculation/v2/PostValues.cs @@ -6,7 +6,7 @@ namespace EvoCalculator.Core.PostCalculation.v2; public class PostValues : v1.PostValues { - public decimal ContractEconomyWithVAT; + public decimal ContractEconomyWithVAT { get; set; } public PostValues(PreparedValues preparedValues) : base(preparedValues) { diff --git a/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj b/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj index 799f5c2..d343027 100644 --- a/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj +++ b/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj @@ -10,7 +10,6 @@ - all diff --git a/EvoCalculator.Core.Tools/Check/CheckColumns.cs b/EvoCalculator.Core.Tools/Check/CheckColumns.cs index fde1631..e9a10ca 100644 --- a/EvoCalculator.Core.Tools/Check/CheckColumns.cs +++ b/EvoCalculator.Core.Tools/Check/CheckColumns.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using EvoCalculator.Core.Tools.Errors; namespace EvoCalculator.Core.Tools.Check; @@ -10,12 +11,12 @@ public class CheckTools 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 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); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Tools/Errors/AppException.cs b/EvoCalculator.Core.Tools/Errors/AppException.cs new file mode 100644 index 0000000..8722388 --- /dev/null +++ b/EvoCalculator.Core.Tools/Errors/AppException.cs @@ -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) + { + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj b/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj index e435081..7d23172 100644 --- a/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj +++ b/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj @@ -6,7 +6,7 @@ - + diff --git a/EvoCalculator.Core/Controllers/Calculation/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/Calculation/v1/CalculationController.cs index 164912f..2ae1c89 100644 --- a/EvoCalculator.Core/Controllers/Calculation/v1/CalculationController.cs +++ b/EvoCalculator.Core/Controllers/Calculation/v1/CalculationController.cs @@ -2,8 +2,6 @@ using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; namespace EvoCalculator.Core.Controllers.Calculation.v1; @@ -22,15 +20,6 @@ public class CalculationController : Controller _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors is {Count: > 0}; - var statusCode = hasErrors ? 500 : 200; - - return StatusCode(statusCode, JsonConvert.SerializeObject( - result, - new JsonSerializerSettings - { - Formatting = Formatting.Indented, - ContractResolver = new CamelCasePropertyNamesContractResolver() - })); + return result; } } \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/Calculation/v2/CalculationController.cs b/EvoCalculator.Core/Controllers/Calculation/v2/CalculationController.cs index 6201834..ce02106 100644 --- a/EvoCalculator.Core/Controllers/Calculation/v2/CalculationController.cs +++ b/EvoCalculator.Core/Controllers/Calculation/v2/CalculationController.cs @@ -2,8 +2,6 @@ using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; namespace EvoCalculator.Core.Controllers.Calculation.v2; @@ -22,15 +20,6 @@ public class CalculationController : Controller _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors is {Count: > 0}; - var statusCode = hasErrors ? 500 : 200; - - return StatusCode(statusCode, JsonConvert.SerializeObject( - result, - new JsonSerializerSettings - { - Formatting = Formatting.Indented, - ContractResolver = new CamelCasePropertyNamesContractResolver() - })); + return result; } } \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/Calculation/v3/CalculationController.cs b/EvoCalculator.Core/Controllers/Calculation/v3/CalculationController.cs index 893fc92..0b31562 100644 --- a/EvoCalculator.Core/Controllers/Calculation/v3/CalculationController.cs +++ b/EvoCalculator.Core/Controllers/Calculation/v3/CalculationController.cs @@ -2,8 +2,6 @@ using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; namespace EvoCalculator.Core.Controllers.Calculation.v3; @@ -23,15 +21,6 @@ public class CalculationController : Controller _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors is {Count: > 0}; - var statusCode = hasErrors ? 500 : 200; - - return StatusCode(statusCode, JsonConvert.SerializeObject( - result, - new JsonSerializerSettings - { - Formatting = Formatting.Indented, - ContractResolver = new CamelCasePropertyNamesContractResolver() - })); + return result; } } \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs index 5cf98bb..525b974 100644 --- a/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs +++ b/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs @@ -1,9 +1,6 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; -using EvoCalculator.Core.PostCalculation.v1.Managers; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Controllers.PostCalculation.v1; @@ -29,15 +26,6 @@ public class PostCalculationController : Controller _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors is {Count: > 0}; - var statusCode = hasErrors ? 500 : 200; - - return StatusCode(statusCode, JsonConvert.SerializeObject( - result, - new JsonSerializerSettings - { - Formatting = Formatting.Indented, - ContractResolver = new CamelCasePropertyNamesContractResolver() - })); + return result; } } \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs index d48c66b..30c29df 100644 --- a/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs +++ b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs @@ -1,9 +1,6 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; -using EvoCalculator.Core.PostCalculation.v2.Managers; using Microsoft.AspNetCore.Mvc; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Controllers.PostCalculation.v2; @@ -31,15 +28,6 @@ public class PostCalculationController : Controller _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors is {Count: > 0}; - var statusCode = hasErrors ? 500 : 200; - - return StatusCode(statusCode, JsonConvert.SerializeObject( - result, - new JsonSerializerSettings - { - Formatting = Formatting.Indented, - ContractResolver = new CamelCasePropertyNamesContractResolver() - })); + return result; } } \ No newline at end of file diff --git a/EvoCalculator.Core/EvoCalculator.Core.csproj b/EvoCalculator.Core/EvoCalculator.Core.csproj index 52b94ef..9172233 100644 --- a/EvoCalculator.Core/EvoCalculator.Core.csproj +++ b/EvoCalculator.Core/EvoCalculator.Core.csproj @@ -7,7 +7,6 @@ - diff --git a/EvoCalculator.Core/Startup.cs b/EvoCalculator.Core/Startup.cs index 9e43c1c..ae53192 100644 --- a/EvoCalculator.Core/Startup.cs +++ b/EvoCalculator.Core/Startup.cs @@ -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.Hosting; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; 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. public void ConfigureServices(IServiceCollection services) { - services.AddControllers(); + services.AddControllers().AddJsonOptions(options => + { + options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; + options.JsonSerializerOptions.WriteIndented = true; + }); services.AddApiVersioning(opt => { @@ -44,6 +54,28 @@ public class Startup app.UseSwaggerUi3(c => { c.DocumentTitle = DocsName; }); 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 { ex.Message } }; + + await response.WriteAsJsonAsync(result); + } + }); + app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } \ No newline at end of file