Clean code pt.2

This commit is contained in:
Chika 2021-12-15 12:43:51 +03:00
parent a7beb1212e
commit 4fbd107039
258 changed files with 17473 additions and 17731 deletions

View File

@ -1,35 +1,34 @@
using System; using System;
using System.Linq; using System.Linq;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
public abstract class BaseColumn<T>
{ {
public abstract class BaseColumn<T> protected BaseColumn(int count)
{ {
protected BaseColumn(int count) Values = new T[count];
}
protected BaseColumn()
{
}
public T[] Values { get; set; }
public T GetValue(int i)
{
if (i < Values.Length) return Values[i];
return (T) Convert.ChangeType(0.0, typeof(T));
}
public T[] GetValues(int from = 0)
{
return from switch
{ {
Values = new T[count]; 0 => Values,
} _ => Values.Skip(from).ToArray()
};
protected BaseColumn()
{
}
public T[] Values { get; set; }
public T GetValue(int i)
{
if (i < Values.Length) return Values[i];
return (T) Convert.ChangeType(0.0, typeof(T));
}
public T[] GetValues(int from = 0)
{
return from switch
{
0 => Values,
_ => Values.Skip(from).ToArray()
};
}
} }
} }

View File

@ -1,11 +1,10 @@
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
{
public abstract class BaseColumnForGoalSeek<T> : BaseColumn<T>
{
protected BaseColumnForGoalSeek(int count) : base(count)
{
}
public abstract void ComputeValues(T x); public abstract class BaseColumnForGoalSeek<T> : BaseColumn<T>
{
protected BaseColumnForGoalSeek(int count) : base(count)
{
} }
public abstract void ComputeValues(T x);
} }

View File

@ -1,16 +1,15 @@
using System; using System;
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
{
public abstract class BaseColumnWithGoalSeek : BaseColumnWithNominal, IGoalSeekAlgorithm
{
public BaseColumnWithGoalSeek(int count, BaseColumn<DateTime> dateTempColumn) : base(count, dateTempColumn)
{
}
public abstract decimal Calculate(decimal inputVariable); public abstract class BaseColumnWithGoalSeek : BaseColumnWithNominal, IGoalSeekAlgorithm
protected abstract void FillValues(decimal x); {
public abstract void ComputeValues(decimal requiredValue); public BaseColumnWithGoalSeek(int count, BaseColumn<DateTime> dateTempColumn) : base(count, dateTempColumn)
{
} }
public abstract decimal Calculate(decimal inputVariable);
protected abstract void FillValues(decimal x);
public abstract void ComputeValues(decimal requiredValue);
} }

View File

@ -1,21 +1,20 @@
using System; using System;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
public class BaseColumnWithNominal : BaseColumnWithXIRR
{ {
public class BaseColumnWithNominal : BaseColumnWithXIRR protected BaseColumnWithNominal(int count, BaseColumn<DateTime> dateTempColumn) : base(count, dateTempColumn)
{ {
protected BaseColumnWithNominal(int count, BaseColumn<DateTime> dateTempColumn) : base(count, dateTempColumn)
{
}
public BaseColumnWithNominal(int count) : base(count)
{
}
protected BaseColumnWithNominal()
{
}
public double Nominal => (Math.Pow(IRR + 1, (double) 1 / 12) - 1) * 12;
} }
public BaseColumnWithNominal(int count) : base(count)
{
}
protected BaseColumnWithNominal()
{
}
public double Nominal => (Math.Pow(IRR + 1, (double) 1 / 12) - 1) * 12;
} }

View File

@ -1,16 +1,15 @@
using System.Linq; using System.Linq;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
{
public class BaseColumnWithSum : BaseColumn<decimal>
{
public BaseColumnWithSum(int count) : base(count)
{
}
public decimal Sum public class BaseColumnWithSum : BaseColumn<decimal>
{ {
get { return Values.Skip(1).Sum(x => x); } public BaseColumnWithSum(int count) : base(count)
} {
}
public decimal Sum
{
get { return Values.Skip(1).Sum(x => x); }
} }
} }

View File

@ -3,53 +3,52 @@ using System.Linq;
using EvoCalculator.Core.FinanceFormulas; using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Common; using EvoCalculator.Core.Models.Common;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
public class BaseColumnWithXIRR : BaseColumn<decimal>
{ {
public class BaseColumnWithXIRR : BaseColumn<decimal> protected BaseColumnWithXIRR(int count, BaseColumn<DateTime> dateTempColumn) : base(count)
{ {
protected BaseColumnWithXIRR(int count, BaseColumn<DateTime> dateTempColumn) : base(count) Dates = dateTempColumn.Values;
}
protected BaseColumnWithXIRR(int count) : base(count)
{
}
protected BaseColumnWithXIRR()
{
}
public DateTime[] Dates { get; set; }
private Flow[] Flows
{
get
{ {
Dates = dateTempColumn.Values; var flows = new Flow[Values.Length];
} for (var i = 0; i < Values.Length; i++)
flows[i] = new Flow
{
Date = Dates[i],
Value = Values[i]
};
protected BaseColumnWithXIRR(int count) : base(count) return flows;
{
}
protected BaseColumnWithXIRR()
{
}
public DateTime[] Dates { get; set; }
private Flow[] Flows
{
get
{
var flows = new Flow[Values.Length];
for (var i = 0; i < Values.Length; i++)
flows[i] = new Flow
{
Date = Dates[i],
Value = Values[i]
};
return flows;
}
}
public double IRR
{
get
{
var XIRR = new XIRR(Flows);
return XIRR.GetResult();
}
}
public void RoundValues(int precision = 2)
{
Values = Values.Select(x => Math.Round(x, precision)).ToArray();
} }
} }
public double IRR
{
get
{
var XIRR = new XIRR(Flows);
return XIRR.GetResult();
}
}
public void RoundValues(int precision = 2)
{
Values = Values.Select(x => Math.Round(x, precision)).ToArray();
}
} }

View File

@ -2,43 +2,42 @@
using EvoCalculator.Core.FinanceFormulas; using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Common; using EvoCalculator.Core.Models.Common;
namespace EvoCalculator.Core.Base.Columns namespace EvoCalculator.Core.Base.Columns;
public class BaseColumnWithXNPV : BaseColumn<decimal>
{ {
public class BaseColumnWithXNPV : BaseColumn<decimal> private readonly double rate;
public BaseColumnWithXNPV(int count, BaseColumn<DateTime> dateTempColumn, double rate) : base(count)
{ {
private readonly double rate; Dates = dateTempColumn.Values;
this.rate = rate;
}
public BaseColumnWithXNPV(int count, BaseColumn<DateTime> dateTempColumn, double rate) : base(count) private DateTime[] Dates { get; }
private Flow[] Flows
{
get
{ {
Dates = dateTempColumn.Values; var flows = new Flow[Values.Length];
this.rate = rate; for (var i = 0; i < Values.Length; i++)
flows[i] = new Flow
{
Date = Dates[i],
Value = Values[i]
};
return flows;
} }
}
private DateTime[] Dates { get; } public decimal XNPV
{
private Flow[] Flows get
{ {
get var XNPV = new XNPV(Flows, rate);
{ return Convert.ToDecimal(XNPV.GetResult());
var flows = new Flow[Values.Length];
for (var i = 0; i < Values.Length; i++)
flows[i] = new Flow
{
Date = Dates[i],
Value = Values[i]
};
return flows;
}
}
public decimal XNPV
{
get
{
var XNPV = new XNPV(Flows, rate);
return Convert.ToDecimal(XNPV.GetResult());
}
} }
} }
} }

View File

@ -1,10 +1,9 @@
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Base.Interfaces.Columns namespace EvoCalculator.Core.Base.Interfaces.Columns;
public interface IColumnWithGoalSeek : IGoalSeekAlgorithm
{ {
public interface IColumnWithGoalSeek : IGoalSeekAlgorithm public new decimal Calculate(decimal inputVariable);
{ public void ComputeValues(decimal requiredValue);
public new decimal Calculate(decimal inputVariable);
public void ComputeValues(decimal requiredValue);
}
} }

View File

@ -1,7 +1,6 @@
namespace EvoCalculator.Core.Base.PostValues namespace EvoCalculator.Core.Base.PostValues;
public class BasePostValue<T>
{ {
public class BasePostValue<T> public T Value { get; set; }
{
public T Value { get; set; }
}
} }

View File

