merge release/dyn-2846_sale-irr-pi

This commit is contained in:
vchikalkin 2023-05-19 13:13:05 +03:00
parent c244f166d3
commit 247d950145
19 changed files with 622 additions and 73 deletions

View File

@ -10,7 +10,7 @@ public class CashflowMSFOFinalColumn : BaseColumnWithNominal
}
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
ExtraBonusSumColumn extraBonusSumColumn)
BaseColumn<decimal> extraBonusSumColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = cashflowMsfoColumn.Values[1];

View File

@ -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)
{
Values[0] = -preparedValues.AcquisitionExpenses;

View File

@ -6,8 +6,11 @@ namespace EvoCalculator.Core.Calculation.v1.Columns;
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()
@ -15,13 +18,13 @@ public class VATColumn : BaseColumnWithSum
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[1] = preparedValues.FirstPaymentNdsAbs > 0
? preparedValues.FirstPaymentNdsAbs
: (decimal) constants.VatValue * sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++) Values[i] = (decimal) constants.VatValue * sumColumn.Values[i];
: (decimal)constants.VatValue * sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++) Values[i] = (decimal)constants.VatValue * sumColumn.Values[i];
Values[0] = Sum;
}

View File

@ -16,7 +16,7 @@ public static partial class CalculateManager
var additionalData = requestCalculation.additionalData;
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();
@ -94,8 +94,8 @@ public static partial class CalculateManager
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
@ -188,7 +188,7 @@ public static partial class CalculateManager
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);

View File

@ -17,7 +17,7 @@ public static partial class CalculateManager
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();
@ -89,8 +89,8 @@ public static partial class CalculateManager
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues( sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
@ -188,7 +188,7 @@ public static partial class CalculateManager
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);

View File

@ -30,7 +30,7 @@ public static partial class CalculateManager
var flags = requestCalculation.Flags;
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();
@ -109,8 +109,8 @@ public static partial class CalculateManager
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
@ -203,7 +203,7 @@ public static partial class CalculateManager
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);

View File

