rewrite simple columns && start sumColumn

This commit is contained in:
Chika 2020-10-19 20:33:56 +03:00
parent 5feb8d42af
commit 8c0a87cb3b
28 changed files with 1436 additions and 272 deletions

View File

@ -38,12 +38,17 @@
<e p="EvoCalculator.Core.Calculation" t="IncludeRecursive">
<e p="bin" t="ExcludeRecursive" />
<e p="Columns" t="Include">
<e p="BaseColumn.cs" t="Include" />
<e p="BaseColumnWithXIRR.cs" t="Include" />
<e p="DateColumn.cs" t="Include" />
<e p="DateTempColumn.cs" t="Include" />
<e p="GPS_GrColumn.cs" t="Include" />
<e p="KaskoNmperGrColumn.cs" t="Include" />
<e p="PercentPaymentColumn.cs" t="Include" />
<e p="SumColumn.cs" t="Include" />
<e p="SumWithVATColumn.cs" t="Include" />
<e p="TLM_GRColumn.cs" t="Include" />
<e p="VATColumn.cs" t="Include" />
</e>
<e p="EvoCalculator.Core.Calculation.csproj" t="IncludeRecursive" />
<e p="obj" t="ExcludeRecursive">
@ -68,7 +73,9 @@
</e>
<e p="EvoCalculator.Core.FinanceFormulas" t="IncludeRecursive">
<e p="bin" t="ExcludeRecursive" />
<e p="Bisection.cs" t="Include" />
<e p="EvoCalculator.Core.FinanceFormulas.csproj" t="IncludeRecursive" />
<e p="GoalXIRR.cs" t="Include" />
<e p="obj" t="ExcludeRecursive">
<e p="Debug" t="Include">
<e p="netcoreapp3.1" t="Include">
@ -83,8 +90,6 @@
<e p="bin" t="ExcludeRecursive" />
<e p="Calculation" t="Include">
<e p="Interfaces" t="Include">
<e p="IColumn.cs" t="Include" />
<e p="IColumnWithXIRR.cs" t="Include" />
<e p="IFinanceFormula.cs" t="Include" />
</e>
<e p="Models" t="Include">
@ -116,15 +121,19 @@
<e p="EvoCalculator.Core.Tests" t="IncludeRecursive">
<e p="bin" t="ExcludeRecursive" />
<e p="Calculation" t="Include">
<e p="Columns" t="Include">
<e p="DateColumnTests.cs" t="Include" />
<e p="DateTempTests.cs" t="Include" />
<e p="GPS_GrTests.cs" t="Include" />
<e p="KaskoNmperGrTests.cs" t="Include" />
<e p="PercentPaymentTests.cs" t="Include" />
<e p="SumColumnTest.cs" t="Include" />
<e p="SumWithVatTests.cs" t="Include" />
<e p="TLM_GrTests.cs" t="Include" />
<e p="VATColumnTests.cs" t="Include" />
</e>
<e p="Controllers" t="Include" />
<e p="Suite" t="Include">
<e p="Columns" t="Include">
<e p="DateColumnTests.cs" t="Include" />
<e p="DateTempTests.cs" t="Include" />
<e p="KaskoNmperGrTests.cs" t="Include" />
<e p="PercentPaymentTests.cs" t="Include" />
<e p="SumColumnTest.cs" t="Include" />
</e>
<e p="FinanceFormulas" t="Include">
<e p="FinanceFormulasTests.cs" t="Include" />
</e>
</e>

View File