@ -1,19 +1,18 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class AcceptInsuranceColumn : BaseColumnWithSum
{ {
public class AcceptInsuranceColumn : BaseColumnWithSum public AcceptInsuranceColumn(int count) : base(count)
{ {
public AcceptInsuranceColumn(int count) : base(count) }
{
}
public void ComputeValues(AcceptKaskoColumn acceptKaskoColumn, AcceptOsagoColumn acceptOsagoColumn) public void ComputeValues(AcceptKaskoColumn acceptKaskoColumn, AcceptOsagoColumn acceptOsagoColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = acceptKaskoColumn.Values[i] + acceptOsagoColumn.Values[i]; Values[i] = acceptKaskoColumn.Values[i] + acceptOsagoColumn.Values[i];
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class AcceptKaskoColumn : BaseColumnWithSum
{ {
public class AcceptKaskoColumn : BaseColumnWithSum public AcceptKaskoColumn(int count) : base(count)
{ {
public AcceptKaskoColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[1] = 0; Values[1] = 0;
for (var i = 2; i < Values.Length; i++) for (var i = 2; i < Values.Length; i++)
Values[i] = preparedValues.InsuranceKaskoNmper / (preparedValues.Nmper - 1); Values[i] = preparedValues.InsuranceKaskoNmper / (preparedValues.Nmper - 1);
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class AcceptOsagoColumn : BaseColumnWithSum
{ {
public class AcceptOsagoColumn : BaseColumnWithSum public AcceptOsagoColumn(int count) : base(count)
{ {
public AcceptOsagoColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
for (var i = 0; i < Values.Length; i++) for (var i = 0; i < Values.Length; i++)
Values[i] = i > 1 && i <= 12 ? preparedValues.InsuranceOsago / 11 : 0; Values[i] = i > 1 && i <= 12 ? preparedValues.InsuranceOsago / 11 : 0;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,25 +1,24 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class AcceptSumColumn : BaseColumnWithSum
{ {
public class AcceptSumColumn : BaseColumnWithSum public AcceptSumColumn(int count) : base(count)
{ {
public AcceptSumColumn(int count) : base(count) }
{
}
public void ComputeValues( public void ComputeValues(
PreparedValues preparedValues PreparedValues preparedValues
, SumColumn sumColumn , SumColumn sumColumn
, VATColumn vatColumn , VATColumn vatColumn
, BaseSumWithVATColumn sumWithVatColumn) , BaseSumWithVATColumn sumWithVatColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = preparedValues.AcceptSum * sumColumn.Values[i] / Values[i] = preparedValues.AcceptSum * sumColumn.Values[i] /
(sumWithVatColumn.Values[0] - vatColumn.Values[0]); (sumWithVatColumn.Values[0] - vatColumn.Values[0]);
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,24 +1,23 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class AgentComissionExpensesColumn : BaseColumnWithSum
{ {
public class AgentComissionExpensesColumn : BaseColumnWithSum public AgentComissionExpensesColumn(int count) : base(count)
{ {
public AgentComissionExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
var agentComission = preparedValues.AgentsSum + preparedValues.DoubleAgentsSum + var agentComission = preparedValues.AgentsSum + preparedValues.DoubleAgentsSum +
preparedValues.DeliverySum + preparedValues.DeliverySum +
preparedValues.BrokerSum + preparedValues.BrokerOfDeliverySum + preparedValues.BrokerSum + preparedValues.BrokerOfDeliverySum +
preparedValues.FinancialDeptOfDeliverySum + preparedValues.ImporterSum; preparedValues.FinancialDeptOfDeliverySum + preparedValues.ImporterSum;
Values[2] = -agentComission; Values[2] = -agentComission;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowColumn : BaseColumnWithXIRR
{
public CashflowColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public class CashflowColumn : BaseColumnWithXIRR
NegativeCashflowColumn negativeCashflowColumn) {
{ public CashflowColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[0] = -preparedValues.AcquisitionExpenses; {
Values[1] = sumColumn.Values[1]; }
for (var i = 2; i < Values.Length; i++) Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i];
} public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++) Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i];
} }
} }

View File

@ -1,26 +1,25 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowLeasingColumn : BaseColumnWithXIRR
{
public CashflowLeasingColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public class CashflowLeasingColumn : BaseColumnWithXIRR
NegativeCashflowColumn negativeCashflowColumn, {
NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn) public CashflowLeasingColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{ {
Values[0] = -preparedValues.AcquisitionExpenses; }
Values[1] = sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++) public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
Values[i] = sumColumn.Values[i] NegativeCashflowColumn negativeCashflowColumn,
+ negativeCashflowColumn.Values[i] NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn)
- nsibBruttoGrColumn.Values[i] {
- tlmGrColumn.Values[i] Values[0] = -preparedValues.AcquisitionExpenses;
- gpsGrColumn.Values[i]; Values[1] = sumColumn.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];
} }
} }

View File

@ -3,68 +3,67 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class BaseCashflowMSFOColumn : BaseColumnWithNominal
{ {
public class BaseCashflowMSFOColumn : BaseColumnWithNominal protected readonly AgentComissionExpensesColumn _agentComissionExpensesColumn;
protected readonly BaseColumn<decimal> _gpsGrColumn;
protected readonly NegativeCashflowColumn _negativeCashflowColumn;
protected readonly BaseColumnWithSum _npvBonusExpensesColumn;
protected readonly NSIBBruttoGrColumn _nsibBruttoGrColumn;
protected readonly PercentPaymentColumn _percentPaymentColumn;
protected readonly PostValues.PostValues _postValues;
protected readonly PreparedValues _preparedValues;
protected readonly BaseColumn<decimal> _tlmGrColumn;
protected SumColumn _sumColumn;
public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn)
{ {
protected readonly AgentComissionExpensesColumn _agentComissionExpensesColumn; _postValues = postValues;
protected readonly BaseColumn<decimal> _gpsGrColumn; _preparedValues = preparedValues;
protected readonly NegativeCashflowColumn _negativeCashflowColumn; _percentPaymentColumn = percentPaymentColumn;
protected readonly BaseColumnWithSum _npvBonusExpensesColumn; _sumColumn = sumColumn;
protected readonly NSIBBruttoGrColumn _nsibBruttoGrColumn; _negativeCashflowColumn = negativeCashflowColumn;
protected readonly PercentPaymentColumn _percentPaymentColumn; _nsibBruttoGrColumn = nsibBruttoGrColumn;
protected readonly PostValues.PostValues _postValues; _tlmGrColumn = tlmGrColumn;
protected readonly PreparedValues _preparedValues; _gpsGrColumn = gpsGrColumn;
protected readonly BaseColumn<decimal> _tlmGrColumn; _npvBonusExpensesColumn = npvBonusExpensesColumn;
protected SumColumn _sumColumn; _agentComissionExpensesColumn = agentComissionExpensesColumn;
}
public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, protected virtual void FillValues()
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, {
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, Values[0] = -_preparedValues.AcquisitionExpenses;
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn, Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] +
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn) _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];
}
public void PostCheck(AdditionalData additionalData)
{
if (additionalData != null)
{ {
_postValues = postValues; if (additionalData.MinCashflowMSFONominal != null)
_preparedValues = preparedValues; if (Nominal < additionalData.MinCashflowMSFONominal / 100)
_percentPaymentColumn = percentPaymentColumn; throw new Exception(
_sumColumn = sumColumn; $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}");
_negativeCashflowColumn = negativeCashflowColumn;
_nsibBruttoGrColumn = nsibBruttoGrColumn;
_tlmGrColumn = tlmGrColumn;
_gpsGrColumn = gpsGrColumn;
_npvBonusExpensesColumn = npvBonusExpensesColumn;
_agentComissionExpensesColumn = agentComissionExpensesColumn;
}
protected virtual void FillValues() if (additionalData.MaxCashflowMSFONominal != null)
{ if (Nominal >= additionalData.MaxCashflowMSFONominal / 100)
Values[0] = -_preparedValues.AcquisitionExpenses; throw new Exception(
Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] + $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}");
_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];
}
public void PostCheck(AdditionalData additionalData)
{
if (additionalData != null)
{
if (additionalData.MinCashflowMSFONominal != null)
if (Nominal < additionalData.MinCashflowMSFONominal / 100)
throw new Exception(
$"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}");
if (additionalData.MaxCashflowMSFONominal != null)
if (Nominal >= additionalData.MaxCashflowMSFONominal / 100)
throw new Exception(
$"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}");
}
} }
} }
} }

View File

@ -4,43 +4,42 @@ using EvoCalculator.Core.Base.Interfaces.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek
{ {
public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn,
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn)
{ {
public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, }
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn,
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn)
{
}
public decimal Calculate(decimal inputVariable) public decimal Calculate(decimal inputVariable)
{ {
_sumColumn.ComputeValues(inputVariable); _sumColumn.ComputeValues(inputVariable);
FillValues(); FillValues();
return Convert.ToDecimal(Nominal); return Convert.ToDecimal(Nominal);
} }
public void ComputeValues(decimal requiredValue) public void ComputeValues(decimal requiredValue)
{ {
var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values
.Skip(2) .Skip(2)
.Take(_percentPaymentColumn.Values.Length - 1) .Take(_percentPaymentColumn.Values.Length - 1)
.Where(x => x >= 10).ToArray().Length; .Where(x => x >= 10).ToArray().Length;
var goalSeek = new GoalSeek(this); var goalSeek = new GoalSeek(this);
goalSeek.SeekResult(requiredValue, goalSeek.SeekResult(requiredValue,
new GoalSeekOptions( new GoalSeekOptions(
startingStabPoint: startingStabPoint:
(_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
, maximumAttempts: 1000 , maximumAttempts: 1000
, initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper , initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper
// , focusPercentage: 50 // , focusPercentage: 50
)); ));
}
} }
} }

View File

@ -1,22 +1,21 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn
{
public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn,
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn)
{
}
public void ComputeValues() public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn
{ {
FillValues(); public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
} PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn,
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn)
{
}
public void ComputeValues()
{
FillValues();
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowMSFOFinal2Column : BaseColumnWithNominal
{
public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> directorBonusSumColumn, public class CashflowMSFOFinal2Column : BaseColumnWithNominal
CashflowMSFOFinalColumn cashflowMsfoFinalColumn) {
{ public CashflowMSFOFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[0] = -preparedValues.AcquisitionExpenses; {
Values[1] = cashflowMsfoFinalColumn.Values[1]; }
for (var i = 2; i < Values.Length; i++)
Values[i] = cashflowMsfoFinalColumn.Values[i] + directorBonusSumColumn.Values[i]; public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> directorBonusSumColumn,
} CashflowMSFOFinalColumn cashflowMsfoFinalColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = cashflowMsfoFinalColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
Values[i] = cashflowMsfoFinalColumn.Values[i] + directorBonusSumColumn.Values[i];
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowMSFOFinalColumn : BaseColumnWithNominal
{
public CashflowMSFOFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn, public class CashflowMSFOFinalColumn : BaseColumnWithNominal
ExtraBonusSumColumn extraBonusSumColumn) {
{ public CashflowMSFOFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[0] = -preparedValues.AcquisitionExpenses; {
Values[1] = cashflowMsfoColumn.Values[1]; }
for (var i = 2; i < Values.Length; i++)
Values[i] = cashflowMsfoColumn.Values[i] + extraBonusSumColumn.Values[i]; public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
} ExtraBonusSumColumn extraBonusSumColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = cashflowMsfoColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
Values[i] = cashflowMsfoColumn.Values[i] + extraBonusSumColumn.Values[i];
} }
} }

View File

@ -1,32 +1,31 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class CashflowNPVColumn : BaseColumn<decimal>
{ {
public class CashflowNPVColumn : BaseColumn<decimal> public CashflowNPVColumn(int count) : base(count)
{ {
public CashflowNPVColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn, TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn,
RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn) TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn)
{ {
Values[0] = -preparedValues.AcquisitionExpenses; Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.GetValue(1) + npvBonusExpensesColumn.GetValue(1) + Values[1] = sumColumn.GetValue(1) + npvBonusExpensesColumn.GetValue(1) +
agentComissionExpensesColumn.GetValue(1) - taxColumn.GetValue(1) + nsibExpensesColumn.GetValue(1); agentComissionExpensesColumn.GetValue(1) - taxColumn.GetValue(1) + nsibExpensesColumn.GetValue(1);
for (var i = 2; i < Values.Length; i++) for (var i = 2; i < Values.Length; i++)
Values[i] = sumColumn.GetValue(i) + negativeCashflowColumn.GetValue(i) + Values[i] = sumColumn.GetValue(i) + negativeCashflowColumn.GetValue(i) +
npvBonusExpensesColumn.GetValue(i) + npvBonusExpensesColumn.GetValue(i) +
agentComissionExpensesColumn.GetValue(i) + ratExpensesColumn.GetValue(i) - agentComissionExpensesColumn.GetValue(i) + ratExpensesColumn.GetValue(i) -
taxColumn.GetValue(i) - taxColumn.GetValue(i) -
transExpensesColumn.GetValue(i) + nsibExpensesColumn.GetValue(i) + transExpensesColumn.GetValue(i) + nsibExpensesColumn.GetValue(i) +
tlmExpensesColumn.GetValue(i) + tlmExpensesColumn.GetValue(i) +
gpsExpensesColumn.GetValue(i); gpsExpensesColumn.GetValue(i);
}
} }
} }

View File

@ -1,22 +1,21 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class CashflowNPVFinal2Column : BaseColumn<decimal>
{ {
public class CashflowNPVFinal2Column : BaseColumn<decimal> public CashflowNPVFinal2Column(int count) : base(count)
{ {
public CashflowNPVFinal2Column(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, CashflowNPVFinalColumn cashflowNpvFinalColumn, public void ComputeValues(PreparedValues preparedValues, CashflowNPVFinalColumn cashflowNpvFinalColumn,
BaseColumn<decimal> directorBonusSumColumn) BaseColumn<decimal> directorBonusSumColumn)
{ {
Values[0] = -preparedValues.AcquisitionExpenses; Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = cashflowNpvFinalColumn.GetValue(1); Values[1] = cashflowNpvFinalColumn.GetValue(1);
for (var i = 2; i < Values.Length; i++) for (var i = 2; i < Values.Length; i++)
Values[i] = cashflowNpvFinalColumn.GetValue(i) + directorBonusSumColumn.GetValue(i); Values[i] = cashflowNpvFinalColumn.GetValue(i) + directorBonusSumColumn.GetValue(i);
}
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class CashflowNPVFinalColumn : BaseColumn<decimal>
{
public CashflowNPVFinalColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, ExtraBonusSumColumn extraBonusSumColumn, public class CashflowNPVFinalColumn : BaseColumn<decimal>
BaseColumn<decimal> cashflowNpvColumn) {
{ public CashflowNPVFinalColumn(int count) : base(count)
Values[0] = -preparedValues.AcquisitionExpenses; {
Values[1] = cashflowNpvColumn.GetValue(1); }
for (var i = 2; i < Values.Length; i++)
Values[i] = extraBonusSumColumn.GetValue(i) + cashflowNpvColumn.GetValue(i); public void ComputeValues(PreparedValues preparedValues, ExtraBonusSumColumn extraBonusSumColumn,
} BaseColumn<decimal> cashflowNpvColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = cashflowNpvColumn.GetValue(1);
for (var i = 2; i < Values.Length; i++)
Values[i] = extraBonusSumColumn.GetValue(i) + cashflowNpvColumn.GetValue(i);
} }
} }

View File

@ -3,46 +3,45 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.Interfaces.Columns; using EvoCalculator.Core.Base.Interfaces.Columns;
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class CashflowNSIBColumn : BaseColumnWithNominal, IColumnWithGoalSeek
{ {
public class CashflowNSIBColumn : BaseColumnWithNominal, IColumnWithGoalSeek private readonly NSIBBruttoGrColumn _NSIBBruttoGrColumn;
private readonly NSIBExpensesColumn _NSIBExpensesColumn;
public CashflowNSIBColumn(int count, DateTempColumn dateTempColumn,
NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn) : base(count, dateTempColumn)
{ {
private readonly NSIBBruttoGrColumn _NSIBBruttoGrColumn; _NSIBBruttoGrColumn = nsibBruttoGrColumn;
private readonly NSIBExpensesColumn _NSIBExpensesColumn; _NSIBExpensesColumn = nsibExpensesColumn;
}
public CashflowNSIBColumn(int count, DateTempColumn dateTempColumn, public decimal Calculate(decimal inputVariable)
NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn) : base(count, dateTempColumn) {
{ FillValues(inputVariable);
_NSIBBruttoGrColumn = nsibBruttoGrColumn; return Convert.ToDecimal(IRR);
_NSIBExpensesColumn = nsibExpensesColumn; }
}
public decimal Calculate(decimal inputVariable) public void ComputeValues(decimal requiredValue)
{ {
FillValues(inputVariable); var goalSeek = new GoalSeek(this);
return Convert.ToDecimal(IRR); goalSeek.SeekResult(requiredValue,
} new GoalSeekOptions(
startingStabPoint: Convert.ToDecimal(_NSIBBruttoGrColumn.Values[0] / 2)
, tineExplorePercentage: 10
// , maximumAttempts: 10000
// , initialTineSpacing: 1
// , focusPercentage: 100
// , trimFinalInputValue: true
));
}
public void ComputeValues(decimal requiredValue) private void FillValues(decimal x)
{ {
var goalSeek = new GoalSeek(this); Values[1] = _NSIBBruttoGrColumn.Values[1] - x;
goalSeek.SeekResult(requiredValue, for (var i = 2; i < Values.Length; i++)
new GoalSeekOptions( Values[i] = _NSIBBruttoGrColumn.Values[i] -
startingStabPoint: Convert.ToDecimal(_NSIBBruttoGrColumn.Values[0] / 2) x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1];
, tineExplorePercentage: 10
// , maximumAttempts: 10000
// , initialTineSpacing: 1
// , focusPercentage: 100
// , trimFinalInputValue: true
));
}
private void FillValues(decimal x)
{
Values[1] = _NSIBBruttoGrColumn.Values[1] - x;
for (var i = 2; i < Values.Length; i++)
Values[i] = _NSIBBruttoGrColumn.Values[i] -
x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1];
}
} }
} }

View File

@ -1,18 +1,17 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class ComissionBonusExpensesColumn : BaseColumnWithSum
{
public ComissionBonusExpensesColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues) public class ComissionBonusExpensesColumn : BaseColumnWithSum
{ {
Values[1] = preparedValues.ComissionRub; public ComissionBonusExpensesColumn(int count) : base(count)
Values[0] = Sum; {
} }
public void ComputeValues(PreparedValues preparedValues)
{
Values[1] = preparedValues.ComissionRub;
Values[0] = Sum;
} }
} }

View File

