merge release/dyn-2803_sale-post-pi

This commit is contained in:
vchikalkin 2023-11-27 10:54:10 +03:00
parent 5ba21a49fc
commit 83c040a779
54 changed files with 1185 additions and 260 deletions

View File

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

View File

@ -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<decimal> _directorBonusSumColumn;
private CashflowMSFOFinalColumn _cashflowMsfoFinalColumn;
public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn, PreparedValues preparedValues,
BaseColumn<decimal> directorBonusSumColumn, CashflowMSFOFinalColumn cashflowMsfoFinalColumn) : base(
count, dateTempColumn)
{
_preparedValues = preparedValues;
_directorBonusSumColumn = directorBonusSumColumn;
_cashflowMsfoFinalColumn = cashflowMsfoFinalColumn;
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> 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];
}
}

View File

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

View File

@ -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;
@ -17,7 +17,6 @@ public static partial class CalculateManager
new Validation().ValidateRequest(requestCalculation);
var constants = new Constants.Calculation();
var postValues = new PostValues(preparedValues);
@ -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);

View File

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

View File

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

View File

@ -10,15 +10,15 @@ public class CashflowMSFOWithCFColumn : BaseColumnWithSum
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> sumCreditColumn,
BaseColumn<decimal> cashflowMsfoColumn, BaseColumn<decimal> creditPaymentColumn,
BaseColumn<decimal> cashflowMsfoFinal2Column, BaseColumn<decimal> creditPaymentColumn,
BaseColumn<decimal> 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);
}

View File

@ -14,7 +14,7 @@ public class CreditPaymentColumn : BaseColumnWithSum
BaseColumn<decimal> 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++)

View File

@ -14,14 +14,14 @@ public class BasePIColumn : BaseColumnWithNPV
_preparedValues = preparedValues;
}
protected void FillValues(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> cashflowMSFOWithCFColumn)
protected void FillValues(BaseColumn<decimal> cashflowMsfoFinal2Column, BaseColumn<decimal> 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));
}
}

View File

@ -10,8 +10,8 @@ public class PIColumnVT1 : BasePIColumn
{
}
public void ComputeValues(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> cashflowMSFOWithCFColumn)
public void ComputeValues(BaseColumn<decimal> cashflowMsfoFinal2Column, BaseColumn<decimal> cashflowMSFOWithCFColumn)
{
FillValues(cashflowMSFOColumn, cashflowMSFOWithCFColumn);
FillValues(cashflowMsfoFinal2Column, cashflowMSFOWithCFColumn);
}
}

View File

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

View File

@ -12,14 +12,13 @@ public class SumCreditColumn : BaseColumn<decimal>
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> 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;
}

View File

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

View File

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

View File

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

View File

@ -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

View File

@ -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<int> BalanceHolder { get; set; }

View File

@ -10,4 +10,5 @@
<ProjectReference Include="..\EvoCalculator.Core.Tools\EvoCalculator.Core.Tools.csproj" />
</ItemGroup>
</Project>

View File

@ -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(
"Невозможно осуществить расчет графика: срок лизинга превышает количество платежей");
}
}

View File

@ -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<DateTime> _dateTempColumn;
public SumColumn(int count, BaseColumn<DateTime> 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<decimal>();
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<decimal>.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<DateTime>();
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<DateTime>.Concat(
_dateTempColumn.Values
, dateStartPeriodInsurances
);
}
}

View File

@ -13,13 +13,13 @@ public class CashflowMSFOColumn : BaseColumnWithNominal
public void ComputeValues(NextValues nextValues
, PreparedValues preparedValues
, BaseColumn<decimal> nextSumColumn
, BaseColumn<decimal>? nextTLMCostColumn
, BaseColumn<decimal> nextTLMCostColumn
, BaseColumn<decimal> nextSubsidyExpensesColumn
, BaseColumn<decimal> nextNSIBBruttoGrColumn
, TableInsuranceRow[]? nextTableInsurance
, TableInsuranceRow[] nextTableInsurance
, BaseColumn<DateTime> nextDateTempColumn
, BaseColumn<DateTime>? nextTLMDateColumn
)
, BaseColumn<DateTime> nextTLMDateColumn
, BaseColumn<DateTime> currentDateTempColumn)
{
var costInsurances = Array.Empty<decimal>();
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<decimal>.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<DateTime>.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()

View File

@ -13,7 +13,8 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
{
}
public void ComputeValues(BaseColumn<DateTime> nextDateTempColumn, TableInsuranceRow[] nextTableInsurance)
public void ComputeValues(BaseColumn<DateTime> nextDateTempColumn, TableInsuranceRow[] nextTableInsurance,
BaseColumn<DateTime> currentDateTempColumn)
{
if (nextTableInsurance == null)
return;
@ -33,7 +34,22 @@ public class SumCurrentNegativeColumn : BaseColumn<decimal>
);
Values = Array<decimal>.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();
}
}
}

View File

@ -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
*/
@ -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);

View File

@ -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,6 +26,22 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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);

View File

@ -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;
@ -36,7 +39,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
*/
@ -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);
@ -223,4 +226,3 @@ public static partial class CalculateManager
};
}
}

View File

@ -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,6 +25,20 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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);

View File

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

View File

@ -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;
@ -36,7 +39,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
*/
@ -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);

View File

