calculate by nominal
This commit is contained in:
parent
b7fb603202
commit
6a170c3d54
@ -2,7 +2,7 @@
|
||||
|
||||
namespace EvoCalculator.Core.Calculation.Columns
|
||||
{
|
||||
public abstract class BaseColumnWithGoalSeek : BaseColumnWithXIRR, IGoalSeekAlgorithm
|
||||
public abstract class BaseColumnWithGoalSeek : BaseColumnWithNominal, IGoalSeekAlgorithm
|
||||
{
|
||||
public BaseColumnWithGoalSeek(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
|
||||
{
|
||||
|
||||
@ -1,13 +1,45 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using EvoCalculator.Core.Calculation.Post;
|
||||
using EvoCalculator.Core.Models.Calculation.Models;
|
||||
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||
using TridentGoalSeek;
|
||||
|
||||
namespace EvoCalculator.Core.Calculation.Columns
|
||||
{
|
||||
public class CashflowMSFOColumn : BaseColumnWithNominal
|
||||
public class CashflowMSFOColumn : BaseColumnWithGoalSeek
|
||||
{
|
||||
public CashflowMSFOColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
|
||||
private readonly PostValues _postValues;
|
||||
private readonly PreparedValues _preparedValues;
|
||||
private readonly PercentPaymentColumn _percentPaymentColumn;
|
||||
private SumColumn _sumColumn;
|
||||
private readonly NegativeCashflowColumn _negativeCashflowColumn;
|
||||
private readonly NSIBBruttoGrColumn _nsibBruttoGrColumn;
|
||||
private readonly TLM_GrColumn _tlmGrColumn;
|
||||
private readonly GPS_GrColumn _gpsGrColumn;
|
||||
private readonly NPVBonusExpensesColumn _npvBonusExpensesColumn;
|
||||
private readonly AgentComissionExpensesColumn _agentComissionExpensesColumn;
|
||||
|
||||
public CashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues _postValues,
|
||||
PreparedValues preparedValues,
|
||||
PercentPaymentColumn _percentPaymentColumn,
|
||||
ref SumColumn sumColumn,
|
||||
NegativeCashflowColumn negativeCashflowColumn,
|
||||
NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn,
|
||||
NPVBonusExpensesColumn npvBonusExpensesColumn,
|
||||
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count,
|
||||
dateTempColumn)
|
||||
{
|
||||
this._postValues = _postValues;
|
||||
_preparedValues = preparedValues;
|
||||
this._percentPaymentColumn = _percentPaymentColumn;
|
||||
_sumColumn = sumColumn;
|
||||
_negativeCashflowColumn = negativeCashflowColumn;
|
||||
_nsibBruttoGrColumn = nsibBruttoGrColumn;
|
||||
_tlmGrColumn = tlmGrColumn;
|
||||
_gpsGrColumn = gpsGrColumn;
|
||||
_npvBonusExpensesColumn = npvBonusExpensesColumn;
|
||||
_agentComissionExpensesColumn = agentComissionExpensesColumn;
|
||||
}
|
||||
|
||||
public void PostCheck(AdditionalData additionalData)
|
||||
@ -30,21 +62,45 @@ namespace EvoCalculator.Core.Calculation.Columns
|
||||
}
|
||||
}
|
||||
|
||||
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
|
||||
NegativeCashflowColumn negativeCashflowColumn,
|
||||
NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn,
|
||||
NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn)
|
||||
public override decimal Calculate(decimal inputVariable)
|
||||
{
|
||||
Values[0] = -preparedValues.AcquisitionExpenses;
|
||||
Values[1] = sumColumn.Values[1] + npvBonusExpensesColumn.Values[1] + agentComissionExpensesColumn.Values[1];
|
||||
FillValues(inputVariable);
|
||||
return Convert.ToDecimal(Nominal);
|
||||
}
|
||||
|
||||
protected override void FillValues(decimal x)
|
||||
{
|
||||
_sumColumn.ComputeValues(x);
|
||||
|
||||
Values[0] = -_preparedValues.AcquisitionExpenses;
|
||||
Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] +
|
||||
_agentComissionExpensesColumn.Values[1];
|
||||
for (var i = 2; i < Values.Length; i++)
|
||||
Values[i] = sumColumn.Values[i]
|
||||
+ negativeCashflowColumn.Values[i]
|
||||
- nsibBruttoGrColumn.Values[i]
|
||||
- tlmGrColumn.Values[i]
|
||||
- gpsGrColumn.Values[i]
|
||||
+ npvBonusExpensesColumn.Values[i]
|
||||
+ agentComissionExpensesColumn.Values[i];
|
||||
Values[i] = _sumColumn.Values[i]
|
||||
+ _negativeCashflowColumn.Values[i]
|
||||
- _nsibBruttoGrColumn.Values[i]
|
||||
- _tlmGrColumn.Values[i]
|
||||
- _gpsGrColumn.Values[i]
|
||||
+ _npvBonusExpensesColumn.Values[i]
|
||||
+ _agentComissionExpensesColumn.Values[i];
|
||||
}
|
||||
|
||||
public override 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.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
|
||||
, maximumAttempts: 1000
|
||||
, initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper
|
||||
// , focusPercentage: 50
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,11 +2,10 @@
|
||||
using System.Linq;
|
||||
using EvoCalculator.Core.Calculation.Post;
|
||||
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
|
||||
using TridentGoalSeek;
|
||||
|
||||
namespace EvoCalculator.Core.Calculation.Columns
|
||||
{
|
||||
public class SumColumn : BaseColumnWithGoalSeek
|
||||
public class SumColumn : BaseColumnWithXIRR
|
||||
{
|
||||
private readonly PercentPaymentColumn _percentPaymentColumn;
|
||||
private readonly PreparedValues _preparedValues;
|
||||
@ -21,13 +20,7 @@ namespace EvoCalculator.Core.Calculation.Columns
|
||||
_postValues = postValues;
|
||||
}
|
||||
|
||||
public override decimal Calculate(decimal inputVariable)
|
||||
{
|
||||
FillValues(inputVariable);
|
||||
return Convert.ToDecimal(IRR);
|
||||
}
|
||||
|
||||
protected override void FillValues(decimal x)
|
||||
public void ComputeValues(decimal x)
|
||||
{
|
||||
Values[0] = -_postValues.BaseCost.Value;
|
||||
Values[1] = _preparedValues.FirstPaymentSum;
|
||||
@ -47,23 +40,5 @@ namespace EvoCalculator.Core.Calculation.Columns
|
||||
"Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж");
|
||||
}
|
||||
}
|
||||
|
||||
public override 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.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
|
||||
, maximumAttempts: 1000
|
||||
, initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper
|
||||
// , focusPercentage: 50
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -46,7 +46,7 @@ namespace EvoCalculator.Core.Controllers.V1
|
||||
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
|
||||
? preparedValues.Nmper + 1
|
||||
: preparedValues.NmperDeprecation + 2;
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
|
||||
@ -74,14 +74,36 @@ namespace EvoCalculator.Core.Controllers.V1
|
||||
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
|
||||
gpsGrColumn.PostCheck();
|
||||
|
||||
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
|
||||
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
|
||||
|
||||
postValues.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn);
|
||||
|
||||
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
|
||||
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
|
||||
|
||||
postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
|
||||
|
||||
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
||||
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
||||
|
||||
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
||||
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
|
||||
|
||||
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
|
||||
nsibBruttoGrColumn.ComputeValues(preparedValues);
|
||||
|
||||
var sumColumn = new SumColumn(
|
||||
preparedValues.Nmper + 1
|
||||
, dateTempColumn
|
||||
, preparedValues
|
||||
, percentPaymentColumn, postValues);
|
||||
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
|
||||
|
||||
var cashflowMsfoColumn = new CashflowMSFOColumn(preparedValues.Nmper + 1, dateTempColumn, postValues,
|
||||
preparedValues, percentPaymentColumn, ref sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
|
||||
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
|
||||
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
|
||||
cashflowMsfoColumn.PostCheck(additionalData);
|
||||
sumColumn.PostCheck();
|
||||
|
||||
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
|
||||
@ -113,17 +135,6 @@ namespace EvoCalculator.Core.Controllers.V1
|
||||
var deprecationColumn = new DeprecationColumn(maxColumnLength);
|
||||
deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
|
||||
|
||||
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
|
||||
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
|
||||
|
||||
postValues.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn);
|
||||
|
||||
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
|
||||
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
|
||||
|
||||
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
|
||||
agentComissionExpensesColumn.ComputeValues(preparedValues);
|
||||
|
||||
var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1);
|
||||
ratExpensesColumn.ComputeValues(preparedValues);
|
||||
|
||||
@ -153,12 +164,6 @@ namespace EvoCalculator.Core.Controllers.V1
|
||||
nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn,
|
||||
insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn);
|
||||
|
||||
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
|
||||
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
|
||||
|
||||
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
|
||||
nsibBruttoGrColumn.ComputeValues(preparedValues);
|
||||
|
||||
var taxColumn = new TaxColumn(maxColumnLength);
|
||||
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
|
||||
ratExpensesColumn,
|
||||
@ -173,11 +178,6 @@ namespace EvoCalculator.Core.Controllers.V1
|
||||
nsibBruttoGrColumn,
|
||||
tlmGrColumn, gpsGrColumn);
|
||||
|
||||
var cashflowMsfoColumn = new CashflowMSFOColumn(preparedValues.Nmper + 1, dateTempColumn);
|
||||
cashflowMsfoColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
|
||||
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
|
||||
cashflowMsfoColumn.PostCheck(additionalData);
|
||||
|
||||
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
|
||||
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
|
||||
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user