@ -2,35 +2,34 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class DateColumn : BaseColumn<DateTime>
{ {
public class DateColumn : BaseColumn<DateTime> public DateColumn(int count) : base(count)
{ {
public DateColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{ {
Values[0] = preparedValues.DogDate; Values[0] = preparedValues.DogDate;
Values[1] = Values[0]; Values[1] = Values[0];
Values[2] = preparedValues.DeliveryTime switch Values[2] = preparedValues.DeliveryTime switch
{
100000000 => preparedValues.PaymentDateNew ?? Values[1].AddMonths(1),
100000001 => preparedValues.PaymentDateNew ?? Values[1].AddDays(constants.DeliveryDays),
_ => Values[2]
};
for (var i = 3; i < preparedValues.Nmper + 1; i++)
Values[i] = preparedValues.DeliveryTime switch
{ {
100000000 => preparedValues.PaymentDateNew ?? Values[1].AddMonths(1), 100000000 => preparedValues.PaymentDateNew == null
100000001 => preparedValues.PaymentDateNew ?? Values[1].AddDays(constants.DeliveryDays), ? Values[1].AddMonths(i - 1)
: Values[2].AddMonths(i - 2),
100000001 => Values[2].AddMonths(i - 2),
_ => Values[2] _ => Values[2]
}; };
for (var i = 3; i < preparedValues.Nmper + 1; i++)
Values[i] = preparedValues.DeliveryTime switch
{
100000000 => preparedValues.PaymentDateNew == null
? Values[1].AddMonths(i - 1)
: Values[2].AddMonths(i - 2),
100000001 => Values[2].AddMonths(i - 2),
_ => Values[2]
};
}
} }
} }

View File

@ -2,26 +2,25 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class DateTempColumn : BaseColumn<DateTime>
{ {
public class DateTempColumn : BaseColumn<DateTime> public DateTempColumn(int count) : base(count)
{ {
public DateTempColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[0] = preparedValues.PaymentDateNew != null && preparedValues.DeliveryTime == 100000001 Values[0] = preparedValues.PaymentDateNew != null && preparedValues.DeliveryTime == 100000001
? preparedValues.PaymentDateNew.Value.AddMonths(-1) ? preparedValues.PaymentDateNew.Value.AddMonths(-1)
: preparedValues.DogDate; : preparedValues.DogDate;
Values[1] = Values[0]; Values[1] = Values[0];
Values[2] = preparedValues.PaymentDateNew ?? Values[1].AddMonths(1); Values[2] = preparedValues.PaymentDateNew ?? Values[1].AddMonths(1);
for (var i = 3; i < Values.Length; i++) for (var i = 3; i < Values.Length; i++)
Values[i] = preparedValues.PaymentDateNew == null Values[i] = preparedValues.PaymentDateNew == null
? Values[1].AddMonths(i - 1) ? Values[1].AddMonths(i - 1)
: Values[2].AddMonths(i - 2); : Values[2].AddMonths(i - 2);
}
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class DeprecationColumn : BaseColumnWithSum
{ {
public class DeprecationColumn : BaseColumnWithSum public DeprecationColumn(int count) : base(count)
{ {
public DeprecationColumn(int count) : base(count) }
{
}
public void ComputeValues(DeprecationLPColumn deprecationLpColumn, DeprecationLDColumn deprecationLdColumn) public void ComputeValues(DeprecationLPColumn deprecationLpColumn, DeprecationLDColumn deprecationLdColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = i < deprecationLpColumn.Values.Length Values[i] = i < deprecationLpColumn.Values.Length
? deprecationLpColumn.Values[i] + deprecationLdColumn.Values[i] ? deprecationLpColumn.Values[i] + deprecationLdColumn.Values[i]
: 0 + deprecationLdColumn.Values[i]; : 0 + deprecationLdColumn.Values[i];
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,30 +2,29 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class DeprecationLDColumn : BaseColumnWithSum
{ {
public class DeprecationLDColumn : BaseColumnWithSum public DeprecationLDColumn(int count) : base(count)
{ {
public DeprecationLDColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[1] = 0; Values[1] = 0;
for (var i = 2; i < Values.Length - 1; i++) for (var i = 2; i < Values.Length - 1; i++)
Values[i] = preparedValues.BalanceHolder == 100000001 Values[i] = preparedValues.BalanceHolder == 100000001
? (decimal) preparedValues.DeprecationTime * ? (decimal) preparedValues.DeprecationTime *
(preparedValues.AcceptSum - Values.Skip(2).Take(i - 1).Sum(x => x)) / 100 (preparedValues.AcceptSum - Values.Skip(2).Take(i - 1).Sum(x => x)) / 100
: 0;
Values[^1] = preparedValues.BalanceHolder == 100000001
? preparedValues.AcceptSum - Values.Skip(2)
.Take(Values.Length - 1)
.Sum(x => x)
: 0; : 0;
Values[0] = Sum; Values[^1] = preparedValues.BalanceHolder == 100000001
} ? preparedValues.AcceptSum - Values.Skip(2)
.Take(Values.Length - 1)
.Sum(x => x)
: 0;
Values[0] = Sum;
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class DeprecationLPColumn : BaseColumnWithSum
{ {
public class DeprecationLPColumn : BaseColumnWithSum public DeprecationLPColumn(int count) : base(count)
{ {
public DeprecationLPColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, AcceptSumColumn acceptSumColumn) public void ComputeValues(PreparedValues preparedValues, AcceptSumColumn acceptSumColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = preparedValues.BalanceHolder == 100000000 ? acceptSumColumn.Values[i] : 0; Values[i] = preparedValues.BalanceHolder == 100000000 ? acceptSumColumn.Values[i] : 0;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class DirectorBonusSumColumn : BaseColumnWithSum
{
public DirectorBonusSumColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) public class DirectorBonusSumColumn : BaseColumnWithSum
{ {
Values[2] = -postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus * public DirectorBonusSumColumn(int count) : base(count)
(decimal) (1 + preparedValues.SalaryRate) * {
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; }
Values[0] = Sum;
} public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues)
{
Values[2] = -postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus *
(decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate;
Values[0] = Sum;
} }
} }

View File

@ -1,34 +1,33 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class ExpensesColumn : BaseColumnWithSum
{ {
public class ExpensesColumn : BaseColumnWithSum public ExpensesColumn(int count) : base(count)
{ {
public ExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn, public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn,
RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn, NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn, GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn,
ComissionBonusExpensesColumn comissionBonusExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn) ComissionBonusExpensesColumn comissionBonusExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = Values[i] =
agentComissionExpensesColumn.Values[i] agentComissionExpensesColumn.Values[i]
+ ratExpensesColumn.Values[i] + ratExpensesColumn.Values[i]
+ transExpensesColumn.Values[i] + transExpensesColumn.Values[i]
+ nsibExpensesColumn.Values[i] + nsibExpensesColumn.Values[i]
+ tlmExpensesColumn.Values[i] + tlmExpensesColumn.Values[i]
+ gpsExpensesColumn.Values[i] + gpsExpensesColumn.Values[i]
+ registrExpensesColumn.Values[i] + registrExpensesColumn.Values[i]
+ insuranceBonusExpensesColumn.Values[i] + insuranceBonusExpensesColumn.Values[i]
+ comissionBonusExpensesColumn.Values[i] + comissionBonusExpensesColumn.Values[i]
+ npvBonusExpensesColumn.Values[i]; + npvBonusExpensesColumn.Values[i];
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,24 +1,23 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class ExtraBonusSumColumn : BaseColumnWithSum
{
public ExtraBonusSumColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn, public class ExtraBonusSumColumn : BaseColumnWithSum
PostValues.PostValues postValues) {
{ public ExtraBonusSumColumn(int count) : base(count)
Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan {
? -1 * postValues.BonusBase.Value * }
(decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) *
(decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) * public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn,
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate PostValues.PostValues postValues)
: 0; {
Values[0] = Sum; Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan
} ? -1 * postValues.BonusBase.Value *
(decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) *
(decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate
: 0;
Values[0] = Sum;
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class GPSExpensesColumn : BaseColumnWithSum
{ {
public class GPSExpensesColumn : BaseColumnWithSum public GPSExpensesColumn(int count) : base(count)
{ {
public GPSExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments) public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments)
{ {
Values[1] = -(preparedValues.TrackerCost + preparedPayments.Rows[0].GpsBasePayment); Values[1] = -(preparedValues.TrackerCost + preparedPayments.Rows[0].GpsBasePayment);
for (var i = 2; i < Values.Length; i++) Values[i] = -preparedPayments.Rows[i - 1].GpsBasePayment; for (var i = 2; i < Values.Length; i++) Values[i] = -preparedPayments.Rows[i - 1].GpsBasePayment;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,24 +2,23 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class GPS_GrColumn : BaseColumnWithXNPV
{ {
public class GPS_GrColumn : BaseColumnWithXNPV public GPS_GrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn, rate)
{ {
public GPS_GrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn, rate) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment; for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment;
Values[0] = -XNPV; Values[0] = -XNPV;
}
} }
} }

View File

@ -1,19 +1,18 @@
using System; using System;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class IRRGrColumn : BaseColumn<double>
{
public IRRGrColumn(int count) : base(count)
{
}
public void ComputeValues(DateTempColumn dateTempColumn, BaseColumnWithXIRR cashflowMSFOColumn) public class IRRGrColumn : BaseColumn<double>
{ {
for (var i = 1; i < Values.Length; i++) public IRRGrColumn(int count) : base(count)
Values[i] = Math.Pow(1 + cashflowMSFOColumn.IRR, {
(double) (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1; }
}
public void ComputeValues(DateTempColumn dateTempColumn, BaseColumnWithXIRR cashflowMSFOColumn)
{
for (var i = 1; i < Values.Length; i++)
Values[i] = Math.Pow(1 + cashflowMSFOColumn.IRR,
(double) (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1;
} }
} }

View File

@ -1,37 +1,36 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class InsuranceBonusExpensesColumn : BaseColumnWithSum
{ {
public class InsuranceBonusExpensesColumn : BaseColumnWithSum public InsuranceBonusExpensesColumn(int count) : base(count)
{ {
public InsuranceBonusExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{ {
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod) if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
Values[2] = preparedValues.InsuranceBonus; Values[2] = preparedValues.InsuranceBonus;
else else
/* /*
* +1 - компенсация того, что считается с 0 позиции * +1 - компенсация того, что считается с 0 позиции
*/ */
for (var i = 2; i < Values.Length; i += i == 2 ? 11 : 12) for (var i = 2; i < Values.Length; i += i == 2 ? 11 : 12)
if (preparedValues.NmperInsurance - i >= 3) if (preparedValues.NmperInsurance - i >= 3)
{ {
if ( if (
preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3 || preparedValues.NmperInsurance == constants.MaxOnePolicePeriod && i <= 3 ||
preparedValues.NmperInsurance > constants.MaxOnePolicePeriod && preparedValues.NmperInsurance > constants.MaxOnePolicePeriod &&
preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod preparedValues.NmperInsurance - i > constants.MaxOnePolicePeriod
) )
Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * 12; Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * 12;
else else
Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance * Values[i] = preparedValues.InsuranceBonus / preparedValues.NmperInsurance *
(preparedValues.NmperInsurance - i + 1); (preparedValues.NmperInsurance - i + 1);
} }
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,27 +2,26 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class InterestColumn : BaseColumn<decimal>
{ {
public class InterestColumn : BaseColumn<decimal> public InterestColumn(int count) : base(count)
{ {
public InterestColumn(int count) : base(count) }
{
}
public void PostCheck(SumColumn sumColumn) public void PostCheck(SumColumn sumColumn)
{ {
for (var i = 3; i < Values.Skip(1).ToList().Count; i++) for (var i = 3; i < Values.Skip(1).ToList().Count; i++)
if (Values[i] > sumColumn.Values[i]) if (Values[i] > sumColumn.Values[i])
throw new Exception( throw new Exception(
"Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж");
} }
public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn) public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn)
{ {
for (var i = 2; i < Values.Length; i++) for (var i = 2; i < Values.Length; i++)
Values[i] = niColumn.Values[i - 1] * (decimal) irrGrColumn.Values[i]; Values[i] = niColumn.Values[i - 1] * (decimal) irrGrColumn.Values[i];
}
} }
} }

View File

@ -1,25 +1,24 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class KaskoBonusGrSumColumn : BaseColumnWithSum
{ {
public class KaskoBonusGrSumColumn : BaseColumnWithSum public KaskoBonusGrSumColumn(int count) : base(count)
{ {
public KaskoBonusGrSumColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> kaskoNmperGrColumn) public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> kaskoNmperGrColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
if (i < 13) if (i < 13)
Values[i] = kaskoNmperGrColumn.Values[i] * 1; Values[i] = kaskoNmperGrColumn.Values[i] * 1;
else if (i <= 24) else if (i <= 24)
Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.7; Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.7;
else else
Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.5; Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.5;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,39 +2,38 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class KaskoNmperGrColumn : BaseColumnWithXNPV
{ {
public class KaskoNmperGrColumn : BaseColumnWithXNPV public KaskoNmperGrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn,
rate)
{ {
public KaskoNmperGrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn, }
rate)
public void PostCheck()
{
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
{ {
Values[1] = preparedValues.InsuranceKasko;
}
else
{
var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod
? preparedValues.InsuranceKasko / 12
: preparedValues.InsuranceKasko / preparedValues.NmperInsurance;
for (var i = 1; i < preparedValues.NmperInsurance; i += 12)
if (i <= preparedValues.NmperInsurance)
Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod
? InsuranceKaskoMonth * 12
: InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1);
} }
public void PostCheck() Values[0] = -XNPV;
{
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
{
Values[1] = preparedValues.InsuranceKasko;
}
else
{
var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod
? preparedValues.InsuranceKasko / 12
: preparedValues.InsuranceKasko / preparedValues.NmperInsurance;
for (var i = 1; i < preparedValues.NmperInsurance; i += 12)
if (i <= preparedValues.NmperInsurance)
Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod
? InsuranceKaskoMonth * 12
: InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1);
}
Values[0] = -XNPV;
}
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class NIColumn : BaseColumn<decimal>
{
public NIColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> cashflowMSFOColumn, public class NIColumn : BaseColumn<decimal>
IRRGrColumn irrGrColumn) {
{ public NIColumn(int count) : base(count)
Values[1] = -cashflowMSFOColumn.GetValue(0) - cashflowMSFOColumn.GetValue(1); {
for (var i = 2; i < Values.Length; i++) }
Values[i] = Values[i - 1] + Values[i - 1] * (decimal) irrGrColumn.Values[i] -
cashflowMSFOColumn.Values[i]; public void ComputeValues(PreparedValues preparedValues, BaseColumn<decimal> cashflowMSFOColumn,
} IRRGrColumn irrGrColumn)
{
Values[1] = -cashflowMSFOColumn.GetValue(0) - cashflowMSFOColumn.GetValue(1);
for (var i = 2; i < Values.Length; i++)
Values[i] = Values[i - 1] + Values[i - 1] * (decimal) irrGrColumn.Values[i] -
cashflowMSFOColumn.Values[i];
} }
} }

View File

@ -2,30 +2,29 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class NPVBonusExpensesColumn : BaseColumnWithSum
{ {
public class NPVBonusExpensesColumn : BaseColumnWithSum public NPVBonusExpensesColumn(int count) : base(count)
{ {
public NPVBonusExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues)
{ {
Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) * Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) *
(decimal) (1 + preparedValues.SalaryRate) * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate;
Values[2] = preparedValues.BonusFix > 0 Values[2] = preparedValues.BonusFix > 0
? -preparedValues.BonusFix ? -preparedValues.BonusFix
: -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) * : -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) *
(decimal) (1 + preparedValues.SalaryRate) * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate;
for (var i = 3; i < Values.Length; i++) Values[i] = 0; for (var i = 3; i < Values.Length; i++) Values[i] = 0;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,17 +1,16 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class NPVColumn : BaseColumnWithNominal
{
public NPVColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(BaseColumn<decimal> cashflowNpvColumn, NPVWeightColumn npvWeightColumn) public class NPVColumn : BaseColumnWithNominal
{ {
for (var i = 0; i < Values.Length; i++) public NPVColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[i] = cashflowNpvColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); {
} }
public void ComputeValues(BaseColumn<decimal> cashflowNpvColumn, NPVWeightColumn npvWeightColumn)
{
for (var i = 0; i < Values.Length; i++)
Values[i] = cashflowNpvColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i);
} }
} }

View File

@ -1,17 +1,16 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class NPVFinal2Column : BaseColumnWithNominal
{
public NPVFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(CashflowNPVFinal2Column cashflowNpvFinal2Column, NPVWeightColumn npvWeightColumn) public class NPVFinal2Column : BaseColumnWithNominal
{ {
for (var i = 0; i < Values.Length; i++) public NPVFinal2Column(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[i] = cashflowNpvFinal2Column.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); {
} }
public void ComputeValues(CashflowNPVFinal2Column cashflowNpvFinal2Column, NPVWeightColumn npvWeightColumn)
{
for (var i = 0; i < Values.Length; i++)
Values[i] = cashflowNpvFinal2Column.GetValue(i) * (decimal) npvWeightColumn.GetValue(i);
} }
} }

View File

@ -1,17 +1,16 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class NPVFinalColumn : BaseColumnWithNominal
{
public NPVFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(CashflowNPVFinalColumn cashflowNpvFinalColumn, NPVWeightColumn npvWeightColumn) public class NPVFinalColumn : BaseColumnWithNominal
{ {
for (var i = 0; i < Values.Length; i++) public NPVFinalColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[i] = cashflowNpvFinalColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); {
} }
public void ComputeValues(CashflowNPVFinalColumn cashflowNpvFinalColumn, NPVWeightColumn npvWeightColumn)
{
for (var i = 0; i < Values.Length; i++)
Values[i] = cashflowNpvFinalColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i);
} }
} }

View File

@ -2,21 +2,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class NPVWeightColumn : BaseColumn<double>
{
public NPVWeightColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, DateTempColumn dateTempColumn) public class NPVWeightColumn : BaseColumn<double>
{ {
Values[0] = 1; public NPVWeightColumn(int count) : base(count)
for (var i = 1; i < Values.Length; i++) {
Values[i] = Values[i - 1] / Math.Pow( }
1 + preparedValues.LoanRate / 365,
(dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days); public void ComputeValues(PreparedValues preparedValues, DateTempColumn dateTempColumn)
} {
Values[0] = 1;
for (var i = 1; i < Values.Length; i++)
Values[i] = Values[i - 1] / Math.Pow(
1 + preparedValues.LoanRate / 365,
(dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days);
} }
} }

View File

@ -1,21 +1,20 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class NSIBBruttoGrColumn : BaseColumnWithSum
{ {
public class NSIBBruttoGrColumn : BaseColumnWithSum public NSIBBruttoGrColumn(int count) : base(count)
{ {
public NSIBBruttoGrColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[1] = 0; Values[1] = 0;
for (var i = 2; i < Values.Length - 1; i++) for (var i = 2; i < Values.Length - 1; i++)
Values[i] = preparedValues.NsibBrutto / (preparedValues.Nmper - 1 - 1); Values[i] = preparedValues.NsibBrutto / (preparedValues.Nmper - 1 - 1);
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,34 +1,33 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class NSIBExpensesColumn : BaseColumnWithSum
{ {
public class NSIBExpensesColumn : BaseColumnWithSum public NSIBExpensesColumn(int count) : base(count)
{ {
public NSIBExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
for (var i = 1; i < Values.Length; i += 12) for (var i = 1; i < Values.Length; i += 12)
if (i <= preparedValues.Nmper) if (i <= preparedValues.Nmper)
{
if (preparedValues.Nmper - i >= 3)
{ {
if (preparedValues.Nmper - i >= 3) if (preparedValues.Nmper - i < 16 - 1)
{ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper *
if (preparedValues.Nmper - i < 16 - 1) (preparedValues.Nmper - i + 1);
Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper *
(preparedValues.Nmper - i + 1);
else
Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * 12;
}
else else
{ Values[i] = -preparedValues.NsibNetto / preparedValues.Nmper * 12;
Values[i] = 0;
}
} }
else
{
Values[i] = 0;
}
}
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,18 +1,17 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class NegativeCashflowColumn : BaseColumnWithSum
{ {
public class NegativeCashflowColumn : BaseColumnWithSum public NegativeCashflowColumn(int count) : base(count)
{ {
public NegativeCashflowColumn(int count) : base(count) }
{
}
public void ComputeValues(BaseColumn<decimal> kaskoNmperGrColumn) public void ComputeValues(BaseColumn<decimal> kaskoNmperGrColumn)
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = -kaskoNmperGrColumn.Values[i]; for (var i = 1; i < Values.Length; i++) Values[i] = -kaskoNmperGrColumn.Values[i];
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,22 +1,21 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class PercentPaymentColumn : BaseColumn<double>
{ {
public class PercentPaymentColumn : BaseColumn<double> public PercentPaymentColumn(int count) : base(count)
{ {
public PercentPaymentColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedPayments preparedPayments) public void ComputeValues(PreparedPayments preparedPayments)
{ {
Values[0] = 0; Values[0] = 0;
Values[1] = 0; Values[1] = 0;
for (var i = 2; i < Values.Length - 1; i++) for (var i = 2; i < Values.Length - 1; i++)
Values[i] = preparedPayments.Rows[i - 1].PercentPayment; Values[i] = preparedPayments.Rows[i - 1].PercentPayment;
Values[^1] = 0; Values[^1] = 0;
}
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class RatExpensesColumn : BaseColumnWithSum
{ {
public class RatExpensesColumn : BaseColumnWithSum public RatExpensesColumn(int count) : base(count)
{ {
public RatExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[1] = -preparedValues.BaseRatCost; Values[1] = -preparedValues.BaseRatCost;
Values[4] = preparedValues.RetroBonus; Values[4] = preparedValues.RetroBonus;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,19 +1,18 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class RegistrExpensesColumn : BaseColumnWithSum
{ {
public class RegistrExpensesColumn : BaseColumnWithSum public RegistrExpensesColumn(int count) : base(count)
{ {
public RegistrExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
Values[1] = -preparedValues.BaseRegistration; Values[1] = -preparedValues.BaseRegistration;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,26 +1,25 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class RevenueColumn : BaseColumn<decimal>
{
public RevenueColumn(int count) : base(count)
{
}
public void ComputeValues(NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn, public class RevenueColumn : BaseColumn<decimal>
CashflowNSIBColumn cashflowNsibColumn) {
public RevenueColumn(int count) : base(count)
{
}
public void ComputeValues(NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn,
CashflowNSIBColumn cashflowNsibColumn)
{
if (nsibBruttoGrColumn.Sum == 0)
{ {
if (nsibBruttoGrColumn.Sum == 0) for (var i = 0; i < Values.Length; i++) Values[i] = 0;
{ }
for (var i = 0; i < Values.Length; i++) Values[i] = 0; else
} {
else Values[1] = nsibBruttoGrColumn.Values[1] - cashflowNsibColumn.Values[1];
{ for (var i = 2; i < Values.Length; i++)
Values[1] = nsibBruttoGrColumn.Values[1] - cashflowNsibColumn.Values[1]; Values[i] = Values[1] * nsibExpensesColumn.Values[i] / nsibExpensesColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
Values[i] = Values[1] * nsibExpensesColumn.Values[i] / nsibExpensesColumn.Values[1];
}
} }
} }
} }

View File

@ -4,47 +4,46 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class SumColumn : BaseColumnWithXIRR
{ {
public class SumColumn : BaseColumnWithXIRR protected readonly BaseColumn<decimal> _nsibBruttoGrColumn;
protected readonly PercentPaymentColumn _percentPaymentColumn;
protected readonly PostValues.PostValues _postValues;
protected readonly PreparedValues _preparedValues;
public SumColumn(int count, BaseColumn<DateTime> dateTempColumn, PreparedValues preparedValues,
PercentPaymentColumn percentPaymentColumn,
PostValues.PostValues postValues, BaseColumn<decimal> nsibBruttoGrColumn) : base(count, dateTempColumn)
{ {
protected readonly BaseColumn<decimal> _nsibBruttoGrColumn; _preparedValues = preparedValues;
protected readonly PercentPaymentColumn _percentPaymentColumn; _percentPaymentColumn = percentPaymentColumn;
protected readonly PostValues.PostValues _postValues; _postValues = postValues;
protected readonly PreparedValues _preparedValues; _nsibBruttoGrColumn = nsibBruttoGrColumn;
}
public SumColumn(int count, BaseColumn<DateTime> dateTempColumn, PreparedValues preparedValues, public virtual void ComputeValues(decimal x)
PercentPaymentColumn percentPaymentColumn, {
PostValues.PostValues postValues, BaseColumn<decimal> nsibBruttoGrColumn) : base(count, dateTempColumn) Values[0] = -_postValues.BaseCost.Value;
{ Values[1] = _preparedValues.FirstPaymentSum;
_preparedValues = preparedValues;
_percentPaymentColumn = percentPaymentColumn;
_postValues = postValues;
_nsibBruttoGrColumn = nsibBruttoGrColumn;
}
public virtual void ComputeValues(decimal x) for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100;
{
Values[0] = -_postValues.BaseCost.Value;
Values[1] = _preparedValues.FirstPaymentSum;
for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100; Values[^1] = _preparedValues.LastPaymentSum;
}
Values[^1] = _preparedValues.LastPaymentSum; public void PostCheck()
} {
new CheckTools().CheckColumnForLessThanZeroValue(Values);
public void PostCheck() if (Values[1] / Values.Skip(1).Sum() >= 0.5m)
{ throw new Exception(
new CheckTools().CheckColumnForLessThanZeroValue(Values); "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж");
if (Values[1] / Values.Skip(1).Sum() >= 0.5m) for (var i = 2; i < Values.Length - 1; i++)
if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i))
throw new Exception( throw new Exception(
"Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж"); "Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи");
for (var i = 2; i < Values.Length - 1; i++)
if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i))
throw new Exception(
"Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи");
}
} }
} }

View File

@ -1,17 +1,16 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class SumCurrentColumn : BaseColumn<decimal>
{
public SumCurrentColumn(int count) : base(count)
{
}
public void ComputeValues(BaseSumWithVATColumn sumWithVatColumn) public class SumCurrentColumn : BaseColumn<decimal>
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = sumWithVatColumn.Values.Skip(i).Sum(x => x); public SumCurrentColumn(int count) : base(count)
} {
}
public void ComputeValues(BaseSumWithVATColumn sumWithVatColumn)
{
for (var i = 1; i < Values.Length; i++) Values[i] = sumWithVatColumn.Values.Skip(i).Sum(x => x);
} }
} }

View File

@ -1,17 +1,16 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class SumCurrentInterestColumn : BaseColumn<decimal>
{
public SumCurrentInterestColumn(int count) : base(count)
{
}
public void ComputeValues(InterestColumn interestColumn) public class SumCurrentInterestColumn : BaseColumn<decimal>
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = interestColumn.Values.Skip(i + 1).Sum(x => x); public SumCurrentInterestColumn(int count) : base(count)
} {
}
public void ComputeValues(InterestColumn interestColumn)
{
for (var i = 1; i < Values.Length; i++) Values[i] = interestColumn.Values.Skip(i + 1).Sum(x => x);
} }
} }

View File

@ -1,17 +1,16 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class SumCurrentNegativeColumn : BaseColumn<decimal>
{
public SumCurrentNegativeColumn(int count) : base(count)
{
}
public void ComputeValues(NegativeCashflowColumn negativeCashflowColumn) public class SumCurrentNegativeColumn : BaseColumn<decimal>
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = negativeCashflowColumn.Values.Skip(i).Sum(x => x); public SumCurrentNegativeColumn(int count) : base(count)
} {
}
public void ComputeValues(NegativeCashflowColumn negativeCashflowColumn)
{
for (var i = 1; i < Values.Length; i++) Values[i] = negativeCashflowColumn.Values.Skip(i).Sum(x => x);
} }
} }

View File

@ -1,18 +1,17 @@
using System.Linq; using System.Linq;
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class SumCurrentTLMColumn : BaseColumn<decimal>
{
public SumCurrentTLMColumn(int count) : base(count)
{
}
public void ComputeValues(BaseColumn<decimal> tlmGrColumn) public class SumCurrentTLMColumn : BaseColumn<decimal>
{ {
for (var i = 1; i < Values.Length; i++) public SumCurrentTLMColumn(int count) : base(count)
Values[i] = tlmGrColumn.Values.Skip(i + 1).Sum(x => x); {
} }
public void ComputeValues(BaseColumn<decimal> tlmGrColumn)
{
for (var i = 1; i < Values.Length; i++)
Values[i] = tlmGrColumn.Values.Skip(i + 1).Sum(x => x);
} }
} }

View File

@ -2,28 +2,27 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class SumRepaymentColumn : BaseColumn<decimal>
{ {
public class SumRepaymentColumn : BaseColumn<decimal> public SumRepaymentColumn(int count) : base(count)
{ {
public SumRepaymentColumn(int count) : base(count) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues, public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues,
SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn, SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn,
SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn) SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn)
{ {
for (var i = 7; i < Values.Length; i++) for (var i = 7; i < Values.Length; i++)
Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] - Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] -
sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) - sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) -
sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) * sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) *
(decimal) preparedValues.Repayment; (decimal) preparedValues.Repayment;
}
} }
} }

View File

@ -2,37 +2,36 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class BaseSumWithVATColumn : BaseColumnWithSum
{ {
public class BaseSumWithVATColumn : BaseColumnWithSum protected readonly Constants.Calculation _constants;
protected readonly PreparedValues _preparedValues;
protected SumColumn _sumColumn;
protected BaseSumWithVATColumn(int count, SumColumn sumColumn, PreparedValues preparedValues,
Constants.Calculation constants) : base(count)
{ {
protected readonly Constants.Calculation _constants; _sumColumn = sumColumn;
protected readonly PreparedValues _preparedValues; _preparedValues = preparedValues;
protected SumColumn _sumColumn; _constants = constants;
}
protected BaseSumWithVATColumn(int count, SumColumn sumColumn, PreparedValues preparedValues, protected void FillValues()
Constants.Calculation constants) : base(count) {
{ Values[0] = 0;
_sumColumn = sumColumn; Values[1] = _preparedValues.FirstPaymentWithNdsAbs > 0
_preparedValues = preparedValues; ? _preparedValues.FirstPaymentWithNdsAbs
_constants = constants; : (decimal) (1 + _constants.VatValue) * _sumColumn.Values[1];
} for (var i = 2; i < Values.Length; i++)
Values[i] = (decimal) (1 + _constants.VatValue) * _sumColumn.Values[i];
protected void FillValues() Values[0] = Sum;
{ }
Values[0] = 0;
Values[1] = _preparedValues.FirstPaymentWithNdsAbs > 0
? _preparedValues.FirstPaymentWithNdsAbs
: (decimal) (1 + _constants.VatValue) * _sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
Values[i] = (decimal) (1 + _constants.VatValue) * _sumColumn.Values[i];
Values[0] = Sum; public void PostCheck()
} {
new CheckTools().CheckColumnForLessThanZeroValue(Values);
public void PostCheck()
{
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
} }
} }

View File

@ -1,17 +1,16 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
{
public class SumWithVATColumnVT1 : BaseSumWithVATColumn
{
public SumWithVATColumnVT1(int count, SumColumn sumColumn, PreparedValues preparedValues,
Constants.Calculation constants) : base(count, sumColumn, preparedValues, constants)
{
}
public void ComputeValues() public class SumWithVATColumnVT1 : BaseSumWithVATColumn
{ {
FillValues(); public SumWithVATColumnVT1(int count, SumColumn sumColumn, PreparedValues preparedValues,
} Constants.Calculation constants) : base(count, sumColumn, preparedValues, constants)
{
}
public void ComputeValues()
{
FillValues();
} }
} }

View File

@ -4,46 +4,45 @@ using EvoCalculator.Core.Base.Interfaces.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class SumWithVATColumnVT2 : BaseSumWithVATColumn, IColumnWithGoalSeek
{ {
public class SumWithVATColumnVT2 : BaseSumWithVATColumn, IColumnWithGoalSeek private readonly PercentPaymentColumn _percentPaymentColumn;
private readonly PostValues.PostValues _postValues;
public SumWithVATColumnVT2(int count, SumColumn sumColumn, PreparedValues preparedValues,
Constants.Calculation constants, PercentPaymentColumn percentPaymentColumn,
PostValues.PostValues postValues) : base(
count, sumColumn,
preparedValues, constants)
{ {
private readonly PercentPaymentColumn _percentPaymentColumn; _percentPaymentColumn = percentPaymentColumn;
private readonly PostValues.PostValues _postValues; _postValues = postValues;
}
public SumWithVATColumnVT2(int count, SumColumn sumColumn, PreparedValues preparedValues, public decimal Calculate(decimal inputVariable)
Constants.Calculation constants, PercentPaymentColumn percentPaymentColumn, {
PostValues.PostValues postValues) : base( _sumColumn.ComputeValues(inputVariable);
count, sumColumn, FillValues();
preparedValues, constants) return Convert.ToDecimal(Sum);
{ }
_percentPaymentColumn = percentPaymentColumn;
_postValues = postValues;
}
public decimal Calculate(decimal inputVariable) public void ComputeValues(decimal requiredValue)
{ {
_sumColumn.ComputeValues(inputVariable); var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values
FillValues(); .Skip(2)
return Convert.ToDecimal(Sum); .Take(_percentPaymentColumn.Values.Length - 1)
} .Where(x => x >= 10).ToArray().Length;
public void ComputeValues(decimal requiredValue) var goalSeek = new GoalSeek(this);
{ goalSeek.SeekResult(requiredValue,
var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values new GoalSeekOptions(
.Skip(2) startingStabPoint:
.Take(_percentPaymentColumn.Values.Length - 1) (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
.Where(x => x >= 10).ToArray().Length; , maximumAttempts: 1000
, initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper
var goalSeek = new GoalSeek(this); // , focusPercentage: 50
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
));
}
} }
} }

View File

@ -1,20 +1,19 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class TLMExpensesColumn : BaseColumnWithSum
{ {
public class TLMExpensesColumn : BaseColumnWithSum public TLMExpensesColumn(int count) : base(count)
{ {
public TLMExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments) public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments)
{ {
Values[1] = -(preparedValues.TLMCost + preparedPayments.Rows[0].TlmBasePayment); Values[1] = -(preparedValues.TLMCost + preparedPayments.Rows[0].TlmBasePayment);
for (var i = 2; i < Values.Length; i++) Values[i] = -preparedPayments.Rows[i - 1].TlmBasePayment; for (var i = 2; i < Values.Length; i++) Values[i] = -preparedPayments.Rows[i - 1].TlmBasePayment;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,24 +2,23 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class TLM_GrColumn : BaseColumnWithXNPV
{ {
public class TLM_GrColumn : BaseColumnWithXNPV public TLM_GrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn, rate)
{ {
public TLM_GrColumn(int count, DateTempColumn dateTempColumn, double rate) : base(count, dateTempColumn, rate) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment; for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment;
Values[0] = -XNPV; Values[0] = -XNPV;
}
} }
} }

View File

@ -1,38 +1,37 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class TaxColumn : BaseColumnWithSum
{ {
public class TaxColumn : BaseColumnWithSum public TaxColumn(int count) : base(count)
{ {
public TaxColumn(int count) : base(count) }
{
}
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn,
AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn, AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn,
RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn, RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn, ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn) GPSExpensesColumn gpsExpensesColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = (decimal) constants.IncomeTaxValue * (sumColumn.GetValue(i) Values[i] = (decimal) constants.IncomeTaxValue * (sumColumn.GetValue(i)
- acceptInsuranceColumn.GetValue(i) - acceptInsuranceColumn.GetValue(i)
- deprecationColumn.GetValue(i) - deprecationColumn.GetValue(i)
+ ratExpensesColumn.GetValue(i) + ratExpensesColumn.GetValue(i)
+ registrExpensesColumn.GetValue(i) + registrExpensesColumn.GetValue(i)
+ comissionBonusExpensesColumn.GetValue(i) + comissionBonusExpensesColumn.GetValue(i)
+ transExpensesColumn.GetValue(i) + transExpensesColumn.GetValue(i)
+ npvBonusExpensesColumn.GetValue(i) + npvBonusExpensesColumn.GetValue(i)
+ agentComissionExpensesColumn.GetValue(i) + agentComissionExpensesColumn.GetValue(i)
+ insuranceBonusExpensesColumn.GetValue(i) + insuranceBonusExpensesColumn.GetValue(i)
+ tlmExpensesColumn.GetValue(i) + tlmExpensesColumn.GetValue(i)
+ gpsExpensesColumn.GetValue(i) + gpsExpensesColumn.GetValue(i)
); );
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,22 +2,21 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class TransExpensesColumn : BaseColumnWithSum
{ {
public class TransExpensesColumn : BaseColumnWithSum public TransExpensesColumn(int count) : base(count)
{ {
public TransExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues) public void ComputeValues(PreparedValues preparedValues)
{ {
for (var i = 0; i < Values.Length; i += 12) for (var i = 0; i < Values.Length; i += 12)
if (i > 0) if (i > 0)
Values[i] = -preparedValues.TransportTaxGrYear; Values[i] = -preparedValues.TransportTaxGrYear;
Values[^1] = -(preparedValues.TransportTaxGr + Values.Skip(1).Take(Values.Length - 1).Sum(x => x)); Values[^1] = -(preparedValues.TransportTaxGr + Values.Skip(1).Take(Values.Length - 1).Sum(x => x));
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,28 +2,27 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v1.Columns namespace EvoCalculator.Core.Calculation.v1.Columns;
public class VATColumn : BaseColumnWithSum
{ {
public class VATColumn : BaseColumnWithSum public VATColumn(int count) : base(count)
{ {
public VATColumn(int count) : base(count) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues) public void ComputeValues(Constants.Calculation constants, 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;
}
} }
} }

View File

@ -5,317 +5,316 @@ using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
using EvoCalculator.Core.Tools.Validation; using EvoCalculator.Core.Tools.Validation;
namespace EvoCalculator.Core.Calculation.v1.Managers namespace EvoCalculator.Core.Calculation.v1.Managers;
public static partial class CalculateManager
{ {
public static partial class CalculateManager public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation)
{ {
public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
var constants = new Constants.Calculation();
var postValues = new PostValues.PostValues();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2;
try
{ {
var preparedValues = requestCalculation.preparedValues; var dateColumn = new DateColumn(preparedValues.Nmper + 1);
var preparedPayments = requestCalculation.preparedPayments; dateColumn.ComputeValues(preparedValues, constants);
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues); var dateTempColumn = new DateTempColumn(maxColumnLength);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; dateTempColumn.ComputeValues(preparedValues);
var constants = new Constants.Calculation(); var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var postValues = new PostValues.PostValues(); var kaskoNmperGrColumn =
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
? preparedValues.Nmper + 1 preparedValues.IrrExpected);
: preparedValues.NmperDeprecation + 2; gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
try 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 nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
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);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn);
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues.GetValues(),
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength); {
dateTempColumn.ComputeValues(preparedValues); dateColumn,
dateTempColumn,
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); percentPaymentColumn,
percentPaymentColumn.ComputeValues(preparedPayments); kaskoNmperGrColumn,
tlmGrColumn,
var kaskoNmperGrColumn = gpsGrColumn,
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected); sumColumn,
kaskoNmperGrColumn.ComputeValues(preparedValues, constants); vatColumn,
kaskoNmperGrColumn.PostCheck(); sumWithVatColumn,
acceptSumColumn,
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, acceptKaskoColumn,
preparedValues.IrrExpected); acceptOsagoColumn,
tlmGrColumn.ComputeValues(preparedPayments, preparedValues); acceptInsuranceColumn,
tlmGrColumn.PostCheck(); deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, npvBonusExpensesColumn,
preparedValues.IrrExpected); kaskoBonusGrSumColumn,
gpsGrColumn.ComputeValues(preparedPayments, preparedValues); agentComissionExpensesColumn,
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 nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
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);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn, transExprensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn); nsibExpensesColumn,
tlmExpensesColumn,
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); gpsExpensesColumn,
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn); registrExpensesColumn,
insuranceBonusExpensesColumn,
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); comissionBonusExpensesColumn,
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn); taxColumn,
cashflowColumn,
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); cashflowLeasingColumn,
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, cashflowMsfoColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, cashflowNpvColumn,
ratExpensesColumn, npvWeightColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn); npvColumn,
irrGrColumn,
var npvWeightColumn = new NPVWeightColumn(maxColumnLength); niColumn,
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); interestColumn,
cashflowNsibColumn,
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); revenueColumn,
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); sumCurrentColumn,
sumCurrentNegativeColumn,
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); sumCurrentInterestColumn,
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn); sumCurrentTlmColumn,
sumRepaymentColumn,
var niColumn = new NIColumn(preparedValues.Nmper + 1); extraBonusSumColumn,
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn); cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
var interestColumn = new InterestColumn(preparedValues.Nmper + 1); npvFinalColumn,
interestColumn.ComputeValues(irrGrColumn, niColumn); directorBonusSumColumn,
interestColumn.PostCheck(sumColumn); cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, npvFinal2Column
nsibBruttoGrColumn, nsibExpensesColumn); }
};
if (nsibBruttoGrColumn.Sum != 0) }
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); catch (Exception ex)
{
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1); return new ManagerResult
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
return new ManagerResult
{
PostValues = postValues.GetValues(),
PreparedValues = preparedValues,
Columns = new
{
dateColumn,
dateTempColumn,
percentPaymentColumn,
kaskoNmperGrColumn,
tlmGrColumn,
gpsGrColumn,
sumColumn,
vatColumn,
sumWithVatColumn,
acceptSumColumn,
acceptKaskoColumn,
acceptOsagoColumn,
acceptInsuranceColumn,
deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
npvBonusExpensesColumn,
kaskoBonusGrSumColumn,
agentComissionExpensesColumn,
ratExpensesColumn,
transExprensesColumn,
nsibExpensesColumn,
tlmExpensesColumn,
gpsExpensesColumn,
registrExpensesColumn,
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
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
}
};
}
catch (Exception ex)
{ {
return new ManagerResult Errors = new List<string>
{ {
Errors = new List<string> ex.Message
{ }
ex.Message };
}
};
}
} }
} }
} }

View File

@ -5,317 +5,316 @@ using EvoCalculator.Core.Models.Calculation.Models.Manager;
using EvoCalculator.Core.Models.Calculation.Models.Request; using EvoCalculator.Core.Models.Calculation.Models.Request;
using EvoCalculator.Core.Tools.Validation; using EvoCalculator.Core.Tools.Validation;
namespace EvoCalculator.Core.Calculation.v1.Managers namespace EvoCalculator.Core.Calculation.v1.Managers;
public static partial class CalculateManager
{ {
public static partial class CalculateManager public static ManagerResult CalculateDefault(RequestCalculation requestCalculation)
{ {
public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
var constants = new Constants.Calculation();
var postValues = new PostValues.PostValues();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2;
try
{ {
var preparedValues = requestCalculation.preparedValues; var dateColumn = new DateColumn(preparedValues.Nmper + 1);
var preparedPayments = requestCalculation.preparedPayments; dateColumn.ComputeValues(preparedValues, constants);
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues); var dateTempColumn = new DateTempColumn(maxColumnLength);
dateTempColumn.ComputeValues(preparedValues);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var constants = new Constants.Calculation(); var kaskoNmperGrColumn =
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var postValues = new PostValues.PostValues(); var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
? preparedValues.Nmper + 1 preparedValues.IrrExpected);
: preparedValues.NmperDeprecation + 2; gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
gpsGrColumn.PostCheck();
try 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
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, 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);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
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);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn);
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn);
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn,
nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn);
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn,
ratExpensesColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn);
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues.GetValues(),
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
var dateTempColumn = new DateTempColumn(maxColumnLength); {
dateTempColumn.ComputeValues(preparedValues); dateColumn,
dateTempColumn,
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); percentPaymentColumn,
percentPaymentColumn.ComputeValues(preparedPayments); kaskoNmperGrColumn,
tlmGrColumn,
var kaskoNmperGrColumn = gpsGrColumn,
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected); sumColumn,
kaskoNmperGrColumn.ComputeValues(preparedValues, constants); vatColumn,
kaskoNmperGrColumn.PostCheck(); sumWithVatColumn,
acceptSumColumn,
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, acceptKaskoColumn,
preparedValues.IrrExpected); acceptOsagoColumn,
tlmGrColumn.ComputeValues(preparedPayments, preparedValues); acceptInsuranceColumn,
tlmGrColumn.PostCheck(); deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn, npvBonusExpensesColumn,
preparedValues.IrrExpected); kaskoBonusGrSumColumn,
gpsGrColumn.ComputeValues(preparedPayments, preparedValues); agentComissionExpensesColumn,
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
, dateColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, 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);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
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);
var taxColumn = new TaxColumn(maxColumnLength);
taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn,
ratExpensesColumn, ratExpensesColumn,
registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn, transExprensesColumn,
agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn); nsibExpensesColumn,
tlmExpensesColumn,
var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); gpsExpensesColumn,
cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn); registrExpensesColumn,
insuranceBonusExpensesColumn,
var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); comissionBonusExpensesColumn,
cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, expensesColumn,
negativeCashflowColumn,
nsibBruttoGrColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn); taxColumn,
cashflowColumn,
var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); cashflowLeasingColumn,
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, cashflowMsfoColumn,
agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, cashflowNpvColumn,
ratExpensesColumn, npvWeightColumn,
transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn); npvColumn,
irrGrColumn,
var npvWeightColumn = new NPVWeightColumn(maxColumnLength); niColumn,
npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); interestColumn,
cashflowNsibColumn,
var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); revenueColumn,
npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); sumCurrentColumn,
sumCurrentNegativeColumn,
var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); sumCurrentInterestColumn,
irrGrColumn.ComputeValues(dateTempColumn, cashflowMsfoColumn); sumCurrentTlmColumn,
sumRepaymentColumn,
var niColumn = new NIColumn(preparedValues.Nmper + 1); extraBonusSumColumn,
niColumn.ComputeValues(preparedValues, cashflowMsfoColumn, irrGrColumn); cashflowMsfoFinalColumn,
cashflowNpvFinalColumn,
var interestColumn = new InterestColumn(preparedValues.Nmper + 1); npvFinalColumn,
interestColumn.ComputeValues(irrGrColumn, niColumn); directorBonusSumColumn,
interestColumn.PostCheck(sumColumn); cashflowMsfoFinal2Column,
cashflowNpvFinal2Column,
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, npvFinal2Column
nsibBruttoGrColumn, nsibExpensesColumn); }
};
if (nsibBruttoGrColumn.Sum != 0) }
cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); catch (Exception ex)
{
var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1); return new ManagerResult
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
return new ManagerResult
{
PostValues = postValues.GetValues(),
PreparedValues = preparedValues,
Columns = new
{
dateColumn,
dateTempColumn,
percentPaymentColumn,
kaskoNmperGrColumn,
tlmGrColumn,
gpsGrColumn,
sumColumn,
vatColumn,
sumWithVatColumn,
acceptSumColumn,
acceptKaskoColumn,
acceptOsagoColumn,
acceptInsuranceColumn,
deprecationLpColumn,
deprecationLdColumn,
deprecationColumn,
npvBonusExpensesColumn,
kaskoBonusGrSumColumn,
agentComissionExpensesColumn,
ratExpensesColumn,
transExprensesColumn,
nsibExpensesColumn,
tlmExpensesColumn,
gpsExpensesColumn,
registrExpensesColumn,
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
expensesColumn,
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
}
};
}
catch (Exception ex)
{ {
return new ManagerResult Errors = new List<string>
{ {
Errors = new List<string> ex.Message
{ }
ex.Message };
}
};
}
} }
} }
} }