@ -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;
@ -36,7 +39,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
*/
@ -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);

View File

@ -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,6 +26,20 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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);

View File

@ -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<decimal>? nextTLMGrColumn, TablePaymentsRow[] currentTablePayments)
{

View File

@ -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<decimal> _creditPaymentColumn;
private BaseColumn<decimal> _sumCreditColumn;
private BaseColumn<decimal> _VATRecoverableColumn;
private BaseColumn<DateTime> _nextDateTempColumn;
public CashflowMSFOWithCFColumn(int count, PreparedValues preparedValues,
CashflowMSFOFinal2Column cashflowMsfoFinal2Column, BaseColumn<decimal> creditPaymentColumn,
NextValues nextValues, BaseColumn<decimal> sumCreditColumn,
BaseColumn<decimal> vatRecoverableColumn, BaseColumn<DateTime> 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<DateTime>.Concat(
new[] { splitedCashflowMsfoFinal2Column.Dates[0], splitedCashflowMsfoFinal2Column.Dates[0] },
GroupColumns.Split(group).Dates);
Values = Array<decimal>.Concat(new[] { 0, Values[1] }, GroupColumns.Split(group).Values);
Values[0] = Sum;
}
}

View File

@ -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<decimal> nextSumCreditColumn,
BaseColumn<decimal> 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;
}
}

View File

@ -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<decimal> _cashflowMsfoWithCfColumn;
public PIColumn(int count, CashflowMSFOFinal2Column cashflowMsfoFinal2Column,
BaseColumn<decimal> 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));
}
}

View File

@ -0,0 +1,8 @@
using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
public class BaseSumCreditColumn: BaseColumn<decimal>
{
}

View File

@ -3,19 +3,21 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
public class SumCreditColumn : BaseColumn<decimal>
public class SumCreditColumnVT1 : BaseColumn<decimal>
{
public SumCreditColumn(int count) : base(count)
public SumCreditColumnVT1(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> 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;
}

View File

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

View File

@ -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<DateTime> _dateTempColumn;
protected readonly BaseColumn<DateTime> _currentDateTempColumn;
protected readonly TableInsuranceRow[] _nextTableInsurance;
public SumIRRColumn(int count, BaseColumn<DateTime> dateTempColumn, BaseColumn<DateTime> 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<decimal>();
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<decimal>.Concat(
new[] { -_nextValues.BaseCost - _preparedValues.FuelCardSum + costInsurances.Sum() },
_sumColumn.Values.Skip(1),
costInsurances
);
var dateStartPeriodInsurances = Array.Empty<DateTime>();
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<DateTime>.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
));
}
}
}

View File

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

View File

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

View File

@ -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;
@ -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
*/
@ -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,6 +183,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();
@ -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,
}
};
}

View File

@ -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,6 +27,21 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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);
@ -166,6 +183,20 @@ public static partial class CalculateManager
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,
}
};
}

View File

@ -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;
@ -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
*/
@ -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,6 +184,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();
@ -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,
}
};
}

View File

@ -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,6 +26,21 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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);
@ -161,6 +178,20 @@ public static partial class CalculateManager
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,
}
};
}

View File

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

View File

@ -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);
@ -224,6 +224,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();
@ -285,7 +300,11 @@ public static partial class CalculateManager
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
nextRevenueColumn,
nextCreditPaymentColumn,
nextVATRecoverableColumn,
nextCashflowMSFOWithCFColumn,
nextPiColumn,
}
};
}

View File

@ -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;
@ -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
*/
@ -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,6 +189,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();
@ -244,7 +259,11 @@ public static partial class CalculateManager
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
nextRevenueColumn,
nextCreditPaymentColumn,
nextVATRecoverableColumn,
nextCashflowMSFOWithCFColumn,
nextPiColumn,
}
};
}

View File

@ -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,6 +27,20 @@ public static partial class CalculateManager
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
/*
* CURRENT
*/
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
currentDateColumn.ComputeValues(currentTablePayments);
var currentDateTempColumn =
new DateTempColumn(preparedValues.Nmper.Current + 1);
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
/*
* CURRENT
*/
/*
* NEXT
*/
@ -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,6 +170,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();
@ -201,7 +232,11 @@ public static partial class CalculateManager
nextCreditVATColumn,
nextNSIBExpensesColumn,
nextCashflowNSIBColumn,
nextRevenueColumn
nextRevenueColumn,
nextCreditPaymentColumn,
nextVATRecoverableColumn,
nextCashflowMSFOWithCFColumn,
nextPiColumn,
}
};
}

View File

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

View File

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

View File

@ -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[]
{

View File

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

View File

@ -9,4 +9,8 @@
<ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Validation\" />
</ItemGroup>
</Project>

View File

@ -13,4 +13,17 @@ public static partial class GroupColumns
.Select((x, i) => new KeyValuePair<DateTime, decimal>(x, values.ElementAtOrDefault(i)))
.ToList();
}
public static List<KeyValuePair<DateTime, decimal>> CreateMatchedLength(IEnumerable<DateTime> dates,
IEnumerable<decimal> values)
{
int minLength = Math.Min(dates.Count(), values.Count());
List<KeyValuePair<DateTime, decimal>> result = dates
.Zip(values, (date, value) => new KeyValuePair<DateTime, decimal>(date, value))
.Take(minLength)
.ToList();
return result;
}
}