Merge pull request #946 from lingalamadhukar/MIFOSX-1267

MIFOSX-1317 Premature Interest Calculation Fix
This commit is contained in:
Vishwas Babu A J
2014-06-13 10:50:38 -07:00
5 changed files with 32 additions and 8 deletions
@@ -661,11 +661,13 @@ public class FixedDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -706,6 +708,7 @@ public class FixedDepositTest {
double interestPerDay = interestRateInFraction * perDay;
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime()));
Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -761,11 +764,13 @@ public class FixedDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -810,6 +815,7 @@ public class FixedDepositTest {
double interestPerDay = interestRateInFraction * perDay;
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime()));
Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -865,11 +871,13 @@ public class FixedDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -903,6 +911,7 @@ public class FixedDepositTest {
Calendar activationDate = Calendar.getInstance();
activationDate.add(Calendar.MONTH, -1);
activationDate.add(Calendar.DAY_OF_MONTH, -1);
DateTime startDate = new DateTime(activationDate.getTime());
Calendar prematureClosureDate = Calendar.getInstance();
@@ -918,6 +927,7 @@ public class FixedDepositTest {
double interestPerDay = interestRateInFraction * perDay;
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime()));
Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -972,11 +982,13 @@ public class FixedDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
Integer clientId = ClientHelper.createClient(this.requestSpec, this.responseSpec);
@@ -1014,6 +1026,7 @@ public class FixedDepositTest {
Calendar activationDate = Calendar.getInstance();
activationDate.add(Calendar.MONTH, -1);
activationDate.add(Calendar.DAY_OF_MONTH, -1);
DateTime startDate = new DateTime(activationDate.getTime());
Calendar prematureClosureDate = Calendar.getInstance();
@@ -1029,6 +1042,7 @@ public class FixedDepositTest {
double interestPerDay = interestRateInFraction * perDay;
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(todaysDate.getTime()));
Integer daysInMonth = todaysDate.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -975,7 +975,6 @@ public class RecurringDepositTest {
DEPOSIT_AMOUNT, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(transactionIdForDeposit);
currentDate = currentDate - 1;
interestPerMonth = (float) (interestPerDay * principal * currentDate);
System.out.println("IPM = " + interestPerMonth);
principal += interestPerMonth;
@@ -1102,7 +1101,6 @@ public class RecurringDepositTest {
DEPOSIT_AMOUNT, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(transactionIdForDeposit);
currentDate = currentDate - 1;
interestPerMonth = (float) (interestPerDay * principal * currentDate);
System.out.println("IPM = " + interestPerMonth);
principal += interestPerMonth;
@@ -1150,12 +1148,14 @@ public class RecurringDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
final Account assetAccount = this.accountHelper.createAssetAccount();
@@ -1196,6 +1196,7 @@ public class RecurringDepositTest {
Calendar activationDate = Calendar.getInstance();
activationDate.add(Calendar.MONTH, -1);
activationDate.add(Calendar.DAY_OF_MONTH, -1);
DateTime start = new DateTime(activationDate.getTime());
Calendar prematureClosureDate = Calendar.getInstance();
@@ -1219,6 +1220,7 @@ public class RecurringDepositTest {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(calendar.getTime()));
Integer daysInMonth = calendar.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -1232,7 +1234,6 @@ public class RecurringDepositTest {
DEPOSIT_AMOUNT, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(transactionIdForDeposit);
currentDate = currentDate - 1;
interestPerMonth = (float) (interestPerDay * principal * currentDate);
System.out.println("IPM = " + interestPerMonth);
principal += interestPerMonth;
@@ -1280,12 +1281,14 @@ public class RecurringDepositTest {
todaysDate = Calendar.getInstance();
todaysDate.add(Calendar.MONTH, -1);
todaysDate.add(Calendar.DAY_OF_MONTH, -1);
final String SUBMITTED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String APPROVED_ON_DATE = dateFormat.format(todaysDate.getTime());
final String ACTIVATION_DATE = dateFormat.format(todaysDate.getTime());
String EXPECTED_FIRST_DEPOSIT_ON_DATE = dateFormat.format(todaysDate.getTime());
final String MONTH_DAY = monthDayFormat.format(todaysDate.getTime());
todaysDate.add(Calendar.MONTH, 1);
todaysDate.add(Calendar.DAY_OF_MONTH, 1);
final String CLOSED_ON_DATE = dateFormat.format(todaysDate.getTime());
final Account assetAccount = this.accountHelper.createAssetAccount();
@@ -1331,6 +1334,7 @@ public class RecurringDepositTest {
Calendar activationDate = Calendar.getInstance();
activationDate.add(Calendar.MONTH, -1);
activationDate.add(Calendar.DAY_OF_MONTH, -1);
DateTime start = new DateTime(activationDate.getTime());
Calendar prematureClosureDate = Calendar.getInstance();
@@ -1354,6 +1358,7 @@ public class RecurringDepositTest {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, -1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
Integer currentDate = new Integer(currentDateFormat.format(calendar.getTime()));
Integer daysInMonth = calendar.getActualMaximum(Calendar.DATE);
daysInMonth = (daysInMonth - currentDate) + 1;
@@ -1367,7 +1372,6 @@ public class RecurringDepositTest {
DEPOSIT_AMOUNT, EXPECTED_FIRST_DEPOSIT_ON_DATE);
Assert.assertNotNull(newTransactionIdForDeposit);
currentDate = currentDate - 1;
interestPerMonth = (float) (interestPerDay * principal * currentDate);
System.out.println("IPM = " + interestPerMonth);
principal += interestPerMonth;
@@ -499,7 +499,9 @@ public class FixedDepositAccount extends SavingsAccount {
public void postPreMaturityInterest(final LocalDate accountCloseDate, final boolean isPreMatureClosure) {
Money interestPostedToDate = totalInterestPosted();
final Money interestOnMaturity = calculatePreMatureInterest(accountCloseDate, retreiveOrderedNonInterestPostingTransactions(), isPreMatureClosure);
// calculate interest before one day of closure date
final LocalDate interestCalculatedToDate = accountCloseDate.minusDays(1);
final Money interestOnMaturity = calculatePreMatureInterest(interestCalculatedToDate, retreiveOrderedNonInterestPostingTransactions(), isPreMatureClosure);
boolean recalucateDailyBalance = false;
// post remaining interest
@@ -600,7 +600,9 @@ public class RecurringDepositAccount extends SavingsAccount {
public void postPreMaturityInterest(final LocalDate accountCloseDate, final boolean isPreMatureClosure) {
final Money interestPostedToDate = totalInterestPosted();
final Money interestOnMaturity = calculatePreMatureInterest(accountCloseDate, retreiveOrderedNonInterestPostingTransactions(), isPreMatureClosure);
// calculate interest before one day of closure date
final LocalDate interestCalculatedToDate = accountCloseDate.minusDays(1);
final Money interestOnMaturity = calculatePreMatureInterest(interestCalculatedToDate, retreiveOrderedNonInterestPostingTransactions(), isPreMatureClosure);
boolean recalucateDailyBalance = false;
@@ -71,17 +71,19 @@ public class DepositAccountPreMatureCalculationPlatformServiceImpl implements De
account.clientId(), DepositAccountType.SAVINGS_DEPOSIT);
final JsonElement element = this.fromJsonHelper.parse(query.json());
final LocalDate preMaturityDate = this.fromJsonHelper.extractLocalDateNamed(closedOnDateParamName, element);
// calculate interest before one day of closure date
final LocalDate interestCalculatedToDate = preMaturityDate.minusDays(1);
final boolean isPreMatureClosure = true;
if (depositAccountType.isFixedDeposit()) {
final FixedDepositAccount fd = (FixedDepositAccount) account;
accountData = FixedDepositAccountData.preClosureDetails(account.getId(),
fd.calculatePreMatureAmount(preMaturityDate, isPreMatureClosure), onAccountClosureOptions, paymentTypeOptions,
fd.calculatePreMatureAmount(interestCalculatedToDate, isPreMatureClosure), onAccountClosureOptions, paymentTypeOptions,
savingsAccountDatas);
} else if (depositAccountType.isRecurringDeposit()) {
final RecurringDepositAccount rd = (RecurringDepositAccount) account;
accountData = RecurringDepositAccountData.preClosureDetails(account.getId(),
rd.calculatePreMatureAmount(preMaturityDate, isPreMatureClosure), onAccountClosureOptions, paymentTypeOptions,
rd.calculatePreMatureAmount(interestCalculatedToDate, isPreMatureClosure), onAccountClosureOptions, paymentTypeOptions,
savingsAccountDatas);
}