View File

@ -3,18 +3,17 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class BaseCost : BasePostValue<decimal>
{ {
public class BaseCost : BasePostValue<decimal> public void ComputeValue(PreparedValues preparedValues, BaseColumn<decimal> kaskoNmperGrColumn,
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn)
{ {
public void ComputeValue(PreparedValues preparedValues, BaseColumn<decimal> kaskoNmperGrColumn, Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoNmperGrColumn.Values[0])
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn) + Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + preparedValues.Rats +
{ preparedValues.Registration + preparedValues.TrackerCost +
Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoNmperGrColumn.Values[0]) preparedValues.TLMCost + preparedValues.TransportTaxGr * (decimal) preparedValues.Leasing0K +
+ Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + preparedValues.Rats + preparedValues.NsibBrutto;
preparedValues.Registration + preparedValues.TrackerCost +
preparedValues.TLMCost + preparedValues.TransportTaxGr * (decimal) preparedValues.Leasing0K +
preparedValues.NsibBrutto;
}
} }
} }

View File

@ -3,14 +3,13 @@ using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class BonusBase : BasePostValue<decimal>
{ {
public class BonusBase : BasePostValue<decimal> public void ComputeValue(PreparedValues preparedValues, KaskoBonusGrSumColumn kaskoBonusGrSumColumn)
{ {
public void ComputeValue(PreparedValues preparedValues, KaskoBonusGrSumColumn kaskoBonusGrSumColumn) Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoBonusGrSumColumn.Values[0]) -
{ preparedValues.Discount - preparedValues.ComissionRub - preparedValues.FirstPaymentSum;
Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoBonusGrSumColumn.Values[0]) -
preparedValues.Discount - preparedValues.ComissionRub - preparedValues.FirstPaymentSum;
}
} }
} }