@ -14,19 +14,35 @@
</component>
<component name="ChangeListManager">
<list default="true" id="2c3b0650-5589-43d4-b4b7-2979612bb30f" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumnWithXIRR.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumColumnTest.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/VATColumn.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/Bisection.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/GoalXIRR.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/GPS_GrTests.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/TLM_GrTests.cs" afterDir="false" />
<change afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateColumn.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateColumn.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateTempColumn.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateTempColumn.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/EvoCalculator.Core.Calculation.csproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XNPV.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.sln" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.sln" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/EvoCalculator.Core.FinanceFormulas.csproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumn.cs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumnWithXIRR.cs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateColumnTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateTempTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/DateTempTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/KaskoNmperGrTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/KaskoNmperGrTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/PercentPaymentTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/PercentPaymentTests.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumColumnTest.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs" beforeDir="false" afterPath="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@ -37,67 +53,79 @@
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="HighlightingSettingsPerFile">
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/18D5A60D-361A-4AFD-A431-F772FA87FCC3/d9/b0109e6d/TestInvoker`1.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="mock://C:/Users/Chika/Projects/EvoCalculator.Core/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/E2E1F770-6781-48FC-97C9-82BA075D5898/af/6846d1ce/GoalSeek.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/EvoCalculator.Core.Constants/Calculation.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/9D995D4A-0EBE-4A93-85A6-BE06CB7C70EE/f6/ada9c10c/FactAttribute.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/9152434B-0FAC-463B-87F2-DD9AF798817F/2e/201d3c41/Assert.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/E2E1F770-6781-48FC-97C9-82BA075D5898/8a/efc30f2b/IGoalSeekAlgorithm.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/AD61CA47-F8B7-4CC6-93A0-BA44CC73B5C7/49/DateTime.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/AD61CA47-F8B7-4CC6-93A0-BA44CC73B5C7/72/Double.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///Dummy.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/18D5A60D-361A-4AFD-A431-F772FA87FCC3/d9/b0109e6d/TestInvoker`1.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/E2E1F770-6781-48FC-97C9-82BA075D5898/92/f4ccca9d/GoalSeekResult.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///Dummy.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///Dummy.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/9D995D4A-0EBE-4A93-85A6-BE06CB7C70EE/f6/ada9c10c/FactAttribute.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/E2E1F770-6781-48FC-97C9-82BA075D5898/d6/c014ca2d/GoalSeekOptions.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/E2E1F770-6781-48FC-97C9-82BA075D5898/89/f5bc57e5/Trident.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/31F94AF4-0455-4C4C-BD4F-AB58A9F2D1BF/2C/Sum.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///Dummy.cs" root0="SKIP_HIGHLIGHTING" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Class1.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core/Controllers/WeatherForecastController.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core/Startup.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core/Controllers/v2/WeatherForecastController.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core/Controllers/v3/WeatherForecastController.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Interfaces/IWeatherForecast.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Weather/WeatherForecast.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Weather/Interfaces/IWeatherForecast.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Controllers/WeatherForecastControllerTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/FinanceFormulas.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/IFinanceFormula.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IFinanceFormula.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/FlowValues.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/InitialParams.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/InitialPayments.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core/Controllers/v1/WeatherForecastController.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/PreparedParams.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/PreparedPayments.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/ComputableColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedParams.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Constants.cs" />
<option value="$PROJECT_DIR$/Constants/Class1.cs" />
<option value="$PROJECT_DIR$/Constants/Calculation/Constants.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Constants/Calculation/Constants.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/ColumnsTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateColumnTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Constants/Calculation.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateTempTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/Prepared/PreparedPayments.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/PercentPaymentTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/KaskoNmperGr.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateTempColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/KaskoNmperGrTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/BaseColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.FinanceFormulas/Class1.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.FinanceFormulas/XNPV.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.FinanceFormulas/XIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XNPV.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Models/BaseColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumColumnTest.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/Bisection.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/GoalSeek.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Models/Calculation/Interfaces/IColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/TLM_GR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/TLM_GRColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumColumnTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Constants/Calculation.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateColumnTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/DateTempTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/PercentPaymentTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/GPS_GrTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumColumnTest.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/SumWithVatTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/TLM_GrTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/VATColumnTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Suite/Columns/KaskoNmperGrTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/DateColumnTests.cs" />
<option value="$APPLICATION_CONFIG_DIR$/scratches/scratch.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/DateTempColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/GPS_GrColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/PercentPaymentColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumWithVATColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/TLM_GrColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/VATColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/KaskoNmperGrColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumWithVatTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/VATColumnTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/GoalXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/Columns/SumColumnTest.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/BaseColumnWithXIRR.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Tests/Calculation/FinanceFormulas/FinanceFormulasTests.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs" />
<option value="$PROJECT_DIR$/EvoCalculator.Core.FinanceFormulas/XIRR.cs" />
</list>
</option>
</component>
@ -115,8 +143,9 @@
<property name="DebuggerViewTab_PTCS_LastProportionKey" value="0.30008045" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="com.intellij.ide.scratch.LRUPopupBuilder$1/New Scratch File" value="C#" />
<property name="nodejs_package_manager_path" value="npm" />
<property name="settings.editor.selected.configurable" value="editor.preferences.smartKeys_rider" />
<property name="settings.editor.selected.configurable" value="preferences.customizations" />
<property name="vue.rearranger.settings.migration" value="true" />
</component>
<component name="RunManager" selected=".NET Launch Settings Profile.EvoCalculator.Core">
@ -164,7 +193,8 @@
<workItem from="1602678304213" duration="9304000" />
<workItem from="1602754684591" duration="13639000" />
<workItem from="1602850022326" duration="4617000" />
<workItem from="1602854690202" duration="696000" />
<workItem from="1602854690202" duration="5777000" />
<workItem from="1603096869934" duration="23413000" />
</task>
<task id="LOCAL-00001" summary="rename: flow">
<created>1602593830686</created>
@ -208,90 +238,94 @@
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="734" y="355" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602508288549" />
<state width="897" height="464" key="DebuggerActiveHint" timestamp="1602767525601">
<state x="1108" y="416" key="#com.intellij.ide.ui.customization.CustomizableActionsPanel.FindAvailableActionsDialog" timestamp="1603119675236">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="897" height="464" key="DebuggerActiveHint/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602767525601" />
<state width="2517" height="437" key="GridCell.Tab.0.bottom" timestamp="1602768462757">
<state x="1108" y="416" key="#com.intellij.ide.ui.customization.CustomizableActionsPanel.FindAvailableActionsDialog/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603119675236" />
<state width="897" height="464" key="DebuggerActiveHint" timestamp="1603128596492">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.0.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.0.center" timestamp="1602768462757">
<state width="897" height="464" key="DebuggerActiveHint/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128596492" />
<state width="2517" height="464" key="GridCell.Tab.0.bottom" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.0.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.0.left" timestamp="1602768462756">
<state width="2517" height="464" key="GridCell.Tab.0.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.0.center" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.0.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462756" />
<state width="2517" height="437" key="GridCell.Tab.0.right" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.0.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.0.left" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.0.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.1.bottom" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.0.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.0.right" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.1.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.1.center" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.0.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.1.bottom" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.1.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.1.left" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.1.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.1.center" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.1.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.1.right" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.1.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.1.left" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.1.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.2.bottom" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.1.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.1.right" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.2.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.2.center" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.1.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.2.bottom" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.2.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.2.left" timestamp="1602768462757">
<state width="2517" height="464" key="GridCell.Tab.2.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.2.center" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.2.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462757" />
<state width="2517" height="437" key="GridCell.Tab.2.right" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.2.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.2.left" timestamp="1603128549927">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.2.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.3.bottom" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.2.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549927" />
<state width="2517" height="464" key="GridCell.Tab.2.right" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.3.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.3.center" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.2.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.3.bottom" timestamp="1603128549929">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.3.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.3.left" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.3.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549929" />
<state width="2517" height="464" key="GridCell.Tab.3.center" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.3.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.3.right" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.3.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.3.left" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.3.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.4.bottom" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.3.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.3.right" timestamp="1603128549928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.4.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.4.center" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.3.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549928" />
<state width="2517" height="464" key="GridCell.Tab.4.bottom" timestamp="1603128549930">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.4.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.4.left" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.4.bottom/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549930" />
<state width="2517" height="464" key="GridCell.Tab.4.center" timestamp="1603128549929">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.4.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="437" key="GridCell.Tab.4.right" timestamp="1602768462758">
<state width="2517" height="464" key="GridCell.Tab.4.center/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549929" />
<state width="2517" height="464" key="GridCell.Tab.4.left" timestamp="1603128549929">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="437" key="GridCell.Tab.4.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602768462758" />
<state width="2517" height="464" key="GridCell.Tab.4.left/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549929" />
<state width="2517" height="464" key="GridCell.Tab.4.right" timestamp="1603128549929">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="2517" height="464" key="GridCell.Tab.4.right/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603128549929" />
<state x="872" y="432" key="Rider.ProjectTemplateDialog.Size" timestamp="1602854431119">
<screen x="0" y="0" width="2560" height="1400" />
</state>
@ -304,18 +338,18 @@
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="1078" y="410" key="RollbackChangesDialog/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602761804757" />
<state x="781" y="345" key="SettingsEditor" timestamp="1602593091446">
<state x="781" y="345" key="SettingsEditor" timestamp="1603119676785">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="781" y="345" key="SettingsEditor/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602593091446" />
<state x="781" y="345" key="SettingsEditor/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603119676785" />
<state width="498" height="446" key="SwitcherDM" timestamp="1602684835910">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state width="498" height="446" key="SwitcherDM/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602684835910" />
<state x="92" y="92" width="2376" height="1216" key="VCS.FileHistoryDialog" timestamp="1602762600043">
<state x="92" y="92" width="2376" height="1216" key="VCS.FileHistoryDialog" timestamp="1603105849632">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="92" y="92" width="2376" height="1216" key="VCS.FileHistoryDialog/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602762600043" />
<state x="92" y="92" width="2376" height="1216" key="VCS.FileHistoryDialog/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603105849632" />
<state x="872" y="433" key="Vcs.Push.Dialog.v2" timestamp="1602755745888">
<screen x="0" y="0" width="2560" height="1400" />
</state>
@ -324,18 +358,36 @@
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="898" y="0" width="1161" height="1387" key="dock-window-1/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602760039715" />
<state x="930" y="299" width="700" height="801" key="find.popup" timestamp="1602593714122">
<state x="930" y="299" width="730" height="801" key="find.popup" timestamp="1603107561928">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="930" y="299" width="700" height="801" key="find.popup/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602593714122" />
<state x="930" y="299" width="730" height="801" key="find.popup/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1603107561928" />
<state x="943" y="315" width="672" height="678" key="search.everywhere.popup" timestamp="1602850027763">
<screen x="0" y="0" width="2560" height="1400" />
</state>
<state x="943" y="315" width="672" height="678" key="search.everywhere.popup/0.0.2560.1400/2560.0.1920.1040@0.0.2560.1400" timestamp="1602850027763" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/EvoCalculator.Core.Calculation/Columns/SumColumn.cs</url>
<line>41</line>
<properties documentPath="C:\Users\Chika\Projects\EvoCalculator.Core\EvoCalculator.Core.Calculation\Columns\SumColumn.cs" initialLine="41">
<startOffsets>
<option value="1387" />
</startOffsets>
<endOffsets>
<option value="1417" />
</endOffsets>
</properties>
<option name="timeStamp" value="27" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
<pin-to-top-manager>
<pinned-members>
<PinnedItemInfo parentTag="Frame#EvoCalculator.Core.Tests.Calculation.Suite.Columns.TLM_GrTests.TLM_GrTest1" memberName="expected" />
<PinnedItemInfo parentTag="Frame#EvoCalculator.Core.Tests.Calculation.Suite.Columns.KaskoNmperGrTests.KaskoNmperGrTest2" memberName="preparedValues" />
</pinned-members>
</pin-to-top-manager>

