diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
index 1606b2d..147cde8 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml
@@ -109,6 +109,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -144,8 +156,8 @@
-
+
@@ -230,6 +242,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
index cfeb6f3..7728b3e 100644
--- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
+++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml
@@ -14,29 +14,44 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -52,6 +67,7 @@
+
@@ -61,68 +77,71 @@
+
+
+
@@ -142,7 +161,8 @@
-
+
+
@@ -200,7 +220,11 @@
-
+
+
+
+
+
1602593830686
@@ -244,7 +268,14 @@
1603717567220
-
+
+ 1603799116058
+
+
+
+ 1603799116058
+
+
@@ -273,7 +304,8 @@
-
+
+
@@ -288,94 +320,94 @@
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -384,14 +416,14 @@
-
+
-
-
+
+
-
+
@@ -400,26 +432,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -450,7 +482,7 @@
256
-
+
diff --git a/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs
index 8ecbdd5..9a80842 100644
--- a/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/DirectorBonusSumColumn.cs
@@ -1,4 +1,5 @@
-using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
@@ -8,9 +9,9 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- public void ComputeValues(PreparedValues preparedValues)
+ public void ComputeValues(PreparedValues preparedValues, PostValues postValues)
{
- Values[2] = -preparedValues.BonusBase * (decimal) preparedValues.DirectorBonus *
+ Values[2] = -postValues.BonusBase.Value * (decimal) preparedValues.DirectorBonus *
(decimal) (1 + preparedValues.SalaryRate) *
(decimal) (1 + preparedValues.MarketRate + preparedValues.DistrictRate);
Values[0] = Sum;
diff --git a/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs b/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs
index 9f4e2a5..d21aef8 100644
--- a/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/ExtraBonusSumColumn.cs
@@ -1,4 +1,5 @@
-using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
@@ -8,10 +9,11 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- public void ComputeValues(PreparedValues preparedValues, CashflowMSFOColumn cashflowMsfoColumn)
+ public void ComputeValues(PreparedValues preparedValues, CashflowMSFOColumn cashflowMsfoColumn,
+ PostValues postValues)
{
Values[2] = cashflowMsfoColumn.Nominal >= preparedValues.IRR_MSFO_Plan
- ? -1 * preparedValues.BonusBase *
+ ? -1 * postValues.BonusBase.Value *
(decimal) (cashflowMsfoColumn.Nominal / preparedValues.IRR_MSFO_Plan - 1) *
(decimal) preparedValues.ExtraBonus * (decimal) (1 + preparedValues.SalaryRate) *
(decimal) (1 + preparedValues.MarketRate + preparedValues.DistrictRate)
diff --git a/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs b/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs
index a3f24f4..9c14e8a 100644
--- a/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/NPVBonusExpensesColumn.cs
@@ -1,4 +1,5 @@
using System;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
@@ -9,7 +10,7 @@ namespace EvoCalculator.Core.Calculation.Columns
{
}
- public void ComputeValues(PreparedValues preparedValues)
+ public void ComputeValues(PreparedValues preparedValues, PostValues postValues)
{
Values[1] = -1 * (preparedValues.RatBonus + preparedValues.NsBonus + preparedValues.NsibBonus) *
(decimal) (1 + preparedValues.SalaryRate) *
@@ -17,7 +18,7 @@ namespace EvoCalculator.Core.Calculation.Columns
Values[2] = preparedValues.BonusFix > 0
? -preparedValues.BonusFix
- : -1 * preparedValues.BonusBase * Convert.ToDecimal(preparedValues.Bonus) *
+ : -1 * postValues.BonusBase.Value * Convert.ToDecimal(preparedValues.Bonus) *
(decimal) (1 + preparedValues.SalaryRate) *
(decimal) (1 + preparedValues.MarketRate + preparedValues.DistrictRate);
diff --git a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
index 0c15b72..0398ccc 100644
--- a/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
+++ b/EvoCalculator.Core.Calculation/Columns/SumColumn.cs
@@ -1,4 +1,5 @@
using System;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek;
@@ -8,13 +9,15 @@ namespace EvoCalculator.Core.Calculation.Columns
{
private readonly PercentPaymentColumn _percentPaymentColumn;
private readonly PreparedValues _preparedValues;
+ private readonly PostValues _postValues;
public SumColumn(int count, DateTempColumn dateTempColumn
, PreparedValues preparedValues
- , PercentPaymentColumn percentPaymentColumn) : base(count, dateTempColumn)
+ , PercentPaymentColumn percentPaymentColumn, PostValues postValues) : base(count, dateTempColumn)
{
_preparedValues = preparedValues;
_percentPaymentColumn = percentPaymentColumn;
+ _postValues = postValues;
}
public override decimal Calculate(decimal inputVariable)
@@ -25,7 +28,7 @@ namespace EvoCalculator.Core.Calculation.Columns
protected override void FillValues(decimal x)
{
- Values[0] = -_preparedValues.BaseCost;
+ Values[0] = -_postValues.BaseCost.Value;
Values[1] = _preparedValues.FirstPaymentSum;
for (var i = 2; i < Values.Length - 1; i++) Values[i] = x * (decimal) _percentPaymentColumn.Values[i] / 100;
@@ -39,7 +42,7 @@ namespace EvoCalculator.Core.Calculation.Columns
goalSeek.SeekResult(requiredValue,
new GoalSeekOptions(
startingStabPoint: Convert.ToDecimal(
- (_preparedValues.BaseCost - _preparedValues.FirstPaymentSum) /
+ (_postValues.BaseCost.Value - _preparedValues.FirstPaymentSum) /
_preparedValues.Nmper)
, tineExplorePercentage: 10
// , maximumAttempts: 10000
diff --git a/EvoCalculator.Core.Calculation/Post/BaseCost.cs b/EvoCalculator.Core.Calculation/Post/BaseCost.cs
new file mode 100644
index 0000000..f8f7474
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/BaseCost.cs
@@ -0,0 +1,19 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class BaseCost : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, KaskoNmperGrColumn kaskoNmperGrColumn,
+ TLM_GrColumn tlmGrColumn, GPS_GrColumn 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.NsibBrutto;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/BasePostValue.cs b/EvoCalculator.Core.Calculation/Post/BasePostValue.cs
new file mode 100644
index 0000000..d0a26c6
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/BasePostValue.cs
@@ -0,0 +1,7 @@
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class BasePostValue
+ {
+ public T Value { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/BonusBase.cs b/EvoCalculator.Core.Calculation/Post/BonusBase.cs
new file mode 100644
index 0000000..4ed016b
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/BonusBase.cs
@@ -0,0 +1,15 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class BonusBase : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, KaskoBonusGrSumColumn kaskoBonusGrSumColumn)
+ {
+ Value = preparedValues.PlPrice + preparedValues.InsuranceOsago + Math.Abs(kaskoBonusGrSumColumn.Values[0]) -
+ preparedValues.Discount - preparedValues.ComissionRub - preparedValues.FirstPaymentSum;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/BonusResult.cs b/EvoCalculator.Core.Calculation/Post/BonusResult.cs
new file mode 100644
index 0000000..4b9b005
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/BonusResult.cs
@@ -0,0 +1,16 @@
+using System;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class BonusResult : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, NPVBonusExpensesColumn npvBonusExpensesColumn)
+ {
+ Value = Math.Abs(npvBonusExpensesColumn.Values[0]) -
+ Math.Abs(npvBonusExpensesColumn.Values[0]) * (decimal) preparedValues.SalaryRate /
+ (decimal) (1 + preparedValues.SalaryRate);
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/NPVNI.cs b/EvoCalculator.Core.Calculation/Post/NPVNI.cs
new file mode 100644
index 0000000..a47e581
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/NPVNI.cs
@@ -0,0 +1,14 @@
+using System.Linq;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class NPVNI : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, NPVColumn npvColumn)
+ {
+ Value = npvColumn.Values.Sum(x => (double) x) / (double) preparedValues.NpvBase;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/PostValues.cs b/EvoCalculator.Core.Calculation/Post/PostValues.cs
new file mode 100644
index 0000000..13e1d42
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/PostValues.cs
@@ -0,0 +1,27 @@
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class PostValues
+ {
+ public BaseCost BaseCost;
+
+ public BonusBase BonusBase;
+ 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 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/Post/PriceUP.cs b/EvoCalculator.Core.Calculation/Post/PriceUP.cs
new file mode 100644
index 0000000..c507c49
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/PriceUP.cs
@@ -0,0 +1,14 @@
+using System.Linq;
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class PriceUP : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, SumColumn sumColumn)
+ {
+ Value = sumColumn.Values.Skip(1).Sum(x => x) - preparedValues.PriceUpTotal;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/PriceUP_PR.cs b/EvoCalculator.Core.Calculation/Post/PriceUP_PR.cs
new file mode 100644
index 0000000..2a675cb
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/PriceUP_PR.cs
@@ -0,0 +1,12 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.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/Post/PriceUP_Year.cs b/EvoCalculator.Core.Calculation/Post/PriceUP_Year.cs
new file mode 100644
index 0000000..f069c72
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/PriceUP_Year.cs
@@ -0,0 +1,12 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.Post
+{
+ public class PriceUP_Year : BasePostValue
+ {
+ public void ComputeValue(PreparedValues preparedValues, PostValues postValues)
+ {
+ Value = postValues.PriceUP.Value * 12 / preparedValues.Nmper;
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Calculation/Post/PriceUP_Year_PR.cs b/EvoCalculator.Core.Calculation/Post/PriceUP_Year_PR.cs
new file mode 100644
index 0000000..4dcc95a
--- /dev/null
+++ b/EvoCalculator.Core.Calculation/Post/PriceUP_Year_PR.cs
@@ -0,0 +1,12 @@
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+
+namespace EvoCalculator.Core.Calculation.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.Models/Calculation/Models/Prepared/PreparedParams.cs b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs
similarity index 96%
rename from EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
rename to EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs
index f93f423..dd386d7 100644
--- a/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs
+++ b/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedValues.cs
@@ -9,7 +9,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared
public double IrrExpected { get; set; }
public double NpvniExpected { get; set; }
public double TotalExpected { get; set; }
- public bool Leasing0K { get; set; }
+ public double Leasing0K { get; set; }
public double LoanRate { get; set; }
public int BalanceHolder { get; set; }
public DateTime DogDate { get; set; }
@@ -85,9 +85,7 @@ namespace EvoCalculator.Core.Models.Calculation.Models.Prepared
public decimal ImporterSum { get; set; }
public decimal CalculationCost { get; set; }
public decimal PriceUpTotal { get; set; }
- public decimal BaseCost { get; set; }
public decimal AcquisitionExpenses { get; set; }
- public decimal BonusBase { get; set; }
public decimal NpvBase { get; set; }
public decimal TLMCost { get; set; }
public double IRR_MSFO_Plan { get; set; }
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs
index f6f4190..987a5e1 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/AcceptSumTests.cs
@@ -91,7 +91,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
index 30eb07b..cf2dfc3 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowLeasingTests.cs
@@ -90,7 +90,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
index 5569f44..40330ae 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowMSFOTests.cs
@@ -90,7 +90,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
- var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs
index e0975be..2f84099 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowNPV.cs
@@ -91,7 +91,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
- var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs
index 24deaa8..fde2ee1 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/CashflowTests.cs
@@ -91,7 +91,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues,
- new PercentPaymentColumn(preparedValues.Nmper + 1))
+ new PercentPaymentColumn(preparedValues.Nmper + 1), null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs
index 962e061..9bc49a2 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/DirectorBonusSum.cs
@@ -1,4 +1,5 @@
using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
@@ -12,15 +13,22 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var preparedValues = new PreparedValues
{
Nmper = 25,
- BonusBase = 1873191.66666667m,
DirectorBonus = 0.003,
SalaryRate = 0.3,
MarketRate = 0.01,
DistrictRate = 0.02
};
+ var postValues = new PostValues()
+ {
+ BonusBase = new BonusBase()
+ {
+ Value = 1873191.66666667m
+ }
+ };
+
var directorBonusSumColumn = new DirectorBonusSumColumn(preparedValues.Nmper + 1);
- directorBonusSumColumn.ComputeValues(preparedValues);
+ directorBonusSumColumn.ComputeValues(preparedValues, postValues);
var expected = new[]
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs b/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs
index 2b15f42..34507e9 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/ExtraBonusSum.cs
@@ -1,5 +1,6 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
@@ -14,7 +15,6 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
{
Nmper = 25,
IRR_MSFO_Plan = 0.05,
- BonusBase = 1873191.66666667m,
ExtraBonus = 0.00764256319811875,
SalaryRate = 0,
MarketRate = 0,
@@ -128,8 +128,16 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
}
};
+ var postValues = new PostValues()
+ {
+ BonusBase = new BonusBase()
+ {
+ Value = 1873191.66666667m
+ }
+ };
+
var extraBonusSumColumn = new ExtraBonusSumColumn(preparedValues.Nmper + 1);
- extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn);
+ extraBonusSumColumn.ComputeValues(preparedValues, cashflowMsfoColumn, postValues);
var expected = new[]
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
index 29c1281..8e3dc18 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/NPVBonusExpensesTests.cs
@@ -1,4 +1,5 @@
using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
@@ -18,14 +19,21 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
NsBonus = 90.00m,
NsibBonus = 97.014m,
BonusFix = 0.00m,
- BonusBase = 2003933.33333333m,
Bonus = 0.011,
Nmper = 30
};
+ var postValues = new PostValues()
+ {
+ BonusBase = new BonusBase()
+ {
+ Value = 2003933.33333333m
+ }
+ };
+
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
- npvBonusExpensesColumn.ComputeValues(preparedValues);
+ npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
var expected = new[]
{
@@ -79,14 +87,20 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
NsBonus = 90.00m,
NsibBonus = 97.014m,
BonusFix = 20000.00m,
- BonusBase = 2003933.33333333m,
Bonus = 0.011,
Nmper = 30
};
+ var postValues = new PostValues()
+ {
+ BonusBase = new BonusBase()
+ {
+ Value = 2003933.33333333m
+ }
+ };
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValue.Nmper + 1);
- npvBonusExpensesColumn.ComputeValues(preparedValue);
+ npvBonusExpensesColumn.ComputeValues(preparedValue, postValues);
var expected = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs b/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs
index 4861da6..63efda9 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumTest.cs
@@ -1,5 +1,6 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
@@ -13,7 +14,6 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var preparedValues =
new PreparedValues
{
- BaseCost = 2842960.70661055m,
FirstPaymentSum = 636000,
Nmper = 30,
LastPaymentSum = 25440,
@@ -169,11 +169,19 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
25440
};
+ var postValues = new PostValues()
+ {
+ BaseCost = new BaseCost()
+ {
+ Value = 2842960.70661055m
+ },
+ };
+
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
- , percentPaymentColumn);
+ , percentPaymentColumn, postValues);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
var values = sumColumn.Values;
Assert.Equal(expected, values, new DecimalArrayComparer(100));
@@ -185,7 +193,6 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var preparedValues =
new PreparedValues
{
- BaseCost = 2500000,
FirstPaymentSum = 625000,
Nmper = 12,
LastPaymentSum = 25000,
@@ -299,11 +306,19 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
25000
};
+ var postValues = new PostValues()
+ {
+ BaseCost = new BaseCost()
+ {
+ Value = 2500000
+ },
+ };
+
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
- , percentPaymentColumn);
+ , percentPaymentColumn, postValues);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
var values = sumColumn.Values;
Assert.Equal(expected, values, new DecimalArrayComparer(100));
@@ -315,7 +330,6 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
var preparedValues =
new PreparedValues
{
- BaseCost = 2586532.79187453m,
FirstPaymentSum = 805000,
Nmper = 16,
LastPaymentSum = 23000,
@@ -437,11 +451,19 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
23000
};
+ var postValues = new PostValues()
+ {
+ BaseCost = new BaseCost()
+ {
+ Value = 2586532.79187453m
+ },
+ };
+
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
- , percentPaymentColumn);
+ , percentPaymentColumn, postValues);
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/Columns/SumWithVatTests.cs
index e4afc58..876fe70 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs
@@ -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)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
index ae2779b..2b175df 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/TaxColumnTests.cs
@@ -15,7 +15,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Columns
};
var sumColumn = new SumColumn(preparedValues.Nmper + 1, new DateTempColumn(preparedValues.Nmper + 1),
- preparedValues, new PercentPaymentColumn(preparedValues.Nmper + 1))
+ preparedValues, new PercentPaymentColumn(preparedValues.Nmper + 1), null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
index 3af034f..bfa9b67 100644
--- a/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs
@@ -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)
+ var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null, null)
{
Values = new[]
{
diff --git a/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs b/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs
index cef5e76..d6fee6f 100644
--- a/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs
+++ b/EvoCalculator.Core.Tests/Calculation/Controller/CalculationControllerV1Tests.cs
@@ -19,7 +19,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Controller
IrrExpected = 0.23,
NpvniExpected = 0.05,
TotalExpected = 0,
- Leasing0K = true,
+ Leasing0K = 1,
LoanRate = 0.07,
BalanceHolder = 100000000,
DogDate = new DateTime(2020, 10, 12),
@@ -86,8 +86,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Controller
AcquisitionExpenses = 2283678,
NpvBase = 1480794.596m,
NiAtInception = 19166.6666666667m,
- BonusBase = 1513378.6m,
- BaseCost = 2586532.79187453m,
+ DirectorBonus = 0.003,
+ ExtraBonus = 0.008,
+ IRR_MSFO_Plan = 0.05
};
var preparedPayments = new PreparedPayments()
@@ -271,7 +272,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Controller
IrrExpected = 0.22,
NpvniExpected = 0.05,
TotalExpected = 0,
- Leasing0K = true,
+ Leasing0K = 1,
LoanRate = 0.07,
BalanceHolder = 100000001,
DogDate = new DateTime(2020, 10, 22),
@@ -338,8 +339,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Controller
AcquisitionExpenses = 3469678,
NpvBase = 2597599.94864m,
NiAtInception = 19166.6666666667m,
- BonusBase = 2548108,
- BaseCost = 3689559.59284717m,
+ DirectorBonus = 0.003,
+ ExtraBonus = 0.008,
+ IRR_MSFO_Plan = 0.05
};
var preparedPayments = new PreparedPayments()
diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs b/EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs
new file mode 100644
index 0000000..cb2330b
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/BaseCost.cs
@@ -0,0 +1,131 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class BaseCostTest
+ {
+ [Fact]
+ public void BaseCostTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ PlPrice = 2500000,
+ InsuranceOsago = 30000,
+ Rats = 12000,
+ Registration = 0,
+ TrackerCost = 15000,
+ TransportTaxGr = 0,
+ Leasing0K = 1,
+ NsibBrutto = 26730.2083333333m,
+ TLMCost = 20000
+ };
+
+ var KaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, new DateTempColumn(0), 0)
+ {
+ Values = new[]
+ {
+ -97856.7708333333m,
+ 53000m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 57416.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ }
+ };
+
+ var TLM_GrColumn = new TLM_GrColumn(preparedValues.Nmper + 1, new DateTempColumn(0), 0)
+ {
+ Values = new[]
+ {
+ -17757.5461595619m,
+ 0,
+ 1800,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ 900,
+ }
+ };
+
+ var GPS_GrColumn = new GPS_GrColumn(preparedValues.Nmper + 1, new DateTempColumn(0), 0)
+ {
+ Values = new[]
+ {
+ -19730.6068439577m,
+ 0,
+ 2000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ 1000,
+ }
+ };
+
+ var BaseCost = new BaseCost();
+ BaseCost.ComputeValue(preparedValues, KaskoNmperGrColumn, TLM_GrColumn, GPS_GrColumn);
+
+ Assert.Equal(2739075.13217019m, BaseCost.Value, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs b/EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs
new file mode 100644
index 0000000..3395296
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/BonusBase.cs
@@ -0,0 +1,62 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class BonusBaseTests
+ {
+ [Fact]
+ public void BonusBaseTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ PlPrice = 2500000m,
+ InsuranceOsago = 30000m,
+ Discount = 0,
+ ComissionRub = 125000,
+ FirstPaymentSum = 625000
+ };
+
+ var KaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ 93191.6666666667m,
+ 53000m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 40191.6666666667m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ }
+ };
+
+
+ var BonusBase = new BonusBase();
+ BonusBase.ComputeValue(preparedValues, KaskoBonusGrSumColumn);
+
+ Assert.Equal(1873191.66666667m, BonusBase.Value, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs b/EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs
new file mode 100644
index 0000000..5c61513
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/BonusResult.cs
@@ -0,0 +1,59 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class BonusResultTests
+ {
+ [Fact]
+ public void BonusResultTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ SalaryRate = 0.3
+ };
+
+ var NPVBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1)
+ {
+ Values = new[]
+ {
+ -29266.5425270833m,
+ -1676.30246875m,
+ -27590.2400583333m,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ }
+ };
+
+
+ var bonusResult = new BonusResult();
+ bonusResult.ComputeValue(preparedValues, NPVBonusExpensesColumn);
+
+ Assert.Equal(22512.7250208333m, bonusResult.Value, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs b/EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs
new file mode 100644
index 0000000..5178469
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/NPVNI.cs
@@ -0,0 +1,58 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class NPVNITests
+ {
+ [Fact]
+ public void PriceUP_Year_PRTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ NpvBase = 1884609.49m
+ };
+
+ var NPVColumn = new NPVColumn(preparedValues.Nmper + 1, new DateTempColumn(0))
+ {
+ Values = new[]
+ {
+ -2507300m,
+ 576210.741196628m,
+ -263857.014691157m,
+ 115861.35323893m,
+ 119890.703197292m,
+ 114557.887385525m,
+ 113878.902663341m,
+ 113225.652629434m,
+ 112554.564064088m,
+ 111908.910909099m,
+ 111245.62667335m,
+ 110586.273723982m,
+ 98989.135506238m,
+ 39471.7873776598m,
+ 97332.2908956887m,
+ 96755.4023024929m,
+ 96181.9329286116m,
+ 95648.5390680754m,
+ 95081.6300737792m,
+ 94536.2079049931m,
+ 93975.8916987012m,
+ 93436.8124399197m,
+ 92883.0123517358m,
+ 82053.7992396979m,
+ 81583.1093587638m,
+ 20513.3607047216m,
+ }
+ };
+
+
+ var npvni = new NPVNI();
+ npvni.ComputeValue(preparedValues, NPVColumn);
+
+ 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/Post/PriceUP_PR.cs
new file mode 100644
index 0000000..8f08c10
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_PR.cs
@@ -0,0 +1,32 @@
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class PriceUP_PRTests
+ {
+ [Fact]
+ public void PriceUP_PRTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ PriceUpTotal = 2790146.875m,
+ };
+
+
+ var postValues = new PostValues()
+ {
+ PriceUP = new PriceUP()
+ {
+ Value = 499446.893305404m
+ }
+ };
+
+ var priceUpPr = new PriceUP_PR();
+ priceUpPr.ComputeValue(preparedValues, postValues);
+
+ 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/Post/PriceUP_Year.cs
new file mode 100644
index 0000000..30e8180
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year.cs
@@ -0,0 +1,32 @@
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class PriceUP_YearTests
+ {
+ [Fact]
+ public void PriceUP_YearTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ Nmper = 25
+ };
+
+
+ var postValues = new PostValues()
+ {
+ PriceUP = new PriceUP()
+ {
+ Value = 499446.893305404m
+ }
+ };
+
+ var priceUpYear = new PriceUP_Year();
+ priceUpYear.ComputeValue(preparedValues, postValues);
+
+ Assert.Equal(239734.508786594m, priceUpYear.Value, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs b/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs
new file mode 100644
index 0000000..3aed2b1
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/PriceUP_Year_PR_Tests.cs
@@ -0,0 +1,32 @@
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class PriceUP_Year_PRTests
+ {
+ [Fact]
+ public void PriceUP_Year_PRTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ PriceUpTotal = 2790146.875m,
+ };
+
+
+ var postValues = new PostValues()
+ {
+ PriceUP_Year = new PriceUP_Year()
+ {
+ Value = 239734.508786594m
+ }
+ };
+
+ var priceUpYearPr = new PriceUP_Year_PR();
+ priceUpYearPr.ComputeValue(preparedValues, postValues);
+
+ 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/Post/PriceUp.cs
new file mode 100644
index 0000000..4ff9f2d
--- /dev/null
+++ b/EvoCalculator.Core.Tests/Calculation/Post/PriceUp.cs
@@ -0,0 +1,59 @@
+using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
+using EvoCalculator.Core.Models.Calculation.Models.Prepared;
+using Xunit;
+
+namespace EvoCalculator.Core.Tests.Calculation.Post
+{
+ public class PriceUpTests
+ {
+ [Fact]
+ public void PriceUpTest1()
+ {
+ var preparedValues = new PreparedValues()
+ {
+ PriceUpTotal = 2790146.875m,
+ Nmper = 25
+ };
+
+ var SumColumn = new SumColumn(preparedValues.Nmper + 1, new DateTempColumn(0), null, null, null)
+ {
+ Values = new[]
+ {
+ -2739075.13217019m,
+ 625000m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 122771.803176996m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 110494.622859296m,
+ 98217.4425415964m,
+ 98217.4425415964m,
+ 25000m,
+ }
+ };
+
+
+ var PriceUP = new PriceUP();
+ PriceUP.ComputeValue(preparedValues, SumColumn);
+
+ Assert.Equal(499446.893305404m, PriceUP.Value, new DecimalArrayComparer());
+ }
+ }
+}
\ No newline at end of file
diff --git a/EvoCalculator.Core/Controllers/v1/CalculationController.cs b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
index 1dd0e93..6d1b589 100644
--- a/EvoCalculator.Core/Controllers/v1/CalculationController.cs
+++ b/EvoCalculator.Core/Controllers/v1/CalculationController.cs
@@ -1,5 +1,6 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
+using EvoCalculator.Core.Calculation.Post;
using EvoCalculator.Core.Models.Calculation.Models.Request;
using Microsoft.AspNetCore.Mvc;
@@ -17,6 +18,8 @@ namespace EvoCalculator.Core.Controllers.V1
var preparedPayments = requestCalculation.preparedPayments;
var constants = new Constants.Calculation();
+ var postValues = new PostValues();
+
var dateColumn = new DateColumn(requestCalculation.preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, constants);
@@ -26,12 +29,10 @@ namespace EvoCalculator.Core.Controllers.V1
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(preparedPayments);
-
var kaskoNmperGrColumn =
new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn, preparedValues.IrrExpected);
kaskoNmperGrColumn.ComputeValues(preparedValues, constants);
-
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn,
preparedValues.IrrExpected);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
@@ -41,102 +42,184 @@ namespace EvoCalculator.Core.Controllers.V1
preparedValues.IrrExpected);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
+ postValues.BaseCost.ComputeValue(preparedValues, kaskoNmperGrColumn, tlmGrColumn, gpsGrColumn);
+
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
- , percentPaymentColumn);
+ , percentPaymentColumn, postValues);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
-
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
-
var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1);
sumWithVatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
-
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 deprecationLPColumn = new DeprecationLPColumn(preparedValues.Nmper + 1);
- deprecationLPColumn.ComputeValues(preparedValues, acceptSumColumn);
-
-
- var deprecationLDColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2);
- deprecationLDColumn.ComputeValues(preparedValues);
-
+ var deprecationLdColumn = new DeprecationLDColumn(preparedValues.NmperDeprecation + 2);
+ deprecationLdColumn.ComputeValues(preparedValues);
var deprecationColumn = new DeprecationColumn(preparedValues.NmperDeprecation + 2);
- deprecationColumn.ComputeValues(deprecationLPColumn, deprecationLDColumn);
-
+ deprecationColumn.ComputeValues(deprecationLpColumn, deprecationLdColumn);
var npvBonusExpensesColumn = new NPVBonusExpensesColumn(preparedValues.Nmper + 1);
- npvBonusExpensesColumn.ComputeValues(preparedValues);
-
+ npvBonusExpensesColumn.ComputeValues(preparedValues, postValues);
var kaskoBonusGrSumColumn = new KaskoBonusGrSumColumn(preparedValues.Nmper + 1);
kaskoBonusGrSumColumn.ComputeValues(preparedValues, kaskoNmperGrColumn);
+ postValues.BonusBase.ComputeValue(preparedValues, kaskoBonusGrSumColumn);
var agentComissionExpensesColumn = new AgentComissionExpensesColumn(preparedValues.Nmper + 1);
agentComissionExpensesColumn.ComputeValues(preparedValues);
-
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);
+ var negativeCashflowColumn = new NegativeCashflowColumn(preparedValues.Nmper + 1);
+ negativeCashflowColumn.ComputeValues(kaskoNmperGrColumn);
+
+ var nsibBruttoGrColumn = new NSIBBruttoGrColumn(preparedValues.Nmper + 1);
+ nsibBruttoGrColumn.ComputeValues(preparedValues);
+
+ var taxColumn = new TaxColumn(preparedValues.Nmper + 1);
+ taxColumn.ComputeValues(constants, sumColumn, acceptInsuranceColumn, deprecationColumn, ratExpensesColumn,
+ registrExpensesColumn, comissionBonusExpensesColumn, transExprensesColumn, npvBonusExpensesColumn,
+ agentComissionExpensesColumn, insuranceBonusExpensesColumn, tlmExpensesColumn, gpsExpensesColumn);
+
+ var cashflowColumn = new CashflowColumn(preparedValues.Nmper + 1, dateTempColumn);
+ cashflowColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn);
+
+ var cashflowLeasingColumn = new CashflowLeasingColumn(preparedValues.Nmper + 1, dateTempColumn);
+ cashflowLeasingColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
+ tlmGrColumn, gpsGrColumn);
+
+ var cashflowMsfoColumn = new CashflowMSFOColumn(preparedValues.Nmper + 1, dateTempColumn);
+ cashflowMsfoColumn.ComputeValues(preparedValues, sumColumn, negativeCashflowColumn, nsibBruttoGrColumn,
+ tlmGrColumn, gpsGrColumn, npvBonusExpensesColumn, agentComissionExpensesColumn);
+
+ var cashflowNpvColumn = new CashflowNPVColumn(preparedValues.Nmper + 1);
+ cashflowNpvColumn.ComputeValues(preparedValues, sumColumn, npvBonusExpensesColumn,
+ agentComissionExpensesColumn, taxColumn, nsibExpensesColumn, negativeCashflowColumn, ratExpensesColumn,
+ transExprensesColumn, tlmExpensesColumn, gpsExpensesColumn);
+
+ var npvWeightColumn = new NPVWeightColumn(preparedValues.Nmper + 1);
+ npvWeightColumn.ComputeValues(preparedValues, dateTempColumn);
+
+ var npvColumn = new NPVColumn(preparedValues.Nmper + 1, 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);
+
+ var cashflowNsibColumn = new CashflowNSIBColumn(preparedValues.Nmper + 1, dateTempColumn,
+ nsibBruttoGrColumn, nsibExpensesColumn);
+ 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);
+
+ 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(preparedValues.Nmper + 1);
+ cashflowNpvFinalColumn.ComputeValues(preparedValues, extraBonusSumColumn, cashflowNpvColumn);
+
+ var npvFinalColumn = new NPVFinalColumn(preparedValues.Nmper + 1, 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(preparedValues.Nmper + 1);
+ cashflowNpvFinal2Column.ComputeValues(preparedValues, cashflowNpvFinalColumn, directorBonusSumColumn);
+
+ var npvFinal2Column = new NPVFinal2Column(preparedValues.Nmper + 1, dateTempColumn);
+ npvFinal2Column.ComputeValues(cashflowNpvFinal2Column, npvWeightColumn);
+
+ 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);
return new
{
+ preparedValues,
+ preparedPayments,
+ postValues,
+
dateColumn,
dateTempColumn,
percentPaymentColumn,
@@ -150,8 +233,8 @@ namespace EvoCalculator.Core.Controllers.V1
acceptKaskoColumn,
acceptOsagoColumn,
acceptInsuranceColumn,
- deprecationLPColumn,
- deprecationLDColumn,
+ deprecationLpColumn,
+ deprecationLdColumn,
deprecationColumn,
npvBonusExpensesColumn,
kaskoBonusGrSumColumn,
@@ -164,7 +247,34 @@ namespace EvoCalculator.Core.Controllers.V1
registrExpensesColumn,
insuranceBonusExpensesColumn,
comissionBonusExpensesColumn,
- expensesColumn
+ 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
};
}
}