View File

@ -3,15 +3,14 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class BonusResult : BasePostValue<decimal>
{ {
public class BonusResult : BasePostValue<decimal> public void ComputeValue(PreparedValues preparedValues, BaseColumnWithSum npvBonusExpensesColumn)
{ {
public void ComputeValue(PreparedValues preparedValues, BaseColumnWithSum npvBonusExpensesColumn) Value = Math.Abs(npvBonusExpensesColumn.Values[0]) -
{ Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) preparedValues.SalaryRate /
Value = Math.Abs(npvBonusExpensesColumn.Values[0]) - (decimal) (1 + preparedValues.SalaryRate);
Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) preparedValues.SalaryRate /
(decimal) (1 + preparedValues.SalaryRate);
}
} }
} }

View File

@ -3,13 +3,12 @@ using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class NPVNI : BasePostValue<double>
{ {
public class NPVNI : BasePostValue<double> public void ComputeValue(PreparedValues preparedValues, NPVColumn npvColumn)
{ {
public void ComputeValue(PreparedValues preparedValues, NPVColumn npvColumn) Value = npvColumn.Values.Sum(x => (double) x) / (double) preparedValues.NpvBase;
{
Value = npvColumn.Values.Sum(x => (double) x) / (double) preparedValues.NpvBase;
}
} }
} }