@ -30,7 +30,7 @@ public static partial class CalculateManager
var flags = requestCalculation.Flags;
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();
@ -103,8 +103,8 @@ public static partial class CalculateManager
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
@ -202,7 +202,7 @@ public static partial class CalculateManager
nsibBruttoGrColumn, nsibExpensesColumn);
if (nsibBruttoGrColumn.Sum != 0)
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR);
cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR);
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1);
revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -24,7 +24,7 @@ public class VATRecoverableColumn : BaseColumnWithSum
{
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 vatRecoverableSum = this.Values.Skip(1).Take(i - 1).Sum();

View File

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

View File

@ -21,6 +21,7 @@ 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;
@ -122,8 +123,10 @@ public static partial class CalculateManager
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData, constants, requestCalculation.Flags);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
@ -280,7 +283,7 @@ public static partial class CalculateManager
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(preparedValues.Nmper + 1, preparedValues);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
@ -291,9 +294,9 @@ public static partial class CalculateManager
.Max());
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumn(61);
piColumn.ComputeValues(preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();

View File

@ -21,6 +21,7 @@ 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;
@ -116,8 +117,10 @@ public static partial class CalculateManager
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck(flags);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
postValues.ComputePlanIRRMSFO(cashflowMsfoColumn);
var vatColumn = new VATColumn(preparedValues.Nmper + 1, new Constants.Calculation());
vatColumn.ComputeValues(sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
@ -279,7 +282,7 @@ public static partial class CalculateManager
var creditVATColumn = new CreditVATColumn(12 + 4);
creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn);
var vatRecoverableColumn = new VATRecoverableColumn(preparedValues.Nmper + 1, preparedValues);
var vatRecoverableColumn = new VATRecoverableColumn(64, preparedValues);
vatRecoverableColumn.ComputeValues(vatColumn);
var creditPaymentColumn = new CreditPaymentColumn(preparedValues.LoanRatePeriod + 4);
@ -291,8 +294,8 @@ public static partial class CalculateManager
cashflowMsfoWithCfColumn.ComputeValues(preparedValues, sumCreditColumn, cashflowMsfoColumn,
creditPaymentColumn, vatRecoverableColumn);
var piColumn = new PIColumn(61);
piColumn.ComputeValues(preparedValues, cashflowMsfoWithCfColumn, cashflowMsfoColumn);
var piColumn = new PIColumnVT1(61, preparedValues);
piColumn.ComputeValues(cashflowMsfoColumn, cashflowMsfoWithCfColumn);
postValues.ComputePriceUP(sumColumn);
postValues.ComputePriceUP_PR();

View File

@ -11,6 +11,7 @@ public class PostValues : v2.PostValues
public decimal DirectorExtraBonus;
public decimal RegionalDirectorBonus;
public decimal RegionalDirectorExtraBonus;
public double PlanIRRMSFO;
private readonly Constants.Calculation _constants;
public PostValues(PreparedValues _preparedValues) : base(_preparedValues)
@ -27,7 +28,7 @@ public class PostValues : v2.PostValues
_preparedValues.Registration + _preparedValues.TrackerCost +
_preparedValues.TLMCost + _preparedValues.TransportTaxGr +
_preparedValues.InsuranceFinGAPNmper) *
(decimal) _preparedValues.Leasing0K +
(decimal)_preparedValues.Leasing0K +
_preparedValues.NsibBrutto;
}
@ -46,20 +47,20 @@ public class PostValues : v2.PostValues
}
else
{
DirectorBonus = this.BonusBase * (decimal) _preparedValues.DirectorBonus *
(decimal) _preparedValues.BonusCoefficient *
(decimal) _preparedValues.MarketRate * (decimal) _preparedValues.DistrictRate;
DirectorBonus = this.BonusBase * (decimal)_preparedValues.DirectorBonus *
(decimal)_preparedValues.BonusCoefficient *
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
}
}
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 *
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 1) *
(decimal) _preparedValues.DirectorExtraBonus * (decimal) _preparedValues.MarketRate *
(decimal) _preparedValues.DistrictRate;
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
(decimal)_preparedValues.DirectorExtraBonus * (decimal)_preparedValues.MarketRate *
(decimal)_preparedValues.DistrictRate;
if (DirectorExtraBonus < _constants.MinBonus)
DirectorExtraBonus = 0;
@ -76,24 +77,31 @@ public class PostValues : v2.PostValues
}
else
{
RegionalDirectorBonus = this.BonusBase * (decimal) _preparedValues.RegionalDirectorBonus *
(decimal) _preparedValues.MarketRate * (decimal) _preparedValues.DistrictRate;
RegionalDirectorBonus = this.BonusBase * (decimal)_preparedValues.RegionalDirectorBonus *
(decimal)_preparedValues.MarketRate * (decimal)_preparedValues.DistrictRate;
}
}
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 *
(decimal) (cashflowMSFOColumn.Nominal / _preparedValues.IRR_MSFO_Plan - 1) *
(decimal) _preparedValues.RegionalDirectorExtraBonus *
(decimal) _preparedValues.MarketRate *
(decimal) _preparedValues.DistrictRate;
(decimal)(cashflowMSFOColumn.Nominal / this.PlanIRRMSFO - 1) *
(decimal)_preparedValues.RegionalDirectorExtraBonus *
(decimal)_preparedValues.MarketRate *
(decimal)_preparedValues.DistrictRate;
if (RegionalDirectorExtraBonus < _constants.MinBonus)
RegionalDirectorExtraBonus = 0;
}
else
RegionalDirectorExtraBonus = 0;
}
public void ComputePlanIRRMSFO(BaseColumnWithNominal cashflowMSFOColumn)
{
PlanIRRMSFO = _preparedValues.ChangePlanIRR
? cashflowMSFOColumn.Nominal * _preparedValues.IRR_MSFO_Plan / _preparedValues.IrrExpected
: _preparedValues.IRR_MSFO_Plan;
}
}

View File

@ -149,6 +149,7 @@ public class PreparedValues
public decimal TLMCost { get; set; }
public double IRR_MSFO_Plan { get; set; }
public bool ChangePlanIRR { get; set; } = false;
public double ExtraBonus { get; set; }
public double DirectorBonus { get; set; }
public decimal DirectorBonusFix { get; set; }

View File

@ -18,7 +18,8 @@ public class CalculationController : Controller
{
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)
};