diff --git a/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs b/EvoCalculator.Core.Calculation/Tools/Validation.cs similarity index 94% rename from EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs rename to EvoCalculator.Core.Calculation/Tools/Validation.cs index 81f1365..23daaaf 100644 --- a/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs +++ b/EvoCalculator.Core.Calculation/Tools/Validation.cs @@ -1,9 +1,8 @@ using System; -using EvoCalculator.Core.Constants; using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Tools.Errors; -namespace EvoCalculator.Core.Tools.Validation; +namespace EvoCalculator.Core.Calculation.Tools; public class Validation { @@ -31,7 +30,7 @@ public class Validation "Первый платеж по графику более 50% от стоимости ПЛ с учетом скидки. Необходимо уменьшить первый платеж"); var AllAgencyPerc = Math.Round( - ((preparedValues.AgentsSum + preparedValues.DoubleAgentsSum) / (decimal)new Calculation().ESN + + ((preparedValues.AgentsSum + preparedValues.DoubleAgentsSum) / (decimal)new Constants.Calculation().ESN + preparedValues.DeliverySum + preparedValues.BrokerOfDeliverySum + preparedValues.BrokerSum + preparedValues.FinancialDeptOfDeliverySum) / preparedValues.AcceptSum * 100, 2); diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs index 0656665..c62df2f 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs @@ -5,16 +5,24 @@ namespace EvoCalculator.Core.Calculation.v1.Columns; public class CashflowMSFOFinal2Column : BaseColumnWithNominal { - public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) + private PreparedValues _preparedValues; + private BaseColumn _directorBonusSumColumn; + private CashflowMSFOFinalColumn _cashflowMsfoFinalColumn; + + public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn, PreparedValues preparedValues, + BaseColumn directorBonusSumColumn, CashflowMSFOFinalColumn cashflowMsfoFinalColumn) : base( + count, dateTempColumn) { + _preparedValues = preparedValues; + _directorBonusSumColumn = directorBonusSumColumn; + _cashflowMsfoFinalColumn = cashflowMsfoFinalColumn; } - public void ComputeValues(PreparedValues preparedValues, BaseColumn directorBonusSumColumn, - CashflowMSFOFinalColumn cashflowMsfoFinalColumn) + public void ComputeValues() { - Values[0] = -preparedValues.AcquisitionExpenses; - Values[1] = cashflowMsfoFinalColumn.Values[1]; + Values[0] = -_preparedValues.AcquisitionExpenses; + Values[1] = _cashflowMsfoFinalColumn.Values[1]; for (var i = 2; i < Values.Length; i++) - Values[i] = cashflowMsfoFinalColumn.Values[i] + directorBonusSumColumn.Values[i]; + Values[i] = _cashflowMsfoFinalColumn.Values[i] + _directorBonusSumColumn.Values[i]; } } \ 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 37cf92b..46e0caf 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs @@ -1,8 +1,8 @@ using System; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; -using EvoCalculator.Core.Tools.Validation; namespace EvoCalculator.Core.Calculation.v1.Managers; @@ -223,8 +223,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); diff --git a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs index b895e0a..a4588f6 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs @@ -1,8 +1,8 @@ using System; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; using EvoCalculator.Core.Models.Calculation.Models.Request; -using EvoCalculator.Core.Tools.Validation; namespace EvoCalculator.Core.Calculation.v1.Managers; @@ -16,7 +16,6 @@ public static partial class CalculateManager new Validation().ValidateRequest(requestCalculation); - var constants = new Constants.Calculation(); @@ -223,8 +222,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs index 111b699..01d1366 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs @@ -1,9 +1,9 @@ using System; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; 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 CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2; @@ -29,7 +29,7 @@ public static partial class CalculateManager var flags = requestCalculation.Flags; new Validation().ValidateRequest(requestCalculation); - + var constants = new Constants.Calculation(); @@ -238,8 +238,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs index bf9d9a9..d445fa6 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs @@ -1,9 +1,9 @@ using System; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; 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; @@ -29,7 +29,7 @@ public static partial class CalculateManager var flags = requestCalculation.Flags; new Validation().ValidateRequest(requestCalculation); - + var constants = new Constants.Calculation(); @@ -237,8 +237,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); diff --git a/EvoCalculator.Core.Calculation/v3/Columns/CashflowMSFOWithCFColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/CashflowMSFOWithCFColumn.cs index 1f770ae..4258193 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/CashflowMSFOWithCFColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/CashflowMSFOWithCFColumn.cs @@ -10,15 +10,15 @@ public class CashflowMSFOWithCFColumn : BaseColumnWithSum } public void ComputeValues(PreparedValues preparedValues, BaseColumn sumCreditColumn, - BaseColumn cashflowMsfoColumn, BaseColumn creditPaymentColumn, + BaseColumn cashflowMsfoFinal2Column, BaseColumn creditPaymentColumn, BaseColumn vatRecoverableColumn) { - Values[1] = cashflowMsfoColumn.GetValue(1) - creditPaymentColumn.GetValue(1) - + Values[1] = cashflowMsfoFinal2Column.GetValue(1) - creditPaymentColumn.GetValue(1) - preparedValues.AcquisitionExpensesWithVAT + sumCreditColumn.GetValue(1); for (var i = 2; i < Values.Length; i++) { - Values[i] = cashflowMsfoColumn.GetValue(i) - creditPaymentColumn.GetValue(i) + + Values[i] = cashflowMsfoFinal2Column.GetValue(i) - creditPaymentColumn.GetValue(i) + vatRecoverableColumn.GetValue(i); } diff --git a/EvoCalculator.Core.Calculation/v3/Columns/CreditPaymentColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/CreditPaymentColumn.cs index 73450c1..a12759d 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/CreditPaymentColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/CreditPaymentColumn.cs @@ -14,7 +14,7 @@ public class CreditPaymentColumn : BaseColumnWithSum BaseColumn creditColumn) { Values[0] = 0; - if (!(Math.Abs(preparedValues.LoanRate - 0.135) < 0.0001)) + if (preparedValues.FundingRate > 0) { Values[1] = -creditColumn.GetValue(1); for (var i = 2; i < Values.Length; i++) diff --git a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/BasePIColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/BasePIColumn.cs index cf6be68..fdbf0b6 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/BasePIColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/BasePIColumn.cs @@ -14,14 +14,14 @@ public class BasePIColumn : BaseColumnWithNPV _preparedValues = preparedValues; } - protected void FillValues(BaseColumn cashflowMSFOColumn, BaseColumn cashflowMSFOWithCFColumn) + protected void FillValues(BaseColumn cashflowMsfoFinal2Column, BaseColumn cashflowMSFOWithCFColumn) { for (var i = 1; i < Values.Length; i++) { - Values[i] = NPV(cashflowMSFOWithCFColumn.Values.Skip(1).Take(i), _preparedValues.LoanRate); + Values[i] = NPV(cashflowMSFOWithCFColumn.Values.Skip(1).Take(i), _preparedValues.FundingRate); } - Values[0] = -Values[^1] / (cashflowMSFOColumn.GetValue(0) + - cashflowMSFOColumn.GetValue(1)); + Values[0] = -Values[^1] / (cashflowMsfoFinal2Column.GetValue(0) + + cashflowMsfoFinal2Column.GetValue(1)); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs index 1488562..15ec764 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT1.cs @@ -10,8 +10,8 @@ public class PIColumnVT1 : BasePIColumn { } - public void ComputeValues(BaseColumn cashflowMSFOColumn, BaseColumn cashflowMSFOWithCFColumn) + public void ComputeValues(BaseColumn cashflowMsfoFinal2Column, BaseColumn cashflowMSFOWithCFColumn) { - FillValues(cashflowMSFOColumn, cashflowMSFOWithCFColumn); + FillValues(cashflowMsfoFinal2Column, cashflowMSFOWithCFColumn); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs index 9bab04f..4519777 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/PIColumn/PIColumnVT2.cs @@ -13,7 +13,7 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek { private readonly PercentPaymentColumn _percentPaymentColumn; protected SumColumn _sumColumn; - private CashflowMSFOColumnVT2 _cashflowMsfoColumn; + private CashflowMSFOFinal2Column _cashflowMsfoFinal2Column; private readonly PostValues _postValues; private SumCreditColumn _sumCreditColumn; private CreditPaymentColumn _creditPaymentColumn; @@ -25,7 +25,7 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek public PIColumnVT2(int count, PreparedValues preparedValues, CashflowMSFOWithCFColumn cashflowMsfoWithCfColumn, - CashflowMSFOColumnVT2 cashflowMsfoColumn, PercentPaymentColumn percentPaymentColumn, PostValues postValues, + CashflowMSFOFinal2Column cashflowMsfoFinal2Column, PercentPaymentColumn percentPaymentColumn, PostValues postValues, SumColumn sumColumn, SumCreditColumn sumCreditColumn, CreditPaymentColumn creditPaymentColumn, VATRecoverableColumn vatRecoverableColumn, VATColumn vatColumn, SumWithVATColumnVT1 sumWithVatColumn, CreditColumn creditColumn) : base( @@ -33,7 +33,7 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek preparedValues) { _cashflowMSFOWithCFColumn = cashflowMsfoWithCfColumn; - _cashflowMsfoColumn = cashflowMsfoColumn; + _cashflowMsfoFinal2Column = cashflowMsfoFinal2Column; _percentPaymentColumn = percentPaymentColumn; _postValues = postValues; _sumColumn = sumColumn; @@ -48,7 +48,7 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek public decimal Calculate(decimal inputVariable) { _sumColumn.ComputeValues(inputVariable); - _cashflowMsfoColumn.ComputeValues(); + _cashflowMsfoFinal2Column.ComputeValues(); _vatColumn.ComputeValues(_sumColumn, _preparedValues); _sumWithVatColumn.ComputeValues(); _sumCreditColumn.ComputeValues(_preparedValues, _sumWithVatColumn); @@ -56,10 +56,10 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek _vatRecoverableColumn.ComputeValues(_vatColumn); _creditPaymentColumn.ComputeValues(_preparedValues, _sumCreditColumn, _creditColumn); - _cashflowMSFOWithCFColumn.ComputeValues(_preparedValues, _sumCreditColumn, _cashflowMsfoColumn, + _cashflowMSFOWithCFColumn.ComputeValues(_preparedValues, _sumCreditColumn, _cashflowMsfoFinal2Column, _creditPaymentColumn, _vatRecoverableColumn); - FillValues(_cashflowMsfoColumn, _cashflowMSFOWithCFColumn); + FillValues(_cashflowMsfoFinal2Column, _cashflowMSFOWithCFColumn); return Convert.ToDecimal(Values.GetValue(0)); } diff --git a/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs index 102fd46..b5c8b16 100644 --- a/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs +++ b/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs @@ -12,14 +12,13 @@ public class SumCreditColumn : BaseColumn public void ComputeValues(PreparedValues preparedValues, BaseColumn sumWithVATColumn) { - Values[1] = (!(Math.Abs(preparedValues.LoanRate - 0.135) < 0.0001)) + Values[1] = preparedValues.FundingRate > 0 ? preparedValues.PlPriceWithVAT - sumWithVATColumn.GetValue(1) : 0; - Values[2] = Values[1]; - for (var i = 3; i < Values.Length; i++) + for (var i = 2; i < Values.Length; i++) if (GetValue(i - 1) > 0) - Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod; + Values[i] = GetValue(i - 1) - GetValue(1) / preparedValues.LoanRatePeriod; else Values[i] = 0; } diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs index 03d594a..53f81da 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByPI.cs @@ -1,10 +1,10 @@ using System.Linq; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v3.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; 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 CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2; @@ -34,7 +34,7 @@ public static partial class CalculateManager var flags = requestCalculation.Flags; new Validation().ValidateRequest(requestCalculation); - + var constants = new Constants.Calculation(); @@ -127,12 +127,26 @@ public static partial class CalculateManager var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + + var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1); + directorBonusSumColumn.ComputeValues(preparedValues, postValues); + + 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 cashflowMsfoFinal2Column = + new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, preparedValues, + directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); + var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn( new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 } .Max()); - - var piColumn = new PIColumnVT2(61, preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn, + var piColumn = new PIColumnVT2(61, preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoFinal2Column, percentPaymentColumn, postValues, sumColumn, sumCreditColumn, creditPaymentColumn, vatRecoverableColumn, vatColumn, sumWithVatColumn, creditColumn); piColumn.ComputeValues((decimal)preparedValues.NpvniExpected); @@ -256,12 +270,6 @@ public static partial class CalculateManager 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); @@ -273,12 +281,6 @@ public static partial class CalculateManager 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); diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs index b74e749..54806ce 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs @@ -1,11 +1,11 @@ using System; using System.Linq; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v3.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; 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 CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2; @@ -260,8 +260,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); @@ -291,11 +292,11 @@ public static partial class CalculateManager var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn( new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 } .Max()); - cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn, + cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoFinal2Column, creditPaymentColumn, vatRecoverableColumn); var piColumn = new PIColumnVT1(61, preparedValues); - piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn); + piColumn.ComputeValues(cashflowMsfoFinal2Column, cashflowMsfoWithCfColumn); postValues.ComputePriceUP(sumColumn); postValues.ComputePriceUP_PR(); diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs index 7a54962..39ee47b 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs @@ -1,11 +1,11 @@ using System; using System.Linq; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v2.Columns; using EvoCalculator.Core.Calculation.v3.Columns; using EvoCalculator.Core.Models.Calculation.Models.Manager; 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; @@ -259,8 +259,9 @@ public static partial class CalculateManager 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 cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn, + preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + cashflowMsfoFinal2Column.ComputeValues(); var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); @@ -290,11 +291,11 @@ public static partial class CalculateManager var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn( new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 } .Max()); - cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn, + cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoFinal2Column, creditPaymentColumn, vatRecoverableColumn); var piColumn = new PIColumnVT1(61, preparedValues); - piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn); + piColumn.ComputeValues(cashflowMsfoFinal2Column, cashflowMsfoWithCfColumn); postValues.ComputePriceUP(sumColumn); postValues.ComputePriceUP_PR(); diff --git a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs index e24f9e9..67a837a 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs @@ -14,6 +14,7 @@ public class PreparedValues public double TotalExpected { get; set; } public double Leasing0K { get; set; } public double LoanRate { get; set; } + public double FundingRate { get; set; } = 0; public int BalanceHolder { get; set; } public DateTime DogDate diff --git a/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs b/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs index 68d200f..1e5e337 100644 --- a/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs @@ -28,6 +28,7 @@ public class PreparedValues public double Repayment { get; set; } public bool ChangeRepayment { get; set; } + public double FundingRate { get; set; } = 0; public double LoanRate { get; set; } public int LoanRatePeriod { get; set; } public ChangingValue BalanceHolder { get; set; } diff --git a/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj b/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj index 7dc7779..1423c1e 100644 --- a/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj +++ b/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj @@ -10,4 +10,5 @@ + diff --git a/EvoCalculator.Core.PostCalculation/Tools/Validation.cs b/EvoCalculator.Core.PostCalculation/Tools/Validation.cs new file mode 100644 index 0000000..d68910f --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/Tools/Validation.cs @@ -0,0 +1,17 @@ +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.Tools.Errors; + +namespace EvoCalculator.Core.PostCalculation.Tools; + +public class Validation +{ + public void ValidateRequest(RequestCalculation requestCalculation) + { + var preparedValues = requestCalculation.PreparedValues; + + if (preparedValues.CalcType != 100000003 && preparedValues.CalcType != 100000008) + if (preparedValues.EditPaymentNumber >= preparedValues.Nmper.Next) + throw new AppException( + "Невозможно осуществить расчет графика: срок лизинга превышает количество платежей"); + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Current/SumColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Current/SumColumn.cs index 961ff9b..308eddf 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Current/SumColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Current/SumColumn.cs @@ -1,20 +1,58 @@ using System; +using System.Collections.Generic; +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.Array; namespace EvoCalculator.Core.PostCalculation.v1.Columns.Current; public class SumColumn : BaseColumnWithXIRR { + private BaseColumn _dateTempColumn; + public SumColumn(int count, BaseColumn dateTempColumn) : base(count, dateTempColumn) { + _dateTempColumn = dateTempColumn; } - public void ComputeValues(PreparedValues preparedValues, TablePaymentsRow[] currentTablePayments) + public void ComputeValues(PreparedValues preparedValues, TablePaymentsRow[] currentTablePayments, + TableInsuranceRow[] currentTableInsurance) { - Values[0] = -(preparedValues.BaseCost + preparedValues.FuelCardSum); - Values[1] = currentTablePayments[0].SumPayment + preparedValues.SubsidySum; - for (var i = 2; i < Values.Length; i++) Values[i] = currentTablePayments[i - 1].SumPayment; + var costInsurances = Array.Empty(); + if (currentTableInsurance != null) + costInsurances = currentTableInsurance + .Where(ins => + ins.PeriodNumberInsurance > 1 + && ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO" + ) + .OrderBy(x => x.TypeRiskInsurance) + .Select(x => -(x.CostInsurance + x.InsuranceBonusLoss)) + .ToArray(); + + + Values = Array.Concat( + new[] { -preparedValues.BaseCost - preparedValues.FuelCardSum + costInsurances.Sum() } + , new[] { currentTablePayments[0].SumPayment + preparedValues.SubsidySum } + , currentTablePayments.Skip(1).Select(x => x.SumPayment) + , costInsurances + ); + + + var dateStartPeriodInsurances = Array.Empty(); + if (currentTableInsurance != null) + dateStartPeriodInsurances = currentTableInsurance + .Where(ins => + ins.PeriodNumberInsurance > 1 + && ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO") + .OrderBy(x => x.TypeRiskInsurance) + .Select(x => x.DateStartPeriodInsurance) + .ToArray(); + + Dates = Array.Concat( + _dateTempColumn.Values + , dateStartPeriodInsurances + ); } } \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs index e3a647b..49e9b2d 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/CashflowMSFOColumn.cs @@ -13,13 +13,13 @@ public class CashflowMSFOColumn : BaseColumnWithNominal public void ComputeValues(NextValues nextValues , PreparedValues preparedValues , BaseColumn nextSumColumn - , BaseColumn? nextTLMCostColumn + , BaseColumn nextTLMCostColumn , BaseColumn nextSubsidyExpensesColumn , BaseColumn nextNSIBBruttoGrColumn - , TableInsuranceRow[]? nextTableInsurance + , TableInsuranceRow[] nextTableInsurance , BaseColumn nextDateTempColumn - , BaseColumn? nextTLMDateColumn - ) + , BaseColumn nextTLMDateColumn + , BaseColumn currentDateTempColumn) { var costInsurances = Array.Empty(); if (nextTableInsurance != null) @@ -36,7 +36,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal if (nextTLMCostColumn != null) tlmCosts = nextTLMCostColumn.Values.Skip(1).Select(x => -x).ToArray(); Values = Array.Concat( - new[] {-nextValues.AcquisitionExpenses - preparedValues.FuelCardSum} + new[] { -nextValues.AcquisitionExpenses - preparedValues.FuelCardSum } , nextSumColumn.Values.Skip(1).ToArray() , costInsurances , nextNSIBBruttoGrColumn.Values.Skip(1).ToArray() @@ -64,7 +64,7 @@ public class CashflowMSFOColumn : BaseColumnWithNominal .ToArray(); Dates = Array.Concat( - new[] {nextDateTempColumn.GetValue(0)} + new[] { nextDateTempColumn.GetValue(0) } , nextDateTempColumn.Values.Skip(1).ToArray() , dateStartPeriodInsurances , nextDateTempColumn.Values.Skip(1).ToArray() @@ -75,6 +75,22 @@ public class CashflowMSFOColumn : BaseColumnWithNominal , nextTLMDates , nextDateTempColumn.Values.Skip(1).ToArray() ); + + + var lastDateTempValue = nextDateTempColumn.Values.Last(); + var lastCurrentDateTempValue = currentDateTempColumn.Values.Last(); + var evoKasko = nextTableInsurance.FirstOrDefault(x => x.TypeRiskInsurance == "EvoKASKO"); + + if (evoKasko != null && + new DateTime(lastDateTempValue.Year, lastDateTempValue.Month, 1) > + new DateTime(lastCurrentDateTempValue.Year, lastCurrentDateTempValue.Month, 1)) + { + var evoKaskoSum = -((evoKasko.CostInsurance + evoKasko.InsuranceBonusLoss) / 12) * + ((lastDateTempValue.Year - lastCurrentDateTempValue.Year) * 12 + + lastDateTempValue.Month - lastCurrentDateTempValue.Month); + Values = Values.Append(evoKaskoSum).ToArray(); + Dates = Dates.Append(currentDateTempColumn.Values.Last().AddDays(1)).ToArray(); + } } public void PostCheck() diff --git a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumCurrentNegativeColumn.cs b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumCurrentNegativeColumn.cs index e763dc9..19d5941 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumCurrentNegativeColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Columns/Next/SumCurrentNegativeColumn.cs @@ -13,7 +13,8 @@ public class SumCurrentNegativeColumn : BaseColumn { } - public void ComputeValues(BaseColumn nextDateTempColumn, TableInsuranceRow[] nextTableInsurance) + public void ComputeValues(BaseColumn nextDateTempColumn, TableInsuranceRow[] nextTableInsurance, + BaseColumn currentDateTempColumn) { if (nextTableInsurance == null) return; @@ -33,7 +34,22 @@ public class SumCurrentNegativeColumn : BaseColumn ); Values = Array.Concat( - new[] {0m} + new[] { 0m } , GroupColumns.Split(groupSumCurrentNegativeColumn).Values); + + + var lastDateTempValue = nextDateTempColumn.Values.Last(); + var lastCurrentDateTempValue = currentDateTempColumn.Values.Last(); + var evoKasko = nextTableInsurance.FirstOrDefault(x => x.TypeRiskInsurance == "EvoKASKO"); + + if (evoKasko != null && + new DateTime(lastDateTempValue.Year, lastDateTempValue.Month, 1) > + new DateTime(lastCurrentDateTempValue.Year, lastCurrentDateTempValue.Month, 1)) + { + var evoKaskoSum = -((evoKasko.CostInsurance + evoKasko.InsuranceBonusLoss) / 12) * + ((lastDateTempValue.Year - lastCurrentDateTempValue.Year) * 12 + + lastDateTempValue.Month - lastCurrentDateTempValue.Month); + Values = Values.Append(evoKaskoSum).ToArray(); + } } } \ 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 2ce9ff9..5227f0b 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByIRRAndSum.cs @@ -1,6 +1,7 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; @@ -12,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -35,7 +38,7 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* * CURRENT */ @@ -86,8 +89,8 @@ public static partial class CalculateManager techNextSumColumn, currentTablePayments, techNextVATColumn, constants); techNextSumWithVATColumn.ComputeValues(); /* - * TECH - */ + * TECH + */ /* * NEXT @@ -151,7 +154,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -172,7 +175,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs index cc32858..4daf60f 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateByTotalExpected.cs @@ -1,8 +1,11 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; namespace EvoCalculator.Core.PostCalculation.v1.Managers; @@ -10,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -21,9 +26,25 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* - * 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); + /* + * CURRENT + */ + + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -84,7 +105,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -105,7 +126,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -149,8 +170,8 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs index 0c22327..ae34a01 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/CalculateDefault.cs @@ -1,6 +1,7 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; @@ -12,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -26,8 +29,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -36,15 +39,15 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -100,7 +103,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); @@ -130,7 +133,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -174,8 +177,8 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); @@ -222,5 +225,4 @@ public static partial class CalculateManager } }; } -} - +} \ 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 fb9efac..24adaac 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/ChangingLastPayment.cs @@ -1,7 +1,10 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; namespace EvoCalculator.Core.PostCalculation.v1.Managers; @@ -9,6 +12,8 @@ public static partial class CalculateManager { public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -20,9 +25,23 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* - * 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); + /* + * CURRENT + */ + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -81,7 +100,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -102,7 +121,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -144,8 +163,8 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs index d2d2239..9898ae8 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/EarlyRedemption.cs @@ -1,8 +1,11 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; namespace EvoCalculator.Core.PostCalculation.v1.Managers; @@ -10,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -24,6 +29,20 @@ public static partial class CalculateManager var nextValues = new NextValues(preparedValues); + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + /* + * CURRENT + */ + + /* * TECH */ @@ -86,7 +105,7 @@ public static partial class CalculateManager techNextTlmCostColumn, techNextSubsidyExpensesColumn, techNextNSIBBruttoGrColumn, nextTableInsurance, techNextDateTempColumn, - techNextTlmDateColumn); + techNextTlmDateColumn, currentDateTempColumn); var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn, @@ -106,7 +125,8 @@ public static partial class CalculateManager techNextSumCurrentColumn.ComputeValues(techNextSumWithVATColumn); var techNextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Current + 1); - techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance); + techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance, + currentDateTempColumn); var techNextSumCurrentInterestColumn = new SumCurrentInterestColumn(techNextCashflowMSFOForNIColumn.Values.Length); @@ -190,7 +210,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -211,7 +231,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs index 5136d1f..6fe8fd9 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithChangingTheTerm.cs @@ -1,6 +1,7 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; @@ -12,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -26,8 +29,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -36,16 +39,16 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ var nextValues = new NextValues(preparedValues); /* - * TECH - */ + * TECH + */ var techNextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -91,12 +94,12 @@ public static partial class CalculateManager nextValues.ComputeSumTotal(techNextSumWithVATColumn); nextValues.ComputeNmper(nextTablePayments, currentTablePayments); /* - * TECH - */ + * TECH + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -156,7 +159,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -177,7 +180,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs index e44e0e4..a7d725d 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/PERWithoutChangingTheTerm.cs @@ -1,6 +1,7 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; @@ -12,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -26,8 +29,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -36,15 +39,15 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -118,7 +121,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -139,7 +142,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -184,8 +187,8 @@ public static partial class CalculateManager nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); diff --git a/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs b/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs index 4b9a7db..6fcab5d 100644 --- a/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs +++ b/EvoCalculator.Core.PostCalculation/v1/Managers/Suspension.cs @@ -1,8 +1,11 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; namespace EvoCalculator.Core.PostCalculation.v1.Managers; @@ -10,6 +13,8 @@ public static partial class CalculateManager { public static ManagerResult Suspension(RequestCalculation requestCalculation) { + new Validation().ValidateRequest(requestCalculation); + var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -21,9 +26,23 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* - * 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); + /* + * CURRENT + */ + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -84,7 +103,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -105,7 +124,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -149,8 +168,8 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); diff --git a/EvoCalculator.Core.PostCalculation/v1/NextValues.cs b/EvoCalculator.Core.PostCalculation/v1/NextValues.cs index 83ccf51..2f01b49 100644 --- a/EvoCalculator.Core.PostCalculation/v1/NextValues.cs +++ b/EvoCalculator.Core.PostCalculation/v1/NextValues.cs @@ -9,6 +9,7 @@ namespace EvoCalculator.Core.PostCalculation.v1; public class NextValues { public decimal AcquisitionExpenses { get; set; } + public decimal AcquisitionExpensesWithVAT { get; set; } public decimal BaseCost { get; set; } public decimal NiAtInception { get; set; } public decimal NiAtInceptionMSFO { get; set; } @@ -16,9 +17,12 @@ public class NextValues public decimal SumTotal { get; set; } protected PreparedValues preparedValues; + private Constants.Calculation _constants; + public NextValues(PreparedValues preparedValues) { this.preparedValues = preparedValues; + _constants = new Constants.Calculation(); } public void ComputeAcquisitionExpenses(TableInsuranceRow[]? nextTableInsurance) @@ -70,13 +74,68 @@ public class NextValues > 0 => preparedValues.TransportTaxGr.Next, _ => preparedValues.TransportTaxGr.Current } - + preparedValues.InceptDelta; + + preparedValues.InceptDelta + + preparedValues.FuelCardSum; if (AcquisitionExpenses <= 0) throw new AppException( "Невозможно осуществить расчет графика, при заданных параметрах получаются отрицательные значения nextValues. Измените параметры для расчета."); } + + public void ComputeAcquisitionExpensesWithVAT(TableInsuranceRow[]? nextTableInsurance) + { + var tracker = 0m; + if (preparedValues.ChangeTracker == false) + tracker = preparedValues.TrackerCost.Current; + else if (preparedValues.TypeChangeTracker == 100000000) + tracker = preparedValues.TrackerCost.Current + preparedValues.TrackerCost.Next; + else + tracker = preparedValues.TrackerCostRemove + preparedValues.TrackerCost.Next; + + var tlm = 0m; + if (preparedValues.ChangeTLM == false) + tlm = preparedValues.TLMCost.Current; + else if (preparedValues.TypeChangeTLM == 100000000) + tlm = preparedValues.TLMCost.Current + preparedValues.TLMCost.Next; + else + tlm = preparedValues.TLMCostRemove + preparedValues.TLMCost.Next; + + + var baseRegistration = 0m; + if (preparedValues.BaseRegistration.Next == 0) + baseRegistration = preparedValues.BaseRegistration.Current; + else if (preparedValues.TypeChangeRegistration == 100000000) + baseRegistration = preparedValues.BaseRegistration.Next; + else + baseRegistration = preparedValues.BaseRegistration.Current + preparedValues.BaseRegistration.Next; + + + var nextCostInsurance = 0m; + if (nextTableInsurance != null) + nextCostInsurance = nextTableInsurance + .Where(x => x.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO" && + x.PeriodNumberInsurance == 1) + .Sum(x => x.CostInsurance + x.InsuranceBonusLoss); + + + AcquisitionExpensesWithVAT = preparedValues.PlPriceWithVAT + + nextCostInsurance + - preparedValues.ComissionRub * (decimal)(1 + _constants.VatValue) + - preparedValues.Discount.Next * (decimal)(1 + _constants.VatValue) + + tracker * (decimal)(1 + _constants.VatValue) + + tlm * (decimal)(1 + _constants.VatValue) + + preparedValues.TechnicalCardSum * (decimal)(1 + _constants.VatValue) + + baseRegistration * (decimal)(1 + _constants.VatValue) + + preparedValues.TransportTaxGr.Next switch + { + > 0 => preparedValues.TransportTaxGr.Next, + _ => preparedValues.TransportTaxGr.Current + } + + preparedValues.InceptDelta * (decimal)(1 + _constants.VatValue) + + preparedValues.FuelCardSum * (decimal)(1 + _constants.VatValue); + } + public void ComputeBaseCost(TableInsuranceRow[]? nextTableInsurance, BaseColumn? nextTLMGrColumn, TablePaymentsRow[] currentTablePayments) { diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CashflowMSFOWithCFColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CashflowMSFOWithCFColumn.cs new file mode 100644 index 0000000..3af705a --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CashflowMSFOWithCFColumn.cs @@ -0,0 +1,80 @@ +using System; +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.Tools.Array; +using EvoCalculator.Core.Tools.GroupColumns; +using EvoCalculator.Core.Tools.GroupColumns.Models; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class CashflowMSFOWithCFColumn : BaseColumnWithSum +{ + public DateTime[] Dates; + + private PreparedValues _preparedValues; + private NextValues _nextValues; + private CashflowMSFOFinal2Column _cashflowMsfoFinal2Column; + private BaseColumn _creditPaymentColumn; + private BaseColumn _sumCreditColumn; + private BaseColumn _VATRecoverableColumn; + private BaseColumn _nextDateTempColumn; + + public CashflowMSFOWithCFColumn(int count, PreparedValues preparedValues, + CashflowMSFOFinal2Column cashflowMsfoFinal2Column, BaseColumn creditPaymentColumn, + NextValues nextValues, BaseColumn sumCreditColumn, + BaseColumn vatRecoverableColumn, BaseColumn nextDateTempColumn) : base(count) + { + _preparedValues = preparedValues; + _cashflowMsfoFinal2Column = cashflowMsfoFinal2Column; + _creditPaymentColumn = creditPaymentColumn; + _nextValues = nextValues; + _sumCreditColumn = sumCreditColumn; + _VATRecoverableColumn = vatRecoverableColumn; + _nextDateTempColumn = nextDateTempColumn; + } + + public void ComputeValues() + { + Values = new[] { 0m, 0, 0 }; + var groupCashflowMsfoFinal2Column = GroupColumns.Sum(new SumRules + { + Day = (int)DayRule.MinInGroup, + Value = ValueRule.Sum + }, + GroupColumns.Create(_cashflowMsfoFinal2Column.Dates.Skip(1), _cashflowMsfoFinal2Column.Values.Skip(1))); + + + var splitedCashflowMsfoFinal2Column = GroupColumns.Split(groupCashflowMsfoFinal2Column); + Values[1] = splitedCashflowMsfoFinal2Column.Values[0] - _creditPaymentColumn.GetValue(1) - + _nextValues.AcquisitionExpensesWithVAT + _sumCreditColumn.GetValue(1); + + var groupedCashflowMsfoFinal2Column = GroupColumns.CreateMatchedLength( + splitedCashflowMsfoFinal2Column.Dates.Skip(1), splitedCashflowMsfoFinal2Column.Values.Skip(1)); + var groupedCreditPaymentColumn = GroupColumns.CreateMatchedLength( + _nextDateTempColumn.Values.Skip(2), + _creditPaymentColumn.Values.Select(x => -x).Skip(2)); + var groupedVATRecoverableColumn = GroupColumns.CreateMatchedLength( + _nextDateTempColumn.Values.Skip(2), _VATRecoverableColumn.Values.Skip(2)); + + + var group = GroupColumns.Sum(new SumRules + { + Day = (int)DayRule.Max, + Value = ValueRule.Sum + }, + groupedCashflowMsfoFinal2Column, + groupedCreditPaymentColumn, + groupedVATRecoverableColumn + ); + + Dates = Array.Concat( + new[] { splitedCashflowMsfoFinal2Column.Dates[0], splitedCashflowMsfoFinal2Column.Dates[0] }, + GroupColumns.Split(group).Dates); + Values = Array.Concat(new[] { 0, Values[1] }, GroupColumns.Split(group).Values); + + Values[0] = Sum; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditPaymentColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditPaymentColumn.cs new file mode 100644 index 0000000..340b6d0 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditPaymentColumn.cs @@ -0,0 +1,28 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class CreditPaymentColumn : BaseColumnWithSum +{ + public CreditPaymentColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn nextSumCreditColumn, + BaseColumn nextCreditColumn) + { + Values[0] = 0; + if (preparedValues.FundingRate > 0) + { + Values[1] = -nextCreditColumn.GetValue(1); + for (var i = 2; i < Values.Length; i++) + { + Values[i] = -nextCreditColumn.GetValue(i) + nextSumCreditColumn.GetValue(i - 1) - + nextSumCreditColumn.GetValue(i); + } + } + + Values[0] = Sum; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/PIColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/PIColumn.cs new file mode 100644 index 0000000..6ecfd29 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/PIColumn.cs @@ -0,0 +1,34 @@ +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.Tools.GroupColumns; +using EvoCalculator.Core.Tools.GroupColumns.Models; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class PIColumn : BaseColumnWithNPV +{ + private PreparedValues _preparedValues; + private CashflowMSFOFinal2Column _cashflowMsfoFinal2Column; + private BaseColumn _cashflowMsfoWithCfColumn; + + public PIColumn(int count, CashflowMSFOFinal2Column cashflowMsfoFinal2Column, + BaseColumn cashflowMsfoWithCfColumn, PreparedValues preparedValues) : base(count) + { + _cashflowMsfoFinal2Column = cashflowMsfoFinal2Column; + _cashflowMsfoWithCfColumn = cashflowMsfoWithCfColumn; + _preparedValues = preparedValues; + } + + public void ComputeValues() + { + for (var i = 1; i < Values.Length; i++) + { + Values[i] = NPV(_cashflowMsfoWithCfColumn.Values.Skip(1).Take(i), _preparedValues.FundingRate); + } + + Values[0] = -Values[^1] / (_cashflowMsfoFinal2Column.GetValue(0) + + _cashflowMsfoFinal2Column.GetValue(1)); + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/BaseSumCreditColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/BaseSumCreditColumn.cs new file mode 100644 index 0000000..c11aa8f --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/BaseSumCreditColumn.cs @@ -0,0 +1,8 @@ +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class BaseSumCreditColumn: BaseColumn +{ + +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT1.cs similarity index 52% rename from EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs rename to EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT1.cs index 3c3d9b8..71057b9 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT1.cs @@ -3,19 +3,21 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; -public class SumCreditColumn : BaseColumn +public class SumCreditColumnVT1 : BaseColumn { - public SumCreditColumn(int count) : base(count) + public SumCreditColumnVT1(int count) : base(count) { } public void ComputeValues(PreparedValues preparedValues, BaseColumn nextSumWithVATColumn) { - Values[1] = Values[2] = preparedValues.PlPriceWithVAT - nextSumWithVATColumn.GetValue(1); + Values[1] = Values[2] = preparedValues.FundingRate > 0 + ? preparedValues.PlPriceWithVAT - nextSumWithVATColumn.GetValue(1) + : 0; - for (var i = 3; i < Values.Length; i++) + for (var i = 2; i < Values.Length; i++) if (GetValue(i - 1) > 0) - Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod; + Values[i] = GetValue(i - 1) - GetValue(1) / preparedValues.LoanRatePeriod; else Values[i] = 0; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT2.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT2.cs new file mode 100644 index 0000000..943c349 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn/SumCreditColumnVT2.cs @@ -0,0 +1,26 @@ +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class SumCreditColumnVT2 : SumCreditColumnVT1 +{ + public SumCreditColumnVT2(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn nextSumWithVATColumn) + { + base.ComputeValues(preparedValues, nextSumWithVATColumn); + + if (preparedValues.LoanRatePeriod > preparedValues.Nmper.Next) + { + Values[preparedValues.Nmper.Next + 1] = Values.Skip(preparedValues.Nmper.Next + 1).Sum(); + for (var i = preparedValues.Nmper.Next + 1 + 1; i < Values.Length; i++) + { + Values[i] = 0; + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumIRRColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumIRRColumn.cs new file mode 100644 index 0000000..24c957f --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumIRRColumn.cs @@ -0,0 +1,119 @@ +using System; +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.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.Tools.Array; +using TridentGoalSeek; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next +{ + public class SumIRRColumn : BaseColumnWithXIRR, IGoalSeekAlgorithm + { + protected readonly NextValues _nextValues; + protected readonly PreparedValues _preparedValues; + protected readonly BaseSumColumn _sumColumn; + protected readonly TablePaymentsRow[] _currentTablePayments; + protected readonly BaseColumn _dateTempColumn; + protected readonly BaseColumn _currentDateTempColumn; + protected readonly TableInsuranceRow[] _nextTableInsurance; + + public SumIRRColumn(int count, BaseColumn dateTempColumn, BaseColumn currentDateTempColumn, + PreparedValues preparedValues, + NextValues nextValues, TablePaymentsRow[] currentTablePayments, + TableInsuranceRow[] nextTableInsurance, BaseSumColumn sumColumn + ) : base(count, dateTempColumn) + { + _dateTempColumn = dateTempColumn; + _preparedValues = preparedValues; + _nextValues = nextValues; + _currentTablePayments = currentTablePayments; + _nextTableInsurance = nextTableInsurance; + _sumColumn = sumColumn; + _currentDateTempColumn = currentDateTempColumn; + } + + private void FillValues() + { + var costInsurances = Array.Empty(); + + if (_nextTableInsurance != null) + { + costInsurances = _nextTableInsurance + .Where(ins => + ins.PeriodNumberInsurance > 1 + && (ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO") + ) + .OrderBy(x => x.TypeRiskInsurance) + .Select(x => -(x.CostInsurance + x.InsuranceBonusLoss)) + .ToArray(); + } + + Values = Array.Concat( + new[] { -_nextValues.BaseCost - _preparedValues.FuelCardSum + costInsurances.Sum() }, + _sumColumn.Values.Skip(1), + costInsurances + ); + + var dateStartPeriodInsurances = Array.Empty(); + + if (_nextTableInsurance != null) + { + dateStartPeriodInsurances = _nextTableInsurance + .Where(ins => + ins.PeriodNumberInsurance > 1 + && (ins.TypeRiskInsurance is "KASKO" or "OSAGO" or "GAP" or "EvoKASKO") + ) + .OrderBy(x => x.TypeRiskInsurance) + .Select(x => x.DateStartPeriodInsurance) + .ToArray(); + } + + Dates = Array.Concat( + _dateTempColumn.Values, + dateStartPeriodInsurances + ); + + + var lastDateTempValue = _dateTempColumn.Values.Last(); + var lastCurrentDateTempValue = _currentDateTempColumn.Values.Last(); + var evoKasko = _nextTableInsurance.FirstOrDefault(x => x.TypeRiskInsurance == "EvoKASKO"); + + if (evoKasko != null && + new DateTime(lastDateTempValue.Year, lastDateTempValue.Month, 1) > + new DateTime(lastCurrentDateTempValue.Year, lastCurrentDateTempValue.Month, 1)) + { + var evoKaskoSum = -((evoKasko.CostInsurance + evoKasko.InsuranceBonusLoss) / 12) * + ((lastDateTempValue.Year - lastCurrentDateTempValue.Year) * 12 + + lastDateTempValue.Month - lastCurrentDateTempValue.Month); + Values = Values.Append(evoKaskoSum).ToArray(); + Dates = Dates.Append(_currentDateTempColumn.Values.Last().AddDays(1)).ToArray(); + } + } + + public decimal Calculate(decimal inputVariable) + { + _sumColumn.ComputeValues(inputVariable); + FillValues(); + return (decimal)IRR; + } + + public void ComputeValues(decimal requiredValue) + { + var goalSeek = new GoalSeek(this); + + // Чтобы IRR не получился меньше заданного + goalSeek.SeekResult(requiredValue + 0.00001m, + new GoalSeekOptions( + startingStabPoint: + (_nextValues.BaseCost - _currentTablePayments[0].SumPayment) / + (_preparedValues.Nmper.Next - 1), + maximumAttempts: 1000, + initialTineSpacing: 100 + // , focusPercentage: 50 + )); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/VATRecoverableColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/VATRecoverableColumn.cs new file mode 100644 index 0000000..086a6b9 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/VATRecoverableColumn.cs @@ -0,0 +1,56 @@ +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class VATRecoverableColumn : BaseColumnWithSum +{ + private Constants.Calculation constans; + private decimal _vatRecoverable = 0m; + private decimal _tracker = 0m; + private decimal _tlm = 0m; + + + public VATRecoverableColumn(int count, PreparedValues preparedValues) : base(count) + { + this.constans = new Constants.Calculation(); + + if (preparedValues.ChangeTracker == false) + _tracker = preparedValues.TrackerCost.Current; + else if (preparedValues.TypeChangeTracker == 100000000) + _tracker = preparedValues.TrackerCost.Current + preparedValues.TrackerCost.Next; + else + _tracker = preparedValues.TrackerCostRemove + preparedValues.TrackerCost.Next; + + if (preparedValues.ChangeTLM == false) + _tlm = preparedValues.TLMCost.Current; + else if (preparedValues.TypeChangeTLM == 100000000) + _tlm = preparedValues.TLMCost.Current + preparedValues.TLMCost.Next; + else + _tlm = preparedValues.TLMCostRemove + preparedValues.TLMCost.Next; + + + _vatRecoverable = preparedValues.PlPriceVAT + + (_tlm + _tracker + preparedValues.TechnicalCardSum) * + (decimal)(1 + this.constans.VatValue) - + (_tlm + _tracker + preparedValues.TechnicalCardSum); + } + + + public void ComputeValues(BaseColumn nextVATColumn) + { + Values[0] = 0; + + for (var i = 6; i < Values.Length; i += 3) + { + var vatSum = nextVATColumn.Values.Skip(1).Take(i).Sum(); + var vatRecoverableSum = this.Values.Skip(1).Take(i - 1).Sum(); + Values[i] = vatSum < this._vatRecoverable + ? vatSum - vatRecoverableSum + : this._vatRecoverable - vatRecoverableSum; + } + + Values[0] = Sum; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs index a3b5106..3669330 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs @@ -1,13 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; using SumVATCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumVATCreditColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; @@ -16,7 +16,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -40,7 +40,7 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* * CURRENT */ @@ -80,9 +80,14 @@ public static partial class CalculateManager nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, currentTablePayments); - var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, + var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, techNextDateTempColumn, preparedValues, nextValues, currentTablePayments, nextTablePayments); - techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR); + + var techSumIRRColumn = new SumIRRColumn(0, techNextDateTempColumn, currentDateTempColumn, preparedValues, + nextValues, + currentTablePayments, + nextTableInsurance, techNextSumColumn); + techSumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta); var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); @@ -91,8 +96,8 @@ public static partial class CalculateManager techNextSumColumn, currentTablePayments, techNextVATColumn, constants); techNextSumWithVATColumn.ComputeValues(); /* - * TECH - */ + * TECH + */ /* * NEXT @@ -156,7 +161,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -177,7 +182,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -201,7 +206,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -222,6 +227,21 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); + nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); @@ -251,6 +271,7 @@ public static partial class CalculateManager techNextTlmCostColumn, techNextTlmGrColumn, techNextSumColumn, + techSumIRRColumn, techNextVATColumn, techNextSumWithVATColumn, @@ -282,7 +303,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs index 2283f36..13de695 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRNoLimit.cs @@ -1,13 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -15,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult CalculateByIRRNoLimit(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -30,8 +30,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -40,15 +40,15 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -82,9 +82,13 @@ public static partial class CalculateManager currentTablePayments); - var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues, nextValues, currentTablePayments, nextTablePayments); - nextSumColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta); + + var sumIRRColumn = new SumIRRColumn(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues, + currentTablePayments, + nextTableInsurance, nextSumColumn); + sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta); nextSumColumn.PostCheck(); nextSumColumn.RoundValues(); @@ -104,7 +108,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); @@ -133,7 +137,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -157,7 +161,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -179,12 +183,26 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); @@ -208,6 +226,7 @@ public static partial class CalculateManager nextTlmCostColumn, nextTlmGrColumn, nextSumColumn, + sumIRRColumn, nextNSIBBruttoGrColumn, nextSubsidyExpensesColumn, nextCashflowMSFOColumn, @@ -230,7 +249,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs index ed13991..b472d20 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs @@ -1,11 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -13,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -25,9 +27,24 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* - * 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); + /* + * CURRENT + */ + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -88,7 +105,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -109,7 +126,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -133,7 +150,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -159,13 +176,27 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); return new ManagerResult { @@ -202,7 +233,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs index 795b43c..7200a8f 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs @@ -1,13 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -15,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -30,8 +30,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -40,15 +40,15 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -82,9 +82,13 @@ public static partial class CalculateManager currentTablePayments); - var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues, nextValues, currentTablePayments, nextTablePayments); - nextSumColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta); + + var sumIRRColumn = new SumIRRColumn(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues, + currentTablePayments, + nextTableInsurance, nextSumColumn); + sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta); nextSumColumn.PostCheck(); nextSumColumn.RoundValues(); @@ -104,7 +108,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); @@ -134,7 +138,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -158,7 +162,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -180,12 +184,27 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); + nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); @@ -209,6 +228,7 @@ public static partial class CalculateManager nextTlmCostColumn, nextTlmGrColumn, nextSumColumn, + sumIRRColumn, nextNSIBBruttoGrColumn, nextSubsidyExpensesColumn, nextCashflowMSFOColumn, @@ -231,7 +251,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs index d0c670c..eb5558c 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs @@ -1,10 +1,12 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; using SumRepaymentColumnVT2 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT2; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -12,7 +14,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -24,9 +26,24 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* - * 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); + /* + * CURRENT + */ + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -85,7 +102,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -106,7 +123,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -128,7 +145,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -154,13 +171,27 @@ public static partial class CalculateManager nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); return new ManagerResult { @@ -197,7 +228,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs index 5f10215..699d35d 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs @@ -1,11 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -13,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -28,6 +30,19 @@ public static partial class CalculateManager var nextValues = new NextValues(preparedValues); + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + /* + * CURRENT + */ + /* * TECH */ @@ -90,7 +105,7 @@ public static partial class CalculateManager techNextTlmCostColumn, techNextSubsidyExpensesColumn, techNextNSIBBruttoGrColumn, nextTableInsurance, techNextDateTempColumn, - techNextTlmDateColumn); + techNextTlmDateColumn, currentDateTempColumn); var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn, @@ -110,7 +125,7 @@ public static partial class CalculateManager techNextSumCurrentColumn.ComputeValues(techNextSumWithVATColumn); var techNextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Current + 1); - techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance); + techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance, currentDateTempColumn); var techNextSumCurrentInterestColumn = new SumCurrentInterestColumn(techNextCashflowMSFOForNIColumn.Values.Length); @@ -194,7 +209,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -215,7 +230,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -239,7 +254,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT2(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -261,6 +276,20 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); @@ -328,7 +357,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs index a6f211b..8ad4156 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs @@ -1,13 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -15,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -40,7 +40,7 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* * CURRENT */ @@ -160,7 +160,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -181,7 +181,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -203,7 +203,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -223,6 +223,21 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); nextValues.ComputeNiAtInception(currentTablePayments); @@ -285,7 +300,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs index 8d3b00e..e0b80e3 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs @@ -1,13 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -15,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -30,8 +30,8 @@ public static partial class CalculateManager /* - * CURRENT - */ + * CURRENT + */ var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); currentDateColumn.ComputeValues(currentTablePayments); @@ -40,15 +40,15 @@ public static partial class CalculateManager currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); - currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance); /* - * CURRENT - */ + * CURRENT + */ /* - * NEXT - */ + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -122,7 +122,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -143,7 +143,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -168,7 +168,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -189,13 +189,28 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); + nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); @@ -244,7 +259,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs index 4e808f3..bc421d6 100644 --- a/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs @@ -1,11 +1,13 @@ using System.Linq; using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.Tools; using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; using EvoCalculator.Core.PostCalculation.v1.Columns.Next; using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; using EvoCalculator.Core.PostCalculation.v2.Columns.Next; -using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; using SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1; namespace EvoCalculator.Core.PostCalculation.v2.Managers; @@ -13,7 +15,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Managers; public static partial class CalculateManager { public static ManagerResult Suspension(RequestCalculation requestCalculation) - { + { new Validation().ValidateRequest(requestCalculation); var constants = new Constants.Calculation(); var preparedValues = requestCalculation.PreparedValues; @@ -25,9 +27,23 @@ public static partial class CalculateManager var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* - * 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); + /* + * CURRENT + */ + + /* + * NEXT + */ var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); nextDateColumn.ComputeValues(preparedValues, currentTablePayments); @@ -88,7 +104,7 @@ public static partial class CalculateManager var nextCashflowMSFOColumn = new CashflowMSFOColumn(); nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, @@ -109,7 +125,7 @@ public static partial class CalculateManager nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); - nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn); var nextSumCurrentInterestColumn = new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); @@ -133,7 +149,7 @@ public static partial class CalculateManager nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, preparedValues); - var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2); nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); @@ -154,12 +170,27 @@ public static partial class CalculateManager var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4); + nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn); + + var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues); + nextVATRecoverableColumn.ComputeValues(nextVATColumn); + + nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance); + + var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column, + nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn); + nextCashflowMSFOWithCFColumn.ComputeValues(); + + var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues); + nextPiColumn.ComputeValues(); + nextValues.ComputeNiAtInception(currentTablePayments); nextValues.ComputeNiAtInceptionMSFO(); /* - * NEXT - */ + * NEXT + */ var postValues = new v2.PostValues(preparedValues); postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); @@ -201,7 +232,11 @@ public static partial class CalculateManager nextCreditVATColumn, nextNSIBExpensesColumn, nextCashflowNSIBColumn, - nextRevenueColumn + nextRevenueColumn, + nextCreditPaymentColumn, + nextVATRecoverableColumn, + nextCashflowMSFOWithCFColumn, + nextPiColumn, } }; } diff --git a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs index 85f10cc..fb74841 100644 --- a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs @@ -1,7 +1,7 @@ using System; +using EvoCalculator.Core.Calculation.Tools; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Request; -using EvoCalculator.Core.Tools.Validation; using Xunit; namespace EvoCalculator.Core.Tests.Calculation; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/CashflowMSFOColumnTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/CashflowMSFOColumnTests.cs index cf2251f..0be08e0 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/CashflowMSFOColumnTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/CashflowMSFOColumnTests.cs @@ -215,7 +215,7 @@ public class CashflowMsfoColumnTests var cashflowMSFOColumn = new CashflowMSFOColumn(); cashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, nextSubsidyExpensesColumn, nextNsibBruttoGrColumn, tableInsurance.Next, nextDateTempColumn, - nextTlmDateColumn); + nextTlmDateColumn, currentDateTempColumn); const double expectedIRR = -0.82516899; const double expectedNominal = -1.62313616; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/SumCurrentNegativeTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/SumCurrentNegativeTests.cs index 9ed31ec..f1eb638 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/SumCurrentNegativeTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Columns/SumCurrentNegativeTests.cs @@ -74,7 +74,7 @@ public class SumCurrentNegativeTests var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(dateTempColumn.Values.Length); - sumCurrentNegativeColumn.ComputeValues(dateTempColumn, tableInsurance.Next); + sumCurrentNegativeColumn.ComputeValues(dateTempColumn, tableInsurance.Next, currentDateTempColumn); var expected = new[] { diff --git a/EvoCalculator.Core.Tests/PostCalculation/v2/SumCreditColumnTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v2/SumCreditColumnTests.cs new file mode 100644 index 0000000..a689c32 --- /dev/null +++ b/EvoCalculator.Core.Tests/PostCalculation/v2/SumCreditColumnTests.cs @@ -0,0 +1,55 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.lib; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using Xunit; + +namespace EvoCalculator.Core.Tests.PostCalculation.v2; + +public class SumCreditColumnTests +{ + [Fact] + public void ComputeValues_ShouldComputeValuesCorrectly() + { + // Arrange + var column = new SumCreditColumnVT2(14); + var preparedValues = new PreparedValues + { + LoanRatePeriod = 12, + Nmper = new ChangingValue { Next = 7 }, + PlPriceWithVAT = 1000000, + FundingRate = 15 + }; + var nextSumWithVATColumn = new BaseColumnWithSum(8) + { + Values = new[] + { + 1326952.67m, + 230000.00m, + 32937.96m, + 32937.96m, + 32937.96m, + 32937.96m, + 32937.96m, + 32937.96m, + } + }; + + // Act + column.ComputeValues(preparedValues, nextSumWithVATColumn); + + var expected = new[] + { + 770000m, + 770000m, + 705833.3333m, + 641666.6667m, + 577500m, + 513333.3333m, + 1796666.667m, + }; + + // Assert + Assert.Equal(expected, column.Values); + } +} \ 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 7d23172..894b589 100644 --- a/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj +++ b/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj @@ -9,4 +9,8 @@ + + + + diff --git a/EvoCalculator.Core.Tools/GroupColumns/Create.cs b/EvoCalculator.Core.Tools/GroupColumns/Create.cs index fbc6104..2750678 100644 --- a/EvoCalculator.Core.Tools/GroupColumns/Create.cs +++ b/EvoCalculator.Core.Tools/GroupColumns/Create.cs @@ -13,4 +13,17 @@ public static partial class GroupColumns .Select((x, i) => new KeyValuePair(x, values.ElementAtOrDefault(i))) .ToList(); } + + public static List> CreateMatchedLength(IEnumerable dates, + IEnumerable values) + { + int minLength = Math.Min(dates.Count(), values.Count()); + + List> result = dates + .Zip(values, (date, value) => new KeyValuePair(date, value)) + .Take(minLength) + .ToList(); + + return result; + } } \ No newline at end of file