merge branch release/dyn-3888_post-floating-rate
This commit is contained in:
parent
4262650411
commit
ff6ae4fe36
@ -8,7 +8,7 @@ using EvoCalculator.Core.Tools.Array;
|
|||||||
|
|
||||||
namespace EvoCalculator.Core.PostCalculation.v1.Columns.Current;
|
namespace EvoCalculator.Core.PostCalculation.v1.Columns.Current;
|
||||||
|
|
||||||
public class SumColumn : BaseColumnWithXIRR
|
public class SumColumn : BaseColumnWithNominal
|
||||||
{
|
{
|
||||||
private BaseColumn<DateTime> _dateTempColumn;
|
private BaseColumn<DateTime> _dateTempColumn;
|
||||||
|
|
||||||
|
|||||||
@ -35,10 +35,10 @@ public class SumColumnVT3 : BaseSumColumn
|
|||||||
else if (i == _preparedValues.EditPaymentNumber)
|
else if (i == _preparedValues.EditPaymentNumber)
|
||||||
{
|
{
|
||||||
if (_preparedValues.ChangeRepayment && _preparedValues.Repayment > 0)
|
if (_preparedValues.ChangeRepayment && _preparedValues.Repayment > 0)
|
||||||
Values[i] = techNextSumRepaymentColumn.GetValue(i) / (decimal) (1 + _constants.VatValue);
|
Values[i] = techNextSumRepaymentColumn.GetValue(i) / (decimal)(1 + _constants.VatValue);
|
||||||
else
|
else
|
||||||
Values[i] = _preparedValues.SumRepayment /
|
Values[i] = Math.Round(_preparedValues.SumRepayment /
|
||||||
(decimal) (1 + _constants.VatValue);
|
(decimal)(1 + _constants.VatValue), 2);
|
||||||
|
|
||||||
if (_preparedValues.LastPaymentFix)
|
if (_preparedValues.LastPaymentFix)
|
||||||
// вычитает последний платеж из того что посчитали выше
|
// вычитает последний платеж из того что посчитали выше
|
||||||
|
|||||||
@ -28,7 +28,7 @@ public class BaseSumWithVATColumn : BaseColumnWithSum
|
|||||||
protected void FillValues()
|
protected void FillValues()
|
||||||
{
|
{
|
||||||
Values[1] = _currentTablePayments[0].SumWithVATPayment +
|
Values[1] = _currentTablePayments[0].SumWithVATPayment +
|
||||||
_preparedValues.SubsidySum * (decimal) (1 + _constants.VatValue);
|
_preparedValues.SubsidySum * (decimal)(1 + _constants.VatValue);
|
||||||
|
|
||||||
for (var i = 2; i < Values.Length; i++)
|
for (var i = 2; i < Values.Length; i++)
|
||||||
if (i < _preparedValues.EditPaymentNumber)
|
if (i < _preparedValues.EditPaymentNumber)
|
||||||
@ -39,6 +39,24 @@ public class BaseSumWithVATColumn : BaseColumnWithSum
|
|||||||
Values[0] = Sum;
|
Values[0] = Sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Приведение копеек под сумму досрочки в графике ДЛ
|
||||||
|
*/
|
||||||
|
public void FixValues()
|
||||||
|
{
|
||||||
|
if (_preparedValues.LastPaymentFix == false)
|
||||||
|
{
|
||||||
|
var difference = _preparedValues.SumRepayment - Values[_preparedValues.EditPaymentNumber];
|
||||||
|
if (difference != 0.0m)
|
||||||
|
{
|
||||||
|
_nextVatColumnVt1.Values[_preparedValues.EditPaymentNumber] += difference;
|
||||||
|
Values[_preparedValues.EditPaymentNumber] =
|
||||||
|
_nextSumColumn.Values[_preparedValues.EditPaymentNumber] +
|
||||||
|
_nextVatColumnVt1.Values[_preparedValues.EditPaymentNumber];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void PostCheck()
|
public void PostCheck()
|
||||||
{
|
{
|
||||||
var checkTools = new CheckTools();
|
var checkTools = new CheckTools();
|
||||||
|
|||||||
@ -0,0 +1,11 @@
|
|||||||
|
using System;
|
||||||
|
using EvoCalculator.Core.Base.Columns;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next;
|
||||||
|
|
||||||
|
public class BaseSumIRRColumn : BaseColumnWithNominal
|
||||||
|
{
|
||||||
|
protected BaseSumIRRColumn(int count, BaseColumn<DateTime> dateTempColumn) : base(count, dateTempColumn)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -10,7 +10,7 @@ using TridentGoalSeek;
|
|||||||
|
|
||||||
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next
|
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next
|
||||||
{
|
{
|
||||||
public class SumIRRColumn : BaseColumnWithXIRR, IGoalSeekAlgorithm
|
public class SumIRRColumnVT1 : BaseSumIRRColumn, IGoalSeekAlgorithm
|
||||||
{
|
{
|
||||||
protected readonly NextValues _nextValues;
|
protected readonly NextValues _nextValues;
|
||||||
protected readonly PreparedValues _preparedValues;
|
protected readonly PreparedValues _preparedValues;
|
||||||
@ -20,7 +20,7 @@ namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next
|
|||||||
protected readonly BaseColumn<DateTime> _currentDateTempColumn;
|
protected readonly BaseColumn<DateTime> _currentDateTempColumn;
|
||||||
protected readonly TableInsuranceRow[] _nextTableInsurance;
|
protected readonly TableInsuranceRow[] _nextTableInsurance;
|
||||||
|
|
||||||
public SumIRRColumn(int count, BaseColumn<DateTime> dateTempColumn, BaseColumn<DateTime> currentDateTempColumn,
|
public SumIRRColumnVT1(int count, BaseColumn<DateTime> dateTempColumn, BaseColumn<DateTime> currentDateTempColumn,
|
||||||
PreparedValues preparedValues,
|
PreparedValues preparedValues,
|
||||||
NextValues nextValues, TablePaymentsRow[] currentTablePayments,
|
NextValues nextValues, TablePaymentsRow[] currentTablePayments,
|
||||||
TableInsuranceRow[] nextTableInsurance, BaseSumColumn sumColumn
|
TableInsuranceRow[] nextTableInsurance, BaseSumColumn sumColumn
|
||||||
@ -0,0 +1,145 @@
|
|||||||
|
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.Current;
|
||||||
|
using EvoCalculator.Core.PostCalculation.v1.Columns.Next;
|
||||||
|
using EvoCalculator.Core.Tools.Array;
|
||||||
|
using TridentGoalSeek;
|
||||||
|
using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next
|
||||||
|
{
|
||||||
|
public class SumIRRColumnVT2 : BaseSumIRRColumn, 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;
|
||||||
|
protected readonly BaseColumnWithNominal _currentSumColumn;
|
||||||
|
|
||||||
|
public SumIRRColumnVT2(int count, BaseColumn<DateTime> dateTempColumn,
|
||||||
|
BaseColumn<DateTime> currentDateTempColumn,
|
||||||
|
PreparedValues preparedValues,
|
||||||
|
NextValues nextValues, TablePaymentsRow[] currentTablePayments,
|
||||||
|
TableInsuranceRow[] nextTableInsurance, BaseSumColumn sumColumn, SumColumn currentSumColumn) : base(count,
|
||||||
|
dateTempColumn)
|
||||||
|
{
|
||||||
|
_dateTempColumn = dateTempColumn;
|
||||||
|
_preparedValues = preparedValues;
|
||||||
|
_nextValues = nextValues;
|
||||||
|
_currentTablePayments = currentTablePayments;
|
||||||
|
_nextTableInsurance = nextTableInsurance;
|
||||||
|
_sumColumn = sumColumn;
|
||||||
|
_currentDateTempColumn = currentDateTempColumn;
|
||||||
|
_currentSumColumn = currentSumColumn;
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
var lastDateTempValue = _dateTempColumn.Values.Last();
|
||||||
|
var lastCurrentDateTempValue = _currentDateTempColumn.Values.Last();
|
||||||
|
var evoKasko = _nextTableInsurance.FirstOrDefault(x => x.TypeRiskInsurance == "EvoKASKO");
|
||||||
|
var evoKaskoSum = 0m;
|
||||||
|
var evoKaskoDate = DateTime.MinValue;
|
||||||
|
|
||||||
|
if (evoKasko != null &&
|
||||||
|
new DateTime(lastDateTempValue.Year, lastDateTempValue.Month, 1) >
|
||||||
|
new DateTime(lastCurrentDateTempValue.Year, lastCurrentDateTempValue.Month, 1))
|
||||||
|
{
|
||||||
|
evoKaskoSum = -((evoKasko.CostInsurance + evoKasko.InsuranceBonusLoss) / 12) *
|
||||||
|
((lastDateTempValue.Year - lastCurrentDateTempValue.Year) * 12 +
|
||||||
|
lastDateTempValue.Month - lastCurrentDateTempValue.Month);
|
||||||
|
Values = Values.Append(evoKaskoSum).ToArray();
|
||||||
|
evoKaskoDate = _currentDateTempColumn.Values.Last().AddDays(1);
|
||||||
|
Dates = Dates.Append(evoKaskoDate).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var xnpvValues = Array<decimal>.Concat(
|
||||||
|
new[] { 0m, },
|
||||||
|
_sumColumn.GetValues(_preparedValues.EditPaymentNumber),
|
||||||
|
costInsurances,
|
||||||
|
new[] { evoKaskoSum }
|
||||||
|
);
|
||||||
|
|
||||||
|
var xnpvDates = Array<DateTime>.Concat(
|
||||||
|
new[] { _dateTempColumn.GetValue(_preparedValues.EditPaymentNumber - 1) },
|
||||||
|
_dateTempColumn.GetValues(_preparedValues.EditPaymentNumber),
|
||||||
|
dateStartPeriodInsurances,
|
||||||
|
new[] { evoKaskoDate }
|
||||||
|
);
|
||||||
|
var xnpvColumn =
|
||||||
|
new BaseColumnWithXNPV(0, new DateTempColumn(0) { Values = xnpvDates }, _currentSumColumn.IRR)
|
||||||
|
{
|
||||||
|
Values = xnpvValues
|
||||||
|
};
|
||||||
|
|
||||||
|
Values = Array<decimal>.Concat(
|
||||||
|
new[] { -xnpvColumn.XNPV },
|
||||||
|
_sumColumn.Values.Skip(_preparedValues.EditPaymentNumber),
|
||||||
|
costInsurances,
|
||||||
|
new[] { evoKaskoSum }
|
||||||
|
);
|
||||||
|
|
||||||
|
Dates = xnpvDates;
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -83,7 +83,7 @@ public static partial class CalculateManager
|
|||||||
var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
|
var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
|
||||||
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
|
|
||||||
var techSumIRRColumn = new SumIRRColumn(0, techNextDateTempColumn, currentDateTempColumn, preparedValues,
|
var techSumIRRColumn = new SumIRRColumnVT1(0, techNextDateTempColumn, currentDateTempColumn, preparedValues,
|
||||||
nextValues,
|
nextValues,
|
||||||
currentTablePayments,
|
currentTablePayments,
|
||||||
nextTableInsurance, techNextSumColumn);
|
nextTableInsurance, techNextSumColumn);
|
||||||
|
|||||||
@ -85,7 +85,7 @@ public static partial class CalculateManager
|
|||||||
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
||||||
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
|
|
||||||
var sumIRRColumn = new SumIRRColumn(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
var sumIRRColumn = new SumIRRColumnVT1(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
||||||
currentTablePayments,
|
currentTablePayments,
|
||||||
nextTableInsurance, nextSumColumn);
|
nextTableInsurance, nextSumColumn);
|
||||||
sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
||||||
|
|||||||
@ -85,7 +85,7 @@ public static partial class CalculateManager
|
|||||||
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
||||||
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
|
|
||||||
var sumIRRColumn = new SumIRRColumn(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
var sumIRRColumn = new SumIRRColumnVT1(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
||||||
currentTablePayments,
|
currentTablePayments,
|
||||||
nextTableInsurance, nextSumColumn);
|
nextTableInsurance, nextSumColumn);
|
||||||
sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
sumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
||||||
|
|||||||
@ -0,0 +1,263 @@
|
|||||||
|
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 SumRepaymentColumnVT1 = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumRepaymentColumnVT1;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.PostCalculation.v2.Managers;
|
||||||
|
|
||||||
|
public static partial class CalculateManager
|
||||||
|
{
|
||||||
|
public static ManagerResult CalculateWithChangeIRR(RequestCalculation requestCalculation)
|
||||||
|
{
|
||||||
|
new Validation().ValidateRequest(requestCalculation);
|
||||||
|
var constants = new Constants.Calculation();
|
||||||
|
var preparedValues = requestCalculation.PreparedValues;
|
||||||
|
|
||||||
|
var currentTablePayments = requestCalculation.TablePayments.Current;
|
||||||
|
var nextTablePayments = requestCalculation.TablePayments.Next;
|
||||||
|
|
||||||
|
var currentTableInsurance = requestCalculation?.TableInsurance?.Current;
|
||||||
|
var nextTableInsurance = requestCalculation?.TableInsurance?.Next;
|
||||||
|
|
||||||
|
var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current;
|
||||||
|
var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CURRENT
|
||||||
|
*/
|
||||||
|
var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1);
|
||||||
|
currentDateColumn.ComputeValues(currentTablePayments);
|
||||||
|
|
||||||
|
var currentDateTempColumn =
|
||||||
|
new DateTempColumn(preparedValues.Nmper.Current + 1);
|
||||||
|
currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn);
|
||||||
|
|
||||||
|
var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn);
|
||||||
|
currentSumColumn.ComputeValues(preparedValues, currentTablePayments, currentTableInsurance);
|
||||||
|
/*
|
||||||
|
* CURRENT
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NEXT
|
||||||
|
*/
|
||||||
|
var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1);
|
||||||
|
nextDateColumn.ComputeValues(preparedValues, currentTablePayments);
|
||||||
|
|
||||||
|
var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn);
|
||||||
|
|
||||||
|
|
||||||
|
TLMDateColumn nextTlmDateColumn = null;
|
||||||
|
TLMCostColumn nextTlmCostColumn = null;
|
||||||
|
TLMGrColumn nextTlmGrColumn = null;
|
||||||
|
|
||||||
|
var tlmData = new Helper().GetTLMData(preparedValues
|
||||||
|
, currentTableTLMTracker, nextTableTLMTracker
|
||||||
|
, nextDateColumn);
|
||||||
|
|
||||||
|
if (tlmData != null)
|
||||||
|
{
|
||||||
|
nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1);
|
||||||
|
nextTlmDateColumn.ComputeValues(tlmData);
|
||||||
|
nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values);
|
||||||
|
nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker);
|
||||||
|
nextTlmCostColumn.PostCheck();
|
||||||
|
nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn);
|
||||||
|
nextTlmGrColumn.PostCheck();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var nextValues = new NextValues(preparedValues);
|
||||||
|
nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn,
|
||||||
|
currentTablePayments);
|
||||||
|
|
||||||
|
|
||||||
|
var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
||||||
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
|
|
||||||
|
var sumIRRColumn = new SumIRRColumnVT2(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
||||||
|
currentTablePayments,
|
||||||
|
nextTableInsurance, nextSumColumn, currentSumColumn);
|
||||||
|
sumIRRColumn.ComputeValues((decimal)currentSumColumn.Nominal + preparedValues.IRRDelta);
|
||||||
|
nextSumColumn.PostCheck();
|
||||||
|
nextSumColumn.RoundValues();
|
||||||
|
|
||||||
|
var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
|
||||||
|
currentTablePayments, nextSumColumn);
|
||||||
|
var nsibRequiredValue = currentTablePayments
|
||||||
|
.Where((x, i) => i >= preparedValues.EditPaymentNumber - 1)
|
||||||
|
.Sum(x => x.NSIBBruttoPayment);
|
||||||
|
nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue);
|
||||||
|
|
||||||
|
var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextSubsidyExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
nextValues.ComputeAcquisitionExpenses(nextTableInsurance);
|
||||||
|
|
||||||
|
|
||||||
|
var nextCashflowMSFOColumn = new CashflowMSFOColumn();
|
||||||
|
nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn,
|
||||||
|
nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn,
|
||||||
|
nextTlmDateColumn, currentDateTempColumn);
|
||||||
|
|
||||||
|
var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
|
||||||
|
nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants);
|
||||||
|
|
||||||
|
var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
|
||||||
|
nextSumColumn, currentTablePayments, nextVATColumn, constants);
|
||||||
|
nextSumWithVATColumn.ComputeValues();
|
||||||
|
nextVATColumn.PostCheck();
|
||||||
|
nextSumWithVATColumn.PostCheck();
|
||||||
|
|
||||||
|
var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn();
|
||||||
|
nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn,
|
||||||
|
nextCashflowMSFOColumn);
|
||||||
|
nextCashflowMSFOColumn.PostCheck();
|
||||||
|
|
||||||
|
var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length);
|
||||||
|
nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn);
|
||||||
|
|
||||||
|
var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length);
|
||||||
|
nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn);
|
||||||
|
|
||||||
|
var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
|
||||||
|
nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn);
|
||||||
|
nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates);
|
||||||
|
|
||||||
|
var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn);
|
||||||
|
|
||||||
|
var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance, currentDateTempColumn);
|
||||||
|
|
||||||
|
var nextSumCurrentInterestColumn =
|
||||||
|
new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length);
|
||||||
|
nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn);
|
||||||
|
|
||||||
|
var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1);
|
||||||
|
nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn);
|
||||||
|
|
||||||
|
nextValues.Nmper = preparedValues.Nmper.Next;
|
||||||
|
|
||||||
|
var nextSumRepaymentColumn = new SumRepaymentColumnVT1();
|
||||||
|
nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn,
|
||||||
|
nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn,
|
||||||
|
nextDateTempColumn, nextCashflowMSFOForNIColumn, constants, nextValues);
|
||||||
|
nextSumRepaymentColumn.PostCheck();
|
||||||
|
|
||||||
|
var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn();
|
||||||
|
nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues);
|
||||||
|
|
||||||
|
var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column();
|
||||||
|
nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn,
|
||||||
|
preparedValues);
|
||||||
|
|
||||||
|
var nextSumCreditColumn = new SumCreditColumnVT1(preparedValues.LoanRatePeriod + 2);
|
||||||
|
nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn);
|
||||||
|
|
||||||
|
var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
|
nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn);
|
||||||
|
|
||||||
|
var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2);
|
||||||
|
nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn);
|
||||||
|
|
||||||
|
var nextCreditVATColumn = new CreditVATColumn(12 + 4);
|
||||||
|
nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn);
|
||||||
|
|
||||||
|
|
||||||
|
var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1);
|
||||||
|
nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
|
||||||
|
|
||||||
|
var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1);
|
||||||
|
nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues);
|
||||||
|
|
||||||
|
var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1);
|
||||||
|
nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn);
|
||||||
|
|
||||||
|
var nextCreditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
|
nextCreditPaymentColumn.ComputeValues(preparedValues, nextSumCreditColumn, nextCreditColumn);
|
||||||
|
|
||||||
|
var nextVATRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
|
||||||
|
nextVATRecoverableColumn.ComputeValues(nextVATColumn);
|
||||||
|
|
||||||
|
nextValues.ComputeAcquisitionExpensesWithVAT(nextTableInsurance);
|
||||||
|
|
||||||
|
var nextCashflowMSFOWithCFColumn = new CashflowMSFOWithCFColumn(0, preparedValues, nextCashflowMSFOFinal2Column,
|
||||||
|
nextCreditPaymentColumn, nextValues, nextSumCreditColumn, nextVATRecoverableColumn, nextDateTempColumn);
|
||||||
|
nextCashflowMSFOWithCFColumn.ComputeValues();
|
||||||
|
|
||||||
|
var nextPiColumn = new PIColumn(61, nextCashflowMSFOFinal2Column, nextCashflowMSFOWithCFColumn, preparedValues);
|
||||||
|
nextPiColumn.ComputeValues();
|
||||||
|
|
||||||
|
|
||||||
|
nextValues.ComputeNiAtInception(currentTablePayments);
|
||||||
|
nextValues.ComputeNiAtInceptionMSFO();
|
||||||
|
/*
|
||||||
|
* NEXT
|
||||||
|
*/
|
||||||
|
|
||||||
|
var postValues = new v2.PostValues(preparedValues);
|
||||||
|
postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn);
|
||||||
|
postValues.ComputeContractEconomyWithVAT(nextCreditVATColumn);
|
||||||
|
|
||||||
|
|
||||||
|
return new ManagerResult
|
||||||
|
{
|
||||||
|
PostValues = postValues,
|
||||||
|
NextValues = nextValues,
|
||||||
|
PreparedValues = preparedValues,
|
||||||
|
Columns = new
|
||||||
|
{
|
||||||
|
currentDateColumn,
|
||||||
|
currentDateTemp = currentDateTempColumn,
|
||||||
|
currentSumColumn,
|
||||||
|
|
||||||
|
nextDateColumn,
|
||||||
|
nextDateTempColumn,
|
||||||
|
nextTlmDateColumn,
|
||||||
|
nextTlmCostColumn,
|
||||||
|
nextTlmGrColumn,
|
||||||
|
nextSumColumn,
|
||||||
|
sumIRRColumn,
|
||||||
|
nextNSIBBruttoGrColumn,
|
||||||
|
nextSubsidyExpensesColumn,
|
||||||
|
nextCashflowMSFOColumn,
|
||||||
|
nextVATColumn,
|
||||||
|
nextSumWithVATColumn,
|
||||||
|
nextCashflowMSFOForNIColumn,
|
||||||
|
nextIRRGrColumn,
|
||||||
|
nextNIColumn,
|
||||||
|
nextInterestColumn,
|
||||||
|
nextSumCurrentColumn,
|
||||||
|
nextSumCurrentNegativeColumn,
|
||||||
|
nextSumCurrentInterestColumn,
|
||||||
|
nextSumCurrentTLMColumn,
|
||||||
|
nextSumRepaymentColumn,
|
||||||
|
nextCashflowMSFOFinalColumn,
|
||||||
|
nextCashflowMSFOFinal2Column,
|
||||||
|
nextSumCreditColumn,
|
||||||
|
nextCreditColumn,
|
||||||
|
nextSumVATCreditColumn,
|
||||||
|
nextCreditVATColumn,
|
||||||
|
nextNSIBExpensesColumn,
|
||||||
|
nextCashflowNSIBColumn,
|
||||||
|
nextRevenueColumn,
|
||||||
|
nextCreditPaymentColumn,
|
||||||
|
nextVATRecoverableColumn,
|
||||||
|
nextCashflowMSFOWithCFColumn,
|
||||||
|
nextPiColumn,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -193,6 +193,7 @@ public static partial class CalculateManager
|
|||||||
var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
|
var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues,
|
||||||
nextSumColumn, currentTablePayments, nextVATColumn, constants);
|
nextSumColumn, currentTablePayments, nextVATColumn, constants);
|
||||||
nextSumWithVATColumn.ComputeValues();
|
nextSumWithVATColumn.ComputeValues();
|
||||||
|
nextSumWithVATColumn.FixValues();
|
||||||
nextVATColumn.PostCheck();
|
nextVATColumn.PostCheck();
|
||||||
nextSumWithVATColumn.PostCheck();
|
nextSumWithVATColumn.PostCheck();
|
||||||
|
|
||||||
|
|||||||
@ -81,9 +81,15 @@ public static partial class CalculateManager
|
|||||||
currentTablePayments);
|
currentTablePayments);
|
||||||
|
|
||||||
|
|
||||||
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
|
var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, techNextDateTempColumn,
|
||||||
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
|
|
||||||
|
var techSumIRRColumn = new SumIRRColumnVT1(0, techNextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
||||||
|
currentTablePayments,
|
||||||
|
nextTableInsurance, techNextSumColumn);
|
||||||
|
techSumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
||||||
|
techNextSumColumn.PostCheck();
|
||||||
|
techNextSumColumn.RoundValues();
|
||||||
|
|
||||||
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
|
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
|
||||||
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
|
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
|
||||||
@ -269,6 +275,7 @@ public static partial class CalculateManager
|
|||||||
techNextTlmCostColumn,
|
techNextTlmCostColumn,
|
||||||
techNextTlmGrColumn,
|
techNextTlmGrColumn,
|
||||||
techNextSumColumn,
|
techNextSumColumn,
|
||||||
|
techSumIRRColumn,
|
||||||
techNextVATColumn,
|
techNextVATColumn,
|
||||||
techNextSumWithVATColumn,
|
techNextSumWithVATColumn,
|
||||||
|
|
||||||
|
|||||||
@ -82,9 +82,15 @@ public static partial class CalculateManager
|
|||||||
currentTablePayments);
|
currentTablePayments);
|
||||||
|
|
||||||
|
|
||||||
var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn,
|
||||||
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
preparedValues, nextValues, currentTablePayments, nextTablePayments);
|
||||||
techNextSumColumn.ComputeValues((decimal)currentSumColumn.IRR);
|
|
||||||
|
var techSumIRRColumn = new SumIRRColumnVT1(0, nextDateTempColumn, currentDateColumn, preparedValues, nextValues,
|
||||||
|
currentTablePayments,
|
||||||
|
nextTableInsurance, techNextSumColumn);
|
||||||
|
techSumIRRColumn.ComputeValues((decimal)currentSumColumn.IRR + preparedValues.IRRDelta);
|
||||||
|
techNextSumColumn.PostCheck();
|
||||||
|
techNextSumColumn.RoundValues();
|
||||||
|
|
||||||
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
|
var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1);
|
||||||
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
|
techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants);
|
||||||
@ -234,6 +240,7 @@ public static partial class CalculateManager
|
|||||||
nextTlmCostColumn,
|
nextTlmCostColumn,
|
||||||
nextTlmGrColumn,
|
nextTlmGrColumn,
|
||||||
techNextSumColumn,
|
techNextSumColumn,
|
||||||
|
techSumIRRColumn,
|
||||||
techNextVATColumn,
|
techNextVATColumn,
|
||||||
techNextSumWithVATColumn,
|
techNextSumWithVATColumn,
|
||||||
nextSumColumn,
|
nextSumColumn,
|
||||||
|
|||||||
@ -23,6 +23,7 @@ public class PostCalculationController : Controller
|
|||||||
100000006 => CalculateManager.CalculateByIRRAndSum(requestCalculation),
|
100000006 => CalculateManager.CalculateByIRRAndSum(requestCalculation),
|
||||||
100000007 => CalculateManager.Suspension(requestCalculation),
|
100000007 => CalculateManager.Suspension(requestCalculation),
|
||||||
100000008 => CalculateManager.ChangingLastPayment(requestCalculation),
|
100000008 => CalculateManager.ChangingLastPayment(requestCalculation),
|
||||||
|
100000009 => CalculateManager.CalculateWithChangeIRR(requestCalculation),
|
||||||
100000000 when requestCalculation.Flags.DISABLE_CHECKS_RESULTS =>
|
100000000 when requestCalculation.Flags.DISABLE_CHECKS_RESULTS =>
|
||||||
CalculateManager.CalculateByIRRNoLimit(requestCalculation),
|
CalculateManager.CalculateByIRRNoLimit(requestCalculation),
|
||||||
_ => CalculateManager.CalculateDefault(requestCalculation)
|
_ => CalculateManager.CalculateDefault(requestCalculation)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user