merge branch release/dyn-3987_early-redemption-sums

This commit is contained in:
vchikalkin 2024-03-04 14:26:21 +03:00
parent a2022c3535
commit ecadf10699
9 changed files with 390 additions and 47 deletions

View File

@ -12,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.v3.Columns;
public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek
{
private readonly PercentPaymentColumn _percentPaymentColumn;
protected SumColumn _sumColumn;
protected v2.Columns.SumColumn _sumColumn;
private CashflowMSFOFinal2Column _cashflowMsfoFinal2Column;
private readonly PostValues _postValues;
private SumCreditColumn _sumCreditColumn;
@ -26,7 +26,7 @@ public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek
public PIColumnVT2(int count, PreparedValues preparedValues, CashflowMSFOWithCFColumn cashflowMsfoWithCfColumn,
CashflowMSFOFinal2Column cashflowMsfoFinal2Column, PercentPaymentColumn percentPaymentColumn, PostValues postValues,
SumColumn sumColumn, SumCreditColumn sumCreditColumn, CreditPaymentColumn creditPaymentColumn,
v2.Columns.SumColumn sumColumn, SumCreditColumn sumCreditColumn, CreditPaymentColumn creditPaymentColumn,
VATRecoverableColumn vatRecoverableColumn, VATColumn vatColumn, SumWithVATColumnVT1 sumWithVatColumn,
CreditColumn creditColumn) : base(
count,

View File

@ -1,15 +1,81 @@
using System;
using System.Linq;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Calculation.v3.Managers.Calculation;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models.Request;
using EvoCalculator.Core.Tools.Check;
using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn;
using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn;
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class SumRepaymentColumn : BaseColumn<decimal>
{
public SumRepaymentColumn(int count) : base(count)
private RequestCalculation _requestCalculation;
private v3.PostValues _postValues;
private Constants.Calculation _calculation;
private BaseColumn<decimal> _sumColumnOriginal;
private BaseColumn<decimal> _piColumnOriginal;
private DateTempColumn dateTempColumnCut;
private TLM_GrColumn tlmGrColumnCut;
private PercentPaymentColumn percentPaymentColumnCut;
private GPS_GrColumn gpsGrColumnCut;
private NPVBonusExpensesColumn npvBonusExpensesColumnCut;
private AgentComissionExpensesColumn agentComissionExpensesColumnCut;
private NegativeCashflowColumn negativeCashflowColumnCut;
private NSIBBruttoGrColumn nsibBruttoGrColumnCut;
private SubsidyExpensesColumn subsidyExpensesColumnCut;
private ExtraBonusSumColumn extraBonusSumColumnCut;
private DirectorBonusSumColumn directorBonusSumColumnCut;
private SumCurrentColumn sumCurrentColumnCut;
private SumCurrentNegativeColumn sumCurrentNegativeColumnCut;
private SumCurrentTLMColumn sumCurrentTlmColumnCut;
private SumCurrentInterestColumn sumCurrentInterestColumnCut;
public CalculatePiResult _calculatePiResult { get; set; }
public decimal PI { get; set; }
public decimal[] OldValues { get; set; }
public decimal[] NewValues { get; set; }
public SumRepaymentColumn(int count, PostValues postValues, RequestCalculation requestCalculation,
Constants.Calculation calculation,
BaseColumn<decimal> sumColumnOriginal, BaseColumn<decimal> piColumnOriginal, DateTempColumn dateTempColumnCut,
TLM_GrColumn tlmGrColumnCut, PercentPaymentColumn percentPaymentColumnCut, GPS_GrColumn gpsGrColumnCut,
NPVBonusExpensesColumn npvBonusExpensesColumnCut, AgentComissionExpensesColumn agentComissionExpensesColumnCut,
NegativeCashflowColumn negativeCashflowColumnCut, NSIBBruttoGrColumn nsibBruttoGrColumnCut,
SubsidyExpensesColumn subsidyExpensesColumnCut, ExtraBonusSumColumn extraBonusSumColumnCut,
DirectorBonusSumColumn directorBonusSumColumnCut, SumCurrentColumn sumCurrentColumnCut,
SumCurrentNegativeColumn sumCurrentNegativeColumnCut, SumCurrentTLMColumn sumCurrentTlmColumnCut,
SumCurrentInterestColumn sumCurrentInterestColumnCut) : base(count)
{
_postValues = postValues;
_requestCalculation = requestCalculation;
_calculation = calculation;
_sumColumnOriginal = sumColumnOriginal;
_piColumnOriginal = piColumnOriginal;
this.dateTempColumnCut = dateTempColumnCut;
this.tlmGrColumnCut = tlmGrColumnCut;
this.percentPaymentColumnCut = percentPaymentColumnCut;
this.gpsGrColumnCut = gpsGrColumnCut;
this.npvBonusExpensesColumnCut = npvBonusExpensesColumnCut;
this.agentComissionExpensesColumnCut = agentComissionExpensesColumnCut;
this.negativeCashflowColumnCut = negativeCashflowColumnCut;
this.nsibBruttoGrColumnCut = nsibBruttoGrColumnCut;
this.subsidyExpensesColumnCut = subsidyExpensesColumnCut;
this.extraBonusSumColumnCut = extraBonusSumColumnCut;
this.directorBonusSumColumnCut = directorBonusSumColumnCut;
this.sumCurrentColumnCut = sumCurrentColumnCut;
this.sumCurrentNegativeColumnCut = sumCurrentNegativeColumnCut;
this.sumCurrentTlmColumnCut = sumCurrentTlmColumnCut;
this.sumCurrentInterestColumnCut = sumCurrentInterestColumnCut;
OldValues = new decimal[count];
NewValues = new decimal[count];
}
public void PostCheck()
@ -17,20 +83,57 @@ public class SumRepaymentColumn : BaseColumn<decimal>
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues,
SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn,
public void ComputeValues(SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn,
SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn)
{
for (var i = 7; i < Values.Length; i++)
if (preparedValues.DogDate >= new DateTime(2023, 08, 01)
&& preparedValues.Nmper >= 40
if (_requestCalculation.preparedValues.DogDate >= new DateTime(2023, 08, 01)
&& _requestCalculation.preparedValues.Nmper >= 40
&& i <= 24)
Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] -
sumCurrentTlmColumn.Values[i] * (1 + (decimal)calculation.VatValue);
sumCurrentTlmColumn.Values[i] * (1 + (decimal)_calculation.VatValue);
else
Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] -
sumCurrentTlmColumn.Values[i] * (1 + (decimal)calculation.VatValue) -
sumCurrentInterestColumn.Values[i] * (1 + (decimal)calculation.VatValue) *
(decimal)preparedValues.Repayment;
sumCurrentTlmColumn.Values[i] * (1 + (decimal)_calculation.VatValue) -
sumCurrentInterestColumn.Values[i] * (1 + (decimal)_calculation.VatValue) *
(decimal)_requestCalculation.preparedValues.Repayment;
for (var i = 0; i < Values.Length; i++)
{
OldValues[i] = Values[i];
}
if (_requestCalculation.preparedValues.TypeRepayment == 100_000_000)
{
_calculatePiResult = new _CalculatePI().Calculate(_requestCalculation, _postValues, 7,
dateTempColumnCut,
_sumColumnOriginal,
tlmGrColumnCut, percentPaymentColumnCut, gpsGrColumnCut, npvBonusExpensesColumnCut,
agentComissionExpensesColumnCut, negativeCashflowColumnCut, nsibBruttoGrColumnCut,
subsidyExpensesColumnCut,
extraBonusSumColumnCut, directorBonusSumColumnCut, sumCurrentColumnCut, sumCurrentNegativeColumnCut,
sumCurrentTlmColumnCut, sumCurrentInterestColumnCut);
PI = _calculatePiResult.piColumn.GetValue(0);
var interpolation = new Interpolation(PI);
for (var i = 7; i < Values.Length; i++)
NewValues[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] -
sumCurrentTlmColumn.Values[i] * (1 + (decimal)_calculation.VatValue) -
sumCurrentInterestColumn.Values[i] * (1 + (decimal)_calculation.VatValue) *
(interpolation.Interpolate(i) / 100);
for (var i = 0; i < Values.Length; i++)
{
Values[i] = Math.Min(OldValues[i], NewValues[i]);
}
Values = Values.Select(x => x < 0 ? 0 : x).ToArray();
}
}
}

View File

@ -0,0 +1,50 @@
using System;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v3.Columns;
public class _SumColumnForPI : SumColumn
{
private int Nmper;
private Constants.Calculation _calculation;
private BaseColumn<decimal> _sumColumnOriginal;
private BaseColumn<decimal> _sumCurrentColumn;
private BaseColumn<decimal> _sumCurrentNegativeColumn;
private BaseColumn<decimal> _sumCurrentTlmColumn;
private BaseColumn<decimal> _sumCurrentInterestColumn;
public _SumColumnForPI(int count, BaseColumn<DateTime> dateTempColumn, PreparedValues preparedValues,
PercentPaymentColumn percentPaymentColumn, v1.PostValues postValues, BaseColumn<decimal> nsibBruttoGrColumn,
PreparedPayments preparedPayments, Constants.Calculation calculation, BaseColumn<decimal> sumColumnOriginal,
BaseColumn<decimal> sumCurrentColumn, BaseColumn<decimal> sumCurrentNegativeColumn,
BaseColumn<decimal> sumCurrentTlmColumn, BaseColumn<decimal> sumCurrentInterestColumn) : base(count,
dateTempColumn, preparedValues, percentPaymentColumn, postValues, nsibBruttoGrColumn, preparedPayments)
{
Nmper = count;
_calculation = calculation;
_sumColumnOriginal = sumColumnOriginal;
_sumCurrentColumn = sumCurrentColumn;
_sumCurrentNegativeColumn = sumCurrentNegativeColumn;
_sumCurrentTlmColumn = sumCurrentTlmColumn;
_sumCurrentInterestColumn = sumCurrentInterestColumn;
}
public void ComputeValues()
{
Values[0] = -_postValues.BaseCost - _preparedValues.FuelCardSum;
Values[1] = _preparedValues.FirstPaymentSum;
for (var i = 2; i < Nmper; i++)
Values[i] = _sumColumnOriginal.GetValue(i);
var constants = new Constants.Calculation();
Values[^1] = (_sumCurrentColumn.Values[Nmper - 1] + _sumCurrentNegativeColumn.Values[Nmper - 1] -
_sumCurrentTlmColumn.Values[Nmper - 1] * (1 + (decimal)_calculation.VatValue) -
_sumCurrentInterestColumn.Values[Nmper - 1] * (1 + (decimal)_calculation.VatValue) *
0.63m) / (1 + (decimal)constants.VatValue);
}
}

View File

@ -263,8 +263,13 @@ public static partial class CalculateManager
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
var sumRepaymentColumn =
new SumRepaymentColumn(preparedValues.Nmper + 1, postValues, requestCalculation, constants, sumColumn, piColumn,
dateTempColumn, tlmGrColumn, percentPaymentColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, negativeCashflowColumn, nsibBruttoGrColumn, subsidyExpensesColumn,
extraBonusSumColumn, directorBonusSumColumn, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentTlmColumn, sumCurrentInterestColumn);
sumRepaymentColumn.ComputeValues(sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();

View File

@ -235,11 +235,6 @@ public static partial class CalculateManager
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
@ -298,6 +293,16 @@ public static partial class CalculateManager
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoFinal2Column, cashflowMsfoWithCfColumn);
var sumRepaymentColumn =
new SumRepaymentColumn(preparedValues.Nmper + 1, postValues, requestCalculation, constants, sumColumn, piColumn,
dateTempColumn, tlmGrColumn, percentPaymentColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, negativeCashflowColumn, nsibBruttoGrColumn, subsidyExpensesColumn,
extraBonusSumColumn, directorBonusSumColumn, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentTlmColumn, sumCurrentInterestColumn);
sumRepaymentColumn.ComputeValues(sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();

View File

@ -234,10 +234,6 @@ public static partial class CalculateManager
var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1);
sumCurrentTlmColumn.ComputeValues(tlmGrColumn);
var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1);
sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues, constants);
@ -297,6 +293,16 @@ public static partial class CalculateManager
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoFinal2Column, cashflowMsfoWithCfColumn);
var sumRepaymentColumn =
new SumRepaymentColumn(preparedValues.Nmper + 1, postValues, requestCalculation, constants, sumColumn, piColumn,
dateTempColumn, tlmGrColumn, percentPaymentColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, negativeCashflowColumn, nsibBruttoGrColumn, subsidyExpensesColumn,
extraBonusSumColumn, directorBonusSumColumn, sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentTlmColumn,sumCurrentInterestColumn);
sumRepaymentColumn.ComputeValues(sumCurrentColumn, sumCurrentNegativeColumn,
sumCurrentInterestColumn, sumCurrentTlmColumn);
sumRepaymentColumn.PostCheck();
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();
postValues.ComputePriceUP_Year();