View File

@ -0,0 +1,12 @@
namespace EvoCalculator.Core.Calculation.Columns
{
public abstract class BaseColumn<T>
{
public T[] Values { get; set; }
protected BaseColumn(int count)
{
Values = new T[count];
}
}
}

View File

@ -1,14 +1,19 @@
using System;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models;
namespace EvoCalculator.Core.Models.Calculation.Models
namespace EvoCalculator.Core.Calculation.Columns
{
public class BaseColumnWithXIRR : IColumnWithXIRR<double>
public class BaseColumnWithXIRR : BaseColumn<double>
{
public double[] Values { get; set; }
public double IRR { get; set; }
public DateTime[] Dates { get; set; }
private DateTime[] Dates { get; set; }
public BaseColumnWithXIRR(int count, DateTempColumn dateTempColumn) : base(count)
{
Dates = dateTempColumn.Values;
}
protected Flow[] Flows
{
@ -27,11 +32,5 @@ namespace EvoCalculator.Core.Models.Calculation.Models
return flows;
}
}
public void ComputeXIRR()
{
var XIRR = new XIRR(this.Flows);
IRR = XIRR.GetResult();
}
}
}

View File

@ -1,22 +1,15 @@
using System;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class DateColumn : IColumn<DateTime>
public class DateColumn : BaseColumn<DateTime>
{
public DateTime[] Values { get; set; }
public DateColumn(int count)
public DateColumn(int count) : base(count)
{
Values = new DateTime[count];
}
public void ComputeValues(PreparedValues preparedValues,
PreparedPayments preparedPayments,
Constants.Calculation constants,
params IColumn<DateTime>[] columns)
public void ComputeValues(PreparedValues preparedValues, Constants.Calculation constants)
{
Values[0] = preparedValues.DogDate;
Values[1] = Values[0];

View File

@ -1,23 +1,15 @@
using System;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class DateTempColumn : IColumn<DateTime>
public class DateTempColumn : BaseColumn<DateTime>
{
public DateTime[] Values { get; set; }
//TODO: extract 67
public DateTempColumn(int count = 67)
public DateTempColumn(int count) : base(count)
{
Values = new DateTime[count];
}
public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments,
Constants.Calculation constants,
params IColumn<DateTime>[] columns)
public void ComputeValues(PreparedValues preparedValues)
{
Values[0] = preparedValues.DogDate;
Values[1] = Values[0];

View File

@ -0,0 +1,24 @@
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class GPS_GrColumn : BaseColumnWithXIRR
{
public GPS_GrColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{
for (var i = 1; i < Values.Length; i++)
{
Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment;
}
var XNPV = new XNPV(base.Flows, preparedValues.IrrExpected);
Values[0] = -XNPV.GetResult();
}
}
}

View File

@ -1,21 +1,16 @@
using System;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.Columns
{
public class KaskoNmperGrColumn : IColumn<double>
public class KaskoNmperGrColumn : BaseColumnWithXIRR
{
public double[] Values { get; set; }
public KaskoNmperGrColumn(int count)
public KaskoNmperGrColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
Values = new double[count];
}
public void ComputeValues(PreparedValues preparedValues, IColumn<DateTime> dateTempColumn)
public void ComputeValues(PreparedValues preparedValues)
{
for (var i = 0; i < Values.Length; i++)
{
@ -38,18 +33,7 @@ namespace EvoCalculator.Core.Calculation.Columns
}
Flow[] flows = new Flow[Values.Length - 1];
for (var i = 1; i < Values.Length; i++)
{
flows[i - 1] = new Flow()
{
Date = dateTempColumn.Values[i].Date,
Value = Values[i]
};
}
var XNPV = new XNPV(flows, preparedValues.IrrExpected);
var XNPV = new XNPV(Flows, preparedValues.IrrExpected);
Values[0] = -XNPV.GetResult();
}
}

View File

@ -1,21 +1,14 @@
using System.Linq;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class PercentPaymentColumn : IColumn<double>
public class PercentPaymentColumn : BaseColumn<double>
{
public double[] Values { get; set; }
public PercentPaymentColumn(int count)
public PercentPaymentColumn(int count) : base(count)
{
Values = new double[count];
}
public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments,
Constants.Calculation constants,
params IColumn<double>[] columns)
public void ComputeValues(PreparedPayments preparedPayments)
{
Values[0] = 0;
Values[1] = 0;

View File

@ -1,35 +1,52 @@
using System;
using EvoCalculator.Core.Models.Calculation.Interfaces;
using EvoCalculator.Core.Models.Calculation.Models;
using System.Linq;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.Columns
{
public class SumColumn : BaseColumnWithXIRR
public class SumColumn : BaseColumnWithXIRR, IGoalSeekAlgorithm
{
public SumColumn(int count, DateTempColumn dateTempColumn)
{
base.Values = new double[count];
private readonly PreparedValues _preparedValues;
private readonly PercentPaymentColumn _percentPaymentColumn;
base.Dates = new DateTime[dateTempColumn.Values.Length];
for (var i = 0; i < dateTempColumn.Values.Length; i++)
{
base.Dates[i] = dateTempColumn.Values[i];
}
public SumColumn(int count, DateTempColumn dateTempColumn
, PreparedValues preparedValues
, PercentPaymentColumn percentPaymentColumn) : base(count, dateTempColumn)
{
this._preparedValues = preparedValues;
this._percentPaymentColumn = percentPaymentColumn;
}
public void ComputeValues(PreparedValues preparedValues, PercentPaymentColumn percentPaymentColumn)
public void ComputeValues()
{
Values[0] = -preparedValues.BaseCost;
Values[1] = preparedValues.FirstPaymentSum;
Values[2] = 98647.7277641429;
Values[0] = -this._preparedValues.BaseCost;
Values[1] = this._preparedValues.FirstPaymentSum;
for (var i = 3; i < Values.Length - 1; i++)
{
Values[i] = Values[2] * percentPaymentColumn.Values[i] / 100;
Values[i] = Values[2] * _percentPaymentColumn.Values[i] / 100;
}
Values[^1] = preparedValues.LastPaymentSum;
Values[^1] = _preparedValues.LastPaymentSum;
}
public decimal Calculate(decimal inputVariable)
{
Values[2] = Convert.ToDouble(inputVariable);
this.ComputeValues();
var XIRR = new XIRR(Flows);
IRR = XIRR.GetResult();
return Convert.ToDecimal(IRR);
}
public void ComputeValues(decimal requiredIRR)
{
var goalSeek = new GoalSeek(this);
goalSeek.SeekResult(requiredIRR,
new GoalSeekOptions(initialTineSpacing: 10000));
}
}
}

View File

@ -0,0 +1,26 @@
using System.Linq;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class SumWithVATColumn : BaseColumn<double>
{
public SumWithVATColumn(int count) : base(count)
{
}
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues)
{
Values[0] = 0;
Values[1] = preparedValues.FirstPaymentWithNdsAbs > 0
? preparedValues.FirstPaymentWithNdsAbs
: (1 + constants.VatValue) * sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
{
Values[i] = (1 + constants.VatValue) * sumColumn.Values[i];
}
Values[0] = Values.Sum();
}
}
}

View File

@ -0,0 +1,29 @@
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class TLM_GrColumn : BaseColumnWithXIRR
{
public TLM_GrColumn(int count, DateTempColumn dateTempColumn) : base(count, dateTempColumn)
{
}
public void ComputeValues(PreparedPayments preparedPayments, PreparedValues preparedValues)
{
for (var i = 0; i < Values.Length; i++)
{
Values[i] = 0;
}
for (var i = 1; i < Values.Length; i++)
{
Values[i] = preparedPayments.Rows[i - 1].TlmCostPayment;
}
var XNPV = new XNPV(base.Flows, preparedValues.IrrExpected);
Values[0] = -XNPV.GetResult();
}
}
}

View File

@ -0,0 +1,26 @@
using System.Linq;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Calculation.Columns
{
public class VATColumn : BaseColumn<double>
{
public VATColumn(int count) : base(count)
{
}
public void ComputeValues(Constants.Calculation constants, SumColumn sumColumn, PreparedValues preparedValues)
{
Values[0] = 0;
Values[1] = preparedValues.FirstPaymentNdsAbs > 0
? preparedValues.FirstPaymentNdsAbs
: constants.VatValue * sumColumn.Values[1];
for (var i = 2; i < Values.Length; i++)
{
Values[i] = constants.VatValue * sumColumn.Values[i];
}
Values[0] = Values.Sum();
}
}
}

View File

@ -0,0 +1,295 @@
// using System;
// using System.Linq;
// using Money = System.Decimal;
// using Rate = System.Double;
// using System.Collections.Generic;
//
// public
// struct Pair<T, Z>
// {
// public Pair(T first, Z second)
// {
// First = first;
// Second = second;
// }
//
// public readonly T First;
//
// public readonly Z Second;
// }
//
//
// public class CashFlow
// {
// public CashFlow(Money amount, DateTime date)
// {
// Amount = amount;
// Date = date;
// }
//
// public readonly Money Amount;
// public readonly DateTime Date;
// }
//
// public struct AlgorithmResult<TKindOfResult, TValue>
// {
// public AlgorithmResult(TKindOfResult kind, TValue value)
// {
// Kind = kind;
// Value = value;
// }
//
// public readonly TKindOfResult Kind;
// public readonly TValue Value;
// }
//
// public enum ApproximateResultKind
// {
// ApproximateSolution,
// ExactSolution,
// NoSolutionWithinTolerance
// }
//
// public static class Algorithms
// {
// internal static Money CalculateXNPV(IEnumerable<CashFlow> cfs, Rate r)
// {
// if (r <= -1)
// r = -0.99999999; // Very funky ... Better check what an IRR <= -100% means
//
// return (from cf in cfs
// let startDate = cfs.OrderBy(cf1 => cf1.Date).First().Date
// select cf.Amount / (decimal) Math.Pow(1 + r, (cf.Date - startDate).Days / 365.0)).Sum();
// }
//
// internal static Pair<Rate, Rate> FindBrackets(Func<IEnumerable<CashFlow>, Rate, Money> func,
// IEnumerable<CashFlow> cfs)
// {
// // Abracadabra magic numbers ...
// const int maxIter = 100;
// const Rate bracketStep = 0.5;
// const Rate guess = 0.1;
//
// Rate leftBracket = guess - bracketStep;
// Rate rightBracket = guess + bracketStep;
// var iter = 0;
//
// while (func(cfs, leftBracket) * func(cfs, rightBracket) > 0 && iter++ < maxIter)
// {
// leftBracket -= bracketStep;
// rightBracket += bracketStep;
// }
//
// if (iter >= maxIter)
// return new Pair<double, double>(0, 0);
//
// return new Pair<Rate, Rate>(leftBracket, rightBracket);
// }
//
// // From "Applied Numerical Analyis" by Gerald
// internal static AlgorithmResult<ApproximateResultKind, Rate> Bisection(Func<Rate, Money> func,
// Pair<Rate, Rate> brackets, Rate tol, int maxIters)
// {
// int iter = 1;
//
// Money f3 = 0;
// Rate x3 = 0;
// Rate x1 = brackets.First;
// Rate x2 = brackets.Second;
//
// do
// {
// var f1 = func(x1);
// var f2 = func(x2);
//
// if (f1 == 0 && f2 == 0)
// return new AlgorithmResult<ApproximateResultKind, Rate>(ApproximateResultKind.NoSolutionWithinTolerance,
// x1);
//
// if (f1 * f2 > 0)
// throw new ArgumentException("x1 x2 values don't bracket a root");
//
// x3 = (x1 + x2) / 2;
// f3 = func(x3);
//
// if (f3 * f1 < 0)
// x2 = x3;
// else
// x1 = x3;
//
// iter++;
// } while (Math.Abs(x1 - x2) / 2 > tol && f3 != 0 && iter < maxIters);
//
// if (f3 == 0)
// return new AlgorithmResult<ApproximateResultKind, Rate>(ApproximateResultKind.ExactSolution, x3);
//
// if (Math.Abs(x1 - x2) / 2 < tol)
// return new AlgorithmResult<ApproximateResultKind, Rate>(ApproximateResultKind.ApproximateSolution, x3);
//
// if (iter > maxIters)
// return new AlgorithmResult<ApproximateResultKind, Rate>(ApproximateResultKind.NoSolutionWithinTolerance,
// x3);
//
// throw new Exception("It should never get here");
// }
//
// public static AlgorithmResult<ApproximateResultKind, Rate> CalculateXIRR(IEnumerable<CashFlow> cfs, Rate tolerance,
// int maxIters)
// {
// var brackets = FindBrackets(CalculateXNPV, cfs);
//
// if (brackets.First == brackets.Second)
// return new AlgorithmResult<ApproximateResultKind, double>(ApproximateResultKind.NoSolutionWithinTolerance,
// brackets.First);
//
// return Bisection(r => CalculateXNPV(cfs, r), brackets, tolerance, maxIters);
// }
// }
//
// // TESTS
// using Microsoft.VisualStudio.TestTools.UnitTesting;
// using System.Collections.Generic;
// using System;
// using Rate = System.Double;
//
// namespace TimeLineTest
// {
// [TestClass()]
// public class AlgorithmsTest
// {
// IEnumerable<CashFlow> cfs = new CashFlow[]
// {
// new CashFlow(-10000, new DateTime(2008, 1, 1)),
// new CashFlow(2750, new DateTime(2008, 3, 1)),
// new CashFlow(4250, new DateTime(2008, 10, 30)),
// new CashFlow(3250, new DateTime(2009, 2, 15)),
// new CashFlow(2750, new DateTime(2009, 4, 1))
// };
//
// IEnumerable<CashFlow> bigcfs = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(10, new DateTime(2002, 1, 2)),
// new CashFlow(20, new DateTime(2003, 1, 3))
// };
//
// IEnumerable<CashFlow> negcfs = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(-1, new DateTime(2002, 1, 2)),
// new CashFlow(1, new DateTime(2003, 1, 3))
// };
//
// IEnumerable<CashFlow> samedaysamecfs = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(10, new DateTime(2000, 1, 1)),
// };
//
// IEnumerable<CashFlow> samedaydifferentcfs = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(100, new DateTime(2000, 1, 1)),
// };
//
// IEnumerable<CashFlow> bigratecfs = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(20, new DateTime(2000, 5, 30)),
// };
//
// IEnumerable<CashFlow> zeroRate = new CashFlow[]
// {
// new CashFlow(-10, new DateTime(2000, 1, 1)),
// new CashFlow(10, new DateTime(2003, 1, 1)),
// };
//
// IEnumerable<CashFlow> doubleNegative = new CashFlow[]
// {
// new CashFlow(-10000, new DateTime(2008, 1, 1)),
// new CashFlow(2750, new DateTime(2008, 3, 1)),
// new CashFlow(-4250, new DateTime(2008, 10, 30)),
// new CashFlow(3250, new DateTime(2009, 2, 15)),
// new CashFlow(2750, new DateTime(2009, 4, 1))
// };
//
// IEnumerable<CashFlow> badDoubleNegative = new CashFlow[]
// {
// new CashFlow(-10000, new DateTime(2008, 1, 1)),
// new CashFlow(2750, new DateTime(2008, 3, 1)),
// new CashFlow(-4250, new DateTime(2008, 10, 30)),
// new CashFlow(3250, new DateTime(2009, 2, 15)),
// new CashFlow(-2750, new DateTime(2009, 4, 1))
// };
//
// double r = 0.09;
// double tolerance = 0.0001;
// int maxIters = 100;
//
// private TestContext testContextInstance;
//
// public TestContext TestContext
// {
// get { return testContextInstance; }
// set { testContextInstance = value; }
// }
//
// [TestMethod()]
// public void CalculateXNPV()
// {
// Assert.AreEqual(2086.6476020315416570634272814M, Algorithms.CalculateXNPV(cfs, r));
// Assert.AreEqual(-10.148147600710372651326920258M, Algorithms.CalculateXNPV(negcfs, 0.5));
// Assert.AreEqual(4.9923725815954514810351876895M, Algorithms.CalculateXNPV(bigcfs, 0.3));
// }
//
// [TestMethod]
// public void FindBrackets()
// {
// var brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, cfs);
// Assert.IsTrue(brackets.First < 0.3733 && brackets.Second > 0.3733);
//
// brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, bigcfs);
// Assert.IsTrue(brackets.First < 0.5196 && brackets.Second > 0.5196);
//
// brackets = Algorithms.FindBrackets(Algorithms.CalculateXNPV, negcfs);
// Assert.IsTrue(brackets.First < -0.6059 && brackets.Second > -0.6059);
// }
//
// [TestMethod]
// public void XIRRTest()
// {
// var irr = Algorithms.CalculateXIRR(cfs, tolerance, maxIters);
// Assert.AreEqual(0.3733, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(bigcfs, tolerance, maxIters);
// Assert.AreEqual(0.5196, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(negcfs, tolerance, maxIters);
// Assert.AreEqual(-0.6059, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(samedaysamecfs, tolerance, maxIters);
// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(samedaydifferentcfs, tolerance, maxIters);
// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(bigratecfs, tolerance, maxIters);
// Assert.AreEqual(4.40140, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(zeroRate, tolerance, maxIters);
// Assert.AreEqual(0, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(doubleNegative, tolerance, maxIters);
// Assert.AreEqual(-0.537055, irr.Value, 0.001);
// Assert.AreEqual(ApproximateResultKind.ApproximateSolution, irr.Kind);
//
// irr = Algorithms.CalculateXIRR(badDoubleNegative, tolerance, maxIters);
// Assert.AreEqual(ApproximateResultKind.NoSolutionWithinTolerance, irr.Kind);
// }
// }
// }

View File

@ -9,4 +9,8 @@
<ProjectReference Include="..\EvoCalculator.Core.Models\EvoCalculator.Core.Models.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="TridentGoalSeek" Version="1.0.5" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,23 @@
using TridentGoalSeek;
namespace EvoCalculator.Core.FinanceFormulas
{
public class GoalXIRR : IGoalSeekAlgorithm
{
private readonly int x;
public GoalXIRR(int x)
{
this.x = x;
}
public decimal Calculate(decimal inputVariable)
{
// Value[2]+=10;
// ComputeValues
// XIRR
// return XIRR
return inputVariable * this.x;
}
}
}

View File

@ -1,12 +0,0 @@
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
namespace EvoCalculator.Core.Models.Calculation.Interfaces
{
public interface IColumn<T>
{
public T[] Values { get; set; }
// public void ComputeValues(PreparedValues preparedValues, PreparedPayments preparedPayments,
// Constants.Calculation constants,
// params IColumn<object>[] columns);
}
}

View File

@ -1,12 +0,0 @@
using System;
using EvoCalculator.Core.Models.Calculation.Models;
namespace EvoCalculator.Core.Models.Calculation.Interfaces
{
public interface IColumnWithXIRR<T> : IColumn<T>
{
public double IRR { get; set; }
public DateTime[] Dates { get; set; }
public void ComputeXIRR();
}
}

View File

@ -4,15 +4,12 @@ using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
using Xunit.Abstractions;
namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class DateColumnTests
{
private readonly ITestOutputHelper output;
public DateColumnTests(ITestOutputHelper output)
{
this.output = output;
}
@ -29,9 +26,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, null, new Constants.Calculation(), null);
dateColumn.ComputeValues(preparedValues, new Constants.Calculation());
var expected = new DateTime[]
var expected = new[]
{
new DateTime(2018, 10, 28),
new DateTime(2018, 10, 28),
@ -83,9 +80,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, null, new Constants.Calculation(), null);
dateColumn.ComputeValues(preparedValues, new Constants.Calculation());
var expected = new DateTime[]
var expected = new[]
{
new DateTime(2018, 10, 28),
new DateTime(2018, 10, 28),
@ -137,9 +134,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, null, new Constants.Calculation(), null);
dateColumn.ComputeValues(preparedValues, new Constants.Calculation());
var expected = new DateTime[]
var expected = new[]
{
new DateTime(2018, 10, 28),
new DateTime(2018, 10, 28),
@ -191,9 +188,9 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateColumn = new DateColumn(preparedValues.Nmper + 1);
dateColumn.ComputeValues(preparedValues, null, new Constants.Calculation(), null);
dateColumn.ComputeValues(preparedValues, new Constants.Calculation());
var expected = new DateTime[]
var expected = new[]
{
new DateTime(2018, 10, 31),
new DateTime(2018, 10, 31),

View File

@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class DateTempTests
{
@ -17,12 +17,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
PaymentDateNew = null,
};
var dateTempColumn = new DateTempColumn();
dateTempColumn.ComputeValues(
preparedValues
, null
, new Constants.Calculation()
, null);
var dateTempColumn = new DateTempColumn(67);
dateTempColumn.ComputeValues(preparedValues);
var expected = new DateTime[]
{
@ -109,12 +105,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
PaymentDateNew = new DateTime(2018, 12, 11),
};
var dateTempColumn = new DateTempColumn();
dateTempColumn.ComputeValues(
preparedValues
, null
, new Constants.Calculation()
, null);
var dateTempColumn = new DateTempColumn(67);
dateTempColumn.ComputeValues(preparedValues);
var expected = new DateTime[]
{

View File

@ -0,0 +1,263 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class GPS_GrTests
{
[Fact]
public void GPS_GrTest1()
{
var preparedValues =
new PreparedValues()
{
IrrExpected = 0.22,
};
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),
new DateTime(2025, 10, 12),
new DateTime(2025, 11, 12),
new DateTime(2025, 12, 12),
new DateTime(2026, 1, 12),
new DateTime(2026, 2, 12),
new DateTime(2026, 3, 12),
}
};
var preparedPayments = new PreparedPayments()
{
Rows = new[]
{
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
new PaymentRow
{
TlmCostPayment = 800.00,
},
}
};
var gpsGrColumn = new GPS_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn);
gpsGrColumn.ComputeValues(preparedPayments, preparedValues);
var expected = new[]
{
-19068.29452640964,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
800.00,
};
var res = gpsGrColumn.Values;
Assert.Equal(expected, res);
}
}
}

