merge branch release/dyn-3987_early-redemption-sums
This commit is contained in:
parent
a2022c3535
commit
ecadf10699
@ -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,
|
||||
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
50
EvoCalculator.Core.Calculation/v3/Columns/_SumColumnForPI.cs
Normal file
50
EvoCalculator.Core.Calculation/v3/Columns/_SumColumnForPI.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
58
EvoCalculator.Core.FinanceFormulas/Interpolation.cs
Normal file
58
EvoCalculator.Core.FinanceFormulas/Interpolation.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -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(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user