diff --git a/Dockerfile b/Dockerfile index 518e6d2..e6702c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,19 @@ -# Stage 1 -FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build -WORKDIR /build -COPY . . -RUN dotnet restore -RUN dotnet publish -c Release -o /app -# Stage 2 -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS final +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app -COPY --from=build /app . - EXPOSE 5000 -ENTRYPOINT ["dotnet", "EvoCalculator.Core.dll"] \ No newline at end of file +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build +WORKDIR /src +COPY ["EvoCalculator.Core/EvoCalculator.Core.csproj", "EvoCalculator.Core/"] +RUN dotnet restore "EvoCalculator.Core/EvoCalculator.Core.csproj" +COPY . . +WORKDIR "/src/EvoCalculator.Core" +RUN dotnet build "EvoCalculator.Core.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "EvoCalculator.Core.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . +ENTRYPOINT ["dotnet", "EvoCalculator.Core.dll"] diff --git a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumn.cs b/EvoCalculator.Core.Base/Columns/BaseColumn.cs similarity index 55% rename from EvoCalculator.Core.Calculation/v1/Columns/BaseColumn.cs rename to EvoCalculator.Core.Base/Columns/BaseColumn.cs index 1c30636..6874d52 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumn.cs +++ b/EvoCalculator.Core.Base/Columns/BaseColumn.cs @@ -1,6 +1,6 @@ using System; -namespace EvoCalculator.Core.Calculation.v1.Columns +namespace EvoCalculator.Core.Base.Columns { public abstract class BaseColumn { @@ -13,12 +13,9 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public T GetValue(int i) { - if (i < Values.Length) - { - return Values[i]; - } + if (i < Values.Length) return Values[i]; - return (T) Convert.ChangeType(0.0, typeof(T)); + return (T)Convert.ChangeType(0.0, typeof(T)); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Base/Columns/BaseColumnForGoalSeek.cs b/EvoCalculator.Core.Base/Columns/BaseColumnForGoalSeek.cs new file mode 100644 index 0000000..cc49aaa --- /dev/null +++ b/EvoCalculator.Core.Base/Columns/BaseColumnForGoalSeek.cs @@ -0,0 +1,11 @@ +namespace EvoCalculator.Core.Base.Columns +{ + public abstract class BaseColumnForGoalSeek : BaseColumn + { + protected BaseColumnForGoalSeek(int count) : base(count) + { + } + + public abstract void ComputeValues(T x); + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Base/Columns/BaseColumnWithNominal.cs b/EvoCalculator.Core.Base/Columns/BaseColumnWithNominal.cs new file mode 100644 index 0000000..d7ec6f3 --- /dev/null +++ b/EvoCalculator.Core.Base/Columns/BaseColumnWithNominal.cs @@ -0,0 +1,13 @@ +using System; + +namespace EvoCalculator.Core.Base.Columns +{ + public class BaseColumnWithNominal : BaseColumnWithXIRR + { + protected BaseColumnWithNominal(int count, BaseColumn dateTempColumn) : base(count, dateTempColumn) + { + } + + public double Nominal => (Math.Pow(IRR + 1, (double)1 / 12) - 1) * 12; + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithSum.cs b/EvoCalculator.Core.Base/Columns/BaseColumnWithSum.cs similarity index 84% rename from EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithSum.cs rename to EvoCalculator.Core.Base/Columns/BaseColumnWithSum.cs index 2f573a9..db08e33 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithSum.cs +++ b/EvoCalculator.Core.Base/Columns/BaseColumnWithSum.cs @@ -1,6 +1,6 @@ using System.Linq; -namespace EvoCalculator.Core.Calculation.v1.Columns +namespace EvoCalculator.Core.Base.Columns { public class BaseColumnWithSum : BaseColumn { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXIRR.cs b/EvoCalculator.Core.Base/Columns/BaseColumnWithXIRR.cs similarity index 85% rename from EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXIRR.cs rename to EvoCalculator.Core.Base/Columns/BaseColumnWithXIRR.cs index fc1a261..4a149bf 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXIRR.cs +++ b/EvoCalculator.Core.Base/Columns/BaseColumnWithXIRR.cs @@ -2,11 +2,11 @@ using EvoCalculator.Core.FinanceFormulas; using EvoCalculator.Core.Models.Calculation.Models; -namespace EvoCalculator.Core.Calculation.v1.Columns +namespace EvoCalculator.Core.Base.Columns { public class BaseColumnWithXIRR : BaseColumn { - public BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count) + public BaseColumnWithXIRR(int count, BaseColumn dateTempColumn) : base(count) { Dates = dateTempColumn.Values; } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXNPV.cs b/EvoCalculator.Core.Base/Columns/BaseColumnWithXNPV.cs similarity index 86% rename from EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXNPV.cs rename to EvoCalculator.Core.Base/Columns/BaseColumnWithXNPV.cs index 88268df..8812267 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithXNPV.cs +++ b/EvoCalculator.Core.Base/Columns/BaseColumnWithXNPV.cs @@ -2,13 +2,13 @@ using EvoCalculator.Core.FinanceFormulas; using EvoCalculator.Core.Models.Calculation.Models; -namespace EvoCalculator.Core.Calculation.v1.Columns +namespace EvoCalculator.Core.Base.Columns { public class BaseColumnWithXNPV : BaseColumn { private readonly double rate; - public BaseColumnWithXNPV(int count, DateTempColumn dateTempColumn, double rate) : base(count) + public BaseColumnWithXNPV(int count, BaseColumn dateTempColumn, double rate) : base(count) { Dates = dateTempColumn.Values; this.rate = rate; diff --git a/EvoCalculator.Core.Base/EvoCalculator.Core.Base.csproj b/EvoCalculator.Core.Base/EvoCalculator.Core.Base.csproj new file mode 100644 index 0000000..f69c4e7 --- /dev/null +++ b/EvoCalculator.Core.Base/EvoCalculator.Core.Base.csproj @@ -0,0 +1,13 @@ + + + + net5.0 + default + + + + + + + + diff --git a/EvoCalculator.Core.Calculation/v1/Post/BasePostValue.cs b/EvoCalculator.Core.Base/PostValues/BasePostValue.cs similarity index 62% rename from EvoCalculator.Core.Calculation/v1/Post/BasePostValue.cs rename to EvoCalculator.Core.Base/PostValues/BasePostValue.cs index 3f76c16..0b3f550 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/BasePostValue.cs +++ b/EvoCalculator.Core.Base/PostValues/BasePostValue.cs @@ -1,4 +1,4 @@ -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Base.PostValues { public class BasePostValue { diff --git a/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj b/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj index 7aff275..5ece556 100644 --- a/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj +++ b/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj @@ -1,16 +1,19 @@ - netcoreapp3.1 + net5.0 + default - - + + + + - + diff --git a/EvoCalculator.Core.Calculation/v1/Columns/AcceptInsuranceColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/AcceptInsuranceColumn.cs index e470bf7..b92cb6d 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/AcceptInsuranceColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/AcceptInsuranceColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class AcceptInsuranceColumn : BaseColumnWithSum { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/AcceptKaskoColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/AcceptKaskoColumn.cs index c12a2d5..c5a8ec0 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/AcceptKaskoColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/AcceptKaskoColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/AcceptOsagoColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/AcceptOsagoColumn.cs index 3ed59b7..b18349b 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/AcceptOsagoColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/AcceptOsagoColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/AcceptSumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/AcceptSumColumn.cs index 816ffa0..7738cba 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/AcceptSumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/AcceptSumColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/AgentComissionExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/AgentComissionExpensesColumn.cs index d97a487..310c1be 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/AgentComissionExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/AgentComissionExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithNominal.cs b/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithNominal.cs deleted file mode 100644 index 8134e44..0000000 --- a/EvoCalculator.Core.Calculation/v1/Columns/BaseColumnWithNominal.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace EvoCalculator.Core.Calculation.v1.Columns -{ - public class BaseColumnWithNominal : BaseColumnWithXIRR - { - protected BaseColumnWithNominal(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) - { - } - - public double Nominal => (Math.Pow(IRR + 1, (double) 1 / 12) - 1) * 12; - } -} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowColumn.cs index 219dd51..bec2db6 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowLeasingColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowLeasingColumn.cs index a488d52..ffc4c45 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowLeasingColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowLeasingColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs index 4e7731e..b76aaad 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs @@ -1,5 +1,5 @@ using System; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Prepared; @@ -7,18 +7,36 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { public class BaseCashflowMSFOColumn : BaseColumnWithNominal { - protected readonly PostValues _postValues; - protected readonly PreparedValues _preparedValues; - protected readonly PercentPaymentColumn _percentPaymentColumn; - protected SumColumn _sumColumn; - protected readonly NegativeCashflowColumn _negativeCashflowColumn; - protected readonly NSIBBruttoGrColumn _nsibBruttoGrColumn; - protected readonly TLM_GrColumn _tlmGrColumn; - protected readonly GPS_GrColumn _gpsGrColumn; - protected readonly NPVBonusExpensesColumn _npvBonusExpensesColumn; protected readonly AgentComissionExpensesColumn _agentComissionExpensesColumn; + protected readonly BaseColumn _gpsGrColumn; + protected readonly NegativeCashflowColumn _negativeCashflowColumn; + protected readonly BaseColumnWithSum _npvBonusExpensesColumn; + protected readonly NSIBBruttoGrColumn _nsibBruttoGrColumn; + protected readonly PercentPaymentColumn _percentPaymentColumn; + protected readonly PostValues.PostValues _postValues; + protected readonly PreparedValues _preparedValues; + protected readonly BaseColumn _tlmGrColumn; + protected SumColumn _sumColumn; - protected void FillValues() + public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, + PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, + BaseColumn tlmGrColumn, BaseColumn gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn) + { + _postValues = postValues; + _preparedValues = preparedValues; + _percentPaymentColumn = percentPaymentColumn; + _sumColumn = sumColumn; + _negativeCashflowColumn = negativeCashflowColumn; + _nsibBruttoGrColumn = nsibBruttoGrColumn; + _tlmGrColumn = tlmGrColumn; + _gpsGrColumn = gpsGrColumn; + _npvBonusExpensesColumn = npvBonusExpensesColumn; + _agentComissionExpensesColumn = agentComissionExpensesColumn; + } + + protected virtual void FillValues() { Values[0] = -_preparedValues.AcquisitionExpenses; Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] + @@ -39,36 +57,14 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { if (additionalData.MinCashflowMSFONominal != null) if (Nominal < additionalData.MinCashflowMSFONominal / 100) - { throw new Exception( $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} меньше мин. IRR по данному продукту: {additionalData.MinCashflowMSFONominal}"); - } if (additionalData.MaxCashflowMSFONominal != null) if (Nominal >= additionalData.MaxCashflowMSFONominal / 100) - { throw new Exception( $"Невозможно осуществить расчет графика, при заданных параметрах IRR {Math.Round(Nominal * 100, 2)} больше макс. IRR по данному продукту: {additionalData.MaxCashflowMSFONominal}"); - } } } - - public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues postValues, - PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, - NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, - TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, - AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn) - { - _postValues = postValues; - _preparedValues = preparedValues; - _percentPaymentColumn = percentPaymentColumn; - _sumColumn = sumColumn; - _negativeCashflowColumn = negativeCashflowColumn; - _nsibBruttoGrColumn = nsibBruttoGrColumn; - _tlmGrColumn = tlmGrColumn; - _gpsGrColumn = gpsGrColumn; - _npvBonusExpensesColumn = npvBonusExpensesColumn; - _agentComissionExpensesColumn = agentComissionExpensesColumn; - } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs index 157bb70..6dd737f 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using EvoCalculator.Core.Calculation.v1.Post; using EvoCalculator.Core.Models.Calculation.Interfaces.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using TridentGoalSeek; @@ -9,6 +8,16 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek { + public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, + PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, + TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues, + preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, + gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn) + { + } + public decimal Calculate(decimal inputVariable) { _sumColumn.ComputeValues(inputVariable); @@ -33,15 +42,5 @@ namespace EvoCalculator.Core.Calculation.v1.Columns // , focusPercentage: 50 )); } - - public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues postValues, - PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, - NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, - TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, - AgentComissionExpensesColumn agentComissionExpensesColumn) : base(count, dateTempColumn, postValues, - preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, - gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn) - { - } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs index cb99bb0..46b14d5 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs @@ -1,16 +1,10 @@ -using EvoCalculator.Core.Calculation.v1.Post; -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn { - public void ComputeValues() - { - FillValues(); - } - - public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues postValues, + public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, @@ -19,5 +13,10 @@ namespace EvoCalculator.Core.Calculation.v1.Columns gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn) { } + + public void ComputeValues() + { + FillValues(); + } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs index e48a205..e303283 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinal2Column.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,7 +9,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(PreparedValues preparedValues, DirectorBonusSumColumn directorBonusSumColumn, + public void ComputeValues(PreparedValues preparedValues, BaseColumn directorBonusSumColumn, CashflowMSFOFinalColumn cashflowMsfoFinalColumn) { Values[0] = -preparedValues.AcquisitionExpenses; diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinalColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinalColumn.cs index 69ed0f1..e68c9be 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinalColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowMSFOFinalColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVColumn.cs index 864e7ca..9ac181f 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinal2Column.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinal2Column.cs index 78719d8..50336fc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinal2Column.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinal2Column.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -10,7 +11,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void ComputeValues(PreparedValues preparedValues, CashflowNPVFinalColumn cashflowNpvFinalColumn, - DirectorBonusSumColumn directorBonusSumColumn) + BaseColumn directorBonusSumColumn) { Values[0] = -preparedValues.AcquisitionExpenses; Values[1] = cashflowNpvFinalColumn.GetValue(1); diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinalColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinalColumn.cs index 9f18ba5..45992f1 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinalColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNPVFinalColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -9,7 +10,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns } public void ComputeValues(PreparedValues preparedValues, ExtraBonusSumColumn extraBonusSumColumn, - CashflowNPVColumn cashflowNpvColumn) + BaseColumn cashflowNpvColumn) { Values[0] = -preparedValues.AcquisitionExpenses; Values[1] = cashflowNpvColumn.GetValue(1); diff --git a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNSIBColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNSIBColumn.cs index 337de17..b1278de 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/CashflowNSIBColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/CashflowNSIBColumn.cs @@ -1,4 +1,5 @@ using System; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Interfaces.Columns; using TridentGoalSeek; @@ -22,14 +23,6 @@ namespace EvoCalculator.Core.Calculation.v1.Columns return Convert.ToDecimal(IRR); } - private void FillValues(decimal x) - { - Values[1] = _NSIBBruttoGrColumn.Values[1] - x; - for (var i = 2; i < Values.Length; i++) - Values[i] = _NSIBBruttoGrColumn.Values[i] - - x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1]; - } - public void ComputeValues(decimal requiredValue) { var goalSeek = new GoalSeek(this); @@ -43,5 +36,13 @@ namespace EvoCalculator.Core.Calculation.v1.Columns // , trimFinalInputValue: true )); } + + private void FillValues(decimal x) + { + Values[1] = _NSIBBruttoGrColumn.Values[1] - x; + for (var i = 2; i < Values.Length; i++) + Values[i] = _NSIBBruttoGrColumn.Values[i] - + x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1]; + } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/ComissionBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/ComissionBonusExpensesColumn.cs index a68ee4a..2ab706f 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/ComissionBonusExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/ComissionBonusExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DateColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DateColumn.cs index f88007b..6343416 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DateColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DateColumn.cs @@ -1,4 +1,5 @@ using System; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DateTempColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DateTempColumn.cs index 08172e8..0c8751a 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DateTempColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DateTempColumn.cs @@ -1,4 +1,5 @@ using System; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns @@ -8,11 +9,11 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public DateTempColumn(int count) : base(count) { } - + public void ComputeValues(PreparedValues preparedValues) { - Values[0] = preparedValues.PaymentDateNew != null && preparedValues.DeliveryTime == 100000001 - ? preparedValues.PaymentDateNew.Value.AddMonths(-1) + Values[0] = preparedValues.PaymentDateNew != null && preparedValues.DeliveryTime == 100000001 + ? preparedValues.PaymentDateNew.Value.AddMonths(-1) : preparedValues.DogDate; Values[1] = Values[0]; Values[2] = preparedValues.PaymentDateNew ?? Values[1].AddMonths(1); diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationColumn.cs index d997f98..762da2b 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class DeprecationColumn : BaseColumnWithSum { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLDColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLDColumn.cs index cea0f94..f226ffa 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLDColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLDColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns @@ -14,7 +15,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns Values[1] = 0; for (var i = 2; i < Values.Length - 1; i++) Values[i] = preparedValues.BalanceHolder == 100000001 - ? (decimal) preparedValues.DeprecationTime * + ? (decimal)preparedValues.DeprecationTime * (preparedValues.AcceptSum - Values.Skip(2).Take(i - 1).Sum(x => x)) / 100 : 0; diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLPColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLPColumn.cs index b04fd84..0e1b932 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLPColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DeprecationLPColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/DirectorBonusSumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/DirectorBonusSumColumn.cs index 04ed83c..d439ef8 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/DirectorBonusSumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/DirectorBonusSumColumn.cs @@ -1,4 +1,4 @@ -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns @@ -9,11 +9,11 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(PreparedValues preparedValues, PostValues postValues) + public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) { - Values[2] = -postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus * - (decimal) (1 + preparedValues.SalaryRate) * - (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; + Values[2] = -postValues.BonusBase.Value * (decimal)preparedValues.DirectorBonus * + (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate; Values[0] = Sum; } } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/ExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/ExpensesColumn.cs index 2a62592..b8dadc8 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/ExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/ExpensesColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class ExpensesColumn : BaseColumnWithSum { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/ExtraBonusSumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/ExtraBonusSumColumn.cs index 0618577..2114a07 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/ExtraBonusSumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/ExtraBonusSumColumn.cs @@ -1,4 +1,4 @@ -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns @@ -10,13 +10,13 @@ namespace EvoCalculator.Core.Calculation.v1.Columns } public void ComputeValues(PreparedValues preparedValues, BaseCashflowMSFOColumn cashflowMsfoColumn, - PostValues postValues) + PostValues.PostValues postValues) { Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan ? -1 * postValues.BonusBase.Value * - (decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) * - (decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) * - (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate + (decimal)(cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) * + (decimal)preparedValues.ExtraBonus * (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate : 0; Values[0] = Sum; } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/GPSExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/GPSExpensesColumn.cs index a161adf..29a6021 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/GPSExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/GPSExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/GPS_GrColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/GPS_GrColumn.cs index f432a5c..3713c49 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/GPS_GrColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/GPS_GrColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -10,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); } public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) diff --git a/EvoCalculator.Core.Calculation/v1/Columns/IRRGrColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/IRRGrColumn.cs index 921cd48..d9cf628 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/IRRGrColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/IRRGrColumn.cs @@ -1,4 +1,5 @@ using System; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,11 +9,11 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(DateTempColumn dateTempColumn, CashflowColumn cashflowColumn) + public void ComputeValues(DateTempColumn dateTempColumn, BaseColumnWithXIRR cashflowColumn) { for (var i = 1; i < Values.Length; i++) Values[i] = Math.Pow(1 + cashflowColumn.IRR, - (double) (dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1; + (double)(dateTempColumn.Values[i] - dateTempColumn.Values[i - 1]).Days / 365) - 1; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/InsuranceBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/InsuranceBonusExpensesColumn.cs index 30f4157..8e442b9 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/InsuranceBonusExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/InsuranceBonusExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs index ad5c270..1954c1e 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/InterestColumn.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -13,17 +14,15 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { for (var i = 1; i < Values.Skip(1).ToList().Count; i++) if (Values[i] > sumColumn.Values[i]) - { throw new Exception( "Невозможно осуществить расчет графика, при заданных параметрах получается низкий лизинговый платеж"); - } } public void ComputeValues(IRRGrColumn irrGrColumn, NIColumn niColumn) { for (var i = 2; i < Values.Length; i++) - Values[i] = niColumn.Values[i - 1] * (decimal) irrGrColumn.Values[i]; + Values[i] = niColumn.Values[i - 1] * (decimal)irrGrColumn.Values[i]; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/KaskoBonusGrSumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/KaskoBonusGrSumColumn.cs index ec574f0..a27ecdc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/KaskoBonusGrSumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/KaskoBonusGrSumColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,15 +9,15 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(PreparedValues preparedValues, KaskoNmperGrColumn kaskoNmperGrColumn) + public void ComputeValues(PreparedValues preparedValues, BaseColumn kaskoNmperGrColumn) { for (var i = 1; i < Values.Length; i++) if (i < 13) Values[i] = kaskoNmperGrColumn.Values[i] * 1; else if (i <= 24) - Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.7; + Values[i] = kaskoNmperGrColumn.Values[i] * (decimal)0.7; else - Values[i] = kaskoNmperGrColumn.Values[i] * (decimal) 0.5; + Values[i] = kaskoNmperGrColumn.Values[i] * (decimal)0.5; Values[0] = Sum; } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/KaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/KaskoNmperGrColumn.cs index d997047..0bf6296 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/KaskoNmperGrColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/KaskoNmperGrColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,30 +10,29 @@ namespace EvoCalculator.Core.Calculation.v1.Columns rate) { } - + public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); } public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) { - for (var i = 1; i < Values.Length; i += 12) - if (i <= preparedValues.NmperInsurance) - { - if (preparedValues.NmperInsurance - i >= 3) + if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod) + Values[1] = preparedValues.InsuranceKasko; + else + { + var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod + ? preparedValues.InsuranceKasko / 12 + : preparedValues.InsuranceKasko / preparedValues.NmperInsurance; + for (var i = 1; i < preparedValues.NmperInsurance; i += 12) + if (i <= preparedValues.NmperInsurance) { - if (preparedValues.NmperInsurance - i < constants.MaxOnePolicePeriod - 1) - Values[i] = preparedValues.InsuranceKasko / 12 * (preparedValues.NmperInsurance - i + 1); - else - Values[i] = preparedValues.InsuranceKasko; + Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod + ? InsuranceKaskoMonth * 12 + : InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1); } - else - { - Values[i] = 0; - } - } - + } Values[0] = -XNPV; } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NIColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NIColumn.cs index 6940847..80bcbfc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NIColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NIColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,11 +9,12 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(PreparedValues preparedValues, CashflowColumn cashflowColumn, IRRGrColumn irrGrColumn) + public void ComputeValues(PreparedValues preparedValues, BaseColumnWithXIRR cashflowColumn, + IRRGrColumn irrGrColumn) { Values[1] = preparedValues.NiAtInception; for (var i = 2; i < Values.Length; i++) - Values[i] = Values[i - 1] + Values[i - 1] * (decimal) irrGrColumn.Values[i] - cashflowColumn.Values[i]; + Values[i] = Values[i - 1] + Values[i - 1] * (decimal)irrGrColumn.Values[i] - cashflowColumn.Values[i]; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NPVBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NPVBonusExpensesColumn.cs index 0675977..bfc8c26 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NPVBonusExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NPVBonusExpensesColumn.cs @@ -1,5 +1,5 @@ using System; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns @@ -10,17 +10,17 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(PreparedValues preparedValues, PostValues postValues) + public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) { Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) * - (decimal) (1 + preparedValues.SalaryRate) * - (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; + (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate; Values[2] = preparedValues.BonusFix > 0 ? -preparedValues.BonusFix : -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) * - (decimal) (1 + preparedValues.SalaryRate) * - (decimal) preparedValues.MarketRate * (decimal) preparedValues.DistrictRate; + (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate; for (var i = 3; i < Values.Length; i++) Values[i] = 0; diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NPVColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NPVColumn.cs index af653ea..44f9ae0 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NPVColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NPVColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class NPVColumn : BaseColumnWithNominal { @@ -6,10 +8,10 @@ { } - public void ComputeValues(CashflowNPVColumn cashflowNpvColumn, NPVWeightColumn npvWeightColumn) + public void ComputeValues(BaseColumn cashflowNpvColumn, NPVWeightColumn npvWeightColumn) { for (var i = 0; i < Values.Length; i++) - Values[i] = cashflowNpvColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); + Values[i] = cashflowNpvColumn.GetValue(i) * (decimal)npvWeightColumn.GetValue(i); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NPVFinal2Column.cs b/EvoCalculator.Core.Calculation/v1/Columns/NPVFinal2Column.cs index e4425fd..ac744cf 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NPVFinal2Column.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NPVFinal2Column.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class NPVFinal2Column : BaseColumnWithNominal { @@ -9,9 +11,7 @@ public void ComputeValues(CashflowNPVFinal2Column cashflowNpvFinal2Column, NPVWeightColumn npvWeightColumn) { for (var i = 0; i < Values.Length; i++) - { - Values[i] = cashflowNpvFinal2Column.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); - } + Values[i] = cashflowNpvFinal2Column.GetValue(i) * (decimal)npvWeightColumn.GetValue(i); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NPVFinalColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NPVFinalColumn.cs index 4e5f006..ebcfbce 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NPVFinalColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NPVFinalColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class NPVFinalColumn : BaseColumnWithNominal { @@ -9,7 +11,7 @@ public void ComputeValues(CashflowNPVFinalColumn cashflowNpvFinalColumn, NPVWeightColumn npvWeightColumn) { for (var i = 0; i < Values.Length; i++) - Values[i] = cashflowNpvFinalColumn.GetValue(i) * (decimal) npvWeightColumn.GetValue(i); + Values[i] = cashflowNpvFinalColumn.GetValue(i) * (decimal)npvWeightColumn.GetValue(i); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NPVWeightColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NPVWeightColumn.cs index 4999abc..2c45356 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NPVWeightColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NPVWeightColumn.cs @@ -1,4 +1,5 @@ using System; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NSIBBruttoGrColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NSIBBruttoGrColumn.cs index 7df53b7..8bbaf4e 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NSIBBruttoGrColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NSIBBruttoGrColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NSIBExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NSIBExpensesColumn.cs index f17d1ad..3a65333 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NSIBExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NSIBExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/NegativeCashflowColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/NegativeCashflowColumn.cs index 717247e..16dbefc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/NegativeCashflowColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/NegativeCashflowColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class NegativeCashflowColumn : BaseColumnWithSum { @@ -6,7 +8,7 @@ { } - public void ComputeValues(KaskoNmperGrColumn kaskoNmperGrColumn) + public void ComputeValues(BaseColumn kaskoNmperGrColumn) { for (var i = 1; i < Values.Length; i++) Values[i] = -kaskoNmperGrColumn.Values[i]; diff --git a/EvoCalculator.Core.Calculation/v1/Columns/PercentPaymentColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/PercentPaymentColumn.cs index 8575dcb..3517a25 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/PercentPaymentColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/PercentPaymentColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/RatExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/RatExpensesColumn.cs index a4a4893..07ad80c 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/RatExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/RatExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/RegistrExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/RegistrExpensesColumn.cs index e4b31e7..b0a0bc2 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/RegistrExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/RegistrExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/RevenueColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/RevenueColumn.cs index 8fc78ac..79a2b99 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/RevenueColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/RevenueColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class RevenueColumn : BaseColumn { @@ -11,10 +13,7 @@ { if (nsibBruttoGrColumn.Sum == 0) { - for (var i = 0; i < Values.Length; i++) - { - Values[i] = 0; - } + for (var i = 0; i < Values.Length; i++) Values[i] = 0; } else { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs index c22b77c..d224ccf 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumColumn.cs @@ -1,26 +1,29 @@ using System; using System.Linq; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { public class SumColumn : BaseColumnWithXIRR { - private readonly PercentPaymentColumn _percentPaymentColumn; - private readonly PreparedValues _preparedValues; - private readonly PostValues _postValues; + protected readonly PercentPaymentColumn _percentPaymentColumn; + protected readonly PostValues.PostValues _postValues; + protected readonly PreparedValues _preparedValues; + protected readonly BaseColumn _nsibBruttoGrColumn; - public SumColumn(int count, DateTempColumn dateTempColumn - , PreparedValues preparedValues - , PercentPaymentColumn percentPaymentColumn, PostValues postValues) : base(count, dateTempColumn) + public SumColumn(int count, BaseColumn dateTempColumn, PreparedValues preparedValues, + PercentPaymentColumn percentPaymentColumn, + PostValues.PostValues postValues, BaseColumn nsibBruttoGrColumn) : base(count, dateTempColumn) { _preparedValues = preparedValues; _percentPaymentColumn = percentPaymentColumn; _postValues = postValues; + _nsibBruttoGrColumn = nsibBruttoGrColumn; } - public void ComputeValues(decimal x) + public virtual void ComputeValues(decimal x) { Values[0] = -_postValues.BaseCost.Value; Values[1] = _preparedValues.FirstPaymentSum; @@ -32,12 +35,19 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); if (Values[1] / Values.Skip(1).Sum() >= 0.5m) - { throw new Exception( "Первый платеж по графику более 50% от суммы лизинговых платежей. Необходимо уменьшить первый платеж"); + + for (int i = 2; i < Values.Length; i++) + { + if (GetValue(i) < _nsibBruttoGrColumn.GetValue(i)) + { + throw new Exception( + "Невозможно осуществить расчет графика. При заданных параметрах лизинговый платеж не покрывает расходы по НСИБ. Исключите НСИБ или увеличьте лизинговые платежи"); + } } } } diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentColumn.cs index c37949c..adaa3b6 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentInterestColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentInterestColumn.cs index 34c96dd..eb68d24 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentInterestColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentInterestColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentNegativeColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentNegativeColumn.cs index a598e00..47a33cd 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentNegativeColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentNegativeColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentTLMColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentTLMColumn.cs index 668575d..8bfb6d3 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentTLMColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumCurrentTLMColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -8,7 +9,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { } - public void ComputeValues(TLM_GrColumn tlmGrColumn) + public void ComputeValues(BaseColumn tlmGrColumn) { const int FIRST_YEAR_NUM = 13; for (var i = 1; i < Values.Length; i++) diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumRepaymentColumn.cs index 7b1ce1f..1250ed1 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumRepaymentColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumRepaymentColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -10,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); } public void ComputeValues(Constants.Calculation calculation, PreparedValues preparedValues, @@ -19,9 +21,9 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { for (var i = 7; i < Values.Length; i++) Values[i] = sumCurrentColumn.Values[i] + sumCurrentNegativeColumn.Values[i] - - sumCurrentTlmColumn.Values[i] * (1 + (decimal) calculation.VatValue) - - sumCurrentInterestColumn.Values[i] * (1 + (decimal) calculation.VatValue) * - (decimal) preparedValues.Repayment; + sumCurrentTlmColumn.Values[i] * (1 + (decimal)calculation.VatValue) - + sumCurrentInterestColumn.Values[i] * (1 + (decimal)calculation.VatValue) * + (decimal)preparedValues.Repayment; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/BaseSumWithVATColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/BaseSumWithVATColumn.cs index 3c71636..c70ab4e 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/BaseSumWithVATColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/BaseSumWithVATColumn.cs @@ -1,30 +1,15 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { public class BaseSumWithVATColumn : BaseColumnWithSum { - protected readonly PreparedValues _preparedValues; protected readonly Constants.Calculation _constants; + protected readonly PreparedValues _preparedValues; protected SumColumn _sumColumn; - protected void FillValues() - { - Values[0] = 0; - Values[1] = _preparedValues.FirstPaymentWithNdsAbs > 0 - ? _preparedValues.FirstPaymentWithNdsAbs - : (decimal) (1 + _constants.VatValue) * _sumColumn.Values[1]; - for (var i = 2; i < Values.Length; i++) - Values[i] = (decimal) (1 + _constants.VatValue) * _sumColumn.Values[i]; - - Values[0] = Sum; - } - - public void PostCheck() - { - new CheckTools().CheckColumnForZeroValue(Values); - } - protected BaseSumWithVATColumn(int count, SumColumn sumColumn, PreparedValues preparedValues, Constants.Calculation constants) : base(count) { @@ -32,5 +17,22 @@ namespace EvoCalculator.Core.Calculation.v1.Columns _preparedValues = preparedValues; _constants = constants; } + + protected void FillValues() + { + Values[0] = 0; + Values[1] = _preparedValues.FirstPaymentWithNdsAbs > 0 + ? _preparedValues.FirstPaymentWithNdsAbs + : (decimal)(1 + _constants.VatValue) * _sumColumn.Values[1]; + for (var i = 2; i < Values.Length; i++) + Values[i] = (decimal)(1 + _constants.VatValue) * _sumColumn.Values[i]; + + Values[0] = Sum; + } + + public void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT1.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT1.cs index 2a04730..fd45ba5 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT1.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT1.cs @@ -4,14 +4,14 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { public class SumWithVATColumnVT1 : BaseSumWithVATColumn { - public void ComputeValues() - { - FillValues(); - } - public SumWithVATColumnVT1(int count, SumColumn sumColumn, PreparedValues preparedValues, Constants.Calculation constants) : base(count, sumColumn, preparedValues, constants) { } + + public void ComputeValues() + { + FillValues(); + } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT2.cs b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT2.cs index 982a01b..93932cc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT2.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/SumWithVATColumn/SumWithVATColumnVT2.cs @@ -1,6 +1,5 @@ using System; using System.Linq; -using EvoCalculator.Core.Calculation.v1.Post; using EvoCalculator.Core.Models.Calculation.Interfaces.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using TridentGoalSeek; @@ -9,8 +8,18 @@ namespace EvoCalculator.Core.Calculation.v1.Columns { public class SumWithVATColumnVT2 : BaseSumWithVATColumn, IColumnWithGoalSeek { - private PercentPaymentColumn _percentPaymentColumn; - private PostValues _postValues; + private readonly PercentPaymentColumn _percentPaymentColumn; + private readonly PostValues.PostValues _postValues; + + public SumWithVATColumnVT2(int count, SumColumn sumColumn, PreparedValues preparedValues, + Constants.Calculation constants, PercentPaymentColumn percentPaymentColumn, + PostValues.PostValues postValues) : base( + count, sumColumn, + preparedValues, constants) + { + _percentPaymentColumn = percentPaymentColumn; + _postValues = postValues; + } public decimal Calculate(decimal inputVariable) { @@ -36,14 +45,5 @@ namespace EvoCalculator.Core.Calculation.v1.Columns // , focusPercentage: 50 )); } - - public SumWithVATColumnVT2(int count, SumColumn sumColumn, PreparedValues preparedValues, - Constants.Calculation constants, PercentPaymentColumn percentPaymentColumn, PostValues postValues) : base( - count, sumColumn, - preparedValues, constants) - { - _percentPaymentColumn = percentPaymentColumn; - _postValues = postValues; - } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Columns/TLMExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/TLMExpensesColumn.cs index fee40aa..9b5bc90 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/TLMExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/TLMExpensesColumn.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns { diff --git a/EvoCalculator.Core.Calculation/v1/Columns/TLM_GrColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/TLM_GrColumn.cs index de38412..12c2b90 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/TLM_GrColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/TLM_GrColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -10,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); } public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) diff --git a/EvoCalculator.Core.Calculation/v1/Columns/TaxColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/TaxColumn.cs index b5f9117..5dd8acc 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/TaxColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/TaxColumn.cs @@ -1,4 +1,6 @@ -namespace EvoCalculator.Core.Calculation.v1.Columns +using EvoCalculator.Core.Base.Columns; + +namespace EvoCalculator.Core.Calculation.v1.Columns { public class TaxColumn : BaseColumnWithSum { @@ -15,18 +17,18 @@ GPSExpensesColumn gpsExpensesColumn) { for (var i = 1; i < Values.Length; i++) - Values[i] = (decimal) constants.IncomeTaxValue * (sumColumn.GetValue(i) - - acceptInsuranceColumn.GetValue(i) - - deprecationColumn.GetValue(i) - + ratExpensesColumn.GetValue(i) - + registrExpensesColumn.GetValue(i) - + comissionBonusExpensesColumn.GetValue(i) - + transExpensesColumn.GetValue(i) - + npvBonusExpensesColumn.GetValue(i) - + agentComissionExpensesColumn.GetValue(i) - + insuranceBonusExpensesColumn.GetValue(i) - + tlmExpensesColumn.GetValue(i) - + gpsExpensesColumn.GetValue(i) + Values[i] = (decimal)constants.IncomeTaxValue * (sumColumn.GetValue(i) + - acceptInsuranceColumn.GetValue(i) + - deprecationColumn.GetValue(i) + + ratExpensesColumn.GetValue(i) + + registrExpensesColumn.GetValue(i) + + comissionBonusExpensesColumn.GetValue(i) + + transExpensesColumn.GetValue(i) + + npvBonusExpensesColumn.GetValue(i) + + agentComissionExpensesColumn.GetValue(i) + + insuranceBonusExpensesColumn.GetValue(i) + + tlmExpensesColumn.GetValue(i) + + gpsExpensesColumn.GetValue(i) ); diff --git a/EvoCalculator.Core.Calculation/v1/Columns/TransExpensesColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/TransExpensesColumn.cs index bb99b3b..400edb1 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/TransExpensesColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/TransExpensesColumn.cs @@ -1,4 +1,5 @@ using System.Linq; +using EvoCalculator.Core.Base.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Calculation.v1.Columns diff --git a/EvoCalculator.Core.Calculation/v1/Columns/VATColumn.cs b/EvoCalculator.Core.Calculation/v1/Columns/VATColumn.cs index eb2889d..7c81ef3 100644 --- a/EvoCalculator.Core.Calculation/v1/Columns/VATColumn.cs +++ b/EvoCalculator.Core.Calculation/v1/Columns/VATColumn.cs @@ -1,4 +1,6 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; namespace EvoCalculator.Core.Calculation.v1.Columns { @@ -10,7 +12,7 @@ namespace EvoCalculator.Core.Calculation.v1.Columns public void PostCheck() { - new CheckTools().CheckColumnForZeroValue(Values); + new CheckTools().CheckColumnForZeroValue(Values); } public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues) @@ -18,8 +20,8 @@ namespace EvoCalculator.Core.Calculation.v1.Columns Values[0] = 0; Values[1] = preparedValues.FirstPaymentNdsAbs > 0 ? preparedValues.FirstPaymentNdsAbs - : (decimal) constants.VatValue * sumColumn.Values[1]; - for (var i = 2; i < Values.Length; i++) Values[i] = (decimal) constants.VatValue * sumColumn.Values[i]; + : (decimal)constants.VatValue * sumColumn.Values[1]; + for (var i = 2; i < Values.Length; i++) Values[i] = (decimal)constants.VatValue * sumColumn.Values[i]; Values[0] = Sum; } diff --git a/EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateByTotalExpected.cs similarity index 97% rename from EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateByTotalExpected.cs rename to EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateByTotalExpected.cs index a0eaa29..ae56458 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateByTotalExpected.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateByTotalExpected.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Request; +using EvoCalculator.Core.Tools.Validation; -namespace EvoCalculator.Core.Calculation.v1.Managers +namespace EvoCalculator.Core.Calculation.v1.Managers.Calculation { public static partial class CalculateManager { @@ -15,15 +15,12 @@ namespace EvoCalculator.Core.Calculation.v1.Managers var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedData(requestCalculation); - if (validationErrors.Count > 0) - { - return new ManagerResult {Errors = validationErrors}; - } + var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; var constants = new Constants.Calculation(); - var postValues = new PostValues(); + var postValues = new PostValues.PostValues(); var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation @@ -67,11 +64,16 @@ namespace EvoCalculator.Core.Calculation.v1.Managers postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn); + var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1); + nsibBruttoGrColumn.ComputeValues(preparedValues); + var sumColumn = new SumColumn( preparedValues.Nmper + 1 - , dateTempColumn + , dateColumn , preparedValues - , percentPaymentColumn, postValues); + , percentPaymentColumn + , postValues + , nsibBruttoGrColumn); var sumWithVatColumn = new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants, @@ -86,9 +88,6 @@ namespace EvoCalculator.Core.Calculation.v1.Managers var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1); negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn); - var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1); - nsibBruttoGrColumn.ComputeValues(preparedValues); - var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn); diff --git a/EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateDefault.cs similarity index 96% rename from EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateDefault.cs rename to EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateDefault.cs index 5e65b6c..9b66d06 100644 --- a/EvoCalculator.Core.Calculation/v1/Managers/Calculate/CalculateDefault.cs +++ b/EvoCalculator.Core.Calculation/v1/Managers/Calculation/CalculateDefault.cs @@ -1,11 +1,11 @@ using System; using System.Collections.Generic; using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Request; +using EvoCalculator.Core.Tools.Validation; -namespace EvoCalculator.Core.Calculation.v1.Managers +namespace EvoCalculator.Core.Calculation.v1.Managers.Calculation { public static partial class CalculateManager { @@ -15,15 +15,13 @@ namespace EvoCalculator.Core.Calculation.v1.Managers var preparedPayments = requestCalculation.preparedPayments; var additionalData = requestCalculation.additionalData; - var validationErrors = new Validation().ValidatePreparedData(requestCalculation); - if (validationErrors.Count > 0) - { - return new ManagerResult {Errors = validationErrors}; - } + var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + + if (validationErrors.Count > 0) return new ManagerResult { Errors = validationErrors }; var constants = new Constants.Calculation(); - var postValues = new PostValues(); + var postValues = new PostValues.PostValues(); var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation @@ -75,12 +73,14 @@ namespace EvoCalculator.Core.Calculation.v1.Managers var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1); nsibBruttoGrColumn.ComputeValues(preparedValues); - + var sumColumn = new SumColumn( preparedValues.Nmper + 1 - , dateTempColumn + , dateColumn , preparedValues - , percentPaymentColumn, postValues); + , percentPaymentColumn + , postValues + , nsibBruttoGrColumn); var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, @@ -188,7 +188,7 @@ namespace EvoCalculator.Core.Calculation.v1.Managers nsibBruttoGrColumn, nsibExpensesColumn); if (nsibBruttoGrColumn.Sum != 0) - cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); + cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR); var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1); revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn); diff --git a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_PR.cs b/EvoCalculator.Core.Calculation/v1/Post/PriceUP_PR.cs deleted file mode 100644 index 9bd34b1..0000000 --- a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_PR.cs +++ /dev/null @@ -1,12 +0,0 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; - -namespace EvoCalculator.Core.Calculation.v1.Post -{ - public class PriceUP_PR : BasePostValue - { - public void ComputeValue(PreparedValues preparedValues, PostValues postValues) - { - Value = (double) postValues.PriceUP.Value / (double) preparedValues.PriceUpTotal; - } - } -} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year_PR.cs b/EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year_PR.cs deleted file mode 100644 index d7e84f4..0000000 --- a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year_PR.cs +++ /dev/null @@ -1,12 +0,0 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; - -namespace EvoCalculator.Core.Calculation.v1.Post -{ - public class PriceUP_Year_PR : BasePostValue - { - public void ComputeValue(PreparedValues preparedValues, PostValues postValues) - { - Value = (double) postValues.PriceUP_Year.Value / (double) preparedValues.PriceUpTotal; - } - } -} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/BaseCost.cs b/EvoCalculator.Core.Calculation/v1/PostValues/BaseCost.cs similarity index 68% rename from EvoCalculator.Core.Calculation/v1/Post/BaseCost.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/BaseCost.cs index bdbdfe0..8cdd98a 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/BaseCost.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/BaseCost.cs @@ -1,18 +1,19 @@ using System; -using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class BaseCost : BasePostValue { - public void ComputeValue(PreparedValues preparedValues, KaskoNmperGrColumn kaskoNmperGrColumn, - TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn) + public void ComputeValue(PreparedValues preparedValues, BaseColumn kaskoNmperGrColumn, + BaseColumn tlmGrColumn, BaseColumn gpsGrColumn) { Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoNmperGrColumn.Values[0]) + Math.Abs(tlmGrColumn.Values[0]) + Math.Abs(gpsGrColumn.Values[0]) + preparedValues.Rats + preparedValues.Registration + preparedValues.TrackerCost + - preparedValues.TLMCost + preparedValues.TransportTaxGr * (decimal) preparedValues.Leasing0K + + preparedValues.TLMCost + preparedValues.TransportTaxGr * (decimal)preparedValues.Leasing0K + preparedValues.NsibBrutto; } } diff --git a/EvoCalculator.Core.Calculation/v1/Post/BonusBase.cs b/EvoCalculator.Core.Calculation/v1/PostValues/BonusBase.cs similarity index 85% rename from EvoCalculator.Core.Calculation/v1/Post/BonusBase.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/BonusBase.cs index 7f1f07d..438ca82 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/BonusBase.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/BonusBase.cs @@ -1,8 +1,9 @@ using System; +using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class BonusBase : BasePostValue { diff --git a/EvoCalculator.Core.Calculation/v1/Post/BonusResult.cs b/EvoCalculator.Core.Calculation/v1/PostValues/BonusResult.cs similarity index 56% rename from EvoCalculator.Core.Calculation/v1/Post/BonusResult.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/BonusResult.cs index 056e3c8..cd972ca 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/BonusResult.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/BonusResult.cs @@ -1,16 +1,17 @@ using System; -using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class BonusResult : BasePostValue { - public void ComputeValue(PreparedValues preparedValues, NPVBonusExpensesColumn npvBonusExpensesColumn) + public void ComputeValue(PreparedValues preparedValues, BaseColumnWithSum npvBonusExpensesColumn) { Value = Math.Abs(npvBonusExpensesColumn.Values[0]) - - Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) preparedValues.SalaryRate / - (decimal) (1 + preparedValues.SalaryRate); + Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal)preparedValues.SalaryRate / + (decimal)(1 + preparedValues.SalaryRate); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/NPVNI.cs b/EvoCalculator.Core.Calculation/v1/PostValues/NPVNI.cs similarity index 61% rename from EvoCalculator.Core.Calculation/v1/Post/NPVNI.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/NPVNI.cs index f144196..642151a 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/NPVNI.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/NPVNI.cs @@ -1,14 +1,15 @@ using System.Linq; +using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class NPVNI : BasePostValue { public void ComputeValue(PreparedValues preparedValues, NPVColumn npvColumn) { - Value = npvColumn.Values.Sum(x => (double) x) / (double) preparedValues.NpvBase; + Value = npvColumn.Values.Sum(x => (double)x) / (double)preparedValues.NpvBase; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/PostValues.cs b/EvoCalculator.Core.Calculation/v1/PostValues/PostValues.cs similarity index 92% rename from EvoCalculator.Core.Calculation/v1/Post/PostValues.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/PostValues.cs index cad47ee..6245d25 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/PostValues.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/PostValues.cs @@ -1,17 +1,29 @@ -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class PostValues { public BaseCost BaseCost; public BonusBase BonusBase; + public BonusResult BonusResult; + public NPVNI NPVNI; public PriceUP PriceUP; public PriceUP_PR PriceUP_PR; public PriceUP_Year PriceUP_Year; public PriceUP_Year_PR PriceUP_Year_PR; - public NPVNI NPVNI; - public BonusResult BonusResult; - public object GetValues() + public PostValues() + { + BaseCost = new BaseCost(); + BonusBase = new BonusBase(); + PriceUP = new PriceUP(); + PriceUP_PR = new PriceUP_PR(); + PriceUP_Year = new PriceUP_Year(); + PriceUP_Year_PR = new PriceUP_Year_PR(); + NPVNI = new NPVNI(); + BonusResult = new BonusResult(); + } + + public virtual object GetValues() { return new { @@ -25,17 +37,5 @@ BonusResult = BonusResult.Value }; } - - public PostValues() - { - BaseCost = new BaseCost(); - BonusBase = new BonusBase(); - PriceUP = new PriceUP(); - PriceUP_PR = new PriceUP_PR(); - PriceUP_Year = new PriceUP_Year(); - PriceUP_Year_PR = new PriceUP_Year_PR(); - NPVNI = new NPVNI(); - BonusResult = new BonusResult(); - } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/PriceUP.cs b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP.cs similarity index 80% rename from EvoCalculator.Core.Calculation/v1/Post/PriceUP.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/PriceUP.cs index 12f0ba8..42e6715 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/PriceUP.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP.cs @@ -1,8 +1,9 @@ using System.Linq; +using EvoCalculator.Core.Base.PostValues; using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class PriceUP : BasePostValue { diff --git a/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_PR.cs b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_PR.cs new file mode 100644 index 0000000..11aa810 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_PR.cs @@ -0,0 +1,13 @@ +using EvoCalculator.Core.Base.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v1.PostValues +{ + public class PriceUP_PR : BasePostValue + { + public void ComputeValue(PreparedValues preparedValues, PostValues postValues) + { + Value = (double)postValues.PriceUP.Value / (double)preparedValues.PriceUpTotal; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year.cs b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year.cs similarity index 61% rename from EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year.cs rename to EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year.cs index a4db970..4c1d98f 100644 --- a/EvoCalculator.Core.Calculation/v1/Post/PriceUP_Year.cs +++ b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year.cs @@ -1,6 +1,7 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Base.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1.Post +namespace EvoCalculator.Core.Calculation.v1.PostValues { public class PriceUP_Year : BasePostValue { diff --git a/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year_PR.cs b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year_PR.cs new file mode 100644 index 0000000..801cc83 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v1/PostValues/PriceUP_Year_PR.cs @@ -0,0 +1,13 @@ +using EvoCalculator.Core.Base.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v1.PostValues +{ + public class PriceUP_Year_PR : BasePostValue + { + public void ComputeValue(PreparedValues preparedValues, PostValues postValues) + { + Value = (double)postValues.PriceUP_Year.Value / (double)preparedValues.PriceUpTotal; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowColumn.cs new file mode 100644 index 0000000..bfad8e3 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CashflowColumn : BaseColumnWithXIRR + { + public CashflowColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) + { + } + + public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, SubsidyExpensesColumn subsidyExpensesColumn) + { + Values[0] = -preparedValues.AcquisitionExpenses; + Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum; + for (var i = 2; i < Values.Length; i++) + Values[i] = sumColumn.Values[i] + negativeCashflowColumn.Values[i] + subsidyExpensesColumn.GetValue(i); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowLeasingColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowLeasingColumn.cs new file mode 100644 index 0000000..8030fbe --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowLeasingColumn.cs @@ -0,0 +1,29 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CashflowLeasingColumn : BaseColumnWithXIRR + { + public CashflowLeasingColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn) + { + } + + public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, + NSIBBruttoGrColumn nsibBruttoGrColumn, TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, + SubsidyExpensesColumn subsidyExpensesColumn) + { + Values[0] = -preparedValues.AcquisitionExpenses; + Values[1] = sumColumn.Values[1] - preparedValues.SubsidySum; + for (var i = 2; i < Values.Length; i++) + Values[i] = sumColumn.Values[i] + + negativeCashflowColumn.Values[i] + - nsibBruttoGrColumn.Values[i] + - tlmGrColumn.Values[i] + - gpsGrColumn.Values[i] + + subsidyExpensesColumn.GetValue(i); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs new file mode 100644 index 0000000..41b69f5 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/BaseCashflowMSFOColumn.cs @@ -0,0 +1,40 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class BaseCashflowMSFOColumn : EvoCalculator.Core.Calculation.v1.Columns.BaseCashflowMSFOColumn + { + protected readonly SubsidyExpensesColumn _subsidyExpensesColumn; + + protected override void FillValues() + { + Values[0] = -_preparedValues.AcquisitionExpenses - _preparedValues.FuelCardSum; + Values[1] = _sumColumn.Values[1] + _npvBonusExpensesColumn.Values[1] + + _agentComissionExpensesColumn.Values[1] - _preparedValues.SubsidySum; + for (var i = 2; i < Values.Length; i++) + Values[i] = _sumColumn.Values[i] + + _negativeCashflowColumn.Values[i] + - _nsibBruttoGrColumn.Values[i] + - _tlmGrColumn.Values[i] + - _gpsGrColumn.Values[i] + + _npvBonusExpensesColumn.Values[i] + + _agentComissionExpensesColumn.Values[i] + + _subsidyExpensesColumn.Values[i]; + } + + public BaseCashflowMSFOColumn(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, + PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, + BaseColumn tlmGrColumn, BaseColumn gpsGrColumn, BaseColumnWithSum npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) : + base(count, dateTempColumn, postValues, + preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, + tlmGrColumn, + gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn) + { + _subsidyExpensesColumn = subsidyExpensesColumn; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs new file mode 100644 index 0000000..2025a40 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT1.cs @@ -0,0 +1,48 @@ +using System; +using System.Linq; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Interfaces.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using TridentGoalSeek; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CashflowMSFOColumnVT1 : BaseCashflowMSFOColumn, IColumnWithGoalSeek + { + public CashflowMSFOColumnVT1(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, + PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, + TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) : + base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn, + negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, + agentComissionExpensesColumn, subsidyExpensesColumn) + { + } + + public decimal Calculate(decimal inputVariable) + { + _sumColumn.ComputeValues(inputVariable); + FillValues(); + return Convert.ToDecimal(Nominal); + } + + public void ComputeValues(decimal requiredValue) + { + var NUMBER_OF_LARGE_PERCENTS = _percentPaymentColumn.Values + .Skip(2) + .Take(_percentPaymentColumn.Values.Length - 1) + .Where(x => x >= 10).ToArray().Length; + + var goalSeek = new GoalSeek(this); + goalSeek.SeekResult(requiredValue, + new GoalSeekOptions( + startingStabPoint: + (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / NUMBER_OF_LARGE_PERCENTS + , maximumAttempts: 1000 + , initialTineSpacing: (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) / _preparedValues.Nmper + // , focusPercentage: 50 + )); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs new file mode 100644 index 0000000..cfc159c --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowMSFOColumn/CashflowMSFOColumnVT2.cs @@ -0,0 +1,24 @@ +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CashflowMSFOColumnVT2 : BaseCashflowMSFOColumn + { + public CashflowMSFOColumnVT2(int count, DateTempColumn dateTempColumn, PostValues.PostValues postValues, + PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn, SumColumn sumColumn, + NegativeCashflowColumn negativeCashflowColumn, NSIBBruttoGrColumn nsibBruttoGrColumn, + TLM_GrColumn tlmGrColumn, GPS_GrColumn gpsGrColumn, NPVBonusExpensesColumn npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) : + base(count, dateTempColumn, postValues, preparedValues, percentPaymentColumn, sumColumn, + negativeCashflowColumn, nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, + agentComissionExpensesColumn, subsidyExpensesColumn) + { + } + + public void ComputeValues() + { + FillValues(); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CashflowNPVColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CashflowNPVColumn.cs new file mode 100644 index 0000000..9660d3f --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CashflowNPVColumn.cs @@ -0,0 +1,40 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CashflowNPVColumn : BaseColumn + { + public CashflowNPVColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, SumColumn sumColumn, + NPVBonusExpensesColumn npvBonusExpensesColumn, AgentComissionExpensesColumn agentComissionExpensesColumn, + TaxColumn taxColumn, NSIBExpensesColumn nsibExpensesColumn, NegativeCashflowColumn negativeCashflowColumn, + RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, + TLMExpensesColumn tlmExpensesColumn, GPSExpensesColumn gpsExpensesColumn, + SubsidyExpensesColumn subsidyExpensesColumn) + { + Values[0] = -preparedValues.AcquisitionExpenses; + Values[1] = sumColumn.GetValue(1) + npvBonusExpensesColumn.GetValue(1) + + agentComissionExpensesColumn.GetValue(1) - taxColumn.GetValue(1) + + nsibExpensesColumn.GetValue(1) - + preparedValues.SubsidySum; + + for (var i = 2; i < Values.Length; i++) + Values[i] = sumColumn.GetValue(i) + + negativeCashflowColumn.GetValue(i) + + npvBonusExpensesColumn.GetValue(i) + + agentComissionExpensesColumn.GetValue(i) + + ratExpensesColumn.GetValue(i) + - taxColumn.GetValue(i) + + transExpensesColumn.GetValue(i) + + nsibExpensesColumn.GetValue(i) + + tlmExpensesColumn.GetValue(i) + + gpsExpensesColumn.GetValue(i) + + subsidyExpensesColumn.GetValue(i); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs new file mode 100644 index 0000000..5ec7f06 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/CreditColumn.cs @@ -0,0 +1,29 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class CreditColumn : BaseColumnWithSum + { + public CreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, SumCreditColumn sumCreditColumn) + { + Values[1] = -sumCreditColumn.GetValue(1) * (decimal)preparedValues.LoanRate / 12; + for (var i = 2; i < Values.Length; i++) + { + if (GetValue(i - 1) < 0) + { + Values[i] = -sumCreditColumn.GetValue(i - 1) * (decimal)preparedValues.LoanRate / 12; + } + else + { + Values[i] = 0; + } + } + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/DirectorBonusSumColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/DirectorBonusSumColumn.cs new file mode 100644 index 0000000..e75f59d --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/DirectorBonusSumColumn.cs @@ -0,0 +1,22 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class DirectorBonusSumColumn : BaseColumnWithSum + { + public DirectorBonusSumColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) + { + Values[2] = -1 * (postValues.BonusBase.Value * (decimal)preparedValues.DirectorBonus * + (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate + + preparedValues.DirectorBonusNsib * (decimal)(1 + preparedValues.SalaryRate) + + preparedValues.RegionalDirectorBonusNsib * (decimal)(1 + preparedValues.SalaryRate)); + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/ExpensesColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/ExpensesColumn.cs new file mode 100644 index 0000000..880867d --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/ExpensesColumn.cs @@ -0,0 +1,38 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class ExpensesColumn : BaseColumnWithSum + { + public ExpensesColumn(int count) : base(count) + { + } + + public void ComputeValues(AgentComissionExpensesColumn agentComissionExpensesColumn, + RatExpensesColumn ratExpensesColumn, TransExpensesColumn transExpensesColumn, + NSIBExpensesColumn nsibExpensesColumn, TLMExpensesColumn tlmExpensesColumn, + GPSExpensesColumn gpsExpensesColumn, RegistrExpensesColumn registrExpensesColumn, + InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, + ComissionBonusExpensesColumn comissionBonusExpensesColumn, + NPVBonusExpensesColumn npvBonusExpensesColumn, + SubsidyExpensesColumn subsidyExpensesColumn) + { + for (var i = 1; i < Values.Length; i++) + Values[i] = + agentComissionExpensesColumn.Values[i] + + ratExpensesColumn.Values[i] + + transExpensesColumn.Values[i] + + nsibExpensesColumn.Values[i] + + tlmExpensesColumn.Values[i] + + gpsExpensesColumn.Values[i] + + registrExpensesColumn.Values[i] + + insuranceBonusExpensesColumn.Values[i] + + comissionBonusExpensesColumn.Values[i] + + npvBonusExpensesColumn.Values[i] + + subsidyExpensesColumn.Values[i]; + + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/GPS_GrColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/GPS_GrColumn.cs new file mode 100644 index 0000000..8120472 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/GPS_GrColumn.cs @@ -0,0 +1,25 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class GPS_GrColumn : BaseColumnWithSum + { + public GPS_GrColumn(int count) : base(count) + { + } + + public void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + + public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) + { + for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].GpsCostPayment; + + Values[0] = -Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/KaskoNmperGrColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/KaskoNmperGrColumn.cs new file mode 100644 index 0000000..0e20b0f --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/KaskoNmperGrColumn.cs @@ -0,0 +1,39 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class KaskoNmperGrColumn : BaseColumnWithSum + { + public KaskoNmperGrColumn(int count) : base(count) + { + } + + public void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + + public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants) + { + if (preparedValues.NmperInsurance < constants.MaxOnePolicePeriod) + Values[1] = preparedValues.InsuranceKasko; + else + { + var InsuranceKaskoMonth = preparedValues.NmperInsurance >= constants.MaxOnePolicePeriod + ? preparedValues.InsuranceKasko / 12 + : preparedValues.InsuranceKasko / preparedValues.NmperInsurance; + for (var i = 1; i < preparedValues.NmperInsurance; i += 12) + if (i <= preparedValues.NmperInsurance) + { + Values[i] = preparedValues.NmperInsurance - i + 1 >= constants.MaxOnePolicePeriod + ? InsuranceKaskoMonth * 12 + : InsuranceKaskoMonth * (preparedValues.NmperInsurance - i + 1); + } + } + + Values[0] = -Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/NPVBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/NPVBonusExpensesColumn.cs new file mode 100644 index 0000000..6453b8d --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/NPVBonusExpensesColumn.cs @@ -0,0 +1,30 @@ +using System; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class NPVBonusExpensesColumn : BaseColumnWithSum + { + public NPVBonusExpensesColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues) + { + Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) * + (decimal)(1 + preparedValues.SalaryRate); + + Values[2] = preparedValues.BonusFix > 0 + ? -preparedValues.BonusFix + : -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) * + (decimal)(1 + preparedValues.SalaryRate) * + (decimal)preparedValues.MarketRate * (decimal)preparedValues.DistrictRate; + + + for (var i = 3; i < Values.Length; i++) Values[i] = 0; + + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/SubsidyExpensesColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/SubsidyExpensesColumn.cs new file mode 100644 index 0000000..a02adbb --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/SubsidyExpensesColumn.cs @@ -0,0 +1,18 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class SubsidyExpensesColumn : BaseColumnWithSum + { + public SubsidyExpensesColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues) + { + Values[preparedValues.SubsidyPaymentNumber] = preparedValues.SubsidySum; + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs new file mode 100644 index 0000000..ef47811 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/SumColumn.cs @@ -0,0 +1,27 @@ +using System; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class SumColumn : EvoCalculator.Core.Calculation.v1.Columns.SumColumn + { + public SumColumn(int count, BaseColumn dateTempColumn, PreparedValues preparedValues, + PercentPaymentColumn percentPaymentColumn, v1.PostValues.PostValues postValues, + BaseColumn nsibBruttoGrColumn) : base(count, dateTempColumn, preparedValues, percentPaymentColumn, + postValues, nsibBruttoGrColumn) + { + } + + public override void ComputeValues(decimal x) + { + Values[0] = -_postValues.BaseCost.Value - _preparedValues.FuelCardSum; + Values[1] = _preparedValues.FirstPaymentSum; + + for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100; + + Values[^1] = _preparedValues.LastPaymentSum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/SumCreditColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/SumCreditColumn.cs new file mode 100644 index 0000000..66213b0 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/SumCreditColumn.cs @@ -0,0 +1,31 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class SumCreditColumn : BaseColumn + { + public SumCreditColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, PostValues.PostValues postValues + , Constants.Calculation constants, SumColumn sumColumn) + { + Values[1] = (postValues.BaseCost.Value - sumColumn.GetValue(1)) * (1 + (decimal)constants.VatValue); + 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/v2/Columns/TLM_GrColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/TLM_GrColumn.cs new file mode 100644 index 0000000..eeab5b4 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/TLM_GrColumn.cs @@ -0,0 +1,25 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using EvoCalculator.Core.Tools.Check; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class TLM_GrColumn : BaseColumnWithSum + { + public TLM_GrColumn(int count) : base(count) + { + } + + public void PostCheck() + { + new CheckTools().CheckColumnForZeroValue(Values); + } + + public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues) + { + for (var i = 1; i < Values.Length; i++) Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment; + + Values[0] = -Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Columns/TaxColumn.cs b/EvoCalculator.Core.Calculation/v2/Columns/TaxColumn.cs new file mode 100644 index 0000000..6650f8e --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Columns/TaxColumn.cs @@ -0,0 +1,45 @@ +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; + +namespace EvoCalculator.Core.Calculation.v2.Columns +{ + public class TaxColumn : BaseColumnWithSum + { + public TaxColumn(int count) : base(count) + { + } + + public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants, SumColumn sumColumn, + AcceptInsuranceColumn acceptInsuranceColumn, DeprecationColumn deprecationColumn, + RatExpensesColumn ratExpensesColumn, RegistrExpensesColumn registrExpensesColumn, + ComissionBonusExpensesColumn comissionBonusExpensesColumn, TransExpensesColumn transExpensesColumn, + NPVBonusExpensesColumn npvBonusExpensesColumn, + AgentComissionExpensesColumn agentComissionExpensesColumn, + InsuranceBonusExpensesColumn insuranceBonusExpensesColumn, TLMExpensesColumn tlmExpensesColumn, + GPSExpensesColumn gpsExpensesColumn, SubsidyExpensesColumn subsidyExpensesColumn) + { + for (var i = 1; i < Values.Length; i++) + Values[i] = (decimal)constants.IncomeTaxValue * (sumColumn.GetValue(i) + - acceptInsuranceColumn.GetValue(i) + - deprecationColumn.GetValue(i) + + ratExpensesColumn.GetValue(i) + + registrExpensesColumn.GetValue(i) + + comissionBonusExpensesColumn.GetValue(i) + + transExpensesColumn.GetValue(i) + + npvBonusExpensesColumn.GetValue(i) + + agentComissionExpensesColumn.GetValue(i) + + insuranceBonusExpensesColumn.GetValue(i) + + tlmExpensesColumn.GetValue(i) + + gpsExpensesColumn.GetValue(i) + + subsidyExpensesColumn.GetValue(i) + - (i == 1 + ? preparedValues.SubsidySum + : 0) + ); + + + Values[0] = Sum; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs new file mode 100644 index 0000000..c355bd5 --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateByTotalExpected.cs @@ -0,0 +1,346 @@ +using System; +using System.Collections.Generic; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models; +using EvoCalculator.Core.Models.Calculation.Models.Request; +using EvoCalculator.Core.Tools.Validation; +using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn; +using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn; +using CashflowMSFOColumnVT2 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT2; +using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn; +using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v2.Columns.DirectorBonusSumColumn; +using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn; +using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn; +using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn; +using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; +using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; + +namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation +{ + public static partial class CalculateManager + { + public static ManagerResult CalculateByTotalExpected(RequestCalculation requestCalculation) + { + var preparedValues = requestCalculation.preparedValues; + var preparedPayments = requestCalculation.preparedPayments; + var additionalData = requestCalculation.additionalData; + + var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; + + var constants = new Constants.Calculation(); + + var postValues = new PostValues.PostValues(); + + + var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation + ? preparedValues.Nmper + 1 + : preparedValues.NmperDeprecation + 2; + + try + { + var dateColumn = new DateColumn(preparedValues.Nmper + 1); + dateColumn.ComputeValues(preparedValues, constants); + + var dateTempColumn = new DateTempColumn(maxColumnLength); + dateTempColumn.ComputeValues(preparedValues); + + var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); + percentPaymentColumn.ComputeValues(preparedPayments); + + var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1); + kaskoNmperGrColumn.ComputeValues(preparedValues, constants); + kaskoNmperGrColumn.PostCheck(); + + var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1); + tlmGrColumn.ComputeValues(preparedPayments, preparedValues); + tlmGrColumn.PostCheck(); + + + var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1); + gpsGrColumn.ComputeValues(preparedPayments, preparedValues); + gpsGrColumn.PostCheck(); + + var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1); + kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn); + + postValues.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn); + + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1); + npvBonusExpensesColumn.ComputeValues(preparedValues, postValues); + + postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn); + + var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1); + nsibBruttoGrColumn.ComputeValues(preparedValues); + + var sumColumn = new SumColumn( + preparedValues.Nmper + 1 + , dateTempColumn + , preparedValues + , percentPaymentColumn + , postValues + , nsibBruttoGrColumn); + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1); + subsidyExpensesColumn.ComputeValues(preparedValues); + + var sumWithVatColumn = + new SumWithVATColumnVT2(preparedValues.Nmper + 1, sumColumn, preparedValues, constants, + percentPaymentColumn, postValues); + sumWithVatColumn.ComputeValues(Convert.ToDecimal(preparedValues.TotalExpected)); + sumWithVatColumn.PostCheck(); + sumColumn.PostCheck(); + + var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1); + agentComissionExpensesColumn.ComputeValues(preparedValues); + + var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1); + negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn); + + var cashflowMsfoColumn = new CashflowMSFOColumnVT2(preparedValues.Nmper + 1, dateTempColumn, postValues, + preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, + tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn, + subsidyExpensesColumn); + cashflowMsfoColumn.ComputeValues(); + cashflowMsfoColumn.PostCheck(additionalData); + + var vatColumn = new VATColumn(preparedValues.Nmper + 1); + vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues); + vatColumn.PostCheck(); + + var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1); + acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn); + + var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1); + acceptKaskoColumn.ComputeValues(preparedValues); + + var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1); + acceptOsagoColumn.ComputeValues(preparedValues); + + var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1); + acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn); + + var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); + deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn); + + var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength); + deprecationLdColumn.ComputeValues(preparedValues); + + var deprecationColumn = new DeprecationColumn(maxColumnLength); + deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn); + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1); + ratExpensesColumn.ComputeValues(preparedValues); + + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1); + transExprensesColumn.ComputeValues(preparedValues); + + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1); + nsibExpensesColumn.ComputeValues(preparedValues); + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1); + tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments); + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1); + gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments); + + var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1); + registrExpensesColumn.ComputeValues(preparedValues); + + var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1); + insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants); + + var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1); + comissionBonusExpensesColumn.ComputeValues(preparedValues); + + var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1); + expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn, + nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn, + insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn, + subsidyExpensesColumn); + + var taxColumn = new TaxColumn(maxColumnLength); + taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn, + ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, + npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn, + tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn); + + var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn); + + var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, + nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn); + + var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); + cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, + agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, + ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn, + subsidyExpensesColumn); + + var npvWeightColumn = new NPVWeightColumn(maxColumnLength); + npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); + + var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); + npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); + + var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); + irrGrColumn.ComputeValues(dateTempColumn, cashflowColumn); + + var niColumn = new NIColumn(preparedValues.Nmper + 1); + niColumn.ComputeValues(preparedValues, cashflowColumn, irrGrColumn); + + var interestColumn = new InterestColumn(preparedValues.Nmper + 1); + interestColumn.ComputeValues(irrGrColumn, niColumn); + interestColumn.PostCheck(sumColumn); + + var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, + nsibBruttoGrColumn, nsibExpensesColumn); + + if (nsibBruttoGrColumn.Sum != 0) + cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); + + var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1); + revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn); + + var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1); + sumCurrentColumn.ComputeValues(sumWithVatColumn); + + var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1); + sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn); + + var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1); + sumCurrentInterestColumn.ComputeValues(interestColumn); + + var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1); + sumCurrentTlmColumn.ComputeValues(tlmGrColumn); + + var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1); + sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn, + sumCurrentInterestColumn, sumCurrentTlmColumn); + sumRepaymentColumn.PostCheck(); + + var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1); + extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues); + + var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn); + + var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength); + cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn); + + var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn); + npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn); + + var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1); + directorBonusSumColumn.ComputeValues(preparedValues, postValues); + + var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn); + cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + + var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); + cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); + + var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn); + npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn); + + var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn); + + var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + creditColumn.ComputeValues(preparedValues, sumCreditColumn); + + postValues.PriceUP.ComputeValue(preparedValues, sumColumn); + postValues.PriceUP_PR.ComputeValue(preparedValues, postValues); + postValues.PriceUP_Year.ComputeValue(preparedValues, postValues); + postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues); + postValues.NPVNI.ComputeValue(preparedValues, npvColumn); + postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn); + postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn); + postValues.ContractEconomy.Validate(); + + + return new ManagerResult + { + PostValues = postValues.GetValues(), + PreparedValues = preparedValues, + Columns = new + { + dateColumn, + dateTempColumn, + percentPaymentColumn, + kaskoNmperGrColumn, + tlmGrColumn, + gpsGrColumn, + sumColumn, + vatColumn, + sumWithVatColumn, + acceptSumColumn, + acceptKaskoColumn, + acceptOsagoColumn, + acceptInsuranceColumn, + deprecationLpColumn, + deprecationLdColumn, + deprecationColumn, + npvBonusExpensesColumn, + kaskoBonusGrSumColumn, + agentComissionExpensesColumn, + ratExpensesColumn, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + negativeCashflowColumn, + nsibBruttoGrColumn, + taxColumn, + cashflowColumn, + cashflowLeasingColumn, + cashflowMsfoColumn, + cashflowNpvColumn, + npvWeightColumn, + npvColumn, + irrGrColumn, + niColumn, + interestColumn, + cashflowNsibColumn, + revenueColumn, + sumCurrentColumn, + sumCurrentNegativeColumn, + sumCurrentInterestColumn, + sumCurrentTlmColumn, + sumRepaymentColumn, + extraBonusSumColumn, + cashflowMsfoFinalColumn, + cashflowNpvFinalColumn, + npvFinalColumn, + directorBonusSumColumn, + cashflowMsfoFinal2Column, + cashflowNpvFinal2Column, + npvFinal2Column, + sumCreditColumn, + creditColumn, + subsidyExpensesColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs new file mode 100644 index 0000000..348c25e --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/Managers/Calculation/CalculateDefault.cs @@ -0,0 +1,345 @@ +using System; +using System.Collections.Generic; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models; +using EvoCalculator.Core.Models.Calculation.Models.Request; +using EvoCalculator.Core.Tools.Validation; +using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn; +using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn; +using CashflowMSFOColumnVT1 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT1; +using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn; +using DirectorBonusSumColumn = EvoCalculator.Core.Calculation.v2.Columns.DirectorBonusSumColumn; +using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn; +using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn; +using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn; +using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; +using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; + +namespace EvoCalculator.Core.Calculation.v2.Managers.Calculation +{ + public static partial class CalculateManager + { + public static ManagerResult CalculateDefault(RequestCalculation requestCalculation) + { + var preparedValues = requestCalculation.preparedValues; + var preparedPayments = requestCalculation.preparedPayments; + var additionalData = requestCalculation.additionalData; + + var validationErrors = new Validation().ValidatePreparedValues(preparedValues); + if (validationErrors.Count > 0) return new ManagerResult {Errors = validationErrors}; + + var constants = new Constants.Calculation(); + + var postValues = new PostValues.PostValues(); + + + var maxColumnLength = preparedValues.Nmper > preparedValues.NmperDeprecation + ? preparedValues.Nmper + 1 + : preparedValues.NmperDeprecation + 2; + + try + { + var dateColumn = new DateColumn(preparedValues.Nmper + 1); + dateColumn.ComputeValues(preparedValues, constants); + + var dateTempColumn = new DateTempColumn(maxColumnLength); + dateTempColumn.ComputeValues(preparedValues); + + var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1); + percentPaymentColumn.ComputeValues(preparedPayments); + + var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1); + kaskoNmperGrColumn.ComputeValues(preparedValues, constants); + kaskoNmperGrColumn.PostCheck(); + + var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1); + tlmGrColumn.ComputeValues(preparedPayments, preparedValues); + tlmGrColumn.PostCheck(); + + + var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1); + gpsGrColumn.ComputeValues(preparedPayments, preparedValues); + gpsGrColumn.PostCheck(); + + var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1); + kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn); + + postValues.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn); + + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1); + npvBonusExpensesColumn.ComputeValues(preparedValues, postValues); + + postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn); + + var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1); + agentComissionExpensesColumn.ComputeValues(preparedValues); + + var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1); + negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn); + + var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1); + nsibBruttoGrColumn.ComputeValues(preparedValues); + + var sumColumn = new SumColumn( + preparedValues.Nmper + 1 + , dateTempColumn + , preparedValues + , percentPaymentColumn + , postValues + , nsibBruttoGrColumn); + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1); + subsidyExpensesColumn.ComputeValues(preparedValues); + + var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn, postValues, + preparedValues, percentPaymentColumn, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn, + tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn, + subsidyExpensesColumn); + cashflowMsfoColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); + cashflowMsfoColumn.PostCheck(additionalData); + sumColumn.PostCheck(); + + var vatColumn = new VATColumn(preparedValues.Nmper + 1); + vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues); + vatColumn.PostCheck(); + + var sumWithVatColumn = + new SumWithVATColumnVT1(preparedValues.Nmper + 1, sumColumn, preparedValues, constants); + sumWithVatColumn.ComputeValues(); + sumWithVatColumn.PostCheck(); + + var acceptSumColumn = new AcceptSumColumn(preparedValues.Nmper + 1); + acceptSumColumn.ComputeValues(preparedValues, sumColumn, vatColumn, sumWithVatColumn); + + var acceptKaskoColumn = new AcceptKaskoColumn(preparedValues.Nmper + 1); + acceptKaskoColumn.ComputeValues(preparedValues); + + var acceptOsagoColumn = new AcceptOsagoColumn(preparedValues.Nmper + 1); + acceptOsagoColumn.ComputeValues(preparedValues); + + var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1); + acceptInsuranceColumn.ComputeValues(acceptKaskoColumn, acceptOsagoColumn); + + var deprecationLpColumn = new DeprecationLPColumn(preparedValues.Nmper + 1); + deprecationLpColumn.ComputeValues(preparedValues, acceptSumColumn); + + var deprecationLdColumn = new DeprecationLDColumn(maxColumnLength); + deprecationLdColumn.ComputeValues(preparedValues); + + var deprecationColumn = new DeprecationColumn(maxColumnLength); + deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn); + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1); + ratExpensesColumn.ComputeValues(preparedValues); + + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1); + transExprensesColumn.ComputeValues(preparedValues); + + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1); + nsibExpensesColumn.ComputeValues(preparedValues); + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1); + tlmExpensesColumn.ComputeValues(preparedValues, preparedPayments); + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1); + gpsExpensesColumn.ComputeValues(preparedValues, preparedPayments); + + var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1); + registrExpensesColumn.ComputeValues(preparedValues); + + var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1); + insuranceBonusExpensesColumn.ComputeValues(preparedValues, constants); + + var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1); + comissionBonusExpensesColumn.ComputeValues(preparedValues); + + var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1); + expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn, + nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn, + insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn, + subsidyExpensesColumn); + + var taxColumn = new TaxColumn(maxColumnLength); + taxColumn.ComputeValues(preparedValues, constants, sumColumn, acceptInsuranceColumn, deprecationColumn, + ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, + npvBonusExpensesColumn, agentComissionExpensesColumn, insuranceBonusExpensesColumn, + tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn); + + var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, subsidyExpensesColumn); + + var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, + nsibBruttoGrColumn, tlmGrColumn, gpsGrColumn, subsidyExpensesColumn); + + var cashflowNpvColumn = new CashflowNPVColumn(maxColumnLength); + cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn, + agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, + ratExpensesColumn, transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn, + subsidyExpensesColumn); + + var npvWeightColumn = new NPVWeightColumn(maxColumnLength); + npvWeightColumn.ComputeValues(preparedValues, dateTempColumn); + + var npvColumn = new NPVColumn(maxColumnLength, dateTempColumn); + npvColumn.ComputeValues(cashflowNpvColumn, npvWeightColumn); + + var irrGrColumn = new IRRGrColumn(preparedValues.Nmper + 1); + irrGrColumn.ComputeValues(dateTempColumn, cashflowColumn); + + var niColumn = new NIColumn(preparedValues.Nmper + 1); + niColumn.ComputeValues(preparedValues, cashflowColumn, irrGrColumn); + + var interestColumn = new InterestColumn(preparedValues.Nmper + 1); + interestColumn.ComputeValues(irrGrColumn, niColumn); + interestColumn.PostCheck(sumColumn); + + var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, + nsibBruttoGrColumn, nsibExpensesColumn); + + if (nsibBruttoGrColumn.Sum != 0) + cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); + + var revenueColumn = new RevenueColumn(preparedValues.Nmper + 1); + revenueColumn.ComputeValues(nsibBruttoGrColumn, nsibExpensesColumn, cashflowNsibColumn); + + var sumCurrentColumn = new SumCurrentColumn(preparedValues.Nmper + 1); + sumCurrentColumn.ComputeValues(sumWithVatColumn); + + var sumCurrentNegativeColumn = new SumCurrentNegativeColumn(preparedValues.Nmper + 1); + sumCurrentNegativeColumn.ComputeValues(negativeCashflowColumn); + + var sumCurrentInterestColumn = new SumCurrentInterestColumn(preparedValues.Nmper + 1); + sumCurrentInterestColumn.ComputeValues(interestColumn); + + var sumCurrentTlmColumn = new SumCurrentTLMColumn(preparedValues.Nmper + 1); + sumCurrentTlmColumn.ComputeValues(tlmGrColumn); + + var sumRepaymentColumn = new SumRepaymentColumn(preparedValues.Nmper + 1); + sumRepaymentColumn.ComputeValues(constants, preparedValues, sumCurrentColumn, sumCurrentNegativeColumn, + sumCurrentInterestColumn, sumCurrentTlmColumn); + sumRepaymentColumn.PostCheck(); + + var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1); + extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues); + + var cashflowMsfoFinalColumn = new CashflowMSFOFinalColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowMsfoFinalColumn.ComputeValues(preparedValues, cashflowMsfoColumn, extraBonusSumColumn); + + var cashflowNpvFinalColumn = new CashflowNPVFinalColumn(maxColumnLength); + cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn); + + var npvFinalColumn = new NPVFinalColumn(maxColumnLength, dateTempColumn); + npvFinalColumn.ComputeValues(cashflowNpvFinalColumn, npvWeightColumn); + + var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1); + directorBonusSumColumn.ComputeValues(preparedValues, postValues); + + var cashflowMsfoFinal2Column = new CashflowMSFOFinal2Column(preparedValues.Nmper + 1, dateTempColumn); + cashflowMsfoFinal2Column.ComputeValues(preparedValues, directorBonusSumColumn, cashflowMsfoFinalColumn); + + var cashflowNpvFinal2Column = new CashflowNPVFinal2Column(maxColumnLength); + cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn); + + var npvFinal2Column = new NPVFinal2Column(maxColumnLength, dateTempColumn); + npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn); + + var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + sumCreditColumn.ComputeValues(preparedValues, postValues, constants, sumColumn); + + var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + creditColumn.ComputeValues(preparedValues, sumCreditColumn); + + postValues.PriceUP.ComputeValue(preparedValues, sumColumn); + postValues.PriceUP_PR.ComputeValue(preparedValues, postValues); + postValues.PriceUP_Year.ComputeValue(preparedValues, postValues); + postValues.PriceUP_Year_PR.ComputeValue(preparedValues, postValues); + postValues.NPVNI.ComputeValue(preparedValues, npvColumn); + postValues.BonusResult.ComputeValue(preparedValues, npvBonusExpensesColumn); + postValues.ContractEconomy.ComputeValue(cashflowMsfoColumn, creditColumn, directorBonusSumColumn); + postValues.ContractEconomy.Validate(); + + + return new ManagerResult + { + PostValues = postValues.GetValues(), + PreparedValues = preparedValues, + Columns = new + { + dateColumn, + dateTempColumn, + percentPaymentColumn, + kaskoNmperGrColumn, + tlmGrColumn, + gpsGrColumn, + sumColumn, + vatColumn, + sumWithVatColumn, + acceptSumColumn, + acceptKaskoColumn, + acceptOsagoColumn, + acceptInsuranceColumn, + deprecationLpColumn, + deprecationLdColumn, + deprecationColumn, + npvBonusExpensesColumn, + kaskoBonusGrSumColumn, + agentComissionExpensesColumn, + ratExpensesColumn, + transExprensesColumn, + nsibExpensesColumn, + tlmExpensesColumn, + gpsExpensesColumn, + registrExpensesColumn, + insuranceBonusExpensesColumn, + comissionBonusExpensesColumn, + expensesColumn, + negativeCashflowColumn, + nsibBruttoGrColumn, + taxColumn, + cashflowColumn, + cashflowLeasingColumn, + cashflowMsfoColumn, + cashflowNpvColumn, + npvWeightColumn, + npvColumn, + irrGrColumn, + niColumn, + interestColumn, + cashflowNsibColumn, + revenueColumn, + sumCurrentColumn, + sumCurrentNegativeColumn, + sumCurrentInterestColumn, + sumCurrentTlmColumn, + sumRepaymentColumn, + extraBonusSumColumn, + cashflowMsfoFinalColumn, + cashflowNpvFinalColumn, + npvFinalColumn, + directorBonusSumColumn, + cashflowMsfoFinal2Column, + cashflowNpvFinal2Column, + npvFinal2Column, + sumCreditColumn, + creditColumn, + subsidyExpensesColumn + } + }; + } + catch (Exception ex) + { + return new ManagerResult + { + Errors = new List + { + ex.Message + } + }; + } + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/PostValues/ContractEconomy.cs b/EvoCalculator.Core.Calculation/v2/PostValues/ContractEconomy.cs new file mode 100644 index 0000000..982e1ea --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/PostValues/ContractEconomy.cs @@ -0,0 +1,24 @@ +using System; +using System.Linq; +using EvoCalculator.Core.Base.Columns; +using EvoCalculator.Core.Base.PostValues; + +namespace EvoCalculator.Core.Calculation.v2.PostValues +{ + public class ContractEconomy : BasePostValue + { + public void ComputeValue(BaseColumn cashflowMSFOColumn, BaseColumn creditColumn, + BaseColumn directorBonusSumColumn) + { + Value = cashflowMSFOColumn.Values.Sum() + creditColumn.GetValue(0) + + directorBonusSumColumn.GetValue(0); + } + + public void Validate() + { + if (Value < 0) + throw new Exception( + "Невозможно осуществить расчет графика. При заданных параметрах получается отрицательный результат по ДЛ"); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Calculation/v2/PostValues/PostValues.cs b/EvoCalculator.Core.Calculation/v2/PostValues/PostValues.cs new file mode 100644 index 0000000..c2e96fd --- /dev/null +++ b/EvoCalculator.Core.Calculation/v2/PostValues/PostValues.cs @@ -0,0 +1,28 @@ +namespace EvoCalculator.Core.Calculation.v2.PostValues +{ + public class PostValues : EvoCalculator.Core.Calculation.v1.PostValues.PostValues + { + public ContractEconomy ContractEconomy; + + public override object GetValues() + { + return new + { + BaseCost = BaseCost.Value, + BonusBase = BonusBase.Value, + PriceUP = PriceUP.Value, + PriceUP_PR = PriceUP_PR.Value, + PriceUP_Year = PriceUP_Year.Value, + PriceUP_Year_PR = PriceUP_Year_PR.Value, + NPVNI = NPVNI.Value, + BonusResult = BonusResult.Value, + ContractEconomy = ContractEconomy.Value + }; + } + + public PostValues() + { + ContractEconomy = new ContractEconomy(); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Constants/Calculation.cs b/EvoCalculator.Core.Constants/Calculation.cs index 422daae..f6b5156 100644 --- a/EvoCalculator.Core.Constants/Calculation.cs +++ b/EvoCalculator.Core.Constants/Calculation.cs @@ -5,7 +5,7 @@ // TODO: create constants service public int DeliveryDays = 210; public double IncomeTaxValue = 0.2; - public double VatValue = 0.2; public int MaxOnePolicePeriod = 16; + public double VatValue = 0.2; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj b/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj index e3223da..3913df2 100644 --- a/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj +++ b/EvoCalculator.Core.Constants/EvoCalculator.Core.Constants.csproj @@ -1,12 +1,13 @@ - netcoreapp3.1 + net5.0 Constants + default - + diff --git a/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj b/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj index 6b48a81..f9c75d1 100644 --- a/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj +++ b/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj @@ -1,17 +1,18 @@ - netcoreapp3.1 + net5.0 EvoCalculator.Core.FinanceFormulas + default - + - - + + diff --git a/EvoCalculator.Core.FinanceFormulas/XIRR.cs b/EvoCalculator.Core.FinanceFormulas/XIRR.cs index 644d1f5..6900ea2 100644 --- a/EvoCalculator.Core.FinanceFormulas/XIRR.cs +++ b/EvoCalculator.Core.FinanceFormulas/XIRR.cs @@ -7,12 +7,17 @@ namespace EvoCalculator.Core.FinanceFormulas { public class XIRR { - private readonly Flow[] _flows; - private readonly double _guess = 0.1; - private const int MaxIterations = 100; private const double DefaultTolerance = 1E-6; private const double DefaultGuess = 0.1; + private readonly Flow[] _flows; + private readonly double _guess = 0.1; + + private readonly Func, double> BisectionMethod = + cf => BisectionMethodImplementation(cf); + + private readonly Func, double> NewthonsMethod = + cf => NewtonsMethodImplementation(cf); public XIRR(Flow[] flows) { @@ -53,38 +58,6 @@ namespace EvoCalculator.Core.FinanceFormulas return x0; } - public struct Brackets - { - public readonly double First; - public readonly double Second; - - private Brackets(double first, double second) - { - First = first; - Second = second; - } - - internal static Brackets Find(IEnumerable flows, - double guess = DefaultGuess, - int maxIterations = MaxIterations) - { - const double bracketStep = 0.5; - var leftBracket = guess - bracketStep; - var rightBracket = guess + bracketStep; - var i = 0; - while (new XNPV(flows, leftBracket).GetResult() * new XNPV(flows, rightBracket).GetResult() > 0 && - i++ < maxIterations) - { - leftBracket -= bracketStep; - rightBracket += bracketStep; - } - - return i >= maxIterations - ? new Brackets(0, 0) - : new Brackets(leftBracket, rightBracket); - } - } - private static double BisectionMethodImplementation(IEnumerable flows, double tolerance = DefaultTolerance, @@ -127,12 +100,6 @@ namespace EvoCalculator.Core.FinanceFormulas return result; } - private Func, double> NewthonsMethod = - cf => NewtonsMethodImplementation(cf); - - private Func, double> BisectionMethod = - cf => BisectionMethodImplementation(cf); - private double CalcXirr(IEnumerable flows, Func, double> method) { if (flows.Count(cf => cf.Value > 0) == 0) @@ -177,5 +144,37 @@ namespace EvoCalculator.Core.FinanceFormulas return 0; } + + public struct Brackets + { + public readonly double First; + public readonly double Second; + + private Brackets(double first, double second) + { + First = first; + Second = second; + } + + internal static Brackets Find(IEnumerable flows, + double guess = DefaultGuess, + int maxIterations = MaxIterations) + { + const double bracketStep = 0.5; + var leftBracket = guess - bracketStep; + var rightBracket = guess + bracketStep; + var i = 0; + while (new XNPV(flows, leftBracket).GetResult() * new XNPV(flows, rightBracket).GetResult() > 0 && + i++ < maxIterations) + { + leftBracket -= bracketStep; + rightBracket += bracketStep; + } + + return i >= maxIterations + ? new Brackets(0, 0) + : new Brackets(leftBracket, rightBracket); + } + } } } \ No newline at end of file diff --git a/EvoCalculator.Core.FinanceFormulas/XNPV.cs b/EvoCalculator.Core.FinanceFormulas/XNPV.cs index 2916c22..9a34e1f 100644 --- a/EvoCalculator.Core.FinanceFormulas/XNPV.cs +++ b/EvoCalculator.Core.FinanceFormulas/XNPV.cs @@ -25,7 +25,7 @@ namespace EvoCalculator.Core.FinanceFormulas return (from item in _flows let days = -(item.Date - startDate).Days - select (double) item.Value * Math.Pow(1 + _rate, (double) days / 365)).Sum(); + select (double)item.Value * Math.Pow(1 + _rate, (double)days / 365)).Sum(); } public double GetResultPrime() @@ -33,7 +33,7 @@ namespace EvoCalculator.Core.FinanceFormulas var startDate = _flows.OrderBy(i => i.Date).First().Date; return (from item in _flows let daysRatio = -(item.Date - startDate).Days / 365 - select (double) item.Value * daysRatio * Math.Pow(1.0 + _rate, daysRatio - 1)).Sum(); + select (double)item.Value * daysRatio * Math.Pow(1.0 + _rate, daysRatio - 1)).Sum(); } } } \ 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 f3345d5..82416ca 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs @@ -4,6 +4,9 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared { public class PreparedValues { + private DateTime _dogDate; + + private DateTime? _paymentDateNew; public DateTime CalcDate { get; set; } = DateTime.Now; public int CalcType { get; set; } public double IrrExpected { get; set; } @@ -13,16 +16,12 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared public double LoanRate { get; set; } public int BalanceHolder { get; set; } - private DateTime _dogDate; - public DateTime DogDate { get => _dogDate.ToUniversalTime(); set => _dogDate = value; } - private DateTime? _paymentDateNew; - public DateTime? PaymentDateNew { get => _paymentDateNew?.ToUniversalTime(); @@ -102,7 +101,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared public decimal CalculationCost => PlPrice + (Insurance + Rats + Registration + TrackerCost + - TLMCost + TransportTaxGr) * (decimal) Leasing0K; + TLMCost + TransportTaxGr) * (decimal)Leasing0K; public decimal TlmCostPaymentSum { get; set; } public decimal GpsCostPaymentSum { get; set; } @@ -122,7 +121,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared BaseRegistration + Rats + TransportTaxGr; public decimal NpvBase => PlPrice + - ((NsibNetto * 12) / Nmper + + (NsibNetto * 12 / Nmper + Insurance + BaseRegistration + TrackerCost + @@ -139,9 +138,9 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared public decimal DogCredit => PlPrice + (Insurance + Rats + Registration + TrackerCost + TLMCost + TransportTaxGr) * - (decimal) Leasing0K - + (decimal)Leasing0K - FirstPaymentSum + - (NsibNetto * 12) / Nmper - + NsibNetto * 12 / Nmper - (Leasing0K != 1 ? 0 : Discount); public decimal DogCreditLeasing => PlPrice + @@ -153,5 +152,12 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared Discount - ComissionRub - FirstPaymentSum; + + public decimal DirectorBonusNsib { get; set; } + public decimal RegionalDirectorBonusNsib { get; set; } + public int LoanRatePeriod { get; set; } + public int SubsidyPaymentNumber { get; set; } + public decimal SubsidySum { get; set; } + public decimal FuelCardSum { get; set; } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs b/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs index cf71688..dedf57a 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Request/RequestCalculation.cs @@ -1,4 +1,5 @@ -using EvoCalculator.Core.Models.Calculation.Models.Prepared; +#nullable enable +using EvoCalculator.Core.Models.Calculation.Models.Prepared; namespace EvoCalculator.Core.Models.Calculation.Models.Request { diff --git a/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj b/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj index 097e221..6817e96 100644 --- a/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj +++ b/EvoCalculator.Core.Models/EvoCalculator.Core.Models.csproj @@ -1,21 +1,21 @@ - netcoreapp3.1 + net5.0 + default - - + - + - - + + diff --git a/EvoCalculator.Core.Tests/ArrayComparer.cs b/EvoCalculator.Core.Tests/ArrayComparer.cs index 7099749..8773550 100644 --- a/EvoCalculator.Core.Tests/ArrayComparer.cs +++ b/EvoCalculator.Core.Tests/ArrayComparer.cs @@ -9,7 +9,7 @@ namespace EvoCalculator.Core.Tests public DoubleArrayComparer(double tolerance) { - this._tolerance = tolerance; + _tolerance = tolerance; } public DoubleArrayComparer() @@ -33,7 +33,7 @@ namespace EvoCalculator.Core.Tests public DecimalArrayComparer(double tolerance) { - this._tolerance = tolerance; + _tolerance = tolerance; } public DecimalArrayComparer() @@ -42,7 +42,7 @@ namespace EvoCalculator.Core.Tests public bool Equals(decimal x, decimal y) { - return Math.Abs(x - y) < (decimal) _tolerance; + return Math.Abs(x - y) < (decimal)_tolerance; } public int GetHashCode(decimal obj) diff --git a/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs b/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs index 01678d2..cb02164 100644 --- a/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs @@ -10,71 +10,71 @@ namespace EvoCalculator.Core.Tests.Calculation.FinanceFormulas { private readonly Flow[] _flows = { - new Flow + new() { Date = new DateTime(2020, 09, 01), Value = -6500000 }, - new Flow + new() { Date = new DateTime(2020, 09, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2020, 10, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2020, 11, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2020, 12, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 1, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 2, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 3, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 4, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 5, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 6, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 7, 01), Value = 608944.445718643m }, - new Flow + new() { Date = new DateTime(2021, 8, 01), Value = 608944.445718643m - }, + } }; [Fact] diff --git a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs index 750f54e..0ccb822 100644 --- a/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/ValidationTests.cs @@ -1,7 +1,7 @@ using System; -using EvoCalculator.Core.Calculation.v1; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using EvoCalculator.Core.Models.Calculation.Models.Request; +using EvoCalculator.Core.Tools.Validation; using Xunit; namespace EvoCalculator.Core.Tests.Calculation @@ -11,9 +11,9 @@ namespace EvoCalculator.Core.Tests.Calculation [Fact] public void ValidationTest1() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 791666.6666666667m, FirstPaymentSum = 395833.3333333334m, @@ -22,19 +22,19 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.Empty(errors); } [Fact] public void ValidationTest2() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 691666.6666666667m, FirstPaymentSum = 345833.3333333334m, @@ -43,19 +43,19 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.Empty(errors); } [Fact] public void ValidationTest3() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 6862036.016666667m, FirstPaymentSum = 3431018.0083333333m, @@ -64,19 +64,19 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.Empty(errors); } [Fact] public void ValidationTest4() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 6862036.016666667m, FirstPaymentSum = 3431024.87036935m, @@ -85,20 +85,20 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.Empty(errors); } [Fact] public void ValidationTest5() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 6862036.016666667m, FirstPaymentSum = 3499645.23053601m, @@ -107,20 +107,20 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.NotEmpty(errors); } [Fact] public void ValidationTest6() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 6862036.016666667m, FirstPaymentSum = 3498952.23351869m, @@ -129,20 +129,20 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.NotEmpty(errors); } [Fact] public void ValidationTest7() { - var requestCalculation = new RequestCalculation() + var requestCalculation = new RequestCalculation { - preparedValues = new PreparedValues() + preparedValues = new PreparedValues { AcceptSum = 6862036.016666667m, FirstPaymentSum = 1372407.20333333m, @@ -151,11 +151,11 @@ namespace EvoCalculator.Core.Tests.Calculation IrrExpected = 5, Discount = 5, ComissionRub = 5, PaymentDateNew = DateTime.Today.AddDays(1), - DogDate = DateTime.Now, + DogDate = DateTime.Now } }; - var errors = new Validation().ValidatePreparedData(requestCalculation); + var errors = new Validation().ValidatePreparedValues(requestCalculation.preparedValues); Assert.Empty(errors); } } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptInsuranceTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptInsuranceTests.cs index 80eb765..dfac40e 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptInsuranceTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptInsuranceTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class AcceptInsuranceTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptKaskoTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptKaskoTests.cs index 455b235..deadc44 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptKaskoTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptKaskoTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class AcceptKaskoTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptOsagoTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptOsagoTests.cs index af92c64..5ec0581 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptOsagoTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptOsagoTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class AcceptOsagoTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptSumTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptSumTests.cs index 38670b0..309428f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AcceptSumTests.cs @@ -248,4 +248,5 @@ // Assert.Equal(expected, values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AgentComissionExpensesTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/AgentComissionExpensesTests.cs index dd6e03a..6a73122 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/AgentComissionExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/AgentComissionExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class AgentComissionExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowLeasingTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowLeasingTests.cs index 53c603e..96d628b 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowLeasingTests.cs @@ -299,4 +299,5 @@ // Assert.Equal(expected, cashflowLeasingColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal.cs index 4866095..39a802d 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal.cs @@ -197,4 +197,5 @@ // Assert.Equal(expected, cashflowMsfoFinalColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal2.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal2.cs index 7c107c0..a0f5e66 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOFinal2.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOFinal2.cs @@ -196,4 +196,5 @@ // Assert.Equal(expected, cashflowMsfoFinal2Column.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOTests.cs index 7b3ca2d..9540e65 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowMSFOTests.cs @@ -369,4 +369,5 @@ // Assert.Equal(expected, cashflowMsfoColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPV.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPV.cs index 19e9f2d..5faa454 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPV.cs @@ -464,4 +464,5 @@ // Assert.Equal(expected, cashflowNpvColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal.cs index d5c9fec..7d6c7ba 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal.cs @@ -120,4 +120,5 @@ // Assert.Equal(expected, cashflowNpvFinalColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal2.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal2.cs index 134b372..7ac9abe 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPVFinal2.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNPVFinal2.cs @@ -120,4 +120,5 @@ // Assert.Equal(expected, cashflowNpvFinal2Column.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNSIB.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNSIB.cs index 923ff27..75faad6 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNSIB.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowNSIB.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class CashflowNsibTests { @@ -190,7 +190,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn, nsibBruttoGrColumn, nsibExpensesColumn); - cashflowNsibColumn.ComputeValues((decimal) cashflowLeasingColumn.IRR); + cashflowNsibColumn.ComputeValues((decimal)cashflowLeasingColumn.IRR); var expected = new[] diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowTests.cs index b064e98..4862c0f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/CashflowTests.cs @@ -197,4 +197,5 @@ // Assert.Equal(expected, cashflowColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ComissionBonusExpensesTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/ComissionBonusExpensesTests.cs index 045ae91..caacacb 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/ComissionBonusExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ComissionBonusExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class ComissionBonusExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DateColumnTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DateColumnTests.cs index e5863dc..056e32d 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DateColumnTests.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DateColumnTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DateTempTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DateTempTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/DateTempTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DateTempTests.cs index eabcec6..a60ce00 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DateTempTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DateTempTests.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DateTempTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLDTests.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLDTests.cs index fc779f9..4fff4e9 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLDTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLDTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DeprecationLdTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLPTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLPTests.cs index 8ce434e..c8f3440 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationLPTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationLPTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DeprecationLpTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationTests.cs index aaf9c67..95b8257 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DeprecationTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DeprecationTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DeprecationTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DirectorBonusSum.cs similarity index 87% rename from EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/DirectorBonusSum.cs index 3a768bd..bc96e00 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/DirectorBonusSum.cs @@ -1,9 +1,9 @@ using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class DirectorBonusSumTests { @@ -19,9 +19,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns DistrictRate = 0.02 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BonusBase = new BonusBase() + BonusBase = new BonusBase { Value = 1873191.66666667m } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ExpensesTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/ExpensesTests.cs index efcf6f2..e0a5e0d 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/ExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class ExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ExtraBonusSum.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/ExtraBonusSum.cs index 5d4a4c7..806abb5 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/ExtraBonusSum.cs @@ -175,4 +175,5 @@ // Assert.Equal(expected, extraBonusSumColumn.Values, new DecimalArrayComparer(0.3)); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/GPSExpensesTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/GPSExpensesTests.cs index ec2add1..44af391 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/GPSExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/GPSExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class GpsExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/GPS_GrTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/GPS_GrTests.cs index 7a47c3d..848e84e 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/GPS_GrTests.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class GpsGrTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/IRRGr.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/IRRGr.cs index 4e7b66d..c2aeeab 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/IRRGr.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/IRRGr.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class IrrGrTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/InsuranceBonusExpensesTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/InsuranceBonusExpensesTests.cs index 7c4d4af..31d174f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/InsuranceBonusExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/InsuranceBonusExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class InsuranceBonusExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/Interest.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/Interest.cs index 04539a3..e09b4fc 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/Interest.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/Interest.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class InterestTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoBonusGrSumTests.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoBonusGrSumTests.cs index 06d14a3..b3c60f8 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoBonusGrSumTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoBonusGrSumTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class KaskoBonusGrSumTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoNmperGrTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoNmperGrTests.cs index 7c892b6..e7a5856 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/KaskoNmperGrTests.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class KaskoNmperGrTests { @@ -484,8 +484,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns var expected = new[] { - -66250m, - 66250.00m, + -53000m, + 53000.00m, 0.00m, 0.00m, 0.00m, diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NI.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/NI.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NI.cs index 067b1b0..17dd4f2 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NI.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NI.cs @@ -161,4 +161,5 @@ // Assert.Equal(expected, targetColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPV.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NPV.cs index bf3b496..e36dda1 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPV.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPV.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NpvTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVBonusExpensesTests.cs similarity index 91% rename from EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVBonusExpensesTests.cs index 651a4bb..a225ff2 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVBonusExpensesTests.cs @@ -1,9 +1,9 @@ using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NpvBonusExpensesTests { @@ -24,9 +24,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BonusBase = new BonusBase() + BonusBase = new BonusBase { Value = 2003933.33333333m } @@ -91,9 +91,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns Nmper = 30 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BonusBase = new BonusBase() + BonusBase = new BonusBase { Value = 2003933.33333333m } diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal.cs index afd00a4..afbf876 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NpvFinalTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal2.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal2.cs index 38a8266..96e54a0 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVFinal2.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVFinal2.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NpvFinal2Tests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVWeight.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVWeight.cs index 2fca009..ede14a9 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVWeight.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NPVWeight.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NpvWeightTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBBruttoGrTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBBruttoGrTests.cs index f5cb4ef..258c6b1 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBBruttoGrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBBruttoGrTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NsibBruttoGrTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBExpensesTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBExpensesTests.cs index 4c93109..fa06c0f 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NSIBExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NSIBExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NsibExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NegativeCashflowTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NegativeCashflowTests.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/NegativeCashflowTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/NegativeCashflowTests.cs index 38ea7b9..d0d4382 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/NegativeCashflowTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/NegativeCashflowTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class NegativeCashflowTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/PercentPaymentTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/PercentPaymentTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/PercentPaymentTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/PercentPaymentTests.cs index e107b6a..aa30cca 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/PercentPaymentTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/PercentPaymentTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class PercentPaymentTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/RatExpensesTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/RatExpensesTests.cs index 779d7ab..9b54571 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/RatExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/RatExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class RatExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/RegistrExpensesTests.cs similarity index 95% rename from EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/RegistrExpensesTests.cs index f9aa616..dde201e 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/RegistrExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/RegistrExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class RegistrExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/Revenue.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/Revenue.cs index 49dd410..7bfa654 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/Revenue.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/Revenue.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class RevenueTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrent.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrent.cs index 9241fda..ccf55c6 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrent.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrent.cs @@ -86,4 +86,5 @@ // Assert.Equal(expected, sumCurrentColumn.Values, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentInterest.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentInterest.cs index e04d871..be1eab5 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentInterest.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentInterest.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class SumCurrentInterestTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentNegative.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentNegative.cs index 9879eae..ded635a 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentNegative.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentNegative.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class SumCurrentNegativeTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentTLM.cs similarity index 97% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentTLM.cs index 234ca82..a79d6a0 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumCurrentTLM.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumCurrentTLM.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class SumCurrentTlmTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumRepaymentColumn.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumRepaymentColumn.cs index 51f632f..56884b3 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumRepaymentColumn.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumRepaymentColumn.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class SumRepaymentTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumTest.cs similarity index 95% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumTest.cs index cc45717..16a36e8 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumTest.cs @@ -1,10 +1,10 @@ using System; using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class SumTests { @@ -169,19 +169,18 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 25440 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BaseCost = new BaseCost() + BaseCost = new BaseCost { Value = 2842960.70661055m - }, + } }; var sumColumn = new SumColumn( preparedValues.Nmper + 1 - , dateTempColumn , preparedValues - , percentPaymentColumn, postValues); + , percentPaymentColumn, postValues, null); sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); var values = sumColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer(100)); @@ -306,19 +305,18 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 25000 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BaseCost = new BaseCost() + BaseCost = new BaseCost { Value = 2500000 - }, + } }; var sumColumn = new SumColumn( preparedValues.Nmper + 1 - , dateTempColumn , preparedValues - , percentPaymentColumn, postValues); + , percentPaymentColumn, postValues, null); sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); var values = sumColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer(100)); @@ -451,19 +449,18 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns 23000 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - BaseCost = new BaseCost() + BaseCost = new BaseCost { Value = 2586532.79187453m - }, + } }; var sumColumn = new SumColumn( preparedValues.Nmper + 1 - , dateTempColumn , preparedValues - , percentPaymentColumn, postValues); + , percentPaymentColumn, postValues, null); sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); var values = sumColumn.Values; Assert.Equal(expected, values, new DecimalArrayComparer(100)); diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumWithVatTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/SumWithVatTests.cs index be44ed0..122cf43 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/SumWithVatTests.cs @@ -98,4 +98,5 @@ // Assert.Equal(expected, res, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TLMExpensesTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/TLMExpensesTests.cs index b4a573d..c2daf57 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TLMExpensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TLMExpensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class TlmExpensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TLM_GrTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/TLM_GrTests.cs index b626c92..a75f16e 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TLM_GrTests.cs @@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.v1.Columns; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class TlmGrTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TaxColumnTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/TaxColumnTests.cs index 17c3188..4895135 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TaxColumnTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class TaxColumnTests { @@ -14,8 +14,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns Nmper = 25 }; - var sumColumn = new SumColumn(preparedValues.Nmper + 1, new DateTempColumn(preparedValues.Nmper + 1), - preparedValues, new PercentPaymentColumn(preparedValues.Nmper + 1), null) + var sumColumn = new SumColumn(preparedValues.Nmper + 1, + preparedValues, new PercentPaymentColumn(preparedValues.Nmper + 1), null, null) { Values = new[] { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TransExprensesTests.cs similarity index 98% rename from EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/TransExprensesTests.cs index e9f3a03..c83fb2a 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/TransExprensesTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/TransExprensesTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class TransExprensesTests { diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Columns/VATColumnTests.cs similarity index 96% rename from EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Columns/VATColumnTests.cs index 38009ea..acb8bfc 100644 --- a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Columns/VATColumnTests.cs @@ -2,7 +2,7 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Columns +namespace EvoCalculator.Core.Tests.Calculation.v1.Columns { public class VatColumnTests { @@ -17,7 +17,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns var dateTempColumn = new DateTempColumn(67); - var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null, null) + var sumColumn = new SumColumn(preparedValues.Nmper + 1, null, null, null, null) { Values = new[] { diff --git a/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs b/EvoCalculator.Core.Tests/Calculation/v1/Controllers/CalculationControllerTests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/Controllers/CalculationControllerTests.cs index ecf19fc..20ab127 100644 --- a/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/Controllers/CalculationControllerTests.cs @@ -6,7 +6,7 @@ // using Newtonsoft.Json; // using Xunit; // -// namespace EvoCalculator.Core.Tests.Calculation.Controller +// namespace EvoCalculator.Core.Tests.Calculation.v1.Controllers // { // public class CalculationControllerV1Tests // { @@ -849,4 +849,5 @@ // serializer.Serialize(file, res); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BaseCost.cs similarity index 93% rename from EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/BaseCost.cs index da8032e..4b3466a 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BaseCost.cs @@ -1,16 +1,16 @@ using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Post +namespace EvoCalculator.Core.Tests.Calculation.v1.PostValues { public class BaseCostTest { [Fact] public void BaseCostTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { PlPrice = 2500000, InsuranceOsago = 30000, @@ -52,7 +52,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Post 0, 0, 0, - 0, + 0 } }; @@ -85,7 +85,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Post 900, 900, 900, - 900, + 900 } }; @@ -118,7 +118,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Post 1000, 1000, 1000, - 1000, + 1000 } }; diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusBase.cs similarity index 88% rename from EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusBase.cs index d0d076a..db2feb9 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusBase.cs @@ -1,16 +1,16 @@ using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Post +namespace EvoCalculator.Core.Tests.Calculation.v1.PostValues { public class BonusBaseTests { [Fact] public void BonusBaseTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { PlPrice = 2500000m, InsuranceOsago = 30000m, @@ -48,7 +48,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Post 0, 0, 0, - 0, + 0 } }; diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusResult.cs similarity index 87% rename from EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusResult.cs index 01822ff..d94b442 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/BonusResult.cs @@ -1,17 +1,16 @@ using EvoCalculator.Core.Calculation.v1.Columns; -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; - -namespace EvoCalculator.Core.Tests.Calculation.Post +namespace EvoCalculator.Core.Tests.Calculation.v1.PostValues { public class BonusResultTests { [Fact] public void BonusResultTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { SalaryRate = 0.3 }; @@ -45,7 +44,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Post 0, 0, 0, - 0, + 0 } }; diff --git a/EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/NPVNI.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/NPVNI.cs index 6bb5407..d80f8c0 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/NPVNI.cs @@ -55,4 +55,5 @@ // Assert.Equal(0.00382387591691009, npvni.Value, new DoubleArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_PR.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_PR.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Post/PriceUP_PR.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_PR.cs index 1f4a6a6..3833ee6 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_PR.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_PR.cs @@ -29,4 +29,5 @@ // Assert.Equal(0.179003800043825, priceUpPr.Value, new DoubleArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year.cs similarity index 67% rename from EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year.cs index 33b3c1c..e5b08e3 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year.cs @@ -1,23 +1,23 @@ -using EvoCalculator.Core.Calculation.v1.Post; +using EvoCalculator.Core.Calculation.v1.PostValues; using EvoCalculator.Core.Models.Calculation.Models.Prepared; using Xunit; -namespace EvoCalculator.Core.Tests.Calculation.Post +namespace EvoCalculator.Core.Tests.Calculation.v1.PostValues { public class PriceUP_YearTests { [Fact] public void PriceUP_YearTest1() { - var preparedValues = new PreparedValues() + var preparedValues = new PreparedValues { Nmper = 25 }; - var postValues = new PostValues() + var postValues = new Core.Calculation.v1.PostValues.PostValues { - PriceUP = new PriceUP() + PriceUP = new PriceUP { Value = 499446.893305404m } diff --git a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year_PR_Tests.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year_PR_Tests.cs index 197a62b..9db7b05 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUP_Year_PR_Tests.cs @@ -29,4 +29,5 @@ // Assert.Equal(0.0859218240210361, priceUpYearPr.Value, new DoubleArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/Post/PriceUp.cs b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUp.cs similarity index 99% rename from EvoCalculator.Core.Tests/Calculation/Post/PriceUp.cs rename to EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUp.cs index 5c57d06..4e6578d 100644 --- a/EvoCalculator.Core.Tests/Calculation/Post/PriceUp.cs +++ b/EvoCalculator.Core.Tests/Calculation/v1/PostValues/PriceUp.cs @@ -56,4 +56,5 @@ // Assert.Equal(499446.893305404m, PriceUP.Value, new DecimalArrayComparer()); // } // } -// } \ No newline at end of file +// } + diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowLeasingTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowLeasingTests.cs new file mode 100644 index 0000000..582b051 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowLeasingTests.cs @@ -0,0 +1,334 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using CashflowLeasingColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowLeasingColumn; +using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class CashflowLeasingTests + { + [Fact] + public void CashflowLeasing() + { + var preparedValues = new PreparedValues + { + Nmper = 24, + AcquisitionExpenses = 7632333.33m, + SubsidySum = 123000 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, null, null, null) + { + Values = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + } + }; + + var negativeCashFlowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -400000m, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 100000m, + 0, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m, + 4347.82608695652m + } + }; + + var tlmGrColumn = new TLM_GrColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -24000m, + 0, + 2000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + 1000m, + } + }; + + + var gpsGrColumn = new GPS_GrColumn(preparedValues.Nmper + 1) + { + Values = new Decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 123000m, + 0, + 0, + 0, + 0, + 0, + 123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashFlowColumn, nsibBruttoGrColumn, + tlmGrColumn, + gpsGrColumn, + subsidyExpensesColumn); + + + var expected = new[] + { + -7632333.33333333m, + 1710333.33333333m, + 374652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 498652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 175652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 375652.173913043m, + 67985.5072463768m + }; + + + Assert.Equal(expected.Length, cashflowLeasingColumn.Values.Length); + Assert.Equal(0.444276684522629, cashflowLeasingColumn.IRR, new DoubleArrayComparer(0.01)); + Assert.Equal(expected, cashflowLeasingColumn.Values, new DecimalArrayComparer(0.01)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowMSFOTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowMSFOTests.cs new file mode 100644 index 0000000..e9cfd09 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowMSFOTests.cs @@ -0,0 +1,619 @@ +// using System; +// using EvoCalculator.Core.Calculation.v1.Columns; +// using EvoCalculator.Core.Calculation.v2.Columns; +// using EvoCalculator.Core.Models.Calculation.Models.Prepared; +// using Xunit; +// using CashflowMSFOColumnVT1 = EvoCalculator.Core.Calculation.v2.Columns.CashflowMSFOColumnVT1; +// using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn; +// using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; +// using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +// using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; +// +// namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +// { +// public class CashflowMsfoTests +// { +// [Fact] +// public void CashflowMsfoTest() +// { +// var preparedValues = new PreparedValues +// { +// Nmper = 48, +// AcquisitionExpenses = 7553500, +// FuelCardSum = 3000 +// }; +// +// var dateTempColumn = new DateTempColumn(67) +// { +// Values = new[] +// { +// new DateTime(2020, 12, 11), +// new DateTime(2020, 12, 11), +// new DateTime(2021, 1, 11), +// new DateTime(2021, 2, 11), +// new DateTime(2021, 3, 11), +// new DateTime(2021, 4, 11), +// new DateTime(2021, 5, 11), +// new DateTime(2021, 6, 11), +// new DateTime(2021, 7, 11), +// new DateTime(2021, 8, 11), +// new DateTime(2021, 9, 11), +// new DateTime(2021, 10, 11), +// new DateTime(2021, 11, 11), +// new DateTime(2021, 12, 11), +// new DateTime(2022, 1, 11), +// new DateTime(2022, 2, 11), +// new DateTime(2022, 3, 11), +// new DateTime(2022, 4, 11), +// new DateTime(2022, 5, 11), +// new DateTime(2022, 6, 11), +// new DateTime(2022, 7, 11), +// new DateTime(2022, 8, 11), +// new DateTime(2022, 9, 11), +// new DateTime(2022, 10, 11), +// new DateTime(2022, 11, 11), +// new DateTime(2022, 12, 11), +// new DateTime(2023, 1, 11), +// new DateTime(2023, 2, 11), +// new DateTime(2023, 3, 11), +// new DateTime(2023, 4, 11), +// new DateTime(2023, 5, 11), +// new DateTime(2023, 6, 11), +// new DateTime(2023, 7, 11), +// new DateTime(2023, 8, 11), +// new DateTime(2023, 9, 11), +// new DateTime(2023, 10, 11), +// new DateTime(2023, 11, 11), +// new DateTime(2023, 12, 11), +// new DateTime(2024, 1, 11), +// new DateTime(2024, 2, 11), +// new DateTime(2024, 3, 11), +// new DateTime(2024, 4, 11), +// new DateTime(2024, 5, 11), +// new DateTime(2024, 6, 11), +// new DateTime(2024, 7, 11), +// new DateTime(2024, 8, 11), +// new DateTime(2024, 9, 11), +// new DateTime(2024, 10, 11), +// new DateTime(2024, 11, 11), +// new DateTime(2024, 12, 11), +// new DateTime(2025, 1, 11), +// new DateTime(2025, 2, 11), +// new DateTime(2025, 3, 11), +// new DateTime(2025, 4, 11), +// new DateTime(2025, 5, 11), +// new DateTime(2025, 6, 11), +// new DateTime(2025, 7, 11), +// new DateTime(2025, 8, 11), +// new DateTime(2025, 9, 11), +// new DateTime(2025, 10, 11), +// new DateTime(2025, 11, 11), +// new DateTime(2025, 12, 11), +// new DateTime(2026, 1, 11), +// new DateTime(2026, 2, 11), +// new DateTime(2026, 3, 11), +// new DateTime(2026, 4, 11), +// new DateTime(2026, 5, 11) +// ) +// } +// }; +// +// var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, null, null) +// { +// Values = new[] +// { +// -8156500.00333333m, +// 1833333.33333333m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 168401.898058432m, +// 73333.3333333333m +// } +// }; +// +// var negativeCashFlowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1) +// { +// Values = new[] +// { +// -600000m, +// -200000m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// -200000m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// -200000m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// +// var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1) +// { +// Values = new[] +// { +// 200000m, +// 0, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m, +// 4255.31914893617m +// } +// }; +// +// var tlmGrColumn = new TLM_GrColumn(preparedValues.Nmper + 1) +// { +// Values = new Decimal[] +// { +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// +// +// var gpsGrColumn = new GPS_GrColumn(preparedValues.Nmper + 1) +// { +// Values = new Decimal[] +// { +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// +// var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) +// { +// Values = new[] +// { +// -133881.02m, +// -26468m, +// -107413.02m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// +// var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) +// { +// Values = new[] +// { +// -372826.666666667m, +// 0, +// -372826.666666667m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) +// { +// Values = new[] +// { +// 123000m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 123000m, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0, +// 0 +// } +// }; +// +// var cashflowMsfoColumn = new CashflowMSFOColumnVT1(preparedValues.Nmper + 1, dateTempColumn); +// cashflowMsfoColumn.ComputeValues(preparedValues, sumColumn, negativeCashFlowColumn, nsibBruttoGrColumn, +// tlmGrColumn, +// gpsGrColumn, +// npvBonusExpensesColumn, +// agentComissionExpensesColumn, +// subsidyExpensesColumn +// ); +// +// +// var expected = new[] +// { +// -7556500.00333333m, +// 1683865.33333333m, +// -316093.107757171m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 287146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// -35853.4210905042m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// -35853.4210905042m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 164146.578909496m, +// 69078.0141843972m +// }; +// +// +// Assert.Equal(expected.Length, cashflowMsfoColumn.Values.Length); +// Assert.Equal(0.0783460944890976, cashflowMsfoColumn.IRR, new DoubleArrayComparer()); +// Assert.Equal(0.0756660314496225, cashflowMsfoColumn.Nominal, new DoubleArrayComparer()); +// Assert.Equal(expected, cashflowMsfoColumn.Values, new DecimalArrayComparer()); +// } +// } +// } \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowNPV.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowNPV.cs new file mode 100644 index 0000000..bdfca00 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowNPV.cs @@ -0,0 +1,492 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using CashflowNPVColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowNPVColumn; +using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class CashflowNpvTests + { + [Fact] + public void CashflowNpvTest() + { + var preparedValues = new PreparedValues + { + Nmper = 24, + AcquisitionExpenses = 7632333.33m, + SubsidySum = 123000 + }; + + var dateTempColumn = new DateTempColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, null, null, null) + { + Values = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + } + }; + + var npvBonusExpenses = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -119072.72m, + -13468m, + -105604.72m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var agentComissionExpenses = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -372826.666666667m, + 0, + -372826.666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var taxColumn = new TaxColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 389686.789333333m, + 97228.3291993347m, + -77596.7263711095m, + 18249.5509622238m, + 18489.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 11249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + 18249.5509622238m, + -6425.38370159183m + } + }; + + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -9000m, + -4500m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -4500m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -400000m, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -8800m, + -10000m, + 0, + 0, + 1200m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var transExpensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) + { + Values = new decimal[] + { + -70000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m + } + }; + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -31200m, + -12000m, + -1600m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m + } + }; + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) + { + Values = new Decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 123000m, + 0, + 0, + 0, + 0, + 0, + 123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1); + cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpenses, agentComissionExpenses, + taxColumn, nsibExpensesColumn, negativeCashflowColumn, ratExpensesColumn, transExpensesColumn, + tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn); + + + var expected = new[] + { + -7632333.33333333m, + 1595137.004134m, + -21434.6602955572m, + 361950.449037776m, + 362910.449037776m, + 361950.449037776m, + 484950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 333950.449037776m, + 157450.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 361950.449037776m, + 43958.7170349252m, + }; + + + Assert.Equal(expected.Length, cashflowNpvColumn.Values.Length); + Assert.Equal(expected, cashflowNpvColumn.Values, new DecimalArrayComparer(0.01)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowTests.cs new file mode 100644 index 0000000..4f54d7c --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CashflowTests.cs @@ -0,0 +1,233 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using CashflowColumn = EvoCalculator.Core.Calculation.v2.Columns.CashflowColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class CashflowTests + { + [Fact] + public void CashflowTest() + { + var preparedValues = new PreparedValues + { + Nmper = 24, + AcquisitionExpenses = 7632333.33m, + SubsidySum = 123000 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, + new PercentPaymentColumn(preparedValues.Nmper + 1), null, null) + { + Values = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + } + }; + + var negativeCashFlow = new NegativeCashflowColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -400000m, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 123000m, + 0, + 0, + 0, + 0, + 0, + 123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn); + cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashFlow, subsidyExpensesColumn); + + + var expected = new[] + { + -7632333.33333333m, + 1710333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 504000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 181000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + }; + + + Assert.Equal(expected.Length, cashflowColumn.Values.Length); + Assert.Equal(0.469577783346176, cashflowColumn.IRR, new DoubleArrayComparer(0.1)); + Assert.Equal(expected, cashflowColumn.Values, new DecimalArrayComparer(0.01)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/CreditColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CreditColumnTests.cs new file mode 100644 index 0000000..a5f5dd8 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/CreditColumnTests.cs @@ -0,0 +1,117 @@ +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class CreditColumnTests + { + [Fact] + public void CreditColumnTest() + { + var preparedValues = new PreparedValues + { + LoanRate = 0.07, + LoanRatePeriod = 36 + }; + + + var sumCreditColumn = new SumCreditColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0, + 7350000m, + 7350000m, + 7145833.33333333m, + 6941666.66666667m, + 6737500m, + 6533333.33333333m, + 6329166.66666667m, + 6125000m, + 5920833.33333333m, + 5716666.66666666m, + 5512500m, + 5308333.33333333m, + 5104166.66666666m, + 4900000m, + 4695833.33333333m, + 4491666.66666666m, + 4287500m, + 4083333.33333333m, + 3879166.66666666m, + 3675000m, + 3470833.33333333m, + 3266666.66666666m, + 3062500m, + 2858333.33333333m, + 2654166.66666666m, + 2450000m, + 2245833.33333333m, + 2041666.66666666m, + 1837500m, + 1633333.33333333m, + 1429166.66666666m, + 1225000m, + 1020833.33333333m, + 816666.666666663m, + 612499.999999997m, + 408333.33333333m, + 204166.666666663m, + } + }; + + var creditColumn = new CreditColumn(preparedValues.LoanRatePeriod + 4); + creditColumn.ComputeValues(preparedValues, sumCreditColumn); + + + var expected = new[] + { + -878937.5m, + -42875m, + -42875m, + -42875m, + -41684.0277777778m, + -40493.0555555556m, + -39302.0833333333m, + -38111.1111111111m, + -36920.1388888889m, + -35729.1666666667m, + -34538.1944444444m, + -33347.2222222222m, + -32156.25m, + -30965.2777777778m, + -29774.3055555555m, + -28583.3333333333m, + -27392.3611111111m, + -26201.3888888889m, + -25010.4166666666m, + -23819.4444444444m, + -22628.4722222222m, + -21437.5m, + -20246.5277777778m, + -19055.5555555555m, + -17864.5833333333m, + -16673.6111111111m, + -15482.6388888889m, + -14291.6666666666m, + -13100.6944444444m, + -11909.7222222222m, + -10718.75m, + -9527.77777777776m, + -8336.80555555554m, + -7145.83333333331m, + -5954.86111111109m, + -4763.88888888887m, + -3572.91666666665m, + -2381.94444444443m, + -1190.9722222222m, + 1.93540472537279E-11m, + }; + + + Assert.Equal(expected.Length, creditColumn.Values.Length); + Assert.Equal(expected, creditColumn.Values, new DecimalArrayComparer(0.01)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/DirectorBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/DirectorBonusSum.cs new file mode 100644 index 0000000..e455436 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/DirectorBonusSum.cs @@ -0,0 +1,73 @@ +using EvoCalculator.Core.Calculation.v1.PostValues; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using PostValues = EvoCalculator.Core.Calculation.v2.PostValues.PostValues; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class DirectorBonusSumTests + { + [Fact] + public void DirectorBonusSumTest() + { + var preparedValues = new PreparedValues + { + Nmper = 25, + DirectorBonus = 0.003, + SalaryRate = 0.3, + MarketRate = 1.00, + DistrictRate = 1.07, + DirectorBonusNsib = 6000, + RegionalDirectorBonusNsib = 10000 + + }; + + var postValues = new PostValues() + { + BonusBase = new BonusBase() + { + Value = 5940000m + } + }; + + var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1); + directorBonusSumColumn.ComputeValues(preparedValues, postValues); + + + var expected = new[] + { + -45587.62m, + 0, + -45587.62m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + + + Assert.Equal(expected.Length, directorBonusSumColumn.Values.Length); + Assert.Equal(expected, directorBonusSumColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/ExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/ExpensesTests.cs new file mode 100644 index 0000000..ee5ead9 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/ExpensesTests.cs @@ -0,0 +1,414 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using ExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.ExpensesColumn; +using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class ExpensesTests + { + [Fact] + public void ExpensesColumnTest() + { + var preparedValues = new PreparedValues + { + Nmper = 24 + }; + + var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -372826.666666667m, + 0, + -372826.666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -8800m, + -10000m, + 0, + 0, + 1200m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -70000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m + } + }; + + var nsibExpensesColumn = new NSIBExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -9000m, + -4500m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -4500m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -31200m, + -12000m, + -1600m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m + } + }; + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) + { + Values = new Decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -5000m, + -5000m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -120881.02m, + -13468m, + -107413.02m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 123000m, + 0, + 0, + 0, + 0, + 0, + 123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var expensesColumn = new ExpensesColumn(preparedValues.Nmper + 1); + expensesColumn.ComputeValues(agentComissionExpensesColumn, ratExpensesColumn, transExprensesColumn, + nsibExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, registrExpensesColumn, + insuranceBonusExpensesColumn, comissionBonusExpensesColumn, npvBonusExpensesColumn, + subsidyExpensesColumn); + + + var expected = new[] + { + -494707.686666667m, + -44968m, + -481839.686666667m, + -800m, + 400m, + -800m, + 122200m, + -800m, + -800m, + -800m, + -800m, + -800m, + -35800m, + -5300m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -35800m + }; + + + Assert.Equal(expected.Length, expensesColumn.Values.Length); + Assert.Equal(expected, expensesColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/GPS_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/GPS_GrTests.cs new file mode 100644 index 0000000..f280032 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/GPS_GrTests.cs @@ -0,0 +1,264 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using GPS_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.GPS_GrColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class GpsGrTests + { + [Fact] + public void GPS_GrTest() + { + var preparedValues = + new PreparedValues + { + IrrExpected = 0.22 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + var preparedPayments = new PreparedPayments + { + Rows = new[] + { + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + }, + new PaymentRow + { + GpsCostPayment = 800.00m + } + } + }; + + + var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1); + gpsGrColumn.ComputeValues(preparedPayments, preparedValues); + + var expected = new[] + { + -24000.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m, + 800.00m + }; + + var res = gpsGrColumn.Values; + Assert.Equal(expected, res, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/KaskoNmperGrTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/KaskoNmperGrTests.cs new file mode 100644 index 0000000..1234215 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/KaskoNmperGrTests.cs @@ -0,0 +1,137 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using KaskoNmperGrColumn = EvoCalculator.Core.Calculation.v2.Columns.KaskoNmperGrColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class KaskoNmperGrTests + { + [Fact] + public void KaskoNmperGrTest() + { + var preparedValues = + new PreparedValues + { + InsuranceKasko = 200000, + NmperInsurance = 24, + IrrExpected = 0.22, + Nmper = 24 + }; + + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + + var kaskoNmperGrColumn = + new KaskoNmperGrColumn(preparedValues.Nmper + 1); + kaskoNmperGrColumn.ComputeValues(preparedValues, new Constants.Calculation()); + + + var expected = new[] + { + -400000m, + 200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 200000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + + var res = kaskoNmperGrColumn.Values; + Assert.Equal(expected, res, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/NPVBonusExpensesTests.cs new file mode 100644 index 0000000..1bb53d2 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/NPVBonusExpensesTests.cs @@ -0,0 +1,73 @@ +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Calculation.v1.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using PostValues = EvoCalculator.Core.Calculation.v2.PostValues.PostValues; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class NpvBonusExpensesTests + { + [Fact] + public void NpvBonusExpensesTest() + { + var preparedValues = new PreparedValues + { + SalaryRate = 0.3, + MarketRate = 1.00, + DistrictRate = 1.07, + RatBonus = 360.00m, + NsBonus = 0.00m, + NsibBonus = 10000m, + BonusFix = 0.00m, + Bonus = 0.013, + Nmper = 24 + }; + + + var postValues = new PostValues() + { + BonusBase = new BonusBase() + { + Value = 5840000.00m + } + }; + + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1); + npvBonusExpensesColumn.ComputeValues(preparedValues, postValues); + + var expected = new[] + { + -119072.72m, + -13468m, + -105604.72m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + }; + + + Assert.Equal(expected, npvBonusExpensesColumn.Values, new DecimalArrayComparer()); + } + + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/SubsidyExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SubsidyExpensesTests.cs new file mode 100644 index 0000000..6b0dc5a --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SubsidyExpensesTests.cs @@ -0,0 +1,57 @@ +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class SubsidyExpensesTests + { + [Fact] + public void SubsidyExpensesTest() + { + var preparedValues = new PreparedValues + { + Nmper = 23, + SubsidyPaymentNumber = 6, + SubsidySum = 123000.00m + }; + + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1); + subsidyExpensesColumn.ComputeValues(preparedValues); + + + var expected = new[] + { + -123000m, + 0, + 0, + 0, + 0, + 0, + -123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + }; + + + Assert.Equal(expected.Length, subsidyExpensesColumn.Values.Length); + Assert.Equal(expected, subsidyExpensesColumn.Values, new DecimalArrayComparer(0.1)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumCreditColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumCreditColumnTests.cs new file mode 100644 index 0000000..1894edb --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumCreditColumnTests.cs @@ -0,0 +1,110 @@ +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Calculation.v2.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class SumCreditColumnTests + { + [Fact] + public void SumCreditColumnTest() + { + var preparedValues = new PreparedValues + { + LoanRatePeriod = 36 + }; + + var postValues = new PostValues() + { + BaseCost = + { + Value = 7958333.33333333m + } + }; + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, null, postValues, null) + { + Values = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m, + } + }; + + var sumCreditColumn = new SumCreditColumn(preparedValues.LoanRatePeriod + 2); + sumCreditColumn.ComputeValues(preparedValues, postValues, new Constants.Calculation(), sumColumn); + + + var expected = new[] + { + 0, + 7350000m, + 7350000m, + 7145833.33333333m, + 6941666.66666667m, + 6737500m, + 6533333.33333333m, + 6329166.66666667m, + 6125000m, + 5920833.33333333m, + 5716666.66666666m, + 5512500m, + 5308333.33333333m, + 5104166.66666666m, + 4900000m, + 4695833.33333333m, + 4491666.66666666m, + 4287500m, + 4083333.33333333m, + 3879166.66666666m, + 3675000m, + 3470833.33333333m, + 3266666.66666666m, + 3062500m, + 2858333.33333333m, + 2654166.66666666m, + 2450000m, + 2245833.33333333m, + 2041666.66666666m, + 1837500m, + 1633333.33333333m, + 1429166.66666666m, + 1225000m, + 1020833.33333333m, + 816666.666666663m, + 612499.999999997m, + 408333.33333333m, + 204166.666666663m, + }; + + + Assert.Equal(expected.Length, sumCreditColumn.Values.Length); + Assert.Equal(expected, sumCreditColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumTest.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumTest.cs new file mode 100644 index 0000000..52510c5 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/SumTest.cs @@ -0,0 +1,468 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v1.PostValues; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using PostValues = EvoCalculator.Core.Calculation.v2.PostValues.PostValues; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class SumTests + { + [Fact] + public void SumTest() + { + var preparedValues = + new PreparedValues + { + FirstPaymentSum = 1833333.33333333m, + Nmper = 24, + LastPaymentSum = 73333.3333333333m, + IrrExpected = 0.421058, + FuelCardSum = 3000.00m + }; + + + var percentPaymentColumn = new PercentPaymentColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00, + 0.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 0.00 + } + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + + var expected = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + }; + + var postValues = new PostValues() + { + BaseCost = new BaseCost() + { + Value = 7958333.333333m + }, + }; + + var sumColumn = new SumColumn( + preparedValues.Nmper + 1 + , preparedValues + , percentPaymentColumn + , postValues + , null); + sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); + var values = sumColumn.Values; + Assert.Equal(expected, values, new DecimalArrayComparer(100)); + } + + [Fact] + public void SumTest2() + { + var preparedValues = + new PreparedValues + { + FirstPaymentSum = 625000, + Nmper = 12, + LastPaymentSum = 25000, + IrrExpected = 0.304 + }; + + + var percentPaymentColumn = new PercentPaymentColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00, + 0.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 0.00 + } + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 10, 19), + new DateTime(2020, 10, 19), + new DateTime(2020, 11, 19), + new DateTime(2020, 12, 19), + new DateTime(2021, 1, 19), + new DateTime(2021, 2, 19), + new DateTime(2021, 3, 19), + new DateTime(2021, 4, 19), + new DateTime(2021, 5, 19), + new DateTime(2021, 6, 19), + new DateTime(2021, 7, 19), + new DateTime(2021, 8, 19), + new DateTime(2021, 9, 19), + new DateTime(2021, 10, 19), + new DateTime(2021, 11, 19), + new DateTime(2021, 12, 19), + new DateTime(2022, 1, 19), + new DateTime(2022, 2, 19), + new DateTime(2022, 3, 19), + new DateTime(2022, 4, 19), + new DateTime(2022, 5, 19), + new DateTime(2022, 6, 19), + new DateTime(2022, 7, 19), + new DateTime(2022, 8, 19), + new DateTime(2022, 9, 19), + new DateTime(2022, 10, 19), + new DateTime(2022, 11, 19), + new DateTime(2022, 12, 19), + new DateTime(2023, 1, 19), + new DateTime(2023, 2, 19), + new DateTime(2023, 3, 19), + new DateTime(2023, 4, 19), + new DateTime(2023, 5, 19), + new DateTime(2023, 6, 19), + new DateTime(2023, 7, 19), + new DateTime(2023, 8, 19), + new DateTime(2023, 9, 19), + new DateTime(2023, 10, 19), + new DateTime(2023, 11, 19), + new DateTime(2023, 12, 19), + new DateTime(2024, 1, 19), + new DateTime(2024, 2, 19), + new DateTime(2024, 3, 19), + new DateTime(2024, 4, 19), + new DateTime(2024, 5, 19), + new DateTime(2024, 6, 19), + new DateTime(2024, 7, 19), + new DateTime(2024, 8, 19), + new DateTime(2024, 9, 19), + new DateTime(2024, 10, 19), + new DateTime(2024, 11, 19), + new DateTime(2024, 12, 19), + new DateTime(2025, 1, 19), + new DateTime(2025, 2, 19), + new DateTime(2025, 3, 19), + new DateTime(2025, 4, 19), + new DateTime(2025, 5, 19), + new DateTime(2025, 6, 19), + new DateTime(2025, 7, 19), + new DateTime(2025, 8, 19), + new DateTime(2025, 9, 19) + } + }; + + + var expected = new[] + { + -2500000m, + 625000m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 209113.783333333m, + 25000 + }; + + var postValues = new PostValues() + { + BaseCost = new BaseCost() + { + Value = 2500000 + }, + }; + + var sumColumn = new SumColumn( + preparedValues.Nmper + 1 + , preparedValues + , percentPaymentColumn + , postValues + , null + ); + sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); + var values = sumColumn.Values; + Assert.Equal(expected, values, new DecimalArrayComparer(100)); + } + + [Fact] + public void SumTest3() + { + var preparedValues = + new PreparedValues + { + FirstPaymentSum = 805000, + Nmper = 16, + LastPaymentSum = 23000, + IrrExpected = 0.23 + }; + + + var percentPaymentColumn = new PercentPaymentColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00, + 0.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 100.00, + 0.00 + } + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 10, 12), + new DateTime(2020, 10, 12), + new DateTime(2020, 11, 12), + new DateTime(2020, 12, 12), + new DateTime(2021, 1, 12), + new DateTime(2021, 2, 12), + new DateTime(2021, 3, 12), + new DateTime(2021, 4, 12), + new DateTime(2021, 5, 12), + new DateTime(2021, 6, 12), + new DateTime(2021, 7, 12), + new DateTime(2021, 8, 12), + new DateTime(2021, 9, 12), + new DateTime(2021, 10, 12), + new DateTime(2021, 11, 12), + new DateTime(2021, 12, 12), + new DateTime(2022, 1, 12), + new DateTime(2022, 2, 12), + new DateTime(2022, 3, 12), + new DateTime(2022, 4, 12), + new DateTime(2022, 5, 12), + new DateTime(2022, 6, 12), + new DateTime(2022, 7, 12), + new DateTime(2022, 8, 12), + new DateTime(2022, 9, 12), + new DateTime(2022, 10, 12), + new DateTime(2022, 11, 12), + new DateTime(2022, 12, 12), + new DateTime(2023, 1, 12), + new DateTime(2023, 2, 12), + new DateTime(2023, 3, 12), + new DateTime(2023, 4, 12), + new DateTime(2023, 5, 12), + new DateTime(2023, 6, 12), + new DateTime(2023, 7, 12), + new DateTime(2023, 8, 12), + new DateTime(2023, 9, 12), + new DateTime(2023, 10, 12), + new DateTime(2023, 11, 12), + new DateTime(2023, 12, 12), + new DateTime(2024, 1, 12), + new DateTime(2024, 2, 12), + new DateTime(2024, 3, 12), + new DateTime(2024, 4, 12), + new DateTime(2024, 5, 12), + new DateTime(2024, 6, 12), + new DateTime(2024, 7, 12), + new DateTime(2024, 8, 12), + new DateTime(2024, 9, 12), + new DateTime(2024, 10, 12), + new DateTime(2024, 11, 12), + new DateTime(2024, 12, 12), + new DateTime(2025, 1, 12), + new DateTime(2025, 2, 12), + new DateTime(2025, 3, 12), + new DateTime(2025, 4, 12), + new DateTime(2025, 5, 12), + new DateTime(2025, 6, 12), + new DateTime(2025, 7, 12), + new DateTime(2025, 8, 12), + new DateTime(2025, 9, 12) + } + }; + + + var expected = new[] + { + -2586532.79187453m, + 805000, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 143021.219846191m, + 23000 + }; + + var postValues = new PostValues() + { + BaseCost = new BaseCost() + { + Value = 2586532.79187453m + }, + }; + + var sumColumn = new SumColumn( + preparedValues.Nmper + 1 + , preparedValues + , percentPaymentColumn + , postValues + , null + ); + sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected)); + var values = sumColumn.Values; + Assert.Equal(expected, values, new DecimalArrayComparer(100)); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/TLM_GrTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/TLM_GrTests.cs new file mode 100644 index 0000000..e0257e0 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/TLM_GrTests.cs @@ -0,0 +1,264 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using TLM_GrColumn = EvoCalculator.Core.Calculation.v2.Columns.TLM_GrColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class TlmGrTests + { + [Fact] + public void TLM_GrTest() + { + var preparedValues = + new PreparedValues + { + IrrExpected = 0.22 + }; + + var dateTempColumn = new DateTempColumn(67) + { + Values = new[] + { + new DateTime(2020, 12, 11), + new DateTime(2020, 12, 11), + new DateTime(2021, 1, 11), + new DateTime(2021, 2, 11), + new DateTime(2021, 3, 11), + new DateTime(2021, 4, 11), + new DateTime(2021, 5, 11), + new DateTime(2021, 6, 11), + new DateTime(2021, 7, 11), + new DateTime(2021, 8, 11), + new DateTime(2021, 9, 11), + new DateTime(2021, 10, 11), + new DateTime(2021, 11, 11), + new DateTime(2021, 12, 11), + new DateTime(2022, 1, 11), + new DateTime(2022, 2, 11), + new DateTime(2022, 3, 11), + new DateTime(2022, 4, 11), + new DateTime(2022, 5, 11), + new DateTime(2022, 6, 11), + new DateTime(2022, 7, 11), + new DateTime(2022, 8, 11), + new DateTime(2022, 9, 11), + new DateTime(2022, 10, 11), + new DateTime(2022, 11, 11), + new DateTime(2022, 12, 11), + new DateTime(2023, 1, 11), + new DateTime(2023, 2, 11), + new DateTime(2023, 3, 11), + new DateTime(2023, 4, 11), + new DateTime(2023, 5, 11), + new DateTime(2023, 6, 11), + new DateTime(2023, 7, 11), + new DateTime(2023, 8, 11), + new DateTime(2023, 9, 11), + new DateTime(2023, 10, 11), + new DateTime(2023, 11, 11), + new DateTime(2023, 12, 11), + new DateTime(2024, 1, 11), + new DateTime(2024, 2, 11), + new DateTime(2024, 3, 11), + new DateTime(2024, 4, 11), + new DateTime(2024, 5, 11), + new DateTime(2024, 6, 11), + new DateTime(2024, 7, 11), + new DateTime(2024, 8, 11), + new DateTime(2024, 9, 11), + new DateTime(2024, 10, 11), + new DateTime(2024, 11, 11), + new DateTime(2024, 12, 11), + new DateTime(2025, 1, 11), + new DateTime(2025, 2, 11), + new DateTime(2025, 3, 11), + new DateTime(2025, 4, 11), + new DateTime(2025, 5, 11), + new DateTime(2025, 6, 11), + new DateTime(2025, 7, 11), + new DateTime(2025, 8, 11), + new DateTime(2025, 9, 11), + new DateTime(2025, 10, 11), + new DateTime(2025, 11, 11), + new DateTime(2025, 12, 11), + new DateTime(2026, 1, 11), + new DateTime(2026, 2, 11), + new DateTime(2026, 3, 11), + new DateTime(2026, 4, 11), + new DateTime(2026, 5, 11) + } + }; + + var preparedPayments = new PreparedPayments + { + Rows = new[] + { + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + }, + new PaymentRow + { + TlmCostPayment = 1000.00m + } + } + }; + + + var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1); + tlmGrColumn.ComputeValues(preparedPayments, preparedValues); + + var expected = new[] + { + -30000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m, + 1000.00m + }; + + var res = tlmGrColumn.Values; + Assert.Equal(expected, res, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/v2/Columns/TaxColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/v2/Columns/TaxColumnTests.cs new file mode 100644 index 0000000..11b07a1 --- /dev/null +++ b/EvoCalculator.Core.Tests/Calculation/v2/Columns/TaxColumnTests.cs @@ -0,0 +1,480 @@ +using System; +using EvoCalculator.Core.Calculation.v1.Columns; +using EvoCalculator.Core.Calculation.v2.Columns; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; +using Xunit; +using NPVBonusExpensesColumn = EvoCalculator.Core.Calculation.v2.Columns.NPVBonusExpensesColumn; +using SumColumn = EvoCalculator.Core.Calculation.v2.Columns.SumColumn; +using TaxColumn = EvoCalculator.Core.Calculation.v2.Columns.TaxColumn; + +namespace EvoCalculator.Core.Tests.Calculation.v2.Columns +{ + public class TaxColumnTests + { + [Fact] + public void TaxColumnTest() + { + var preparedValues = new PreparedValues + { + Nmper = 24, + SubsidySum = 123000 + }; + + var sumColumn = new SumColumn(preparedValues.Nmper + 1, preparedValues, null, null, null) + { + Values = new[] + { + -7961333.33333333m, + 1833333.33333333m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 381000m, + 73333.3333333333m + } + }; + + var acceptInsuranceColumn = new AcceptInsuranceColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 400000m, + 0, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m, + 17391.3043478261m + } + }; + + var deprecationColumn = new DeprecationColumn(preparedValues.Nmper + 1) + { + Values = new Decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var ratExpensesColumn = new RatExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -8800m, + -10000m, + 0, + 0, + 1200m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var registrExpensesColumn = new RegistrExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -5000m, + -5000m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var comissionBonusExpensesColumn = new ComissionBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var transExprensesColumn = new TransExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -70000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + -35000m + } + }; + + var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -119072.72m, + -13468m, + -105604.72m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + -372826.666666667m, + 0, + -372826.666666667m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var insuranceBonusExpensesColumn = new InsuranceBonusExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m, + 0.00m + } + }; + + var tlmExpensesColumn = new TLMExpensesColumn(preparedValues.Nmper + 1) + { + Values = new decimal[] + { + -31200m, + -12000m, + -1600m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m, + -800m + } + }; + + var gpsExpensesColumn = new GPSExpensesColumn(preparedValues.Nmper + 1) + { + Values = new decimal[] + { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var subsidyExpensesColumn = new SubsidyExpensesColumn(preparedValues.Nmper + 1) + { + Values = new[] + { + 123000m, + 0, + 0, + 0, + 0, + 0, + 123000m, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + } + }; + + var incomeTaxColumn = new TaxColumn(preparedValues.Nmper + 1); + incomeTaxColumn.ComputeValues(preparedValues, new Constants.Calculation(), sumColumn, acceptInsuranceColumn, + deprecationColumn, ratExpensesColumn, registrExpensesColumn, comissionBonusExpensesColumn, + transExprensesColumn, npvBonusExpensesColumn, agentComissionExpensesColumn, + insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn, subsidyExpensesColumn); + + + var expected = new[] + { + 1856353.456m, + 333973.066666666m, + -23284.5382028986m, + 72561.7391304348m, + 72801.7391304348m, + 72561.7391304348m, + 97161.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 65561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 72561.7391304348m, + 4028.40579710144m + }; + + + Assert.Equal(expected.Length, incomeTaxColumn.Values.Length); + Assert.Equal(expected, incomeTaxColumn.Values, new DecimalArrayComparer()); + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj b/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj index b6fd66a..308d00e 100644 --- a/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj +++ b/EvoCalculator.Core.Tests/EvoCalculator.Core.Tests.csproj @@ -1,9 +1,11 @@ - netcoreapp3.1 + net5.0 false + + default @@ -15,8 +17,13 @@ - - + + + + + + + diff --git a/EvoCalculator.Core.Calculation/v1/CheckTools.cs b/EvoCalculator.Core.Tools/Check/CheckColumns.cs similarity index 54% rename from EvoCalculator.Core.Calculation/v1/CheckTools.cs rename to EvoCalculator.Core.Tools/Check/CheckColumns.cs index 6a8ec0c..551f036 100644 --- a/EvoCalculator.Core.Calculation/v1/CheckTools.cs +++ b/EvoCalculator.Core.Tools/Check/CheckColumns.cs @@ -2,27 +2,21 @@ using System.Collections.Generic; using System.Linq; -namespace EvoCalculator.Core.Calculation.v1 +namespace EvoCalculator.Core.Tools.Check { - public class CheckTools + public class CheckTools { - private string ErrorZeroValue = + private readonly string ErrorZeroValue = "Невозможно осуществить расчет графика. При заданных параметрах получаются отрицательные значения"; public void CheckColumnForZeroValue(IEnumerable Values) { - if (Values.Skip(1).ToList().Exists(x => x < 0)) - { - throw new Exception(ErrorZeroValue); - } + if (Values.Skip(1).ToList().Exists(x => x < 0)) throw new Exception(ErrorZeroValue); } public void CheckColumnForZeroValue(IEnumerable Values) { - if (Values.Skip(1).ToList().Exists(x => x <= 0)) - { - throw new Exception(ErrorZeroValue); - } + if (Values.Skip(1).ToList().Exists(x => x <= 0)) throw new Exception(ErrorZeroValue); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj b/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj new file mode 100644 index 0000000..e743782 --- /dev/null +++ b/EvoCalculator.Core.Tools/EvoCalculator.Core.Tools.csproj @@ -0,0 +1,12 @@ + + + + net5.0 + default + + + + + + + diff --git a/EvoCalculator.Core.Calculation/v1/Validation.cs b/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs similarity index 67% rename from EvoCalculator.Core.Calculation/v1/Validation.cs rename to EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs index e43e469..73685ca 100644 --- a/EvoCalculator.Core.Calculation/v1/Validation.cs +++ b/EvoCalculator.Core.Tools/Validation/ValidatePreparedValues.cs @@ -1,45 +1,31 @@ -using System; -using System.Collections.Generic; -using EvoCalculator.Core.Models.Calculation.Models.Request; +using System.Collections.Generic; +using EvoCalculator.Core.Models.Calculation.Models.Prepared; -namespace EvoCalculator.Core.Calculation.v1 +namespace EvoCalculator.Core.Tools.Validation { - public class Validation + public partial class Validation { - public List ValidatePreparedData(RequestCalculation requestCalculation) + public List ValidatePreparedValues(PreparedValues preparedValues) { - var preparedValues = requestCalculation.preparedValues; - var errors = new List(); if (preparedValues.AcceptSum <= 0) - { errors.Add("Стоимость ПЛ с учетом скидки не указана или меньше или равна 0"); - } - if (preparedValues.Nmper <= 0) - { - errors.Add("Некорректно указан Срок лизинга"); - } + if (preparedValues.Nmper <= 0) errors.Add("Некорректно указан Срок лизинга"); if (preparedValues.IrrExpected <= 0 && preparedValues.Discount <= 0 && preparedValues.ComissionRub <= 0) - { errors.Add( "Невозможно посчитать график с IRR=0, необходимо указать или Скидку поставщика или Комиссию"); - } if (preparedValues.PaymentDateNew < preparedValues.DogDate) - { errors.Add( "Некорректно указана Дата второго платежа, она не может быть раньше Даты заключения ДЛ"); - } if (preparedValues.PaymentDateNew == null) if (preparedValues.FirstPaymentSum / preparedValues.AcceptSum >= 0.500001m) - { errors.Add( "Первый платеж по графику более 50% от стоимости ПЛ с учетом скидки. Необходимо уменьшить первый платеж"); - } return errors; } diff --git a/EvoCalculator.Core.sln b/EvoCalculator.Core.sln index b994140..48a866c 100644 --- a/EvoCalculator.Core.sln +++ b/EvoCalculator.Core.sln @@ -12,6 +12,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EvoCalculator.Core.Constant EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EvoCalculator.Core.FinanceFormulas", "EvoCalculator.Core.FinanceFormulas\EvoCalculator.Core.FinanceFormulas.csproj", "{57FC4E65-3E6B-4C10-8792-58639D068F71}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EvoCalculator.Core.Base", "EvoCalculator.Core.Base\EvoCalculator.Core.Base.csproj", "{B7CF60B7-75E6-433A-8369-731BEA7F1CE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EvoCalculator.Core.Tools", "EvoCalculator.Core.Tools\EvoCalculator.Core.Tools.csproj", "{CD3C2881-4F6E-4A50-A869-E33C79DBCE37}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -42,5 +46,13 @@ Global {57FC4E65-3E6B-4C10-8792-58639D068F71}.Debug|Any CPU.Build.0 = Debug|Any CPU {57FC4E65-3E6B-4C10-8792-58639D068F71}.Release|Any CPU.ActiveCfg = Release|Any CPU {57FC4E65-3E6B-4C10-8792-58639D068F71}.Release|Any CPU.Build.0 = Release|Any CPU + {B7CF60B7-75E6-433A-8369-731BEA7F1CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7CF60B7-75E6-433A-8369-731BEA7F1CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7CF60B7-75E6-433A-8369-731BEA7F1CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7CF60B7-75E6-433A-8369-731BEA7F1CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {CD3C2881-4F6E-4A50-A869-E33C79DBCE37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD3C2881-4F6E-4A50-A869-E33C79DBCE37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD3C2881-4F6E-4A50-A869-E33C79DBCE37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD3C2881-4F6E-4A50-A869-E33C79DBCE37}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/EvoCalculator.Core.sln.DotSettings.user b/EvoCalculator.Core.sln.DotSettings.user index fb78306..0f05d60 100644 --- a/EvoCalculator.Core.sln.DotSettings.user +++ b/EvoCalculator.Core.sln.DotSettings.user @@ -1,6 +1,9 @@  + <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution #2" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <Solution /> +</SessionState> - <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Solution /> </SessionState> True \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/CalculationController.cs b/EvoCalculator.Core/Controllers/CalculationController.cs new file mode 100644 index 0000000..6a729c1 --- /dev/null +++ b/EvoCalculator.Core/Controllers/CalculationController.cs @@ -0,0 +1,27 @@ +using System; +using EvoCalculator.Core.Models.Calculation.Models; +using EvoCalculator.Core.Models.Calculation.Models.Request; +using Microsoft.AspNetCore.Mvc; + +namespace EvoCalculator.Core.Controllers +{ + [ApiController] + [Route("api/[controller]")] + public class CalculationController : Controller + { + [HttpPost("[action]")] + public ActionResult Calculate([FromBody] RequestCalculation requestCalculation) + { + var CalcDate = requestCalculation.preparedValues.CalcDate; + var envCalculationV2Date = Environment.GetEnvironmentVariable("CALCULATION_V2_DATE"); + var calculationV2Date = DateTime.Parse(envCalculationV2Date); + + return CalcDate switch + { + var calcDate when calcDate >= calculationV2Date => new v2.CalculationController().Calculate( + requestCalculation), + _ => new v1.CalculationController().Calculate(requestCalculation) + }; + } + } +} \ No newline at end of file diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs index 80a3fcd..4643ba6 100644 --- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs +++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs @@ -1,11 +1,12 @@ using EvoCalculator.Core.Calculation.v1.Managers; +using EvoCalculator.Core.Calculation.v1.Managers.Calculation; using EvoCalculator.Core.Models.Calculation.Models; using EvoCalculator.Core.Models.Calculation.Models.Request; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; -namespace EvoCalculator.Core.Controllers.V1 +namespace EvoCalculator.Core.Controllers.v1 { [ApiController] [ApiVersion("1.0")] @@ -28,9 +29,9 @@ namespace EvoCalculator.Core.Controllers.V1 _ => CalculateManager.CalculateDefault(requestCalculation) }; - var hasErrors = result.Errors != null && result.Errors.Count > 0; + var hasErrors = result.Errors is { Count: > 0 }; var statusCode = hasErrors ? 500 : 200; - + return StatusCode(statusCode, JsonConvert.SerializeObject( result, new JsonSerializerSettings diff --git a/EvoCalculator.Core/Controllers/v2/CalculationController.cs b/EvoCalculator.Core/Controllers/v2/CalculationController.cs new file mode 100644 index 0000000..3639bdb --- /dev/null +++ b/EvoCalculator.Core/Controllers/v2/CalculationController.cs @@ -0,0 +1,43 @@ +using EvoCalculator.Core.Calculation.v2.Managers.Calculation; +using EvoCalculator.Core.Models.Calculation.Models; +using EvoCalculator.Core.Models.Calculation.Models.Request; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace EvoCalculator.Core.Controllers.v2 +{ + [ApiController] + [ApiVersion("2.0")] + [Route("api/v{version:apiVersion}/[controller]")] + public class CalculationController : Controller + { + [ApiExplorerSettings(IgnoreApi = true)] + [HttpGet("[action]")] + public ActionResult Test() + { + return "ok"; + } + + [HttpPost("[action]")] + public ActionResult Calculate([FromBody] RequestCalculation requestCalculation) + { + var result = requestCalculation.preparedValues.CalcType switch + { + 100000002 => CalculateManager.CalculateByTotalExpected(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/EvoCalculator.Core.csproj b/EvoCalculator.Core/EvoCalculator.Core.csproj index e9cf74a..cb5e1d0 100644 --- a/EvoCalculator.Core/EvoCalculator.Core.csproj +++ b/EvoCalculator.Core/EvoCalculator.Core.csproj @@ -1,18 +1,19 @@ - netcoreapp3.1 + net5.0 + default - - - + + + - - + + diff --git a/EvoCalculator.Core/Program.cs b/EvoCalculator.Core/Program.cs index 4ee98bf..9f5c73e 100644 --- a/EvoCalculator.Core/Program.cs +++ b/EvoCalculator.Core/Program.cs @@ -10,12 +10,14 @@ namespace EvoCalculator.Core CreateHostBuilder(args).Build().Run(); } - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) + public static IHostBuilder CreateHostBuilder(string[] args) + { + return Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); webBuilder.UseKestrel(options => { options.ListenAnyIP(5000); }); }); + } } } \ No newline at end of file diff --git a/EvoCalculator.Core/Startup.cs b/EvoCalculator.Core/Startup.cs index 84b3a5b..0234f04 100644 --- a/EvoCalculator.Core/Startup.cs +++ b/EvoCalculator.Core/Startup.cs @@ -34,10 +34,7 @@ namespace EvoCalculator.Core // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } + if (env.IsDevelopment()) app.UseDeveloperExceptionPage(); app.UseSwagger();