diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 166b9ef..2176b7d 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -156,6 +156,7 @@
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index 271c436..7050420 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,13 +14,20 @@
-
-
+
-
+
+
+
+
+
+
+
+
+
@@ -33,41 +40,44 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
-
-
@@ -219,7 +239,7 @@
-
+
1602593830686
@@ -291,7 +311,21 @@
1605810502844
-
+
+ 1606071326642
+
+
+
+ 1606071326642
+
+
+ 1606071900277
+
+
+
+ 1606071900277
+
+
@@ -324,7 +358,9 @@
-
+
+
+
@@ -343,131 +379,131 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -476,10 +512,10 @@
-
+
-
+
@@ -489,15 +525,15 @@
-
+
-
-
+
+
-
+
@@ -514,11 +550,11 @@
-
-
+
+
-
+
@@ -532,17 +568,17 @@
- file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
- 64
-
+ file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
+ 13
+
-
+
-
+
-
+
diff --git a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
index 38fa216..2067276 100644
--- a/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/CashflowMSFOColumn.cs
@@ -1,4 +1,6 @@
-using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using System;
+using EvoCalculator.Core.Models.Calculation.Models;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
@@ -8,6 +10,26 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
+ 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.MaxCashflowMSFONominal}");
+ }
+
+ if (additionalData.MaxCashflowMSFONominal != null)
+ if (Nominal >= additionalData.MaxCashflowMSFONominal / 100)
+ {
+ throw new Exception(
+ $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}");
+ }
+ }
+ }
+
public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn,
NegativeCashflowColumn negativeCashflowColumn,
NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn,
diff --git a/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs b/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs
index 6056b24..339c9ab 100644
--- a/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -18,8 +18,6 @@ namespace EvoCalculator.Core.Calculation.Columns
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/InterestColumn.cs b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs
index 62ab046..dfc59ec 100644
--- a/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/InterestColumn.cs
@@ -1,4 +1,7 @@
-namespace EvoCalculator.Core.Calculation.Columns
+using System;
+using System.Linq;
+
+namespace EvoCalculator.Core.Calculation.Columns
{
public class InterestColumn : BaseColumn
{
@@ -6,6 +9,17 @@
{
}
+ public void PostCheck(SumColumn sumColumn)
+ {
+ for (var i = 0; i < Values.Skip(1).ToList().Count; i++)
+ if (Values[i] > sumColumn.Values[i])
+ {
+ throw new Exception(
+ "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж");
+ }
+ }
+
+
public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn)
{
for (var i = 2; i < Values.Length; i++)
diff --git a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
index 3e349a6..736b7fc 100644
--- a/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs
@@ -9,7 +9,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -34,8 +34,6 @@ 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 456fcbf..613e6ce 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
@@ -37,7 +37,7 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[^1] = _preparedValues.LastPaymentSum;
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
@@ -62,8 +62,6 @@ namespace EvoCalculator.Core.Calculation.Columns
// , focusPercentage: 100
// , trimFinalInputValue: true
));
-
- PostCheck();
}
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs
index d2d32d4..8fb5b30 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumRepaymentColumn.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -22,8 +22,6 @@ 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 2ef4bd0..3d30172 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -23,8 +23,6 @@ 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 3ac1743..9b12a0e 100644
--- a/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -18,8 +18,6 @@ namespace EvoCalculator.Core.Calculation.Columns
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 46f6725..4a54bb7 100644
--- a/EvoCalculator.Core.Calculation/Columns/VATColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/VATColumn.cs
@@ -8,7 +8,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- private void PostCheck()
+ public void PostCheck()
{
new CheckTools().CheckColumnForZeroValue(Values);
}
@@ -22,8 +22,6 @@ 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
diff --git a/EvoCalculator.Core.Models/Calculation/Models/AdditionalData.cs b/EvoCalculator.Core.Models/Calculation/Models/AdditionalData.cs
new file mode 100644
index 0000000..bb306ea
--- /dev/null
+++ b/EvoCalculator.Core.Models/Calculation/Models/AdditionalData.cs
@@ -0,0 +1,8 @@
+namespace EvoCalculator.Core.Models.Calculation.Models
+{
+ public class AdditionalData
+ {
+ public double? MinCashflowMSFONominal { get; set; }
+ public double? MaxCashflowMSFONominal { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs b/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs
index 855e914..f4dc666 100644
--- a/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs
+++ b/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs
@@ -6,5 +6,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Request
{
public PreparedValues preparedValues { get; set; }
public PreparedPayments preparedPayments { get; set; }
+
+ public AdditionalData? additionalData { get; set; }
}
}
\ No newline at end of file
diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
index 0daf9d8..c3ebf59 100644
--- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs
+++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
@@ -26,6 +26,7 @@ namespace EvoCalculator.Core.Controllers.V1
{
var preparedValues = requestCalculation.preparedValues;
var preparedPayments = requestCalculation.preparedPayments;
+ var additionalData = requestCalculation.additionalData;
var validationErrors = new Validation().ValidatePreparedData(requestCalculation);
@@ -60,15 +61,18 @@ namespace EvoCalculator.Core.Controllers.V1
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 gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
+ gpsGrColumn.PostCheck();
postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
@@ -78,12 +82,15 @@ namespace EvoCalculator.Core.Controllers.V1
, preparedValues
, percentPaymentColumn, postValues);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
+ sumColumn.PostCheck();
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
+ vatColumn.PostCheck();
var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1);
sumWithVatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
+ sumWithVatColumn.PostCheck();
var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1);
acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn);
@@ -169,6 +176,7 @@ namespace EvoCalculator.Core.Controllers.V1
var cashflowMsfoColumn = new CashflowMSFOColumn(preparedValues.Nmper + 1, dateTempColumn);
cashflowMsfoColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
+ cashflowMsfoColumn.PostCheck(additionalData);
var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.NmperDeprecation + 2);
cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
@@ -190,6 +198,7 @@ namespace EvoCalculator.Core.Controllers.V1
var interestColumn = new InterestColumn(preparedValues.Nmper + 1);
interestColumn.ComputeValues(irrGrColumn, niColumn);
+ interestColumn.PostCheck(sumColumn);
var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
nsibBruttoGrColumn, nsibExpensesColumn);
@@ -215,6 +224,7 @@ namespace EvoCalculator.Core.Controllers.V1
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);