View File

@ -3,7 +3,7 @@ using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class KaskoNmperGrTests
{
@ -20,7 +20,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateTempColumn = new DateTempColumn()
var dateTempColumn = new DateTempColumn(67)
{
Values = new[]
{
@ -95,8 +95,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, dateTempColumn);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn);
kaskoNmperGrColumn.ComputeValues(preparedValues);
var expected = new[]
@ -151,7 +151,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateTempColumn = new DateTempColumn()
var dateTempColumn = new DateTempColumn(67)
{
Values = new[]
{
@ -226,8 +226,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, dateTempColumn);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn);
kaskoNmperGrColumn.ComputeValues(preparedValues);
var expected = new[]
@ -268,7 +268,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var dateTempColumn = new DateTempColumn()
var dateTempColumn = new DateTempColumn(67)
{
Values = new[]
{
@ -343,8 +343,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1);
kaskoNmperGrColumn.ComputeValues(preparedValues, dateTempColumn);
var kaskoNmperGrColumn = new KaskoNmperGrColumn(preparedValues.Nmper + 1, dateTempColumn);
kaskoNmperGrColumn.ComputeValues(preparedValues);
var expected = new[]

View File

@ -1,9 +1,8 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class PercentPaymentTests
{
@ -114,11 +113,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(
null
, preparedPayments
, new Constants.Calculation()
, null);
percentPaymentColumn.ComputeValues(preparedPayments);
var expected = new double[]
{
@ -308,11 +303,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
};
var percentPaymentColumn = new PercentPaymentColumn(preparedPayments.Rows.Length + 1);
percentPaymentColumn.ComputeValues(
null
, preparedPayments
, new Constants.Calculation()
, null);
percentPaymentColumn.ComputeValues(preparedPayments);
var expected = new double[]
{

View File

@ -3,9 +3,9 @@ using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class SumColumnTest
public class SumColumnTests
{
[Fact]
public void SumColumnTest1()
@ -16,7 +16,8 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
BaseCost = 2842960.70661055,
FirstPaymentSum = 636000,
Nmper = 30,
LastPaymentSum = 25440
LastPaymentSum = 25440,
IrrExpected = 0.22
};
@ -58,7 +59,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
}
};
var dateTempColumn = new DateTempColumn()
var dateTempColumn = new DateTempColumn(67)
{
Values = new[]
{
@ -132,9 +133,6 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
}
};
var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn);
sumColumn.ComputeValues(preparedValues, percentPaymentColumn);
var expected = new[]
{
@ -171,12 +169,14 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite.Columns
25440,
};
var sumColumn = new SumColumn(
preparedValues.Nmper + 1
, dateTempColumn
, preparedValues
, percentPaymentColumn);
sumColumn.ComputeValues(Convert.ToDecimal(preparedValues.IrrExpected));
var values = sumColumn.Values;
Assert.Equal(expected, values);
sumColumn.ComputeXIRR();
Assert.InRange(sumColumn.IRR, 0.220325, 0.220327);
}
}
}