View File

@ -0,0 +1,113 @@
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Calculation.v2.Columns;
using EvoCalculator.Core.Calculation.v3.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Request;
using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2;
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn;
using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn;
using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn;
using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn;
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
using ExtraBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.ExtraBonusSumColumn;
namespace EvoCalculator.Core.Calculation.v3.Managers.Calculation;
public class CalculatePiResult
{
public PIColumnVT1 piColumn { get; set; }
public _SumColumnForPI sumColumnForPI { get; set; }
}
public class _CalculatePI
{
public CalculatePiResult Calculate(RequestCalculation requestCalculation
, PostValues postValues
, int Nmper
, DateTempColumn dateTempColumnCut
, BaseColumn<decimal> sumColumnOriginal
, TLM_GrColumn tlmGrColumnCut
, PercentPaymentColumn percentPaymentColumnCut
, GPS_GrColumn gpsGrColumnCut
, NPVBonusExpensesColumn npvBonusExpensesColumnCut
, AgentComissionExpensesColumn agentComissionExpensesColumnCut
, NegativeCashflowColumn negativeCashflowColumnCut
, NSIBBruttoGrColumn nsibBruttoGrColumnCut
, SubsidyExpensesColumn subsidyExpensesColumnCut
, ExtraBonusSumColumn extraBonusSumColumnCut
, DirectorBonusSumColumn directorBonusSumColumnCut
, SumCurrentColumn sumCurrentColumnCut
, SumCurrentNegativeColumn sumCurrentNegativeColumnCut
, SumCurrentTLMColumn sumCurrentTlmColumnCut
, SumCurrentInterestColumn sumCurrentInterestColumnCut)
{
var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
var constants = new Constants.Calculation();
var sumColumnForPI = new _SumColumnForPI(
Nmper + 1
, dateTempColumnCut
, preparedValues
, percentPaymentColumnCut
, postValues
, nsibBruttoGrColumnCut
, preparedPayments
, constants
, sumColumnOriginal
, sumCurrentColumnCut
, sumCurrentNegativeColumnCut
, sumCurrentTlmColumnCut
, sumCurrentInterestColumnCut
);
sumColumnForPI.ComputeValues();
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(Nmper + 1, dateTempColumnCut, postValues,
preparedValues, percentPaymentColumnCut, sumColumnForPI, negativeCashflowColumnCut, nsibBruttoGrColumnCut,
tlmGrColumnCut, gpsGrColumnCut, npvBonusExpensesColumnCut, agentComissionExpensesColumnCut,
subsidyExpensesColumnCut);
cashflowMsfoColumn.ComputeValues();
var vatColumn = new VATColumn(Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumnForPI, preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT1(Nmper + 1, sumColumnForPI, preparedValues, constants);
sumWithVatColumn.ComputeValues();
var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(Nmper + 1, dateTempColumnCut);
cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumnCut);
var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(Nmper + 1, dateTempColumnCut,
preparedValues, directorBonusSumColumnCut, cashflowMsfoFinalColumn);
cashflowMsfoFinal2Column.ComputeValues();
var sumCreditColumn = new SumCreditColumn(Nmper + 1);
sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn);
var creditColumn = new CreditColumn(Nmper + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(Nmper + 4);
creditPaymentColumn.ComputeValues(preparedValues, sumCreditColumn, creditColumn);
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(Nmper + 4);
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoFinal2Column,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoFinal2Column, cashflowMsfoWithCfColumn);
return new CalculatePiResult
{
piColumn = piColumn,
sumColumnForPI = sumColumnForPI
};
}
}

