2020-12-16 16:57:53 +03:00

44 lines
1.6 KiB
C#

using System;
using System.Linq;
using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class SumColumn : BaseColumnWithXIRR
{
private readonly PercentPaymentColumn _percentPaymentColumn;
private readonly PreparedValues _preparedValues;
private readonly PostValues _postValues;
public SumColumn(int count, DateTempColumn dateTempColumn
, PreparedValues preparedValues
, PercentPaymentColumn percentPaymentColumn, PostValues postValues) : base(count, dateTempColumn)
{
_preparedValues = preparedValues;
_percentPaymentColumn = percentPaymentColumn;
_postValues = postValues;
}
public void ComputeValues(decimal x)
{
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;
}
public void PostCheck()
{
new CheckTools<decimal>().CheckColumnForZeroValue(Values);
if (Values[1] / Values.Skip(1).Sum() >= 0.5m)
{
throw new Exception(
"Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж");
}
}
}
}