View File

@ -0,0 +1,101 @@
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class SumWithVatTests
{
[Fact]
public void SumWithVatTest1()
{
var preparedValues = new PreparedValues
{
FirstPaymentWithNdsAbs = 50000,
Nmper = 30,
};
var dateTempColumn = new DateTempColumn(67);
var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null)
{
Values = new[]
{
-2542903.66268442,
625000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
25000.00
}
};
var sumWithVatColumn = new SumWithVATColumn(preparedValues.Nmper + 1);
sumWithVatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var expected = new[]
{
4112000.00,
50000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
144000.00,
30000.00,
};
var res = sumWithVatColumn.Values;
Assert.Equal(expected, res);
}
}
}

View File

@ -0,0 +1,263 @@
using System;
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class TLM_GrTests
{
[Fact]
public void TLM_GrTest1()
{
var preparedValues =
new PreparedValues()
{
IrrExpected = 0.22,
};
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),
new DateTime(2025, 10, 12),
new DateTime(2025, 11, 12),
new DateTime(2025, 12, 12),
new DateTime(2026, 1, 12),
new DateTime(2026, 2, 12),
new DateTime(2026, 3, 12),
}
};
var preparedPayments = new PreparedPayments()
{
Rows = new[]
{
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
new PaymentRow
{
TlmCostPayment = 1000.00,
},
}
};
var tlmGrColumn = new TLM_GrColumn(preparedPayments.Rows.Length + 1, dateTempColumn);
tlmGrColumn.ComputeValues(preparedPayments, preparedValues);
var expected = new[]
{
-23835.36815801206,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
1000.00,
};
var res = tlmGrColumn.Values;
Assert.Equal(expected, res);
}
}
}

