From d8a271af8f8aecfc5d06fc7cd8c937149512ab7f Mon Sep 17 00:00:00 2001 From: vchikalkin Date: Thu, 15 Dec 2022 11:15:46 +0300 Subject: [PATCH] merge release/dyn-1999_check-bkk-agency-perc --- .../v1/Managers/CalculateByTotalExpected.cs | 2 +- .../v1/Managers/CalculateDefault.cs | 2 +- .../Calculation/CalculateByTotalExpected.cs | 2 +- .../Managers/Calculation/CalculateDefault.cs | 2 +- .../Calculation/CalculateByTotalExpected.cs | 2 +- .../Managers/Calculation/CalculateDefault.cs | 2 +- EvoCalculator.Core.Constants/Calculation.cs | 1 + .../Models/Request/RequestCalculation.cs | 5 ++++- .../Models/Request/lib/AdditionalData.cs | 1 + .../Calculation/ValidationTests.cs | 14 ++++++------- .../Validation/ValidatePreparedValues.cs | 20 ++++++++++++++++--- 11 files changed, 36 insertions(+), 17 deletions(-) diff --git a/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs index 907beb2..680ba33 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateByTotalExpected.cs @@ -15,7 +15,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); diff --git a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs index 82a4b57..35a256a 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/CalculateDefault.cs @@ -15,7 +15,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs index f207bda..bd4ac62 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs @@ -28,7 +28,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs index cfe0d6e..bd579e6 100644 --- a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs @@ -28,7 +28,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs index 73379ed..3687ea4 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs @@ -31,7 +31,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs index e3eca25..b341fd6 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs @@ -31,7 +31,7 @@ public static partial class CalculateManager var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + var validationErrors = new Validation().ValidateRequest(requestCalculation); if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); diff --git a/EvoCalculator.Core.Constants/Calculation.cs b/EvoCalculator.Core.Constants/Calculation.cs index c3be457..62b3951 100644 --- a/EvoCalculator.Core.Constants/Calculation.cs +++ b/EvoCalculator.Core.Constants/Calculation.cs @@ -13,4 +13,5 @@ public class Calculation public double VatValue = 0.2; public decimal MinBonus = 100; public double DeltaIRR = 0.02; + public double ESN = 1.271; } \ 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 2a657a7..40300de 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs @@ -1,4 +1,7 @@ #nullable enable +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Common.Request; @@ -9,6 +12,6 @@ public class RequestCalculation public PreparedValues preparedValues { get; set; } public PreparedPayments preparedPayments { get; set; } public AdditionalData? additionalData { get; set; } - + public Flags? Flags { get; set; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Models/Calculation/Models/Request/lib/AdditionalData.cs b/EvoCalculator.Core.Models/Calculation/Models/Request/lib/AdditionalData.cs index f8a01f3..ad635a8 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Request/lib/AdditionalData.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Request/lib/AdditionalData.cs @@ -4,4 +4,5 @@ public class AdditionalData { public double? MinCashflowMSFONominal { get; set; } public double? MaxCashflowMSFONominal { get; set; } + public double? MaxAllAgencyPerc { get; set; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs index ee8b53b..85f10cc 100644 --- a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs @@ -25,7 +25,7 @@ public class ValidationTests DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.Empty(errors); } @@ -46,7 +46,7 @@ public class ValidationTests DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.Empty(errors); } @@ -67,7 +67,7 @@ public class ValidationTests DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.Empty(errors); } @@ -89,7 +89,7 @@ public class ValidationTests } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.Empty(errors); } @@ -111,7 +111,7 @@ public class ValidationTests } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.NotEmpty(errors); } @@ -133,7 +133,7 @@ public class ValidationTests } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.NotEmpty(errors); } @@ -155,7 +155,7 @@ public class ValidationTests } }; - var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); + var errors = new Validation().ValidateRequest(requestCalculation); Assert.Empty(errors); } } \ No newline at end of file diff --git a/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs b/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs index 06de3ad..d6ea867 100644 --- a/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs +++ b/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs @@ -1,14 +1,19 @@ -using System.Collections.Generic; -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using System; +using System.Collections.Generic; +using EvoCalculator.Core.Constants; +using EvoCalculator.Core.Models.Calculation.Models.Request; namespace EvoCalculator.Core.Tools.Validation; public class Validation { - public List ValidatePreparedValues(PreparedValues preparedValues) + public List ValidateRequest(RequestCalculation requestCalculation) { var errors = new List(); + var preparedValues = requestCalculation.preparedValues; + var additionalData = requestCalculation.additionalData; + if (preparedValues.AcceptSum <= 0) errors.Add("Стоимость ПЛ с учетом скидки не указана или меньше или равна 0"); @@ -27,6 +32,15 @@ public class Validation errors.Add( "Первый платеж по графику более 50% от стоимости ПЛ с учетом скидки. Необходимо уменьшить первый платеж"); + var AllAgencyPerc = Math.Round( + ((preparedValues.AgentsSum + preparedValues.DoubleAgentsSum) / (decimal)new Calculation().ESN + + preparedValues.DeliverySum + + preparedValues.BrokerOfDeliverySum + preparedValues.BrokerSum + + preparedValues.FinancialDeptOfDeliverySum) / preparedValues.AcceptSum * 100, 2); + + if (additionalData.MaxAllAgencyPerc != null && AllAgencyPerc > (decimal)additionalData.MaxAllAgencyPerc) + errors.Add("По итогам расчета сумма заложенного АВ превышает максимальный уровень % АВ по Предложению"); + return errors; } } \ No newline at end of file