merge release/dyn-2846_sale-irr-pi
This commit is contained in:
parent
c244f166d3
commit
247d950145
@ -10,7 +10,7 @@ public class CashflowMSFOFinalColumn : BaseColumnWithNominal
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
|
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
|
||||||
ExtraBonusSumColumn extraBonusSumColumn)
|
BaseColumn<decimal> extraBonusSumColumn)
|
||||||
{
|
{
|
||||||
Values[0] = -preparedValues.AcquisitionExpenses;
|
Values[0] = -preparedValues.AcquisitionExpenses;
|
||||||
Values[1] = cashflowMsfoColumn.Values[1];
|
Values[1] = cashflowMsfoColumn.Values[1];
|
||||||
|
|||||||
@ -9,7 +9,7 @@ public class CashflowNPVFinalColumn : BaseColumn<decimal>
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeValues(PreparedValues preparedValues, ExtraBonusSumColumn extraBonusSumColumn,
|
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> extraBonusSumColumn,
|
||||||
BaseColumn<decimal> cashflowNpvColumn)
|
BaseColumn<decimal> cashflowNpvColumn)
|
||||||
{
|
{
|
||||||
Values[0] = -preparedValues.AcquisitionExpenses;
|
Values[0] = -preparedValues.AcquisitionExpenses;
|
||||||
|
|||||||
@ -6,8 +6,11 @@ namespace EvoCalculator.Core.Calculation.v1.Columns;
|
|||||||
|
|
||||||
public class VATColumn : BaseColumnWithSum
|
public class VATColumn : BaseColumnWithSum
|
||||||
{
|
{
|
||||||
public VATColumn(int count) : base(count)
|
private Constants.Calculation constants;
|
||||||
|
|
||||||
|
public VATColumn(int count, Constants.Calculation constants) : base(count)
|
||||||
{
|
{
|
||||||
|
this.constants = constants;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PostCheck()
|
public void PostCheck()
|
||||||
@ -15,13 +18,13 @@ public class VATColumn : BaseColumnWithSum
|
|||||||
new CheckTools().CheckColumnForLessThanZeroValue(Values);
|
new CheckTools().CheckColumnForLessThanZeroValue(Values);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues)
|
public void ComputeValues(SumColumn sumColumn, PreparedValues preparedValues)
|
||||||
{
|
{
|
||||||
Values[0] = 0;
|
Values[0] = 0;
|
||||||
Values[1] = preparedValues.FirstPaymentNdsAbs > 0
|
Values[1] = preparedValues.FirstPaymentNdsAbs > 0
|
||||||
? preparedValues.FirstPaymentNdsAbs
|
? preparedValues.FirstPaymentNdsAbs
|
||||||
: (decimal) constants.VatValue * sumColumn.Values[1];
|
: (decimal)constants.VatValue * sumColumn.Values[1];
|
||||||
for (var i = 2; i < Values.Length; i++) Values[i] = (decimal) constants.VatValue * sumColumn.Values[i];
|
for (var i = 2; i < Values.Length; i++) Values[i] = (decimal)constants.VatValue * sumColumn.Values[i];
|
||||||
|
|
||||||
Values[0] = Sum;
|
Values[0] = Sum;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public static partial class CalculateManager
|
|||||||
var additionalData = requestCalculation.additionalData;
|
var additionalData = requestCalculation.additionalData;
|
||||||
|
|
||||||
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
||||||
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
|
if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors };
|
||||||
|
|
||||||
var constants = new Constants.Calculation();
|
var constants = new Constants.Calculation();
|
||||||
|
|
||||||
@ -94,8 +94,8 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.ComputeValues();
|
cashflowMsfoColumn.ComputeValues();
|
||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
vatColumn.ComputeValues(sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
||||||
@ -188,7 +188,7 @@ public static partial class CalculateManager
|
|||||||
nsibBruttoGrColumn, nsibExpensesColumn);
|
nsibBruttoGrColumn, nsibExpensesColumn);
|
||||||
|
|
||||||
if (nsibBruttoGrColumn.Sum != 0)
|
if (nsibBruttoGrColumn.Sum != 0)
|
||||||
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
|
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
|
||||||
|
|
||||||
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
||||||
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
||||||
|
|||||||
@ -17,7 +17,7 @@ public static partial class CalculateManager
|
|||||||
|
|
||||||
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
||||||
|
|
||||||
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
|
if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors };
|
||||||
|
|
||||||
var constants = new Constants.Calculation();
|
var constants = new Constants.Calculation();
|
||||||
|
|
||||||
@ -89,8 +89,8 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData);
|
||||||
sumColumn.PostCheck();
|
sumColumn.PostCheck();
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
vatColumn.ComputeValues( sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var sumWithVatColumn =
|
var sumWithVatColumn =
|
||||||
@ -188,7 +188,7 @@ public static partial class CalculateManager
|
|||||||
nsibBruttoGrColumn, nsibExpensesColumn);
|
nsibBruttoGrColumn, nsibExpensesColumn);
|
||||||
|
|
||||||
if (nsibBruttoGrColumn.Sum != 0)
|
if (nsibBruttoGrColumn.Sum != 0)
|
||||||
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
|
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
|
||||||
|
|
||||||
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
||||||
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public static partial class CalculateManager
|
|||||||
var flags = requestCalculation.Flags;
|
var flags = requestCalculation.Flags;
|
||||||
|
|
||||||
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
||||||
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
|
if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors };
|
||||||
|
|
||||||
var constants = new Constants.Calculation();
|
var constants = new Constants.Calculation();
|
||||||
|
|
||||||
@ -109,8 +109,8 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.ComputeValues();
|
cashflowMsfoColumn.ComputeValues();
|
||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
vatColumn.ComputeValues(sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
||||||
@ -203,7 +203,7 @@ public static partial class CalculateManager
|
|||||||
nsibBruttoGrColumn, nsibExpensesColumn);
|
nsibBruttoGrColumn, nsibExpensesColumn);
|
||||||
|
|
||||||
if (nsibBruttoGrColumn.Sum != 0)
|
if (nsibBruttoGrColumn.Sum != 0)
|
||||||
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
|
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
|
||||||
|
|
||||||
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
||||||
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public static partial class CalculateManager
|
|||||||
var flags = requestCalculation.Flags;
|
var flags = requestCalculation.Flags;
|
||||||
|
|
||||||
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
||||||
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
|
if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors };
|
||||||
|
|
||||||
var constants = new Constants.Calculation();
|
var constants = new Constants.Calculation();
|
||||||
|
|
||||||
@ -103,8 +103,8 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData);
|
||||||
sumColumn.PostCheck(flags);
|
sumColumn.PostCheck(flags);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
vatColumn.ComputeValues(sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var sumWithVatColumn =
|
var sumWithVatColumn =
|
||||||
@ -202,7 +202,7 @@ public static partial class CalculateManager
|
|||||||
nsibBruttoGrColumn, nsibExpensesColumn);
|
nsibBruttoGrColumn, nsibExpensesColumn);
|
||||||
|
|
||||||
if (nsibBruttoGrColumn.Sum != 0)
|
if (nsibBruttoGrColumn.Sum != 0)
|
||||||
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
|
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
|
||||||
|
|
||||||
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
||||||
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
||||||
|
|||||||
@ -0,0 +1,28 @@
|
|||||||
|
using System;
|
||||||
|
using EvoCalculator.Core.Base.Columns;
|
||||||
|
using EvoCalculator.Core.Calculation.v2.Columns;
|
||||||
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.Calculation.v3.Columns;
|
||||||
|
|
||||||
|
public class ExtraBonusSumColumn : BaseColumnWithSum
|
||||||
|
{
|
||||||
|
public ExtraBonusSumColumn(int count) : base(count)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
|
||||||
|
v3.PostValues postValues, Constants.Calculation constants)
|
||||||
|
{
|
||||||
|
Values[2] = cashflowMsfoColumn.Nominal >= postValues.PlanIRRMSFO && preparedValues.BonusCoefficient == 1.0
|
||||||
|
? -1 * postValues.BonusBase *
|
||||||
|
(decimal) (cashflowMsfoColumn.Nominal / postValues.PlanIRRMSFO - 1) *
|
||||||
|
(decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) *
|
||||||
|
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate
|
||||||
|
: 0;
|
||||||
|
if (Math.Abs(Values[2]) < constants.MinBonus)
|
||||||
|
Values[2] = 0;
|
||||||
|
|
||||||
|
Values[0] = Sum;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,23 +0,0 @@
|
|||||||
using System.Linq;
|
|
||||||
using EvoCalculator.Core.Base.Columns;
|
|
||||||
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
|
||||||
|
|
||||||
namespace EvoCalculator.Core.Calculation.v3.Columns;
|
|
||||||
|
|
||||||
public class PIColumn : BaseColumnWithNPV
|
|
||||||
{
|
|
||||||
public PIColumn(int count) : base(count)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> cashflowMSFOWithCFColumn,
|
|
||||||
BaseColumn<decimal> cashflowMSFOColumn)
|
|
||||||
{
|
|
||||||
for (var i = 1; i < Values.Length; i++)
|
|
||||||
{
|
|
||||||
Values[i] = NPV(cashflowMSFOWithCFColumn.Values.Skip(1).Take(i), preparedValues.LoanRate);
|
|
||||||
}
|
|
||||||
|
|
||||||
Values[0] = -Values[^1] / (cashflowMSFOColumn.GetValue(0) + cashflowMSFOColumn.GetValue(1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,27 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using EvoCalculator.Core.Base.Columns;
|
||||||
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.Calculation.v3.Columns;
|
||||||
|
|
||||||
|
public class BasePIColumn : BaseColumnWithNPV
|
||||||
|
{
|
||||||
|
protected readonly PreparedValues _preparedValues;
|
||||||
|
|
||||||
|
public BasePIColumn(int count, PreparedValues preparedValues) :
|
||||||
|
base(count)
|
||||||
|
{
|
||||||
|
_preparedValues = preparedValues;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void FillValues(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> cashflowMSFOWithCFColumn)
|
||||||
|
{
|
||||||
|
for (var i = 1; i < Values.Length; i++)
|
||||||
|
{
|
||||||
|
Values[i] = NPV(cashflowMSFOWithCFColumn.Values.Skip(1).Take(i), _preparedValues.LoanRate);
|
||||||
|
}
|
||||||
|
|
||||||
|
Values[0] = -Values[^1] / (cashflowMSFOColumn.GetValue(0) +
|
||||||
|
cashflowMSFOColumn.GetValue(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using EvoCalculator.Core.Base.Columns;
|
||||||
|
using EvoCalculator.Core.Calculation.v2.Columns;
|
||||||
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.Calculation.v3.Columns;
|
||||||
|
|
||||||
|
public class PIColumnVT1 : BasePIColumn
|
||||||
|
{
|
||||||
|
public PIColumnVT1(int count, PreparedValues preparedValues) :
|
||||||
|
base(count, preparedValues)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ComputeValues(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> cashflowMSFOWithCFColumn)
|
||||||
|
{
|
||||||
|
FillValues(cashflowMSFOColumn, cashflowMSFOWithCFColumn);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,86 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using EvoCalculator.Core.Base.Columns;
|
||||||
|
using EvoCalculator.Core.Base.Interfaces.Columns;
|
||||||
|
using EvoCalculator.Core.Calculation.v1.Columns;
|
||||||
|
using EvoCalculator.Core.Calculation.v2.Columns;
|
||||||
|
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||||
|
using TridentGoalSeek;
|
||||||
|
using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2;
|
||||||
|
|
||||||
|
namespace EvoCalculator.Core.Calculation.v3.Columns;
|
||||||
|
|
||||||
|
public class PIColumnVT2 : BasePIColumn, IColumnWithGoalSeek
|
||||||
|
{
|
||||||
|
private readonly PercentPaymentColumn _percentPaymentColumn;
|
||||||
|
protected SumColumn _sumColumn;
|
||||||
|
private CashflowMSFOColumnVT2 _cashflowMsfoColumn;
|
||||||
|
private readonly PostValues _postValues;
|
||||||
|
private SumCreditColumn _sumCreditColumn;
|
||||||
|
private CreditPaymentColumn _creditPaymentColumn;
|
||||||
|
private VATRecoverableColumn _vatRecoverableColumn;
|
||||||
|
private CashflowMSFOWithCFColumn _cashflowMSFOWithCFColumn;
|
||||||
|
private VATColumn _vatColumn;
|
||||||
|
private SumWithVATColumnVT1 _sumWithVatColumn;
|
||||||
|
private CreditColumn _creditColumn;
|
||||||
|
|
||||||
|
|
||||||
|
public PIColumnVT2(int count, PreparedValues preparedValues, CashflowMSFOWithCFColumn cashflowMsfoWithCfColumn,
|
||||||
|
CashflowMSFOColumnVT2 cashflowMsfoColumn, PercentPaymentColumn percentPaymentColumn, PostValues postValues,
|
||||||
|
SumColumn sumColumn, SumCreditColumn sumCreditColumn, CreditPaymentColumn creditPaymentColumn,
|
||||||
|
VATRecoverableColumn vatRecoverableColumn, VATColumn vatColumn, SumWithVATColumnVT1 sumWithVatColumn,
|
||||||
|
CreditColumn creditColumn) : base(
|
||||||
|
count,
|
||||||
|
preparedValues)
|
||||||
|
{
|
||||||
|
_cashflowMSFOWithCFColumn = cashflowMsfoWithCfColumn;
|
||||||
|
_cashflowMsfoColumn = cashflowMsfoColumn;
|
||||||
|
_percentPaymentColumn = percentPaymentColumn;
|
||||||
|
_postValues = postValues;
|
||||||
|
_sumColumn = sumColumn;
|
||||||
|
_sumCreditColumn = sumCreditColumn;
|
||||||
|
_creditPaymentColumn = creditPaymentColumn;
|
||||||
|
_vatRecoverableColumn = vatRecoverableColumn;
|
||||||
|
_vatColumn = vatColumn;
|
||||||
|
_sumWithVatColumn = sumWithVatColumn;
|
||||||
|
_creditColumn = creditColumn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public decimal Calculate(decimal inputVariable)
|
||||||
|
{
|
||||||
|
_sumColumn.ComputeValues(inputVariable);
|
||||||
|
_cashflowMsfoColumn.ComputeValues();
|
||||||
|
_vatColumn.ComputeValues(_sumColumn, _preparedValues);
|
||||||
|
_sumWithVatColumn.ComputeValues();
|
||||||
|
_sumCreditColumn.ComputeValues(_preparedValues, _sumWithVatColumn);
|
||||||
|
_creditColumn.ComputeValues(_preparedValues, _sumCreditColumn);
|
||||||
|
_vatRecoverableColumn.ComputeValues(_vatColumn);
|
||||||
|
_creditPaymentColumn.ComputeValues(_preparedValues, _sumCreditColumn, _creditColumn);
|
||||||
|
|
||||||
|
_cashflowMSFOWithCFColumn.ComputeValues(_preparedValues, _sumCreditColumn, _cashflowMsfoColumn,
|
||||||
|
_creditPaymentColumn, _vatRecoverableColumn);
|
||||||
|
|
||||||
|
FillValues(_cashflowMsfoColumn, _cashflowMSFOWithCFColumn);
|
||||||
|
|
||||||
|
return Convert.ToDecimal(Values.GetValue(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ComputeValues(decimal requiredValue)
|
||||||
|
{
|
||||||
|
var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values
|
||||||
|
.Skip(2)
|
||||||
|
.Take(_percentPaymentColumn.Values.Length - 1)
|
||||||
|
.Where(x => x >= 10).ToArray().Length;
|
||||||
|
|
||||||
|
var goalSeek = new GoalSeek(this);
|
||||||
|
goalSeek.SeekResult(requiredValue,
|
||||||
|
new GoalSeekOptions(
|
||||||
|
startingStabPoint:
|
||||||
|
(_postValues.BaseCost - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
|
||||||
|
, maximumAttempts: 1000
|
||||||
|
, initialTineSpacing: 1000
|
||||||
|
// , trimFinalInputValue: true
|
||||||
|
// , acceptanceToDecimalPlaces: 2
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -24,7 +24,7 @@ public class VATRecoverableColumn : BaseColumnWithSum
|
|||||||
{
|
{
|
||||||
Values[0] = 0;
|
Values[0] = 0;
|
||||||
|
|
||||||
for (var i = 3; i < Values.Length; i += 3)
|
for (var i = 6; i < Values.Length; i += 3)
|
||||||
{
|
{
|
||||||
var vatSum = vatColumn.Values.Skip(1).Take(i).Sum();
|
var vatSum = vatColumn.Values.Skip(1).Take(i).Sum();
|
||||||
var vatRecoverableSum = this.Values.Skip(1).Take(i - 1).Sum();
|
var vatRecoverableSum = this.Values.Skip(1).Take(i - 1).Sum();
|
||||||
|
|||||||
@ -0,0 +1,393 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
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;
|
||||||
|
using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2;
|
||||||
|
using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn;
|
||||||
|
using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v3.Columns.DirectorBonusSumColumn;
|
||||||
|
using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn;
|
||||||
|
using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn;
|
||||||
|
using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn;
|
||||||
|
using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn;
|
||||||
|
using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn;
|
||||||
|
using SumColumn = EvoCalculator.Core.Calculation.v3.Columns.SumColumn;
|
||||||
|
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
|
||||||
|
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
|
||||||
|
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 static partial class CalculateManager
|
||||||
|
{
|
||||||
|
public static ManagerResult CalculateByPI(RequestCalculation requestCalculation)
|
||||||
|
{
|
||||||
|
var preparedValues = requestCalculation.preparedValues;
|
||||||
|
var preparedPayments = requestCalculation.preparedPayments;
|
||||||
|
var additionalData = requestCalculation.additionalData;
|
||||||
|
var flags = requestCalculation.Flags;
|
||||||
|
|
||||||
|
var validationErrors = new Validation().ValidateRequest(requestCalculation);
|
||||||
|
if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors };
|
||||||
|
|
||||||
|
var constants = new Constants.Calculation();
|
||||||
|
|
||||||
|
var postValues = new PostValues(preparedValues);
|
||||||
|
|
||||||
|
|
||||||
|
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
|
||||||
|
? preparedValues.Nmper + 1
|
||||||
|
: preparedValues.NmperDeprecation + 2;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
|
||||||
|
dateColumn.ComputeValues(preparedValues, constants);
|
||||||
|
|
||||||
|
var dateTempColumn = new DateTempColumn(maxColumnLength);
|
||||||
|
dateTempColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
|
||||||
|
percentPaymentColumn.ComputeValues(preparedPayments);
|
||||||
|
|
||||||
|
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
|
||||||
|
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
|
||||||
|
kaskoNmperGrColumn.PostCheck();
|
||||||
|
|
||||||
|
var finGAPNmperGrColumn = new FinGAPNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
|
||||||
|
finGAPNmperGrColumn.ComputeValues();
|
||||||
|
finGAPNmperGrColumn.PostCheck();
|
||||||
|
|
||||||
|
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
|
||||||
|
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
|
||||||
|
tlmGrColumn.PostCheck();
|
||||||
|
|
||||||
|
|
||||||
|
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
|
||||||
|
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
|
||||||
|
gpsGrColumn.PostCheck();
|
||||||
|
|
||||||
|
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
|
||||||
|
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
|
||||||
|
|
||||||
|
postValues.ComputeBonusBase(kaskoBonusGrSumColumn);
|
||||||
|
|
||||||
|
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
|
||||||
|
|
||||||
|
postValues.ComputeBaseCost(kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
|
||||||
|
|
||||||
|
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var evoKaskoNmperGrColumn = new EvoKaskoNmperGrColumn(preparedValues.Nmper + 1, preparedValues);
|
||||||
|
evoKaskoNmperGrColumn.ComputeValues();
|
||||||
|
|
||||||
|
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
||||||
|
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn, finGAPNmperGrColumn, evoKaskoNmperGrColumn);
|
||||||
|
|
||||||
|
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
|
||||||
|
nsibBruttoGrColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var sumColumn = new SumColumn(
|
||||||
|
preparedValues.Nmper + 1
|
||||||
|
, dateTempColumn
|
||||||
|
, preparedValues
|
||||||
|
, percentPaymentColumn
|
||||||
|
, postValues
|
||||||
|
, nsibBruttoGrColumn
|
||||||
|
, preparedPayments
|
||||||
|
);
|
||||||
|
|
||||||
|
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
subsidyExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
|
||||||
|
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
|
||||||
|
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
|
||||||
|
subsidyExpensesColumn);
|
||||||
|
|
||||||
|
|
||||||
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
|
|
||||||
|
|
||||||
|
var sumWithVatColumn =
|
||||||
|
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
|
||||||
|
|
||||||
|
var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
|
||||||
|
|
||||||
|
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
|
|
||||||
|
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
|
||||||
|
|
||||||
|
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
|
|
||||||
|
var cashflowMsfoWithCfColumn = new CashflowMSFOWithCFColumn(
|
||||||
|
new[] { preparedValues.LoanRatePeriod + 4, preparedValues.Nmper + 1 }
|
||||||
|
.Max());
|
||||||
|
|
||||||
|
|
||||||
|
var piColumn = new PIColumnVT2(61, preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn,
|
||||||
|
percentPaymentColumn, postValues, sumColumn, sumCreditColumn, creditPaymentColumn,
|
||||||
|
vatRecoverableColumn, vatColumn, sumWithVatColumn, creditColumn);
|
||||||
|
piColumn.ComputeValues((decimal)preparedValues.NpvniExpected);
|
||||||
|
sumColumn.PostCheck(flags);
|
||||||
|
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
|
||||||
|
vatColumn.PostCheck();
|
||||||
|
sumWithVatColumn.PostCheck();
|
||||||
|
creditColumn.PostCheck(preparedValues, sumColumn);
|
||||||
|
|
||||||
|
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
||||||
|
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
|
||||||
|
|
||||||
|
var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1);
|
||||||
|
acceptKaskoColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1);
|
||||||
|
acceptOsagoColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1);
|
||||||
|
acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn);
|
||||||
|
|
||||||
|
var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
|
||||||
|
deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn);
|
||||||
|
|
||||||
|
var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength);
|
||||||
|
deprecationLdColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var deprecationColumn = new DeprecationColumn(maxColumnLength);
|
||||||
|
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
|
||||||
|
|
||||||
|
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
ratExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
transExprensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
nsibExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments);
|
||||||
|
|
||||||
|
var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments);
|
||||||
|
|
||||||
|
var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
registrExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants);
|
||||||
|
|
||||||
|
var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
comissionBonusExpensesColumn.ComputeValues(preparedValues);
|
||||||
|
|
||||||
|
var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1);
|
||||||
|
expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn,
|
||||||
|
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
|
||||||
|
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn,
|
||||||
|
subsidyExpensesColumn);
|
||||||
|
|
||||||
|
var taxColumn = new TaxColumn(maxColumnLength);
|
||||||
|
taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
|
||||||
|
ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn,
|
||||||
|
npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn,
|
||||||
|
tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn);
|
||||||
|
|
||||||
|
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
|
||||||
|
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn);
|
||||||
|
|
||||||
|
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
|
||||||
|
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
|
||||||
|
nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn);
|
||||||
|
|
||||||
|
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
|
||||||
|
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
|
||||||
|
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
|
||||||
|
ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn,
|
||||||
|
subsidyExpensesColumn);
|
||||||
|
|
||||||
|
var npvWeightColumn = new NPVWeightColumn(maxColumnLength);
|
||||||
|
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
|
||||||
|
|
||||||
|
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn);
|
||||||
|
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn);
|
||||||
|
|
||||||
|
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1);
|
||||||
|
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn);
|
||||||
|
|
||||||
|
var niColumn = new NIColumn(preparedValues.Nmper + 1);
|
||||||
|
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn);
|
||||||
|
|
||||||
|
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
|
||||||
|
interestColumn.ComputeValues(irrGrColumn, niColumn);
|
||||||
|
interestColumn.PostCheck(sumColumn);
|
||||||
|
|
||||||
|
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
|
||||||
|
nsibBruttoGrColumn, nsibExpensesColumn);
|
||||||
|
|
||||||
|
if (nsibBruttoGrColumn.Sum != 0)
|
||||||
|
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
|
||||||
|
|
||||||
|
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
|
||||||
|
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);
|
||||||
|
|
||||||
|
var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1);
|
||||||
|
sumCurrentColumn.ComputeValues(sumWithVatColumn);
|
||||||
|
|
||||||
|
var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1);
|
||||||
|
sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn);
|
||||||
|
|
||||||
|
var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1);
|
||||||
|
sumCurrentInterestColumn.ComputeValues(interestColumn);
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn);
|
||||||
|
npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn);
|
||||||
|
|
||||||
|
postValues.ComputeDirectorBonus();
|
||||||
|
postValues.ComputeDirectorExtraBonus(cashflowMsfoColumn);
|
||||||
|
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);
|
||||||
|
|
||||||
|
var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn);
|
||||||
|
npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
|
||||||
|
|
||||||
|
var sumVATCreditColumn = new SumVATCreditColumn(12 + 2);
|
||||||
|
sumVATCreditColumn.ComputeValues(preparedValues, vatColumn);
|
||||||
|
|
||||||
|
var creditVATColumn = new CreditVATColumn(12 + 4);
|
||||||
|
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
|
||||||
|
|
||||||
|
postValues.ComputePriceUP(sumColumn);
|
||||||
|
postValues.ComputePriceUP_PR();
|
||||||
|
postValues.ComputePriceUP_Year();
|
||||||
|
postValues.ComputePriceUP_Year_PR();
|
||||||
|
postValues.ComputeNPVNI(npvColumn);
|
||||||
|
postValues.ComputeBonusResult(npvBonusExpensesColumn);
|
||||||
|
postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
|
||||||
|
postValues.ComputeContractEconomyWithVAT(creditVATColumn);
|
||||||
|
|
||||||
|
|
||||||
|
return new ManagerResult
|
||||||
|
{
|
||||||
|
PostValues = postValues,
|
||||||
|
PreparedValues = preparedValues,
|
||||||
|
Columns = new
|
||||||
|
{
|
||||||
|
dateColumn,
|
||||||
|
dateTempColumn,
|
||||||
|
percentPaymentColumn,
|
||||||
|
kaskoNmperGrColumn,
|
||||||
|
finGAPNmperGrColumn,
|
||||||
|
tlmGrColumn,
|
||||||
|
gpsGrColumn,
|
||||||
|
sumColumn,
|
||||||
|
vatColumn,
|
||||||
|
sumWithVatColumn,
|
||||||
|
acceptSumColumn,
|
||||||
|
acceptKaskoColumn,
|
||||||
|
acceptOsagoColumn,
|
||||||
|
acceptInsuranceColumn,
|
||||||
|
deprecationLpColumn,
|
||||||
|
deprecationLdColumn,
|
||||||
|
deprecationColumn,
|
||||||
|
npvBonusExpensesColumn,
|
||||||
|
kaskoBonusGrSumColumn,
|
||||||
|
agentComissionExpensesColumn,
|
||||||
|
ratExpensesColumn,
|
||||||
|
transExprensesColumn,
|
||||||
|
nsibExpensesColumn,
|
||||||
|
tlmExpensesColumn,
|
||||||
|
gpsExpensesColumn,
|
||||||
|
registrExpensesColumn,
|
||||||
|
insuranceBonusExpensesColumn,
|
||||||
|
comissionBonusExpensesColumn,
|
||||||
|
expensesColumn,
|
||||||
|
evoKaskoNmperGrColumn,
|
||||||
|
negativeCashflowColumn,
|
||||||
|
nsibBruttoGrColumn,
|
||||||
|
taxColumn,
|
||||||
|
cashflowColumn,
|
||||||
|
cashflowLeasingColumn,
|
||||||
|
cashflowMsfoColumn,
|
||||||
|
cashflowNpvColumn,
|
||||||
|
npvWeightColumn,
|
||||||
|
npvColumn,
|
||||||
|
irrGrColumn,
|
||||||
|
niColumn,
|
||||||
|
interestColumn,
|
||||||
|
cashflowNsibColumn,
|
||||||
|
revenueColumn,
|
||||||
|
sumCurrentColumn,
|
||||||
|
sumCurrentNegativeColumn,
|
||||||
|
sumCurrentInterestColumn,
|
||||||
|
sumCurrentTlmColumn,
|
||||||
|
sumRepaymentColumn,
|
||||||
|
extraBonusSumColumn,
|
||||||
|
cashflowMsfoFinalColumn,
|
||||||
|
cashflowNpvFinalColumn,
|
||||||
|
npvFinalColumn,
|
||||||
|
directorBonusSumColumn,
|
||||||
|
cashflowMsfoFinal2Column,
|
||||||
|
cashflowNpvFinal2Column,
|
||||||
|
npvFinal2Column,
|
||||||
|
sumCreditColumn,
|
||||||
|
creditColumn,
|
||||||
|
sumVATCreditColumn,
|
||||||
|
creditVATColumn,
|
||||||
|
subsidyExpensesColumn,
|
||||||
|
vatRecoverableColumn,
|
||||||
|
creditPaymentColumn,
|
||||||
|
cashflowMsfoWithCfColumn,
|
||||||
|
piColumn
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return new ManagerResult
|
||||||
|
{
|
||||||
|
Errors = new List<string>
|
||||||
|
{
|
||||||
|
ex.Message
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -21,6 +21,7 @@ using SumColumn = EvoCalculator.Core.Calculation.v3.Columns.SumColumn;
|
|||||||
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
|
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
|
||||||
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
|
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
|
||||||
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
|
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;
|
namespace EvoCalculator.Core.Calculation.v3.Managers.Calculation;
|
||||||
|
|
||||||
@ -122,8 +123,10 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.ComputeValues();
|
cashflowMsfoColumn.ComputeValues();
|
||||||
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
|
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
|
||||||
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
|
vatColumn.ComputeValues(sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
|
||||||
@ -280,7 +283,7 @@ public static partial class CalculateManager
|
|||||||
var creditVATColumn = new CreditVATColumn(12 + 4);
|
var creditVATColumn = new CreditVATColumn(12 + 4);
|
||||||
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
|
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
|
||||||
|
|
||||||
var vatRecoverableColumn = new VATRecoverableColumn(preparedValues.Nmper + 1, preparedValues);
|
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
|
||||||
vatRecoverableColumn.ComputeValues(vatColumn);
|
vatRecoverableColumn.ComputeValues(vatColumn);
|
||||||
|
|
||||||
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
@ -291,9 +294,9 @@ public static partial class CalculateManager
|
|||||||
.Max());
|
.Max());
|
||||||
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
|
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
|
||||||
creditPaymentColumn, vatRecoverableColumn);
|
creditPaymentColumn, vatRecoverableColumn);
|
||||||
|
|
||||||
var piColumn = new PIColumn(61);
|
var piColumn = new PIColumnVT1(61, preparedValues);
|
||||||
piColumn.ComputeValues(preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn);
|
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
|
||||||
|
|
||||||
postValues.ComputePriceUP(sumColumn);
|
postValues.ComputePriceUP(sumColumn);
|
||||||
postValues.ComputePriceUP_PR();
|
postValues.ComputePriceUP_PR();
|
||||||
|
|||||||
@ -21,6 +21,7 @@ using SumColumn = EvoCalculator.Core.Calculation.v3.Columns.SumColumn;
|
|||||||
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
|
using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn;
|
||||||
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
|
using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn;
|
||||||
using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn;
|
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;
|
namespace EvoCalculator.Core.Calculation.v3.Managers.Calculation;
|
||||||
|
|
||||||
@ -116,8 +117,10 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoColumn.PostCheck(additionalData);
|
cashflowMsfoColumn.PostCheck(additionalData);
|
||||||
sumColumn.PostCheck(flags);
|
sumColumn.PostCheck(flags);
|
||||||
|
|
||||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
|
||||||
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
|
|
||||||
|
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
|
||||||
|
vatColumn.ComputeValues(sumColumn, preparedValues);
|
||||||
vatColumn.PostCheck();
|
vatColumn.PostCheck();
|
||||||
|
|
||||||
var sumWithVatColumn =
|
var sumWithVatColumn =
|
||||||
@ -279,7 +282,7 @@ public static partial class CalculateManager
|
|||||||
var creditVATColumn = new CreditVATColumn(12 + 4);
|
var creditVATColumn = new CreditVATColumn(12 + 4);
|
||||||
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
|
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
|
||||||
|
|
||||||
var vatRecoverableColumn = new VATRecoverableColumn(preparedValues.Nmper + 1, preparedValues);
|
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
|
||||||
vatRecoverableColumn.ComputeValues(vatColumn);
|
vatRecoverableColumn.ComputeValues(vatColumn);
|
||||||
|
|
||||||
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
|
||||||
@ -291,8 +294,8 @@ public static partial class CalculateManager
|
|||||||
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
|
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
|
||||||
creditPaymentColumn, vatRecoverableColumn);
|
creditPaymentColumn, vatRecoverableColumn);
|
||||||
|
|
||||||
var piColumn = new PIColumn(61);
|
var piColumn = new PIColumnVT1(61, preparedValues);
|
||||||
piColumn.ComputeValues(preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn);
|
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
|
||||||
|
|
||||||
postValues.ComputePriceUP(sumColumn);
|
postValues.ComputePriceUP(sumColumn);
|
||||||
postValues.ComputePriceUP_PR();
|
postValues.ComputePriceUP_PR();
|
||||||
|
|||||||
@ -11,6 +11,7 @@ public class PostValues : v2.PostValues
|
|||||||
public decimal DirectorExtraBonus;
|
public decimal DirectorExtraBonus;
|
||||||
public decimal RegionalDirectorBonus;
|
public decimal RegionalDirectorBonus;
|
||||||
public decimal RegionalDirectorExtraBonus;
|
public decimal RegionalDirectorExtraBonus;
|
||||||
|
public double PlanIRRMSFO;
|
||||||
private readonly Constants.Calculation _constants;
|
private readonly Constants.Calculation _constants;
|
||||||
|
|
||||||
public PostValues(PreparedValues _preparedValues) : base(_preparedValues)
|
public PostValues(PreparedValues _preparedValues) : base(_preparedValues)
|
||||||
@ -27,7 +28,7 @@ public class PostValues : v2.PostValues
|
|||||||
_preparedValues.Registration + _preparedValues.TrackerCost +
|
_preparedValues.Registration + _preparedValues.TrackerCost +
|
||||||
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
|
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
|
||||||
_preparedValues.InsuranceFinGAPNmper) *
|
_preparedValues.InsuranceFinGAPNmper) *
|
||||||
(decimal) _preparedValues.Leasing0K +
|
(decimal)_preparedValues.Leasing0K +
|
||||||
_preparedValues.NsibBrutto;
|
_preparedValues.NsibBrutto;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,20 +47,20 @@ public class PostValues : v2.PostValues
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DirectorBonus = this.BonusBase * (decimal) _preparedValues.DirectorBonus *
|
DirectorBonus = this.BonusBase * (decimal)_preparedValues.DirectorBonus *
|
||||||
(decimal) _preparedValues.BonusCoefficient *
|
(decimal)_preparedValues.BonusCoefficient *
|
||||||
(decimal) _preparedValues.MarketRate * (decimal) _preparedValues.DistrictRate;
|
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
public void ComputeDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
||||||
{
|
{
|
||||||
if (cashflowMSFOColumn.Nominal >= _preparedValues.IRR_MSFO_Plan && _preparedValues.BonusCoefficient == 1.0)
|
if (cashflowMSFOColumn.Nominal >= this.PlanIRRMSFO && _preparedValues.BonusCoefficient == 1.0)
|
||||||
{
|
{
|
||||||
DirectorExtraBonus = this.BonusBase *
|
DirectorExtraBonus = this.BonusBase *
|
||||||
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 1) *
|
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
|
||||||
(decimal) _preparedValues.DirectorExtraBonus * (decimal) _preparedValues.MarketRate *
|
(decimal)_preparedValues.DirectorExtraBonus * (decimal)_preparedValues.MarketRate *
|
||||||
(decimal) _preparedValues.DistrictRate;
|
(decimal)_preparedValues.DistrictRate;
|
||||||
|
|
||||||
if (DirectorExtraBonus < _constants.MinBonus)
|
if (DirectorExtraBonus < _constants.MinBonus)
|
||||||
DirectorExtraBonus = 0;
|
DirectorExtraBonus = 0;
|
||||||
@ -76,24 +77,31 @@ public class PostValues : v2.PostValues
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RegionalDirectorBonus = this.BonusBase * (decimal) _preparedValues.RegionalDirectorBonus *
|
RegionalDirectorBonus = this.BonusBase * (decimal)_preparedValues.RegionalDirectorBonus *
|
||||||
(decimal) _preparedValues.MarketRate * (decimal) _preparedValues.DistrictRate;
|
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ComputeRegionalDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
public void ComputeRegionalDirectorExtraBonus(BaseColumnWithNominal cashflowMSFOColumn)
|
||||||
{
|
{
|
||||||
if (cashflowMSFOColumn.Nominal >= _preparedValues.IRR_MSFO_Plan && _preparedValues.BonusCoefficient == 1.0)
|
if (cashflowMSFOColumn.Nominal >= this.PlanIRRMSFO && _preparedValues.BonusCoefficient == 1.0)
|
||||||
{
|
{
|
||||||
RegionalDirectorExtraBonus = this.BonusBase *
|
RegionalDirectorExtraBonus = this.BonusBase *
|
||||||
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 1) *
|
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
|
||||||
(decimal) _preparedValues.RegionalDirectorExtraBonus *
|
(decimal)_preparedValues.RegionalDirectorExtraBonus *
|
||||||
(decimal) _preparedValues.MarketRate *
|
(decimal)_preparedValues.MarketRate *
|
||||||
(decimal) _preparedValues.DistrictRate;
|
(decimal)_preparedValues.DistrictRate;
|
||||||
if (RegionalDirectorExtraBonus < _constants.MinBonus)
|
if (RegionalDirectorExtraBonus < _constants.MinBonus)
|
||||||
RegionalDirectorExtraBonus = 0;
|
RegionalDirectorExtraBonus = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
RegionalDirectorExtraBonus = 0;
|
RegionalDirectorExtraBonus = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ComputePlanIRRMSFO(BaseColumnWithNominal cashflowMSFOColumn)
|
||||||
|
{
|
||||||
|
PlanIRRMSFO = _preparedValues.ChangePlanIRR
|
||||||
|
? cashflowMSFOColumn.Nominal * _preparedValues.IRR_MSFO_Plan / _preparedValues.IrrExpected
|
||||||
|
: _preparedValues.IRR_MSFO_Plan;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -149,6 +149,7 @@ public class PreparedValues
|
|||||||
|
|
||||||
public decimal TLMCost { get; set; }
|
public decimal TLMCost { get; set; }
|
||||||
public double IRR_MSFO_Plan { get; set; }
|
public double IRR_MSFO_Plan { get; set; }
|
||||||
|
public bool ChangePlanIRR { get; set; } = false;
|
||||||
public double ExtraBonus { get; set; }
|
public double ExtraBonus { get; set; }
|
||||||
public double DirectorBonus { get; set; }
|
public double DirectorBonus { get; set; }
|
||||||
public decimal DirectorBonusFix { get; set; }
|
public decimal DirectorBonusFix { get; set; }
|
||||||
|
|||||||
@ -18,7 +18,8 @@ public class CalculationController : Controller
|
|||||||
{
|
{
|
||||||
var result = requestCalculation.preparedValues.CalcType switch
|
var result = requestCalculation.preparedValues.CalcType switch
|
||||||
{
|
{
|
||||||
100000001 => CalculateManager.CalculateByTotalExpected(requestCalculation),
|
100_000_001 => CalculateManager.CalculateByTotalExpected(requestCalculation),
|
||||||
|
100_000_099 => CalculateManager.CalculateByPI(requestCalculation),
|
||||||
_ => CalculateManager.CalculateDefault(requestCalculation)
|
_ => CalculateManager.CalculateDefault(requestCalculation)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user