View File

@ -0,0 +1,102 @@
using EvoCalculator.Core.Calculation.Columns;
using EvoCalculator.Core.Models.Calculation.Models.Prepared;
using Xunit;
namespace EvoCalculator.Core.Tests.Calculation.Columns
{
public class VATColumnTests
{
[Fact]
public void VATColumnTest1()
{
var preparedValues = new PreparedValues
{
FirstPaymentNdsAbs = 0,
Nmper = 30,
};
var dateTempColumn = new DateTempColumn(67);
var sumColumn = new SumColumn(preparedValues.Nmper + 1, dateTempColumn, null, null)
{
Values = new[]
{
-2542903.66268442,
625000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
120000.00,
25000.00
}
};
var vatColumn = new VATColumn(preparedValues.Nmper + 1);
vatColumn.ComputeValues(new Constants.Calculation(), sumColumn, preparedValues);
var expected = new[]
{
802000,
125000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
24000.00,
5000.00,
};
var res = vatColumn.Values;
Assert.Equal(expected, res);
}
}
}

View File

@ -2,6 +2,7 @@
using System.Linq;
using EvoCalculator.Core.FinanceFormulas;
using EvoCalculator.Core.Models.Calculation.Models;
using TridentGoalSeek;
using Xunit;
using Xunit.Abstractions;