View File

@ -1,41 +1,40 @@
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class PostValues
{ {
public class PostValues public BaseCost BaseCost;
public BonusBase BonusBase;
public BonusResult BonusResult;
public NPVNI NPVNI;
public PriceUP PriceUP;
public PriceUP_PR PriceUP_PR;
public PriceUP_Year PriceUP_Year;
public PriceUP_Year_PR PriceUP_Year_PR;
public PostValues()
{ {
public BaseCost BaseCost; BaseCost = new BaseCost();
public BonusBase BonusBase; BonusBase = new BonusBase();
public BonusResult BonusResult; PriceUP = new PriceUP();
public NPVNI NPVNI; PriceUP_PR = new PriceUP_PR();
public PriceUP PriceUP; PriceUP_Year = new PriceUP_Year();
public PriceUP_PR PriceUP_PR; PriceUP_Year_PR = new PriceUP_Year_PR();
public PriceUP_Year PriceUP_Year; NPVNI = new NPVNI();
public PriceUP_Year_PR PriceUP_Year_PR; BonusResult = new BonusResult();
}
public PostValues() public virtual object GetValues()
{
return new
{ {
BaseCost = new BaseCost(); BaseCost = BaseCost.Value,
BonusBase = new BonusBase(); BonusBase = BonusBase.Value,
PriceUP = new PriceUP(); PriceUP = PriceUP.Value,
PriceUP_PR = new PriceUP_PR(); PriceUP_PR = PriceUP_PR.Value,
PriceUP_Year = new PriceUP_Year(); PriceUP_Year = PriceUP_Year.Value,
PriceUP_Year_PR = new PriceUP_Year_PR(); PriceUP_Year_PR = PriceUP_Year_PR.Value,
NPVNI = new NPVNI(); NPVNI = NPVNI.Value,
BonusResult = new BonusResult(); BonusResult = BonusResult.Value
} };
public virtual object GetValues()
{
return new
{
BaseCost = BaseCost.Value,
BonusBase = BonusBase.Value,
PriceUP = PriceUP.Value,
PriceUP_PR = PriceUP_PR.Value,
PriceUP_Year = PriceUP_Year.Value,
PriceUP_Year_PR = PriceUP_Year_PR.Value,
NPVNI = NPVNI.Value,
BonusResult = BonusResult.Value
};
}
} }
} }

View File

@ -3,13 +3,12 @@ using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class PriceUP : BasePostValue<decimal>
{ {
public class PriceUP : BasePostValue<decimal> public void ComputeValue(PreparedValues preparedValues, SumColumn sumColumn)
{ {
public void ComputeValue(PreparedValues preparedValues, SumColumn sumColumn) Value = sumColumn.Values.Skip(1).Sum(x => x) - preparedValues.PriceUpTotal;
{
Value = sumColumn.Values.Skip(1).Sum(x => x) - preparedValues.PriceUpTotal;
}
} }
} }

View File

@ -1,13 +1,12 @@
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class PriceUP_PR : BasePostValue<double>
{ {
public class PriceUP_PR : BasePostValue<double> public void ComputeValue(PreparedValues preparedValues, PostValues postValues)
{ {
public void ComputeValue(PreparedValues preparedValues, PostValues postValues) Value = (double) postValues.PriceUP.Value / (double) preparedValues.PriceUpTotal;
{
Value = (double) postValues.PriceUP.Value / (double) preparedValues.PriceUpTotal;
}
} }
} }

View File

@ -1,13 +1,12 @@
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class PriceUP_Year : BasePostValue<decimal>
{ {
public class PriceUP_Year : BasePostValue<decimal> public void ComputeValue(PreparedValues preparedValues, PostValues postValues)
{ {
public void ComputeValue(PreparedValues preparedValues, PostValues postValues) Value = postValues.PriceUP.Value * 12 / preparedValues.Nmper;
{
Value = postValues.PriceUP.Value * 12 / preparedValues.Nmper;
}
} }
} }

View File

@ -1,13 +1,12 @@
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v1.PostValues namespace EvoCalculator.Core.Calculation.v1.PostValues;
public class PriceUP_Year_PR : BasePostValue<double>
{ {
public class PriceUP_Year_PR : BasePostValue<double> public void ComputeValue(PreparedValues preparedValues, PostValues postValues)
{ {
public void ComputeValue(PreparedValues preparedValues, PostValues postValues) Value = (double) postValues.PriceUP_Year.Value / (double) preparedValues.PriceUpTotal;
{
Value = (double) postValues.PriceUP_Year.Value / (double) preparedValues.PriceUpTotal;
}
} }
} }

View File

@ -2,21 +2,20 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class CashflowColumn : BaseColumnWithXIRR
{
public CashflowColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public class CashflowColumn : BaseColumnWithXIRR
NegativeCashflowColumn negativeCashflowColumn, SubsidyExpensesColumn subsidyExpensesColumn) {
{ public CashflowColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
Values[0] = -preparedValues.AcquisitionExpenses; {
Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum; }
for (var i = 2; i < Values.Length; i++)
Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] + subsidyExpensesColumn.GetValue(i); public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
} NegativeCashflowColumn negativeCashflowColumn, SubsidyExpensesColumn subsidyExpensesColumn)
{
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum;
for (var i = 2; i < Values.Length; i++)
Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] + subsidyExpensesColumn.GetValue(i);
} }
} }

View File

@ -2,28 +2,27 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class CashflowLeasingColumn : BaseColumnWithXIRR
{
public CashflowLeasingColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public class CashflowLeasingColumn : BaseColumnWithXIRR
NegativeCashflowColumn negativeCashflowColumn, {
NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, public CashflowLeasingColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
SubsidyExpensesColumn subsidyExpensesColumn) {
{ }
Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum; public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
for (var i = 2; i < Values.Length; i++) NegativeCashflowColumn negativeCashflowColumn,
Values[i] = sumColumn.Values[i] NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn,
+ negativeCashflowColumn.Values[i] SubsidyExpensesColumn subsidyExpensesColumn)
- nsibBruttoGrColumn.Values[i] {
- tlmGrColumn.Values[i] Values[0] = -preparedValues.AcquisitionExpenses;
- gpsGrColumn.Values[i] Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum;
+ subsidyExpensesColumn.GetValue(i); 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]
+ subsidyExpensesColumn.GetValue(i);
} }
} }

