diff --git a/EvoCalculator.Core.Calculation/CheckTools.cs b/EvoCalculator.Core.Calculation/CheckTools.cs new file mode 100644 index 0000000..8a7b7f4 --- /dev/null +++ b/EvoCalculator.Core.Calculation/CheckTools.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace EvoCalculator.Core.Calculation +{ + public class CheckTools + { + private string ErrorZeroValue = + "Невозможно осуществить расчет графика. При заданных параметрах получаются отрицательные значения"; + + public void CheckColumnForZeroValue(IEnumerable Values) + { + if (Values.Skip(1).ToList().Exists(x => x < 0)) + { + throw new Exception(ErrorZeroValue); + } + } + + public void CheckColumnForZeroValue(IEnumerable Values) + { + if (Values.Skip(1).ToList().Exists(x => x <= 0)) + { + throw new Exception(ErrorZeroValue); + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs b/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs index e866320..6056b24 100644 --- a/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs @@ -8,11 +8,18 @@ namespace EvoCalculator.Core.Calculation.Columns { } + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) { for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment; Values[0] = -XNPV; + + PostCheck(); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs index 3ad7864..3e349a6 100644 --- a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs @@ -8,6 +8,11 @@ namespace EvoCalculator.Core.Calculation.Columns rate) { } + + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) { @@ -29,6 +34,8 @@ namespace EvoCalculator.Core.Calculation.Columns Values[0] = -XNPV; + + PostCheck(); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs index 09ed026..456fcbf 100644 --- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs @@ -39,6 +39,8 @@ namespace EvoCalculator.Core.Calculation.Columns private void PostCheck() { + new CheckTools().CheckColumnForZeroValue(Values); + if (Values[1] / Values.Skip(1).Sum() >= 0.5m) { throw new Exception( diff --git a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs index 6ab600e..d2d32d4 100644 --- a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs @@ -8,6 +8,11 @@ namespace EvoCalculator.Core.Calculation.Columns { } + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues, SumCurrentColumn sumCurrentColumn, SumCurrentNegativeColumn sumCurrentNegativeColumn, SumCurrentInterestColumn sumCurrentInterestColumn, SumCurrentTLMColumn sumCurrentTlmColumn) @@ -17,6 +22,8 @@ namespace EvoCalculator.Core.Calculation.Columns sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) - sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) * (decimal) preparedValues.Repayment; + + PostCheck(); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs index 40dfe80..2ef4bd0 100644 --- a/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs @@ -8,6 +8,11 @@ namespace EvoCalculator.Core.Calculation.Columns { } + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues) { Values[0] = 0; @@ -18,6 +23,8 @@ namespace EvoCalculator.Core.Calculation.Columns Values[i] = (decimal) (1 + constants.VatValue) * sumColumn.Values[i]; Values[0] = Sum; + + PostCheck(); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs b/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs index 34878d6..3ac1743 100644 --- a/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs @@ -8,11 +8,18 @@ namespace EvoCalculator.Core.Calculation.Columns { } + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) { for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment; Values[0] = -XNPV; + + PostCheck(); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/Columns/VATColumn.cs b/EvoCalculator.Core.Calculation/Columns/VATColumn.cs index 065d481..46f6725 100644 --- a/EvoCalculator.Core.Calculation/Columns/VATColumn.cs +++ b/EvoCalculator.Core.Calculation/Columns/VATColumn.cs @@ -8,6 +8,11 @@ namespace EvoCalculator.Core.Calculation.Columns { } + private void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues) { Values[0] = 0; @@ -17,6 +22,8 @@ namespace EvoCalculator.Core.Calculation.Columns for (var i = 2; i < Values.Length; i++) Values[i] = (decimal) constants.VatValue * sumColumn.Values[i]; Values[0] = Sum; + + PostCheck(); } } } \ No newline at end of file