View File

@ -0,0 +1,58 @@
namespace EvoCalculator.Core.FinanceFormulas;
public class Interpolation
{
private int[] values1 = { 7, 13, 24, 36, 48, 60 };
private int[] percentages1 = { 65, 56, 45, 35, 31, 0 };
private int[] percentages2 = { 45, 37, 32, 26, 11, 0 };
private int[] percentages3 = { 35, 30, 27, 24, 10, 0 };
private int[] values;
private int[] percentages;
public Interpolation(decimal PI)
{
switch (PI)
{
case >= 0.06m:
values = values1;
percentages = percentages1;
break;
case >= 0.03m and < 0.06m:
values = values1;
percentages = percentages2;
break;
default:
values = values1;
percentages = percentages3;
break;
}
}
public decimal Interpolate(decimal targetValue)
{
var lowerValue = values[0];
var lowerPercentage = percentages[0];
var higherValue = values[0];
var higherPercentage = percentages[0];
for (var i = 1; i < values.Length; i++)
{
if (values1[i] <= targetValue)
{
lowerValue = values[i];
lowerPercentage = percentages[i];
}
else
{
higherValue = values[i];
higherPercentage = percentages[i];
break;
}
}
var percentage = lowerPercentage + (higherPercentage - lowerPercentage) * (targetValue - lowerValue) /
(higherValue - lowerValue);
return percentage;
}
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared;
using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables;
using EvoCalculator.Core.PostCalculation.v1;
@ -31,6 +32,7 @@ public class SumRepaymentColumnVT1 : BaseSumRepaymentColumn
.Take(preparedValues.EditPaymentNumber - 2)
.Select(x => x.RepaymentPayment);
var interpolation = new Interpolation((decimal)preparedValues.PI);
var secondPart = GroupColumns.SumToMainGroup(
new SumRules()
@ -39,36 +41,37 @@ public class SumRepaymentColumnVT1 : BaseSumRepaymentColumn
, GroupColumns.Create(nextDateTempColumn.GetValues(1), nextSumCurrentColumn.GetValues(1))
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
nextSumCurrentNegativeColumn.GetValues(1).Select(x => -x).ToArray())
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
nextSumCurrentTlmColumn.GetValues(1)
.Select(x => -x * (1 + (decimal)constants.VatValue)))
, GroupColumns.Create(nextDateTempColumn.GetValues(1), nextSumCurrentTlmColumn.GetValues(1)
.Select(x => -x * (1 + (decimal)constants.VatValue)))
, GroupColumns.Create(nextCashflowMsfoForNiColumn.Dates.Skip(1), nextSumCurrentInterestColumn
.GetValues(1)
.Select(x => -x * (1 + (decimal)constants.VatValue) * (decimal)preparedValues.Repayment))
.Select((x, i) => -x * (1 + (decimal)constants.VatValue)
* (preparedValues.TypeRepayment == 100_000_000
? interpolation.Interpolate(i) / 100
: (decimal)preparedValues.Repayment)))
);
if (preparedValues.DogDate >= new DateTime(2023, 08, 01)
&& nextValues.Nmper >= 40)
{
var secondPartWithoutDiscount = GroupColumns.SumToMainGroup(
new SumRules()
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
ArraySegment<decimal>.Empty)
, GroupColumns.Create(nextDateTempColumn.GetValues(1), nextSumCurrentColumn.GetValues(1))
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
nextSumCurrentNegativeColumn.GetValues(1).Select(x => -x).ToArray())
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
nextSumCurrentTlmColumn.GetValues(1)
if (preparedValues.TypeRepayment != 100_000_000)
if (preparedValues.DogDate >= new DateTime(2023, 08, 01)
&& nextValues.Nmper >= 40)
{
var secondPartWithoutDiscount = GroupColumns.SumToMainGroup(
new SumRules()
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
ArraySegment<decimal>.Empty)
, GroupColumns.Create(nextDateTempColumn.GetValues(1), nextSumCurrentColumn.GetValues(1))
, GroupColumns.Create(nextDateTempColumn.GetValues(1),
nextSumCurrentNegativeColumn.GetValues(1).Select(x => -x).ToArray())
, GroupColumns.Create(nextDateTempColumn.GetValues(1), nextSumCurrentTlmColumn.GetValues(1)
.Select(x => -x * (1 + (decimal)constants.VatValue)))
);
);
// поправочка на то, что у GroupColumns нет "нулевого" значения
const int THRESHOLD = 1;
// поправочка на то, что у GroupColumns нет "нулевого" значения
const int THRESHOLD = 1;
for (var i = 7 - THRESHOLD; i <= 24 - THRESHOLD; i++)
secondPart[i] = secondPartWithoutDiscount[i];
}
for (var i = 7 - THRESHOLD; i <= 24 - THRESHOLD; i++)
secondPart[i] = secondPartWithoutDiscount[i];
}
Values = Array<decimal>.Concat(