View File

@ -2,39 +2,38 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class BaseCashflowMSFOColumn : v1.Columns.BaseCashflowMSFOColumn
{ {
public class BaseCashflowMSFOColumn : v1.Columns.BaseCashflowMSFOColumn protected readonly SubsidyExpensesColumn _subsidyExpensesColumn;
public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) :
base(count, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn,
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn)
{ {
protected readonly SubsidyExpensesColumn _subsidyExpensesColumn; _subsidyExpensesColumn = subsidyExpensesColumn;
}
public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, protected override void FillValues()
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, {
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, Values[0] = -_preparedValues.AcquisitionExpenses - _preparedValues.FuelCardSum;
BaseColumn<decimal> tlmGrColumn, BaseColumn<decimal> gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn, Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] +
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) : _agentComissionExpensesColumn.Values[1] - _preparedValues.SubsidySum;
base(count, dateTempColumn, postValues, for (var i = 2; i < Values.Length; i++)
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, Values[i] = _sumColumn.Values[i]
tlmGrColumn, + _negativeCashflowColumn.Values[i]
gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn) - _nsibBruttoGrColumn.Values[i]
{ - _tlmGrColumn.Values[i]
_subsidyExpensesColumn = subsidyExpensesColumn; - _gpsGrColumn.Values[i]
} + _npvBonusExpensesColumn.Values[i]
+ _agentComissionExpensesColumn.Values[i]
protected override void FillValues() + _subsidyExpensesColumn.Values[i];
{
Values[0] = -_preparedValues.AcquisitionExpenses - _preparedValues.FuelCardSum;
Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] +
_agentComissionExpensesColumn.Values[1] - _preparedValues.SubsidySum;
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]
+ _subsidyExpensesColumn.Values[i];
}
} }
} }

View File

@ -5,44 +5,43 @@ using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek; using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek
{ {
public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) :
base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn,
negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, subsidyExpensesColumn)
{ {
public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, }
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) :
base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn,
negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, subsidyExpensesColumn)
{
}
public decimal Calculate(decimal inputVariable) public decimal Calculate(decimal inputVariable)
{ {
_sumColumn.ComputeValues(inputVariable); _sumColumn.ComputeValues(inputVariable);
FillValues(); FillValues();
return Convert.ToDecimal(Nominal); return Convert.ToDecimal(Nominal);
} }
public void ComputeValues(decimal requiredValue) public void ComputeValues(decimal requiredValue)
{ {
var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values
.Skip(2) .Skip(2)
.Take(_percentPaymentColumn.Values.Length - 1) .Take(_percentPaymentColumn.Values.Length - 1)
.Where(x => x >= 10).ToArray().Length; .Where(x => x >= 10).ToArray().Length;
var goalSeek = new GoalSeek(this); var goalSeek = new GoalSeek(this);
goalSeek.SeekResult(requiredValue, goalSeek.SeekResult(requiredValue,
new GoalSeekOptions( new GoalSeekOptions(
startingStabPoint: startingStabPoint:
(_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS
, maximumAttempts: 1000 , maximumAttempts: 1000
, initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper , initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper
// , focusPercentage: 50 // , focusPercentage: 50
)); ));
}
} }
} }

View File

@ -1,24 +1,23 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn
{
public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) :
base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn,
negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, subsidyExpensesColumn)
{
}
public void ComputeValues() public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn
{ {
FillValues(); public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues,
} PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn,
TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) :
base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn,
negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn,
agentComissionExpensesColumn, subsidyExpensesColumn)
{
}
public void ComputeValues()
{
FillValues();
} }
} }

View File

@ -2,39 +2,38 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class CashflowNPVColumn : BaseColumn<decimal>
{ {
public class CashflowNPVColumn : BaseColumn<decimal> public CashflowNPVColumn(int count) : base(count)
{ {
public CashflowNPVColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn, TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn,
RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn, TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn,
SubsidyExpensesColumn subsidyExpensesColumn) SubsidyExpensesColumn subsidyExpensesColumn)
{ {
Values[0] = -preparedValues.AcquisitionExpenses; Values[0] = -preparedValues.AcquisitionExpenses;
Values[1] = sumColumn.GetValue(1) + npvBonusExpensesColumn.GetValue(1) + Values[1] = sumColumn.GetValue(1) + npvBonusExpensesColumn.GetValue(1) +
agentComissionExpensesColumn.GetValue(1) - taxColumn.GetValue(1) + agentComissionExpensesColumn.GetValue(1) - taxColumn.GetValue(1) +
nsibExpensesColumn.GetValue(1) - nsibExpensesColumn.GetValue(1) -
preparedValues.SubsidySum; preparedValues.SubsidySum;
for (var i = 2; i < Values.Length; i++) for (var i = 2; i < Values.Length; i++)
Values[i] = sumColumn.GetValue(i) Values[i] = sumColumn.GetValue(i)
+ negativeCashflowColumn.GetValue(i) + negativeCashflowColumn.GetValue(i)
+ npvBonusExpensesColumn.GetValue(i) + npvBonusExpensesColumn.GetValue(i)
+ agentComissionExpensesColumn.GetValue(i) + agentComissionExpensesColumn.GetValue(i)
+ ratExpensesColumn.GetValue(i) + ratExpensesColumn.GetValue(i)
- taxColumn.GetValue(i) - taxColumn.GetValue(i)
+ transExpensesColumn.GetValue(i) + transExpensesColumn.GetValue(i)
+ nsibExpensesColumn.GetValue(i) + nsibExpensesColumn.GetValue(i)
+ tlmExpensesColumn.GetValue(i) + tlmExpensesColumn.GetValue(i)
+ gpsExpensesColumn.GetValue(i) + gpsExpensesColumn.GetValue(i)
+ subsidyExpensesColumn.GetValue(i); + subsidyExpensesColumn.GetValue(i);
}
} }
} }

View File

@ -1,23 +1,22 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class CreditColumn : BaseColumnWithSum
{
public CreditColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, SumCreditColumn sumCreditColumn) public class CreditColumn : BaseColumnWithSum
{ {
Values[1] = -sumCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12; public CreditColumn(int count) : base(count)
for (var i = 2; i < Values.Length; i++) {
if (GetValue(i - 1) < 0) }
Values[i] = -sumCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12;
else public void ComputeValues(PreparedValues preparedValues, SumCreditColumn sumCreditColumn)
Values[i] = 0; {
Values[0] = Sum; Values[1] = -sumCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12;
} for (var i = 2; i < Values.Length; i++)
if (GetValue(i - 1) < 0)
Values[i] = -sumCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12;
else
Values[i] = 0;
Values[0] = Sum;
} }
} }

View File

@ -1,22 +1,21 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class DirectorBonusSumColumn : BaseColumnWithSum
{
public DirectorBonusSumColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) public class DirectorBonusSumColumn : BaseColumnWithSum
{ {
Values[2] = -1 * (postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus * public DirectorBonusSumColumn(int count) : base(count)
(decimal) (1 + preparedValues.SalaryRate) * {
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate }
+ preparedValues.DirectorBonusNsib * (decimal) (1 + preparedValues.SalaryRate) +
preparedValues.RegionalDirectorBonusNsib * (decimal) (1 + preparedValues.SalaryRate)); public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues)
Values[0] = Sum; {
} Values[2] = -1 * (postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus *
(decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate
+ preparedValues.DirectorBonusNsib * (decimal) (1 + preparedValues.SalaryRate) +
preparedValues.RegionalDirectorBonusNsib * (decimal) (1 + preparedValues.SalaryRate));
Values[0] = Sum;
} }
} }

View File

@ -1,38 +1,37 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class ExpensesColumn : BaseColumnWithSum
{ {
public class ExpensesColumn : BaseColumnWithSum public ExpensesColumn(int count) : base(count)
{ {
public ExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn, public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn,
RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn,
NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn, NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn, GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn,
ComissionBonusExpensesColumn comissionBonusExpensesColumn, ComissionBonusExpensesColumn comissionBonusExpensesColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
SubsidyExpensesColumn subsidyExpensesColumn) SubsidyExpensesColumn subsidyExpensesColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = Values[i] =
agentComissionExpensesColumn.Values[i] agentComissionExpensesColumn.Values[i]
+ ratExpensesColumn.Values[i] + ratExpensesColumn.Values[i]
+ transExpensesColumn.Values[i] + transExpensesColumn.Values[i]
+ nsibExpensesColumn.Values[i] + nsibExpensesColumn.Values[i]
+ tlmExpensesColumn.Values[i] + tlmExpensesColumn.Values[i]
+ gpsExpensesColumn.Values[i] + gpsExpensesColumn.Values[i]
+ registrExpensesColumn.Values[i] + registrExpensesColumn.Values[i]
+ insuranceBonusExpensesColumn.Values[i] + insuranceBonusExpensesColumn.Values[i]
+ comissionBonusExpensesColumn.Values[i] + comissionBonusExpensesColumn.Values[i]
+ npvBonusExpensesColumn.Values[i] + npvBonusExpensesColumn.Values[i]
+ subsidyExpensesColumn.Values[i]; + subsidyExpensesColumn.Values[i];
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -2,24 +2,23 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class GPS_GrColumn : BaseColumnWithSum
{ {
public class GPS_GrColumn : BaseColumnWithSum public GPS_GrColumn(int count) : base(count)
{ {
public GPS_GrColumn(int count) : base(count) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment; for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment;
Values[0] = -Sum; Values[0] = -Sum;
}
} }
} }

View File

@ -2,38 +2,37 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class KaskoNmperGrColumn : BaseColumnWithSum
{ {
public class KaskoNmperGrColumn : BaseColumnWithSum public KaskoNmperGrColumn(int count) : base(count)
{ {
public KaskoNmperGrColumn(int count) : base(count) }
public void PostCheck()
{
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
{ {
Values[1] = preparedValues.InsuranceKasko;
}
else
{
var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod
? preparedValues.InsuranceKasko / 12
: preparedValues.InsuranceKasko / preparedValues.NmperInsurance;
for (var i = 1; i < preparedValues.NmperInsurance; i += 12)
if (i <= preparedValues.NmperInsurance)
Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod
? InsuranceKaskoMonth * 12
: InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1);
} }
public void PostCheck() Values[0] = -Sum;
{
new CheckTools().CheckColumnForLessThanZeroValue(Values);
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod)
{
Values[1] = preparedValues.InsuranceKasko;
}
else
{
var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod
? preparedValues.InsuranceKasko / 12
: preparedValues.InsuranceKasko / preparedValues.NmperInsurance;
for (var i = 1; i < preparedValues.NmperInsurance; i += 12)
if (i <= preparedValues.NmperInsurance)
Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod
? InsuranceKaskoMonth * 12
: InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1);
}
Values[0] = -Sum;
}
} }
} }

View File

@ -2,29 +2,28 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class NPVBonusExpensesColumn : BaseColumnWithSum
{ {
public class NPVBonusExpensesColumn : BaseColumnWithSum public NPVBonusExpensesColumn(int count) : base(count)
{ {
public NPVBonusExpensesColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues)
{ {
Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) * Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) *
(decimal) (1 + preparedValues.SalaryRate); (decimal) (1 + preparedValues.SalaryRate);
Values[2] = preparedValues.BonusFix > 0 Values[2] = preparedValues.BonusFix > 0
? -preparedValues.BonusFix ? -preparedValues.BonusFix
: -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) * : -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) *
(decimal) (1 + preparedValues.SalaryRate) * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate;
for (var i = 3; i < Values.Length; i++) Values[i] = 0; for (var i = 3; i < Values.Length; i++) Values[i] = 0;
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -1,18 +1,17 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
{
public class SubsidyExpensesColumn : BaseColumnWithSum
{
public SubsidyExpensesColumn(int count) : base(count)
{
}
public void ComputeValues(PreparedValues preparedValues) public class SubsidyExpensesColumn : BaseColumnWithSum
{ {
Values[preparedValues.SubsidyPaymentNumber] = preparedValues.SubsidySum; public SubsidyExpensesColumn(int count) : base(count)
Values[0] = Sum; {
} }
public void ComputeValues(PreparedValues preparedValues)
{
Values[preparedValues.SubsidyPaymentNumber] = preparedValues.SubsidySum;
Values[0] = Sum;
} }
} }

View File

@ -3,25 +3,24 @@ using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class SumColumn : v1.Columns.SumColumn
{ {
public class SumColumn : v1.Columns.SumColumn public SumColumn(int count, BaseColumn<DateTime> dateTempColumn, PreparedValues preparedValues,
PercentPaymentColumn percentPaymentColumn, v1.PostValues.PostValues postValues,
BaseColumn<decimal> nsibBruttoGrColumn) : base(count, dateTempColumn, preparedValues, percentPaymentColumn,
postValues, nsibBruttoGrColumn)
{ {
public SumColumn(int count, BaseColumn<DateTime> dateTempColumn, PreparedValues preparedValues, }
PercentPaymentColumn percentPaymentColumn, v1.PostValues.PostValues postValues,
BaseColumn<decimal> nsibBruttoGrColumn) : base(count, dateTempColumn, preparedValues, percentPaymentColumn,
postValues, nsibBruttoGrColumn)
{
}
public override void ComputeValues(decimal x) public override void ComputeValues(decimal x)
{ {
Values[0] = -_postValues.BaseCost.Value - _preparedValues.FuelCardSum; Values[0] = -_postValues.BaseCost.Value - _preparedValues.FuelCardSum;
Values[1] = _preparedValues.FirstPaymentSum; Values[1] = _preparedValues.FirstPaymentSum;
for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100; for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100;
Values[^1] = _preparedValues.LastPaymentSum; Values[^1] = _preparedValues.LastPaymentSum;
}
} }
} }

View File

@ -1,25 +1,24 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class SumCreditColumn : BaseColumn<decimal>
{ {
public class SumCreditColumn : BaseColumn<decimal> public SumCreditColumn(int count) : base(count)
{ {
public SumCreditColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues
, Constants.Calculation constants, SumColumn sumColumn) , Constants.Calculation constants, SumColumn sumColumn)
{ {
Values[1] = (postValues.BaseCost.Value - sumColumn.GetValue(1)) * (1 + (decimal) constants.VatValue); Values[1] = (postValues.BaseCost.Value - sumColumn.GetValue(1)) * (1 + (decimal) constants.VatValue);
Values[2] = Values[1]; Values[2] = Values[1];
for (var i = 3; i < Values.Length; i++) for (var i = 3; i < Values.Length; i++)
if (GetValue(i - 1) > 0) if (GetValue(i - 1) > 0)
Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod; Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod;
else else
Values[i] = 0; Values[i] = 0;
}
} }
} }

