diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs index 13f7a19..b7fb709 100644 --- a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs +++ b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs @@ -9,7 +9,7 @@ public class CreditColumn : BaseColumnWithSum { } - public void ComputeValues(PreparedValues preparedValues, SumCreditColumn sumCreditColumn) + public void ComputeValues(PreparedValues preparedValues, BaseColumn sumCreditColumn) { Values[1] = -sumCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12; for (var i = 2; i < Values.Length; i++) diff --git a/EvoCalculator.Core.Calculation/v3/Columns/CreditVATColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/CreditVATColumn.cs new file mode 100644 index 0000000..f1a12b6 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v3/Columns/CreditVATColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v3.Columns; + +public class CreditVATColumn : BaseColumnWithSum +{ + public CreditVATColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn sumVATCreditColumn) + { + Values[1] = -sumVATCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12; + for (var i = 2; i < Values.Length; i++) + if (GetValue(i - 1) < 0) + Values[i] = -sumVATCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12; + else + Values[i] = 0; + Values[0] = Sum; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs new file mode 100644 index 0000000..8a2f1af --- /dev/null +++ b/EvoCalculator.Core.Calculation/v3/Columns/SumCreditColumn.cs @@ -0,0 +1,23 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v3.Columns; + +public class SumCreditColumn : BaseColumn +{ + public SumCreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn sumWithVATColumn) + { + Values[1] = preparedValues.PlPriceWithVAT - sumWithVATColumn.GetValue(1); + Values[2] = Values[1]; + + for (var i = 3; i < Values.Length; i++) + if (GetValue(i - 1) > 0) + Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod; + else + Values[i] = 0; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v3/Columns/SumVATCreditColumn.cs b/EvoCalculator.Core.Calculation/v3/Columns/SumVATCreditColumn.cs new file mode 100644 index 0000000..cc1f874 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v3/Columns/SumVATCreditColumn.cs @@ -0,0 +1,23 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v3.Columns; + +public class SumVATCreditColumn : BaseColumn +{ + public SumVATCreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn VATColumn) + { + Values[1] = VATColumn.GetValue(0) - preparedValues.PlPriceVAT; + Values[2] = Values[1]; + + for (var i = 3; i < Values.Length; i++) + if (GetValue(i - 1) > 0) + Values[i] = GetValue(i - 1) - GetValue(2) / 12; + else + Values[i] = 0; + } +} \ 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 d9f5740..0208c69 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateByTotalExpected.cs @@ -17,6 +17,7 @@ using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperG using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn; using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn; using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; @@ -255,11 +256,18 @@ public static partial class CalculateManager npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn); var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn); + sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn); var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); creditColumn.ComputeValues(preparedValues, sumCreditColumn); + var sumVATCreditColumn = new SumVATCreditColumn(12 + 2); + sumVATCreditColumn.ComputeValues(preparedValues, vatColumn); + + var creditVATColumn = new CreditVATColumn(12 + 4); + creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn); + + postValues.ComputePriceUP(sumColumn); postValues.ComputePriceUP_PR(); postValues.ComputePriceUP_Year(); @@ -267,6 +275,7 @@ public static partial class CalculateManager postValues.ComputeNPVNI(npvColumn); postValues.ComputeBonusResult(npvBonusExpensesColumn); postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn); + postValues.ComputeContractEconomyWithVAT(creditVATColumn); return new ManagerResult @@ -333,6 +342,8 @@ public static partial class CalculateManager npvFinal2Column, sumCreditColumn, creditColumn, + sumVATCreditColumn, + creditVATColumn, subsidyExpensesColumn } }; diff --git a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs index 847b4b4..b071f08 100644 --- a/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v3/Managers/Calculation/CalculateDefault.cs @@ -17,6 +17,7 @@ using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperG using NegativeCashflowColumn = EvoCalculator.Core.Calculation.v3.Columns.NegativeCashflowColumn; using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using SumCreditColumn = EvoCalculator.Core.Calculation.v3.Columns.SumCreditColumn; using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; @@ -254,10 +255,16 @@ public static partial class CalculateManager npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn); var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); - sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn); + sumCreditColumn.ComputeValues(preparedValues, sumWithVatColumn); var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); creditColumn.ComputeValues(preparedValues, sumCreditColumn); + + var sumVATCreditColumn = new SumVATCreditColumn(12 + 2); + sumVATCreditColumn.ComputeValues(preparedValues, vatColumn); + + var creditVATColumn = new CreditVATColumn(12 + 4); + creditVATColumn.ComputeValues(preparedValues, sumVATCreditColumn); postValues.ComputePriceUP(sumColumn); postValues.ComputePriceUP_PR(); @@ -266,6 +273,7 @@ public static partial class CalculateManager postValues.ComputeNPVNI(npvColumn); postValues.ComputeBonusResult(npvBonusExpensesColumn); postValues.ComputeContractEconomy(cashflowMsfoColumn, creditColumn, directorBonusSumColumn); + postValues.ComputeContractEconomyWithVAT(creditVATColumn); return new ManagerResult @@ -332,6 +340,8 @@ public static partial class CalculateManager npvFinal2Column, sumCreditColumn, creditColumn, + sumVATCreditColumn, + creditVATColumn, subsidyExpensesColumn } }; diff --git a/EvoCalculator.Core.Calculation/v3/PostValues.cs b/EvoCalculator.Core.Calculation/v3/PostValues.cs index 2b93460..3523e0c 100644 --- a/EvoCalculator.Core.Calculation/v3/PostValues.cs +++ b/EvoCalculator.Core.Calculation/v3/PostValues.cs @@ -6,6 +6,8 @@ namespace EvoCalculator.Core.Calculation.v3; public class PostValues : v2.PostValues { + public decimal ContractEconomyWithVAT; + public PostValues(PreparedValues preparedValues) : base(preparedValues) { } @@ -20,4 +22,9 @@ public class PostValues : v2.PostValues (decimal) _preparedValues.Leasing0K + _preparedValues.NsibBrutto; } + + public void ComputeContractEconomyWithVAT(BaseColumn creditVATColumn) + { + ContractEconomyWithVAT = this.ContractEconomy + creditVATColumn.GetValue(0); + } } \ No newline at end of file diff --git a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs index 1d35575..de715dd 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs @@ -42,6 +42,8 @@ public class PreparedValues public int ScheduleOfPayments { get; set; } public decimal ComissionRub { get; set; } public decimal PlPrice { get; set; } + public decimal PlPriceWithVAT { get; set; } + public decimal PlPriceVAT { get; set; } public decimal Discount { get; set; } public decimal AcceptSum { get; set; } public string PlTypeId { get; set; } diff --git a/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs b/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs index c546b31..a91a579 100644 --- a/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/PostCalculation/Models/Prepared/PreparedValues.cs @@ -6,6 +6,7 @@ namespace EvoCalculator.Core.Models.PostCalculation.Models.Prepared; public class PreparedValues { + public DateTime CalcDate { get; set; } = DateTime.Now; public DateTime DateInput { get; set; } public DateTime DogDate { get; set; } public decimal Leasing0K { get; set; } @@ -32,6 +33,9 @@ public class PreparedValues public ChangingValue Nmper { get; set; } public ChangingValue PlPrice { get; set; } + + public decimal PlPriceWithVAT { get; set; } + public decimal PlPriceVAT { get; set; } public ChangingValue Discount { get; set; } public decimal AgentFLSum { get; set; } diff --git a/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj b/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj index 65c69a5..7dc7779 100644 --- a/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj +++ b/EvoCalculator.Core.PostCalculation/EvoCalculator.Core.PostCalculation.csproj @@ -10,8 +10,4 @@ - - - - diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditVATColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditVATColumn.cs new file mode 100644 index 0000000..a0fee9d --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/CreditVATColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class CreditVATColumn : BaseColumnWithSum +{ + public CreditVATColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn nextSumVATCreditColumn) + { + Values[1] = -nextSumVATCreditColumn.GetValue(1) * (decimal) preparedValues.LoanRate / 12; + for (var i = 2; i < Values.Length; i++) + if (GetValue(i - 1) < 0) + Values[i] = -nextSumVATCreditColumn.GetValue(i - 1) * (decimal) preparedValues.LoanRate / 12; + else + Values[i] = 0; + Values[0] = Sum; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs new file mode 100644 index 0000000..3c3d9b8 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumCreditColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class SumCreditColumn : BaseColumn +{ + public SumCreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn nextSumWithVATColumn) + { + Values[1] = Values[2] = preparedValues.PlPriceWithVAT - nextSumWithVATColumn.GetValue(1); + + for (var i = 3; i < Values.Length; i++) + if (GetValue(i - 1) > 0) + Values[i] = GetValue(i - 1) - GetValue(2) / preparedValues.LoanRatePeriod; + else + Values[i] = 0; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumVATCreditColumn.cs b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumVATCreditColumn.cs new file mode 100644 index 0000000..5fd91c6 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Columns/Next/SumVATCreditColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2.Columns.Next; + +public class SumVATCreditColumn : BaseColumn +{ + public SumVATCreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, BaseColumn nextVATColumn) + { + Values[1] = Values[2] = nextVATColumn.GetValue(0) - preparedValues.PlPriceVAT; + + for (var i = 3; i < Values.Length; i++) + if (GetValue(i - 1) > 0) + Values[i] = GetValue(i - 1) - GetValue(2) / 12; + else + Values[i] = 0; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs new file mode 100644 index 0000000..c0be380 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByIRRAndSum.cs @@ -0,0 +1,303 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Next.DateTempColumn; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; +using SumVATCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumVATCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult CalculateByIRRAndSum(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(preparedValues, currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Next + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) + { + techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); + techNextTlmDateColumn.ComputeValues(techTlmData); + techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); + techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + techNextTlmCostColumn.PostCheck(); + techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, currentTablePayments); + + + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); + + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + + var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants); + techNextSumWithVATColumn.ComputeValues(); + /* + * TECH + */ + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + + var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); + nextSumWithVATColumn.ComputeValues(techNextSumWithVATColumn.GetValue(0)); + nextSumColumn.PostCheck(); + nextVATColumn.PostCheck(); + nextSumWithVATColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, + + techNextDateColumn, + techNextDateTempColumn, + techNextTlmDateColumn, + techNextTlmCostColumn, + techNextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextVATColumn, + nextSumWithVATColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs new file mode 100644 index 0000000..6674906 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateByTotalExpected.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + + var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); + nextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected); + nextSumWithVATColumn.PostCheck(); + nextVATColumn.PostCheck(); + nextSumColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextVATColumn, + nextSumWithVATColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs new file mode 100644 index 0000000..6e43629 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/CalculateDefault.cs @@ -0,0 +1,252 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + nextSumColumn.ComputeValues((decimal) currentSumColumn.IRR + preparedValues.IRRDelta); + nextSumColumn.PostCheck(); + nextSumColumn.RoundValues(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); + + var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants); + nextSumWithVATColumn.ComputeValues(); + nextVATColumn.PostCheck(); + nextSumWithVATColumn.PostCheck(); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, + + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextVATColumn, + nextSumWithVATColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs new file mode 100644 index 0000000..1f9ac00 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/ChangingLastPayment.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult ChangingLastPayment(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + // nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + // nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT4(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + nextSumColumn.ComputeValues(); + + var nextVATColumn = new VATColumnVT2(); + nextVATColumn.ComputeValues(preparedValues, currentTablePayments, constants); + + var nextSumWithVATColumn = new SumWithVATColumnVT3(); + nextSumWithVATColumn.ComputeValues(preparedValues, currentTablePayments, constants); + // nextSumWithVATColumn.PostCheck(); + // nextVATColumn.PostCheck(); + // nextSumColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT2(); + nextNSIBBruttoGrColumn.ComputeValues(currentTablePayments); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + // nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + // nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT2(); + nextSumRepaymentColumn.ComputeValues(currentTablePayments); + // nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + + var nextRevenueColumn = new RevenueColumnVT2(); + nextRevenueColumn.ComputeValues(currentTablePayments); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT2(); + nextNSIBExpensesColumn.ComputeValues(currentTablePayments); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextVATColumn, + nextSumWithVATColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs new file mode 100644 index 0000000..bae6c13 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/EarlyRedemption.cs @@ -0,0 +1,349 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult EarlyRedemption(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT2(preparedValues.Nmper.Current + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Current + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) + { + techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); + techNextTlmDateColumn.ComputeValues(techTlmData); + techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); + techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + techNextTlmCostColumn.PostCheck(); + techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Current + 1); + techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); + + + var techNextSumColumn = new SumColumnVT2(preparedValues.Nmper.Current + 1, techNextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Current + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + + var techNextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Current + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants, nextValues); + techNextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected); + + var techNextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Current + 1, + preparedValues, + currentTablePayments, techNextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + techNextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var techNextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Current + 1); + techNextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + var techNextCashflowMSFOColumn = new CashflowMSFOColumn(); + techNextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, techNextSumColumn, + techNextTlmCostColumn, + techNextSubsidyExpensesColumn, techNextNSIBBruttoGrColumn, nextTableInsurance, + techNextDateTempColumn, + techNextTlmDateColumn); + + var techNextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + techNextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, techNextDateTempColumn, + techNextCashflowMSFOColumn); + techNextCashflowMSFOColumn.PostCheck(); + + var techNextIRRGrColumn = new IRRGrColumn(techNextCashflowMSFOForNIColumn.Values.Length); + techNextIRRGrColumn.ComputeValues(techNextCashflowMSFOForNIColumn, techNextCashflowMSFOColumn); + + var techNextNIColumn = new NIColumn(techNextCashflowMSFOForNIColumn.Values.Length); + techNextNIColumn.ComputeValues(techNextCashflowMSFOForNIColumn, techNextIRRGrColumn); + + var techNextInterestColumn = new InterestColumn(techNextCashflowMSFOForNIColumn.Values.Length); + techNextInterestColumn.ComputeValues(techNextNIColumn, techNextIRRGrColumn); + + var techNextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Current + 1); + techNextSumCurrentColumn.ComputeValues(techNextSumWithVATColumn); + + var techNextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Current + 1); + techNextSumCurrentNegativeColumn.ComputeValues(techNextDateTempColumn, nextTableInsurance); + + var techNextSumCurrentInterestColumn = + new SumCurrentInterestColumn(techNextCashflowMSFOForNIColumn.Values.Length); + techNextSumCurrentInterestColumn.ComputeValues(techNextInterestColumn); + + var techNextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Current + 1); + techNextSumCurrentTLMColumn.ComputeValues(techNextTlmGrColumn); + + var techNextSumRepaymentColumn = new SumRepaymentColumnVT1(); + techNextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, + techNextSumCurrentNegativeColumn, + techNextSumCurrentColumn, techNextSumCurrentTLMColumn, techNextSumCurrentInterestColumn, + techNextSumWithVATColumn, + techNextDateTempColumn, techNextCashflowMSFOForNIColumn, constants); + + /* + * TECH + */ + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT3(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments, constants, + techNextSumRepaymentColumn); + nextSumColumn.ComputeValues(); + nextSumColumn.PostCheck(); + nextSumColumn.RoundValues(); + + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + nextVATColumn.ComputeValues(preparedValues, nextSumColumn, currentTablePayments, constants); + + var nextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants); + nextSumWithVATColumn.ComputeValues(); + nextVATColumn.PostCheck(); + nextSumWithVATColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + // nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + techNextDateColumn, + techNextDateTempColumn, + techNextTlmDateColumn, + techNextTlmCostColumn, + techNextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + techNextNSIBBruttoGrColumn, + techNextSubsidyExpensesColumn, + techNextCashflowMSFOColumn, + techNextCashflowMSFOForNIColumn, + techNextIRRGrColumn, + techNextNIColumn, + techNextInterestColumn, + techNextSumCurrentColumn, + techNextSumCurrentNegativeColumn, + techNextSumCurrentInterestColumn, + techNextSumCurrentTLMColumn, + techNextSumRepaymentColumn, + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextVATColumn, + nextSumWithVATColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs new file mode 100644 index 0000000..9ca527a --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithChangingTheTerm.cs @@ -0,0 +1,306 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult PERWithChangingTheTerm(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + var nextValues = new NextValues(preparedValues); + + /* + * TECH + */ + var techNextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + techNextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var techNextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); + techNextDateTempColumn.ComputeValues(preparedValues, techNextDateColumn); + + + TLMDateColumn techNextTlmDateColumn = null; + TLMCostColumn techNextTlmCostColumn = null; + TLMGrColumn techNextTlmGrColumn = null; + + var techTlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , techNextDateColumn); + + if (techTlmData != null) + { + techNextTlmDateColumn = new TLMDateColumn(techTlmData.Duration + 1); + techNextTlmDateColumn.ComputeValues(techTlmData); + techNextTlmCostColumn = new TLMCostColumn(techTlmData.Duration + 1, techNextTlmDateColumn.Values); + techNextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + techNextTlmCostColumn.PostCheck(); + techNextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + techNextTlmGrColumn.ComputeValues(techNextDateColumn, techNextTlmDateColumn, techNextTlmCostColumn); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, techNextTlmGrColumn, + currentTablePayments); + + + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, techNextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); + + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + + var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants); + techNextSumWithVATColumn.ComputeValues(); + + nextValues.ComputeSumTotal(techNextSumWithVATColumn); + nextValues.ComputeNmper(nextTablePayments, currentTablePayments); + /* + * TECH + */ + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(nextValues.Nmper + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(nextValues.Nmper + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(nextValues.Nmper + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + var nextSumColumn = new SumColumnVT2(nextValues.Nmper + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + + var nextVATColumn = new VATColumnVT1(nextValues.Nmper + 1); + + var nextSumWithVATColumn = new SumWithVATColumnVT2(nextValues.Nmper + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); + nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); + nextSumWithVATColumn.PostCheck(); + nextVATColumn.PostCheck(); + nextSumColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(nextValues.Nmper + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(nextValues.Nmper + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(nextValues.Nmper + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(nextValues.Nmper + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(nextValues.Nmper + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, + + techNextDateColumn, + techNextDateTempColumn, + techNextTlmDateColumn, + techNextTlmCostColumn, + techNextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextVATColumn, + nextSumWithVATColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs new file mode 100644 index 0000000..1138eec --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/PERWithoutChangingTheTerm.cs @@ -0,0 +1,265 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Current; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using DateTempColumn = EvoCalculator.Core.PostCalculation.v1.Columns.Current.DateTempColumn; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult PERWithoutChangingTheTerm(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + + + /* + * CURRENT + */ + var currentDateColumn = new DateColumn(preparedValues.Nmper.Current + 1); + currentDateColumn.ComputeValues(currentTablePayments); + + var currentDateTempColumn = + new DateTempColumn(preparedValues.Nmper.Current + 1); + currentDateTempColumn.ComputeValues(currentDateColumn); + + var currentSumColumn = new SumColumn(preparedValues.Nmper.Current + 1, currentDateTempColumn); + currentSumColumn.ComputeValues(preparedValues, currentTablePayments); + /* + * CURRENT + */ + + + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new v1.Columns.Next.DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var techNextSumColumn = new SumColumnVT1(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + techNextSumColumn.ComputeValues((decimal) currentSumColumn.IRR); + + var techNextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + techNextVATColumn.ComputeValues(preparedValues, techNextSumColumn, currentTablePayments, constants); + + var techNextSumWithVATColumn = new SumWithVATColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + techNextSumColumn, currentTablePayments, techNextVATColumn, constants); + techNextSumWithVATColumn.ComputeValues(); + + nextValues.ComputeSumTotal(techNextSumWithVATColumn); + + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, preparedValues, + nextValues, currentTablePayments, nextTablePayments); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + + var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); + nextSumWithVATColumn.ComputeValues(nextValues.SumTotal); + nextSumColumn.PostCheck(); + nextSumWithVATColumn.PostCheck(); + nextVATColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, + nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + currentDateColumn, + currentDateTemp = currentDateTempColumn, + currentSumColumn, + + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + techNextSumColumn, + techNextVATColumn, + techNextSumWithVATColumn, + nextSumColumn, + nextVATColumn, + nextSumWithVATColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs new file mode 100644 index 0000000..d0c1e07 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/Managers/Suspension.cs @@ -0,0 +1,222 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v1; +using EvoCalculator.Core.PostCalculation.v1.Columns.Next; +using EvoCalculator.Core.PostCalculation.v1.Managers.lib.Helper; +using EvoCalculator.Core.PostCalculation.v2.Columns.Next; +using SumCreditColumn = EvoCalculator.Core.PostCalculation.v2.Columns.Next.SumCreditColumn; + +namespace EvoCalculator.Core.PostCalculation.v2.Managers; + +public static partial class CalculateManager +{ + public static ManagerResult Suspension(RequestCalculation requestCalculation) + { + try + { + var constants = new Constants.Calculation(); + var preparedValues = requestCalculation.PreparedValues; + + var currentTablePayments = requestCalculation.TablePayments.Current; + var nextTablePayments = requestCalculation.TablePayments.Next; + + var currentTableInsurance = requestCalculation?.TableInsurance?.Current; + var nextTableInsurance = requestCalculation?.TableInsurance?.Next; + + var currentTableTLMTracker = requestCalculation?.TableTLMTracker?.Current; + var nextTableTLMTracker = requestCalculation?.TableTLMTracker?.Next; + /* + * NEXT + */ + var nextDateColumn = new DateColumnVT1(preparedValues.Nmper.Next + 1); + nextDateColumn.ComputeValues(preparedValues, currentTablePayments); + + var nextDateTempColumn = new DateTempColumn(preparedValues.Nmper.Next + 1); + nextDateTempColumn.ComputeValues(preparedValues, nextDateColumn); + + + TLMDateColumn nextTlmDateColumn = null; + TLMCostColumn nextTlmCostColumn = null; + TLMGrColumn nextTlmGrColumn = null; + + var tlmData = new Helper().GetTLMData(preparedValues + , currentTableTLMTracker, nextTableTLMTracker + , nextDateColumn); + + if (tlmData != null) + { + nextTlmDateColumn = new TLMDateColumn(tlmData.Duration + 1); + nextTlmDateColumn.ComputeValues(tlmData); + nextTlmCostColumn = new TLMCostColumn(tlmData.Duration + 1, nextTlmDateColumn.Values); + nextTlmCostColumn.ComputeValues(preparedValues, requestCalculation.TableTLMTracker); + // nextTlmCostColumn.PostCheck(); + nextTlmGrColumn = new TLMGrColumn(preparedValues.Nmper.Next + 1); + nextTlmGrColumn.ComputeValues(nextDateColumn, nextTlmDateColumn, nextTlmCostColumn); + // nextTlmGrColumn.PostCheck(); + } + + + var nextValues = new NextValues(preparedValues); + nextValues.ComputeBaseCost(nextTableInsurance, nextTlmGrColumn, + currentTablePayments); + + + var nextSumColumn = new SumColumnVT2(preparedValues.Nmper.Next + 1, nextDateTempColumn, + preparedValues, nextValues, currentTablePayments, nextTablePayments); + var nextVATColumn = new VATColumnVT1(preparedValues.Nmper.Next + 1); + + var nextSumWithVATColumn = new SumWithVATColumnVT2(preparedValues.Nmper.Next + 1, preparedValues, + nextSumColumn, currentTablePayments, nextVATColumn, constants, nextValues); + nextSumWithVATColumn.ComputeValues(preparedValues.TotalExpected); + // nextSumWithVATColumn.PostCheck(); + // nextVATColumn.PostCheck(); + // nextSumColumn.PostCheck(); + + var nextNSIBBruttoGrColumn = new NSIBBruttoGrColumnVT1(preparedValues.Nmper.Next + 1, preparedValues, + currentTablePayments, nextSumColumn); + var nsibRequiredValue = currentTablePayments + .Where((x, i) => i >= preparedValues.EditPaymentNumber - 1) + .Sum(x => x.NSIBBruttoPayment); + nextNSIBBruttoGrColumn.ComputeValues(nsibRequiredValue); + + var nextSubsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper.Next + 1); + nextSubsidyExpensesColumn.ComputeValues(preparedValues); + + nextValues.ComputeAcquisitionExpenses(nextTableInsurance); + + + var nextCashflowMSFOColumn = new CashflowMSFOColumn(); + nextCashflowMSFOColumn.ComputeValues(nextValues, preparedValues, nextSumColumn, nextTlmCostColumn, + nextSubsidyExpensesColumn, nextNSIBBruttoGrColumn, nextTableInsurance, nextDateTempColumn, + nextTlmDateColumn); + + var nextCashflowMSFOForNIColumn = new CashflowMSFOForNIColumn(); + nextCashflowMSFOForNIColumn.ComputeValues(preparedValues, nextValues, nextDateTempColumn, + nextCashflowMSFOColumn); + // nextCashflowMSFOColumn.PostCheck(); + + var nextIRRGrColumn = new IRRGrColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextIRRGrColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextCashflowMSFOColumn); + + var nextNIColumn = new NIColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextNIColumn.ComputeValues(nextCashflowMSFOForNIColumn, nextIRRGrColumn); + + var nextInterestColumn = new InterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextInterestColumn.ComputeValues(nextNIColumn, nextIRRGrColumn); + // nextInterestColumn.PostCheck(nextSumColumn, nextDateColumn, nextCashflowMSFOColumn.Dates); + + var nextSumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentColumn.ComputeValues(nextSumWithVATColumn); + + var nextSumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentNegativeColumn.ComputeValues(nextDateTempColumn, nextTableInsurance); + + var nextSumCurrentInterestColumn = + new SumCurrentInterestColumn(nextCashflowMSFOForNIColumn.Values.Length); + nextSumCurrentInterestColumn.ComputeValues(nextInterestColumn); + + var nextSumCurrentTLMColumn = new SumCurrentTLMColumn(preparedValues.Nmper.Next + 1); + nextSumCurrentTLMColumn.ComputeValues(nextTlmGrColumn); + + var nextSumRepaymentColumn = new SumRepaymentColumnVT1(); + nextSumRepaymentColumn.ComputeValues(preparedValues, currentTablePayments, nextSumCurrentNegativeColumn, + nextSumCurrentColumn, nextSumCurrentTLMColumn, nextSumCurrentInterestColumn, nextSumWithVATColumn, + nextDateTempColumn, nextCashflowMSFOForNIColumn, constants); + // nextSumRepaymentColumn.PostCheck(); + + var nextCashflowMSFOFinalColumn = new CashflowMSFOFinalColumn(); + nextCashflowMSFOFinalColumn.ComputeValues(nextCashflowMSFOColumn, nextDateTempColumn, preparedValues); + + var nextCashflowMSFOFinal2Column = new CashflowMSFOFinal2Column(); + nextCashflowMSFOFinal2Column.ComputeValues(nextCashflowMSFOFinalColumn, nextDateTempColumn, + preparedValues); + + var nextSumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + nextSumCreditColumn.ComputeValues(preparedValues, nextSumWithVATColumn); + + var nextCreditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + nextCreditColumn.ComputeValues(preparedValues, nextSumCreditColumn); + + nextValues.Nmper = preparedValues.Nmper.Next; + + var nextSumVATCreditColumn = new SumVATCreditColumn(12 + 2); + nextSumVATCreditColumn.ComputeValues(preparedValues, nextVATColumn); + + var nextCreditVATColumn = new CreditVATColumn(12 + 4); + nextCreditVATColumn.ComputeValues(preparedValues, nextSumVATCreditColumn); + + var nextRevenueColumn = new RevenueColumnVT1(nextValues.Nmper + 1); + nextRevenueColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextNSIBExpensesColumn = new NSIBExpensesColumnVT1(nextValues.Nmper + 1); + nextNSIBExpensesColumn.ComputeValues(preparedValues, currentTablePayments, nextValues); + + var nextCashflowNSIBColumn = new CashflowNSIBColumn(nextValues.Nmper + 1); + nextCashflowNSIBColumn.ComputeValues(nextNSIBBruttoGrColumn, nextRevenueColumn); + + + nextValues.ComputeNiAtInception(currentTablePayments); + nextValues.ComputeNiAtInceptionMSFO(); + /* + * NEXT + */ + + var postValues = new v2.PostValues(preparedValues); + postValues.ComputeContractEconomy(nextCashflowMSFOColumn, nextCreditColumn); + postValues.ComputeContractEconomyWithVAT(nextCreditColumn); + + + return new ManagerResult + { + PostValues = postValues, + NextValues = nextValues, + PreparedValues = preparedValues, + Columns = new + { + nextDateColumn, + nextDateTempColumn, + nextTlmDateColumn, + nextTlmCostColumn, + nextTlmGrColumn, + nextSumColumn, + nextNSIBBruttoGrColumn, + nextSubsidyExpensesColumn, + nextCashflowMSFOColumn, + nextVATColumn, + nextSumWithVATColumn, + nextCashflowMSFOForNIColumn, + nextIRRGrColumn, + nextNIColumn, + nextInterestColumn, + nextSumCurrentColumn, + nextSumCurrentNegativeColumn, + nextSumCurrentInterestColumn, + nextSumCurrentTLMColumn, + nextSumRepaymentColumn, + nextCashflowMSFOFinalColumn, + nextCashflowMSFOFinal2Column, + nextSumCreditColumn, + nextCreditColumn, + nextSumVATCreditColumn, + nextCreditVATColumn, + nextNSIBExpensesColumn, + nextCashflowNSIBColumn, + nextRevenueColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.PostCalculation/v2/PostValues.cs b/EvoCalculator.Core.PostCalculation/v2/PostValues.cs new file mode 100644 index 0000000..e2f1b84 --- /dev/null +++ b/EvoCalculator.Core.PostCalculation/v2/PostValues.cs @@ -0,0 +1,19 @@ +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.PostCalculation.Models.Prepared; + +namespace EvoCalculator.Core.PostCalculation.v2; + +public class PostValues : v1.PostValues +{ + public decimal ContractEconomyWithVAT; + + public PostValues(PreparedValues preparedValues) : base(preparedValues) + { + } + + public void ComputeContractEconomyWithVAT(BaseColumn nextCreditVATColumn) + { + ContractEconomyWithVAT = this.ContractEconomy + nextCreditVATColumn.GetValue(0); + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByIRRAndSumTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByIRRAndSumTests.cs index 8eba28d..acfb44b 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByIRRAndSumTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByIRRAndSumTests.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByTotalExpectedTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByTotalExpectedTests.cs index e3a924f..6264f50 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByTotalExpectedTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateByTotalExpectedTests.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateDefaultTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateDefaultTests.cs index daeabe9..54cee62 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateDefaultTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/CalculateDefaultTests.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/EarlyRedemption.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/EarlyRedemption.cs index 0de7a61..762a1b6 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/EarlyRedemption.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/EarlyRedemption.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithChangingTheTermTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithChangingTheTermTests.cs index 9075d53..f0ffc7f 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithChangingTheTermTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithChangingTheTermTests.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithoutChangingTheTermTests.cs b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithoutChangingTheTermTests.cs index 9e85ca2..f6804ce 100644 --- a/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithoutChangingTheTermTests.cs +++ b/EvoCalculator.Core.Tests/PostCalculation/v1/Managers/PERWithoutChangingTheTermTests.cs @@ -5,6 +5,7 @@ using EvoCalculator.Core.Models.PostCalculation.Models.Prepared.PreparedTables; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using EvoCalculator.Core.PostCalculation.v1.Managers; using Xunit; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Tests.PostCalculation.v1.Managers; diff --git a/EvoCalculator.Core/Controllers/PostCalculation/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/PostCalculationController.cs index f7ef07f..e037759 100644 --- a/EvoCalculator.Core/Controllers/PostCalculation/PostCalculationController.cs +++ b/EvoCalculator.Core/Controllers/PostCalculation/PostCalculationController.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using System; +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; using EvoCalculator.Core.Models.PostCalculation.Models.Request; using Microsoft.AspNetCore.Mvc; @@ -8,9 +9,22 @@ namespace EvoCalculator.Core.Controllers.PostCalculation; [Route("api/[controller]")] public class PostCalculationController { + private Func> GetCalculateVersion(DateTime targetDate) + { + var envDateV2 = Environment.GetEnvironmentVariable("POST_CALCULATION_V2_DATE"); + var calculationV2Date = DateTime.Parse(envDateV2); + + if (targetDate >= calculationV2Date) return new v2.PostCalculationController().Calculate; + + return new v1.PostCalculationController().Calculate; + } + [HttpPost("[action]")] public ActionResult Calculate([FromBody] RequestCalculation requestCalculation) { - return new v1.PostCalculationController().Calculate(requestCalculation); + var calcDate = requestCalculation.PreparedValues.CalcDate; + var calculateMethod = GetCalculateVersion(calcDate); + + return calculateMethod(requestCalculation); } } \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs index e6d2c91..0498d28 100644 --- a/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs +++ b/EvoCalculator.Core/Controllers/PostCalculation/v1/PostCalculationController.cs @@ -4,6 +4,7 @@ using EvoCalculator.Core.PostCalculation.v1.Managers; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; namespace EvoCalculator.Core.Controllers.PostCalculation.v1; diff --git a/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs new file mode 100644 index 0000000..2ff62c6 --- /dev/null +++ b/EvoCalculator.Core/Controllers/PostCalculation/v2/PostCalculationController.cs @@ -0,0 +1,46 @@ +using EvoCalculator.Core.Models.PostCalculation.Models.Manager; +using EvoCalculator.Core.Models.PostCalculation.Models.Request; +using EvoCalculator.Core.PostCalculation.v2.Managers; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using CalculateManager = EvoCalculator.Core.PostCalculation.v2.Managers.CalculateManager; + +namespace EvoCalculator.Core.Controllers.PostCalculation.v2; + +[ApiExplorerSettings(IgnoreApi = true)] +[ApiController] +[ApiVersion("2.0")] +[Route("api/v{version:apiVersion}/[controller]")] +public class PostCalculationController : Controller +{ + [HttpPost("[action]")] + public ActionResult Calculate([FromBody] RequestCalculation requestCalculation) + { + // TEMP + requestCalculation.TableInsurance.Next = requestCalculation.TableInsurance.Current; + + var result = requestCalculation.PreparedValues.CalcType switch + { + 100000001 => CalculateManager.CalculateByTotalExpected(requestCalculation), + 100000003 => CalculateManager.EarlyRedemption(requestCalculation), + 100000004 => CalculateManager.PERWithoutChangingTheTerm(requestCalculation), + 100000005 => CalculateManager.PERWithChangingTheTerm(requestCalculation), + 100000006 => CalculateManager.CalculateByIRRAndSum(requestCalculation), + 100000007 => CalculateManager.Suspension(requestCalculation), + 100000008 => CalculateManager.ChangingLastPayment(requestCalculation), + _ => CalculateManager.CalculateDefault(requestCalculation) + }; + + var hasErrors = result.Errors is {Count: > 0}; + var statusCode = hasErrors ? 500 : 200; + + return StatusCode(statusCode, JsonConvert.SerializeObject( + result, + new JsonSerializerSettings + { + Formatting = Formatting.Indented, + ContractResolver = new CamelCasePropertyNamesContractResolver() + })); + } +} \ No newline at end of file diff --git a/EvoCalculator.Core/Properties/launchSettings.json b/EvoCalculator.Core/Properties/launchSettings.json index c5a14f4..322aebf 100644 --- a/EvoCalculator.Core/Properties/launchSettings.json +++ b/EvoCalculator.Core/Properties/launchSettings.json @@ -25,7 +25,8 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "calculation_v2_date": "2021-09-02", - "calculation_v3_date": "2022-03-30" + "calculation_v3_date": "2022-03-30", + "post_calculation_v2_date": "2022-04-14" } } }