From 9cdb9bc586d97a20655f59efa4298997d3cb6f61 Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Wed, 1 Feb 2023 09:35:54 +0300 Subject: [PATCH] merge release/dyn-2121_supplier-financing --- .../v2/Columns/CreditColumn.cs | 21 ++++++++++++++++--- .../Calculation/CalculateByTotalExpected.cs | 1 + .../Managers/Calculation/CalculateDefault.cs | 1 + .../Models/Prepared/PreparedValues.cs | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs index b7fb709..3159570 100644 --- a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs +++ b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Base.Columns; +using System; +using System.Linq; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v2.Columns; @@ -11,12 +13,25 @@ public class CreditColumn : BaseColumnWithSum public void ComputeValues(PreparedValues preparedValues, BaseColumn sumCreditColumn) { - Values[1] = -sumCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12; + 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; + Values[i] = -sumCreditColumn.GetValue(i - 1) * (decimal)preparedValues.LoanRate / 12; else Values[i] = 0; Values[0] = Sum; } + + public void PostCheck(PreparedValues preparedValues, BaseColumn sumColumn) + { + var financingSupplierCreditSum = Math.Abs(this.Values.Skip(1).Take(4).Sum()); + if (preparedValues.SupplierFinancing && + (sumColumn.GetValue(1) - preparedValues.SubsidySum) < financingSupplierCreditSum) + { + var constants = new Constants.Calculation(); + var expectedPrepaid = Math.Round(financingSupplierCreditSum * (decimal)(1 + constants.VatValue), 2); + throw new Exception( + $"Сумма аванса не покрывает потенциальные потери по финансированию поставщика. Увеличьте размер аванса до {expectedPrepaid}"); + } + } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs index 3687ea4..dec3c4b 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs @@ -268,6 +268,7 @@ public static partial class CalculateManager var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); creditColumn.ComputeValues(preparedValues, sumCreditColumn); + creditColumn.PostCheck(preparedValues, sumColumn); var sumVATCreditColumn = new SumVATCreditColumn(12 + 2); sumVATCreditColumn.ComputeValues(preparedValues, vatColumn); diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs index b341fd6..deabbaf 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs @@ -267,6 +267,7 @@ public static partial class CalculateManager var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); creditColumn.ComputeValues(preparedValues, sumCreditColumn); + creditColumn.PostCheck(preparedValues, sumColumn); var sumVATCreditColumn = new SumVATCreditColumn(12 + 2); sumVATCreditColumn.ComputeValues(preparedValues, vatColumn); diff --git a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs index 61960c1..93e0c4e 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs @@ -182,4 +182,5 @@ public class PreparedValues public decimal DirectorBonusFinGAP { get; set; } public decimal InsuranceEvoKasko { get; set; } public decimal InsuranceBonusLoss { get; set; } + public bool SupplierFinancing { get; set; } } \ No newline at end of file