View File

@ -2,24 +2,23 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Tools.Check; using EvoCalculator.Core.Tools.Check;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class TLM_GrColumn : BaseColumnWithSum
{ {
public class TLM_GrColumn : BaseColumnWithSum public TLM_GrColumn(int count) : base(count)
{ {
public TLM_GrColumn(int count) : base(count) }
{
}
public void PostCheck() public void PostCheck()
{ {
new CheckTools().CheckColumnForLessThanZeroValue(Values); new CheckTools().CheckColumnForLessThanZeroValue(Values);
} }
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{ {
for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment; for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment;
Values[0] = -Sum; Values[0] = -Sum;
}
} }
} }

View File

@ -2,44 +2,43 @@
using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Calculation.v1.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.v2.Columns namespace EvoCalculator.Core.Calculation.v2.Columns;
public class TaxColumn : BaseColumnWithSum
{ {
public class TaxColumn : BaseColumnWithSum public TaxColumn(int count) : base(count)
{ {
public TaxColumn(int count) : base(count) }
{
}
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants, SumColumn sumColumn, public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants, SumColumn sumColumn,
AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn, AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn,
RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn, RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn,
ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn, ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn,
NPVBonusExpensesColumn npvBonusExpensesColumn, NPVBonusExpensesColumn npvBonusExpensesColumn,
AgentComissionExpensesColumn agentComissionExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn,
InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn, InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn,
GPSExpensesColumn gpsExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) GPSExpensesColumn gpsExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn)
{ {
for (var i = 1; i < Values.Length; i++) for (var i = 1; i < Values.Length; i++)
Values[i] = (decimal) constants.IncomeTaxValue * (sumColumn.GetValue(i) Values[i] = (decimal) constants.IncomeTaxValue * (sumColumn.GetValue(i)
- acceptInsuranceColumn.GetValue(i) - acceptInsuranceColumn.GetValue(i)
- deprecationColumn.GetValue(i) - deprecationColumn.GetValue(i)
+ ratExpensesColumn.GetValue(i) + ratExpensesColumn.GetValue(i)
+ registrExpensesColumn.GetValue(i) + registrExpensesColumn.GetValue(i)
+ comissionBonusExpensesColumn.GetValue(i) + comissionBonusExpensesColumn.GetValue(i)
+ transExpensesColumn.GetValue(i) + transExpensesColumn.GetValue(i)
+ npvBonusExpensesColumn.GetValue(i) + npvBonusExpensesColumn.GetValue(i)
+ agentComissionExpensesColumn.GetValue(i) + agentComissionExpensesColumn.GetValue(i)
+ insuranceBonusExpensesColumn.GetValue(i) + insuranceBonusExpensesColumn.GetValue(i)
+ tlmExpensesColumn.GetValue(i) + tlmExpensesColumn.GetValue(i)
+ gpsExpensesColumn.GetValue(i) + gpsExpensesColumn.GetValue(i)
+ subsidyExpensesColumn.GetValue(i) + subsidyExpensesColumn.GetValue(i)
- (i == 1 - (i == 1
? preparedValues.SubsidySum ? preparedValues.SubsidySum
: 0) : 0)
); );
Values[0] = Sum; Values[0] = Sum;
}
} }
} }

View File

@ -18,329 +18,328 @@ using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn;
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;
namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation;
public static partial class CalculateManager
{ {
public static partial class CalculateManager public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation)
{ {
public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
var constants = new Constants.Calculation();
var postValues = new PostValues.PostValues();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2;
try
{ {
var preparedValues = requestCalculation.preparedValues; var dateColumn = new DateColumn(preparedValues.Nmper + 1);
var preparedPayments = requestCalculation.preparedPayments; dateColumn.ComputeValues(preparedValues, constants);
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues); var dateTempColumn = new DateTempColumn(maxColumnLength);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; dateTempColumn.ComputeValues(preparedValues);
var constants = new Constants.Calculation(); var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var postValues = new PostValues.PostValues(); var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
? preparedValues.Nmper + 1 gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
: preparedValues.NmperDeprecation + 2; gpsGrColumn.PostCheck();
try 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 nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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 sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ContractEconomy.Validate();
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues.GetValues(),
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
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 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.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
nsibBruttoGrColumn.ComputeValues(preparedValues);
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn
, postValues
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var sumWithVatColumn =
new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants,
percentPaymentColumn, postValues);
sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected));
sumWithVatColumn.PostCheck();
sumColumn.PostCheck();
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues();
cashflowMsfoColumn.PostCheck(additionalData);
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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 sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ContractEconomy.Validate();
return new ManagerResult
{ {
PostValues = postValues.GetValues(), dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, tlmGrColumn,
dateTempColumn, gpsGrColumn,
percentPaymentColumn, sumColumn,
kaskoNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, negativeCashflowColumn,
insuranceBonusExpensesColumn, nsibBruttoGrColumn,
comissionBonusExpensesColumn, taxColumn,
expensesColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, subsidyExpensesColumn
npvFinal2Column, }
sumCreditColumn, };
creditColumn, }
subsidyExpensesColumn catch (Exception ex)
} {
}; return new ManagerResult
}
catch (Exception ex)
{ {
return new ManagerResult Errors = new List<string>
{ {
Errors = new List<string> ex.Message
{ }
ex.Message };
}
};
}
} }
} }
} }

View File

@ -18,328 +18,327 @@ using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn;
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;
namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation;
public static partial class CalculateManager
{ {
public static partial class CalculateManager public static ManagerResult CalculateDefault(RequestCalculation requestCalculation)
{ {
public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors};
var constants = new Constants.Calculation();
var postValues = new PostValues.PostValues();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation
? preparedValues.Nmper + 1
: preparedValues.NmperDeprecation + 2;
try
{ {
var preparedValues = requestCalculation.preparedValues; var dateColumn = new DateColumn(preparedValues.Nmper + 1);
var preparedPayments = requestCalculation.preparedPayments; dateColumn.ComputeValues(preparedValues, constants);
var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedValues(preparedValues); var dateTempColumn = new DateTempColumn(maxColumnLength);
if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; dateTempColumn.ComputeValues(preparedValues);
var constants = new Constants.Calculation(); var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
var postValues = new PostValues.PostValues(); var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
kaskoNmperGrColumn.PostCheck();
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
tlmGrColumn.PostCheck();
var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1);
? preparedValues.Nmper + 1 gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
: preparedValues.NmperDeprecation + 2; gpsGrColumn.PostCheck();
try 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
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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 sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ContractEconomy.Validate();
return new ManagerResult
{ {
var dateColumn = new DateColumn(preparedValues.Nmper + 1); PostValues = postValues.GetValues(),
dateColumn.ComputeValues(preparedValues, constants); PreparedValues = preparedValues,
Columns = new
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 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.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
, nsibBruttoGrColumn);
var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1);
subsidyExpensesColumn.ComputeValues(preparedValues);
var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues,
preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn,
subsidyExpensesColumn);
cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
cashflowMsfoColumn.PostCheck(additionalData);
sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
vatColumn.PostCheck();
var sumWithVatColumn =
new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants);
sumWithVatColumn.ComputeValues();
sumWithVatColumn.PostCheck();
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();
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
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);
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 sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2);
sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn);
var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4);
creditColumn.ComputeValues(preparedValues, sumCreditColumn);
postValues.PriceUP.ComputeValue(preparedValues, sumColumn);
postValues.PriceUP_PR.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year.ComputeValue(preparedValues, postValues);
postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues);
postValues.NPVNI.ComputeValue(preparedValues, npvColumn);
postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn);
postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn);
postValues.ContractEconomy.Validate();
return new ManagerResult
{ {
PostValues = postValues.GetValues(), dateColumn,
PreparedValues = preparedValues, dateTempColumn,
Columns = new percentPaymentColumn,
{ kaskoNmperGrColumn,
dateColumn, tlmGrColumn,
dateTempColumn, gpsGrColumn,
percentPaymentColumn, sumColumn,
kaskoNmperGrColumn, vatColumn,
tlmGrColumn, sumWithVatColumn,
gpsGrColumn, acceptSumColumn,
sumColumn, acceptKaskoColumn,
vatColumn, acceptOsagoColumn,
sumWithVatColumn, acceptInsuranceColumn,
acceptSumColumn, deprecationLpColumn,
acceptKaskoColumn, deprecationLdColumn,
acceptOsagoColumn, deprecationColumn,
acceptInsuranceColumn, npvBonusExpensesColumn,
deprecationLpColumn, kaskoBonusGrSumColumn,
deprecationLdColumn, agentComissionExpensesColumn,
deprecationColumn, ratExpensesColumn,
npvBonusExpensesColumn, transExprensesColumn,
kaskoBonusGrSumColumn, nsibExpensesColumn,
agentComissionExpensesColumn, tlmExpensesColumn,
ratExpensesColumn, gpsExpensesColumn,
transExprensesColumn, registrExpensesColumn,
nsibExpensesColumn, insuranceBonusExpensesColumn,
tlmExpensesColumn, comissionBonusExpensesColumn,
gpsExpensesColumn, expensesColumn,
registrExpensesColumn, negativeCashflowColumn,
insuranceBonusExpensesColumn, nsibBruttoGrColumn,
comissionBonusExpensesColumn, taxColumn,
expensesColumn, cashflowColumn,
negativeCashflowColumn, cashflowLeasingColumn,
nsibBruttoGrColumn, cashflowMsfoColumn,
taxColumn, cashflowNpvColumn,
cashflowColumn, npvWeightColumn,
cashflowLeasingColumn, npvColumn,
cashflowMsfoColumn, irrGrColumn,
cashflowNpvColumn, niColumn,
npvWeightColumn, interestColumn,
npvColumn, cashflowNsibColumn,
irrGrColumn, revenueColumn,
niColumn, sumCurrentColumn,
interestColumn, sumCurrentNegativeColumn,
cashflowNsibColumn, sumCurrentInterestColumn,
revenueColumn, sumCurrentTlmColumn,
sumCurrentColumn, sumRepaymentColumn,
sumCurrentNegativeColumn, extraBonusSumColumn,
sumCurrentInterestColumn, cashflowMsfoFinalColumn,
sumCurrentTlmColumn, cashflowNpvFinalColumn,
sumRepaymentColumn, npvFinalColumn,
extraBonusSumColumn, directorBonusSumColumn,
cashflowMsfoFinalColumn, cashflowMsfoFinal2Column,
cashflowNpvFinalColumn, cashflowNpvFinal2Column,
npvFinalColumn, npvFinal2Column,
directorBonusSumColumn, sumCreditColumn,
cashflowMsfoFinal2Column, creditColumn,
cashflowNpvFinal2Column, subsidyExpensesColumn
npvFinal2Column, }
sumCreditColumn, };
creditColumn, }
subsidyExpensesColumn catch (Exception ex)
} {
}; return new ManagerResult
}
catch (Exception ex)
{ {
return new ManagerResult Errors = new List<string>
{ {
Errors = new List<string> ex.Message
{ }
ex.Message };
}
};
}
} }
} }
} }

View File

@ -2,22 +2,21 @@
using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Base.Columns;
using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Base.PostValues;
namespace EvoCalculator.Core.Calculation.v2.PostValues namespace EvoCalculator.Core.Calculation.v2.PostValues;
{
public class ContractEconomy : BasePostValue<decimal>
{
public void ComputeValue(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> creditColumn,
BaseColumn<decimal> directorBonusSumColumn)
{
Value = cashflowMSFOColumn.Values.Sum() + creditColumn.GetValue(0) +
directorBonusSumColumn.GetValue(0);
}
public void Validate() public class ContractEconomy : BasePostValue<decimal>
{ {
// if (Value < 0) public void ComputeValue(BaseColumn<decimal> cashflowMSFOColumn, BaseColumn<decimal> creditColumn,
// throw new Exception( BaseColumn<decimal> directorBonusSumColumn)
// "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ"); {
} Value = cashflowMSFOColumn.Values.Sum() + creditColumn.GetValue(0) +
directorBonusSumColumn.GetValue(0);
}
public void Validate()
{
// if (Value < 0)
// throw new Exception(
// "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ");
} }
} }

View File

@ -1,28 +1,27 @@
namespace EvoCalculator.Core.Calculation.v2.PostValues namespace EvoCalculator.Core.Calculation.v2.PostValues;
public class PostValues : v1.PostValues.PostValues
{ {
public class PostValues : v1.PostValues.PostValues public ContractEconomy ContractEconomy;
public PostValues()
{ {
public ContractEconomy ContractEconomy; ContractEconomy = new ContractEconomy();
}
public PostValues() public override object GetValues()
{
return new
{ {
ContractEconomy = new ContractEconomy(); BaseCost = BaseCost.Value,
} BonusBase = BonusBase.Value,
PriceUP = PriceUP.Value,
public override object GetValues() PriceUP_PR = PriceUP_PR.Value,
{ PriceUP_Year = PriceUP_Year.Value,
return new PriceUP_Year_PR = PriceUP_Year_PR.Value,
{ NPVNI = NPVNI.Value,
BaseCost = BaseCost.Value, BonusResult = BonusResult.Value,
BonusBase = BonusBase.Value, ContractEconomy = ContractEconomy.Value
PriceUP = PriceUP.Value, };
PriceUP_PR = PriceUP_PR.Value,
PriceUP_Year = PriceUP_Year.Value,
PriceUP_Year_PR = PriceUP_Year_PR.Value,
NPVNI = NPVNI.Value,
BonusResult = BonusResult.Value,
ContractEconomy = ContractEconomy.Value
};
}
} }
} }

Some files were not shown because too many files have changed in this diff Show More