diff --git a/pom.xml b/pom.xml
index a062ede..8a27a91 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.3.3
+ 3.3.4
tk.artikus.angular
diff --git a/src/main/java/tk/artikus/assets/AssetDepreciationAlgorithm.java b/src/main/java/tk/artikus/assets/AssetDepreciationAlgorithm.java
index 156d077..37ec4d1 100644
--- a/src/main/java/tk/artikus/assets/AssetDepreciationAlgorithm.java
+++ b/src/main/java/tk/artikus/assets/AssetDepreciationAlgorithm.java
@@ -39,7 +39,7 @@ public class AssetDepreciationAlgorithm {
final boolean isEveryMonthRecalculate;
long valueToBeDepreciated = 0;
- long annualDepreciation = 0;
+ long annualDepreciationFor12Month = 0; // annual depreciation for 12 month
if( depreciationMethod.beDigressive() ) {
valueToBeDepreciated = assetLifeDepreciatied.getValueToBeDepreciatedOn( start.prev() );
long _annualDepreciation = depreciationMethod.calculateAnnualDepreciation( valueToBeDepreciated );
@@ -47,7 +47,7 @@ public class AssetDepreciationAlgorithm {
valueToBeDepreciated - consolidatedDepreciation, AssetDepreciationMethod.Factor.INCLUDE );
if( annualDepreciationWithFactor > _annualDepreciation ) {
isEveryMonthRecalculate = false;
- annualDepreciation = annualDepreciationWithFactor;
+ annualDepreciationFor12Month = annualDepreciationWithFactor;
} else {
isEveryMonthRecalculate = true;
}
@@ -56,7 +56,15 @@ public class AssetDepreciationAlgorithm {
isEveryMonthRecalculate = true;
}
- long monthlyDepreciation = annualDepreciation / 12;
+ int months = annualPeriod.months();
+ final long annualDepreciationForThisPeriod;
+ if( 0 == months ) {
+ annualDepreciationForThisPeriod = 0;
+ }else {
+ annualDepreciationForThisPeriod = annualDepreciationFor12Month * months / 12;
+ }
+
+ long monthlyDepreciation = annualDepreciationFor12Month / 12;
long allocatedAnnualDepreciation = 0;
long sumAnnualValueToBeDepreciated = 0;
@@ -67,9 +75,9 @@ public class AssetDepreciationAlgorithm {
if( isEveryMonthRecalculate ) {
valueToBeDepreciated = assetLifeDepreciatied.getValueToBeDepreciatedOn( ym );
- annualDepreciation = depreciationMethod.calculateAnnualDepreciation( valueToBeDepreciated );
+ annualDepreciationFor12Month = depreciationMethod.calculateAnnualDepreciation( valueToBeDepreciated );
sumAnnualValueToBeDepreciated += valueToBeDepreciated;
- monthlyDepreciation = annualDepreciation / 12;
+ monthlyDepreciation = annualDepreciationFor12Month / 12;
}
AssetPlanPosition positionOfPlanItem = assetPlan.getPosition( ym, true );
@@ -84,7 +92,7 @@ public class AssetDepreciationAlgorithm {
sumAnnualDepreciation /= 12;
calculatedDepreciation = sumAnnualDepreciation - allocatedAnnualDepreciation;
} else {
- calculatedDepreciation = annualDepreciation - allocatedAnnualDepreciation;
+ calculatedDepreciation = annualDepreciationForThisPeriod - allocatedAnnualDepreciation;
}
}
diff --git a/src/main/java/tk/artikus/assets/services/AssetService.java b/src/main/java/tk/artikus/assets/services/AssetService.java
index 3e115fc..036a967 100644
--- a/src/main/java/tk/artikus/assets/services/AssetService.java
+++ b/src/main/java/tk/artikus/assets/services/AssetService.java
@@ -2,6 +2,7 @@ package tk.artikus.assets.services;
import java.util.Collection;
+import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 7f4cf9a..0b6026d 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,2 +1,2 @@
spring.application.name=angular-services
-server.port=8800
\ No newline at end of file
+server.port=8801
\ No newline at end of file
diff --git a/src/test/java/tk/artikus/assets/TestDigresiveAlgorithm.java b/src/test/java/tk/artikus/assets/TestDigresiveAlgorithm.java
new file mode 100644
index 0000000..8fbbc5c
--- /dev/null
+++ b/src/test/java/tk/artikus/assets/TestDigresiveAlgorithm.java
@@ -0,0 +1,62 @@
+package tk.artikus.assets;
+
+import junit.framework.TestCase;
+import tk.artikus.assets.adapters.AssetAdapterForTest;
+import tk.artikus.assets.tools.YearMonth;
+
+public class TestDigresiveAlgorithm extends TestCase{
+
+
+ public void _test_1_years_depreciation( ){
+
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder( )
+ .fromYear( 1 ).digressive( ).rate( 50 ).factor( 2, 0 )
+ .assetValueToEndOfLife( 12 )
+ .build( );
+
+ assetInTest.calculate( );
+
+ assetInTest.checkExpectedValues( Values.builder( )
+ .addHowManyWhat( 12, 1 ).build( ) );
+
+
+ }
+
+ public void test_12_month_depreciationB( ){
+
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder( )
+ .fromYear( 1 ).digressive( ).rate( 50 ).factor( 2, 0 )
+ .fromYearMonthAssetChangeValue( 1, 10, 12 )
+ .build( );
+
+ assetInTest.setStartDepreciation( YearMonth.builder().year( 1 ).month( 11 ).build() );
+
+
+ assetInTest.calculate( );
+
+ assetInTest.checkExpectedValues( Values.builder( )
+ .addHowManyWhat( 12, 1 ).build( ) );
+
+
+ }
+
+
+ public void _test_12_month_depreciationA( ){
+
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder( )
+ .fromYear( 1 ).digressive( ).rate( 50 ).factor( 2, 0 )
+ .fromYearMonthAssetChangeValue( 1, 11, 12 )
+ .build( );
+
+ assetInTest.setStartDepreciation( YearMonth.builder().year( 1 ).month( 12 ).build() );
+
+
+ assetInTest.calculate( );
+
+ assetInTest.checkExpectedValues( Values.builder( )
+ .addHowManyWhat( 12, 1 ).build( ) );
+
+
+ }
+
+}
diff --git a/src/test/java/tk/artikus/assets/TestEasyCaseAlgorithm.java b/src/test/java/tk/artikus/assets/TestEasyCaseAlgorithm.java
index e50e894..281de47 100644
--- a/src/test/java/tk/artikus/assets/TestEasyCaseAlgorithm.java
+++ b/src/test/java/tk/artikus/assets/TestEasyCaseAlgorithm.java
@@ -1,13 +1,14 @@
package tk.artikus.assets;
import junit.framework.TestCase;
+import tk.artikus.assets.adapters.AssetAdapterForTest;
public class TestEasyCaseAlgorithm extends TestCase{
public void test_2_month_depreciation() {
- AssetInTest assetInTest = AssetInTest.builder().fromYear(1).linear().rate(600).assetValueToEndOfLife(120)
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYear(1).linear().rate(600).assetValueToEndOfLife(120)
.build();
assetInTest.calculate();
@@ -18,7 +19,7 @@ public class TestEasyCaseAlgorithm extends TestCase{
public void test_12_months_depreciation( ){
- AssetInTest assetInTest = AssetInTest.builder( )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder( )
.fromYear( 1 ).linear( ).rate( 100 )
.assetValueToEndOfLife( 120 )
.build( );
@@ -32,7 +33,7 @@ public class TestEasyCaseAlgorithm extends TestCase{
public void test_2_years_depreciation( ){
- AssetInTest assetInTest = AssetInTest.builder( )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder( )
.fromYear( 1 ).linear( ).rate( 50 )
.assetValueToEndOfLife( 24 )
.build( );
diff --git a/src/test/java/tk/artikus/assets/TestMoreComplicatedCaseAlgorithm.java b/src/test/java/tk/artikus/assets/TestMoreComplicatedCaseAlgorithm.java
index d4e9fc9..abb7662 100644
--- a/src/test/java/tk/artikus/assets/TestMoreComplicatedCaseAlgorithm.java
+++ b/src/test/java/tk/artikus/assets/TestMoreComplicatedCaseAlgorithm.java
@@ -2,6 +2,7 @@ package tk.artikus.assets;
import org.junit.Test;
+import tk.artikus.assets.adapters.AssetAdapterForTest;
import tk.artikus.assets.tools.YearMonth;
public class TestMoreComplicatedCaseAlgorithm {
@@ -9,7 +10,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_12_month_depreciation( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYear( 1 ).linear().rate( 100 ).assetValueToEndOfLife( 13 )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYear( 1 ).linear().rate( 100 ).assetValueToEndOfLife( 13 )
.build();
assetInTest.calculate();
@@ -21,7 +22,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_2_month_depreciation( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYear( 1 ).digressive().rate( 40 ).factor( 2, 0 )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYear( 1 ).digressive().rate( 40 ).factor( 2, 0 )
.assetValueToEndOfLife( 1200 ).build();
assetInTest.calculate();
@@ -33,7 +34,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_12_months_depreciation( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYear( 1 ).linear().rate( 100 ).assetValueToEndOfLife( 1200 )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYear( 1 ).linear().rate( 100 ).assetValueToEndOfLife( 1200 )
.build();
assetInTest.calculate();
@@ -45,7 +46,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_12_months_depreciationInMiddle( ) {
- AssetInTest assetInTest = AssetInTest.builder()
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder()
.startDepreciation( YearMonth.builder().year( 1 ).month( 11 ).build() ).fromYear( 1 ).linear()
.rate( 100 ).assetValueToEndOfLife( 1200 ).build();
@@ -58,7 +59,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_13_months_depreciation( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYear( 1 ).linear().rate( 600 ).assetValueToEndOfLife( 1201 )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYear( 1 ).linear().rate( 600 ).assetValueToEndOfLife( 1201 )
.build();
assetInTest.calculate();
@@ -70,7 +71,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_12_12inMiddle_epreciation100( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYearMonthAssetChangeValue( 0, 12, 1200 )
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYearMonthAssetChangeValue( 0, 12, 1200 )
.fromYearMonthAssetChangeValue( 1, 3, 1200 ).build();
assetInTest.fromYearDepreciationMethod( 1, AssetDepreciationMethod.builder().linear().rate( 100, 0 ).build() );
@@ -85,8 +86,8 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_12_12inMiddle_epreciation50( ) {
- AssetInTest assetInTest =
- AssetInTest.builder()
+ AssetAdapterForTest assetInTest =
+ AssetAdapterForTest.builder()
.fromYearMonthAssetChangeValue( 0, 12, 1200 )
.fromYearMonthAssetChangeValue( 1, 3, 1200 ).build();
@@ -102,7 +103,7 @@ public class TestMoreComplicatedCaseAlgorithm {
@Test
public void test_is_included_all_changes( ) {
- AssetInTest assetInTest = AssetInTest.builder().fromYearMonthAssetChangeValue( 1, 1, 1000 ).build();
+ AssetAdapterForTest assetInTest = AssetAdapterForTest.builder().fromYearMonthAssetChangeValue( 1, 1, 1000 ).build();
assetInTest.fromYearDepreciationMethod( 1, AssetDepreciationMethod.builder().linear().rate( 600, 0 ).build() );
diff --git a/src/test/java/tk/artikus/assets/AssetInTest.java b/src/test/java/tk/artikus/assets/adapters/AssetAdapterForTest.java
similarity index 81%
rename from src/test/java/tk/artikus/assets/AssetInTest.java
rename to src/test/java/tk/artikus/assets/adapters/AssetAdapterForTest.java
index 1921bd9..7c0998f 100644
--- a/src/test/java/tk/artikus/assets/AssetInTest.java
+++ b/src/test/java/tk/artikus/assets/adapters/AssetAdapterForTest.java
@@ -1,15 +1,23 @@
-package tk.artikus.assets;
+package tk.artikus.assets.adapters;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Collection;
-import lombok.ToString;
+import tk.artikus.assets.Asset;
+import tk.artikus.assets.AssetDepreciationAlgorithm;
+import tk.artikus.assets.AssetDepreciationMethod;
+import tk.artikus.assets.AssetLife;
+import tk.artikus.assets.AssetLifeChange;
+import tk.artikus.assets.AssetLifeDepreciatied;
+import tk.artikus.assets.AssetPlan;
+import tk.artikus.assets.AssetPlanPosition;
+import tk.artikus.assets.Values;
import tk.artikus.assets.tools.YearMonth;
-@ToString
-public class AssetInTest {
+
+public class AssetAdapterForTest {
static private final YearMonth FIRST_YEAR = YearMonth.builder().year( 1 ).month( 1 ).build();
@@ -21,10 +29,14 @@ public class AssetInTest {
private final AssetPlan assetPlan = new AssetPlan();
- public AssetInTest(Asset asset, AssetLifeDepreciatied assetLife) {
+ public AssetAdapterForTest(Asset asset, AssetLifeDepreciatied assetLife) {
this.assetLifeDepreciatied = assetLife;
this.asset = asset;
}
+
+ public void setStartDepreciation( YearMonth start ){
+ this.asset.setStartOfDepreciation( start );
+ }
public void fromYearDepreciationMethod( int year, AssetDepreciationMethod adm ) {
asset.setFromYearDepreciationMethod( year, adm );
@@ -66,11 +78,11 @@ public class AssetInTest {
return new Builder();
}
- void calculate( ) {
+ public void calculate( ) {
new AssetDepreciationAlgorithm( asset, assetLifeDepreciatied, assetPlan ).calculate();
}
- static final class Builder {
+ public static final class Builder {
private Asset asset = new Asset( );
{
@@ -119,9 +131,9 @@ public class AssetInTest {
return this;
}
- public AssetInTest build( ) {
+ public AssetAdapterForTest build( ) {
addNewMethod();
- return new AssetInTest( asset, assetLife );
+ return new AssetAdapterForTest( asset, assetLife );
}
public Builder factor( long factor, long factorInHundredths ) {
@@ -143,7 +155,7 @@ public class AssetInTest {
}
public Builder assetValueToEndOfLife( long value ) {
- AssetLifeChange assetChange = AssetLifeChange.builder().when( AssetInTest.FIRST_YEAR.prev() )
+ AssetLifeChange assetChange = AssetLifeChange.builder().when( AssetAdapterForTest.FIRST_YEAR.prev() )
.initial( value ).build();
assetLife.registerChange( assetChange );