show breakdown of monetary amount applied to portions for each transacton.

This commit is contained in:
Keith Woodlock
2012-11-06 14:10:24 +00:00
parent d8da3e49b6
commit 81f7b614b4
3 changed files with 52 additions and 19 deletions
@@ -21,18 +21,34 @@ public class LoanTransactionData {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private BigDecimal amount; private BigDecimal amount;
@SuppressWarnings("unused")
private final BigDecimal principalPortion;
@SuppressWarnings("unused")
private final BigDecimal interestPortion;
@SuppressWarnings("unused")
private final BigDecimal feeChargesPortion;
@SuppressWarnings("unused")
private final BigDecimal penaltyChargesPortion;
public LoanTransactionData( public LoanTransactionData(
final Long id, final Long id,
final EnumOptionData transactionType, final EnumOptionData transactionType,
final CurrencyData currency, final CurrencyData currency,
final LocalDate date, final LocalDate date,
final BigDecimal amount) { final BigDecimal amount,
final BigDecimal principalPortion,
final BigDecimal interestPortion,
final BigDecimal feeChargesPortion,
final BigDecimal penaltyChargesPortion) {
this.id = id; this.id = id;
this.type = transactionType; this.type = transactionType;
this.currency = currency; this.currency = currency;
this.date = date; this.date = date;
this.amount = amount; this.amount = amount;
this.principalPortion = principalPortion;
this.interestPortion = interestPortion;
this.feeChargesPortion = feeChargesPortion;
this.penaltyChargesPortion = penaltyChargesPortion;
} }
public LocalDate dateOf() { public LocalDate dateOf() {
@@ -16,9 +16,13 @@ import javax.persistence.Temporal;
import javax.persistence.TemporalType; import javax.persistence.TemporalType;
import org.joda.time.LocalDate; import org.joda.time.LocalDate;
import org.mifosng.platform.api.data.CurrencyData;
import org.mifosng.platform.api.data.EnumOptionData;
import org.mifosng.platform.api.data.LoanTransactionData;
import org.mifosng.platform.currency.domain.MonetaryCurrency; import org.mifosng.platform.currency.domain.MonetaryCurrency;
import org.mifosng.platform.currency.domain.Money; import org.mifosng.platform.currency.domain.Money;
import org.mifosng.platform.infrastructure.AbstractAuditableCustom; import org.mifosng.platform.infrastructure.AbstractAuditableCustom;
import org.mifosng.platform.loanproduct.service.LoanEnumerations;
import org.mifosng.platform.user.domain.AppUser; import org.mifosng.platform.user.domain.AppUser;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@@ -243,4 +247,10 @@ public class LoanTransaction extends AbstractAuditableCustom<AppUser, Long> {
} }
return result; return result;
} }
public LoanTransactionData toData(final CurrencyData currencyData) {
final EnumOptionData transactionType = LoanEnumerations.transactionType(this.typeOf);
return new LoanTransactionData(this.getId(), transactionType, currencyData, getTransactionDate(),
this.amount, this.principalPortion, this.interestPortion, this.feeChargesPortion, this.penaltyChargesPortion);
}
} }
@@ -301,7 +301,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
final Money possibleNextRepaymentAmount = loan.possibleNextRepaymentAmount(); final Money possibleNextRepaymentAmount = loan.possibleNextRepaymentAmount();
final EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.REPAYMENT); final EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.REPAYMENT);
return new LoanTransactionData(null, transactionType, currencyData, earliestUnpaidInstallmentDate, possibleNextRepaymentAmount.getAmount()); return new LoanTransactionData(null, transactionType, currencyData, earliestUnpaidInstallmentDate, possibleNextRepaymentAmount.getAmount(), null, null, null, null);
} }
@Override @Override
@@ -329,7 +329,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
final EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.WAIVE_INTEREST); final EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.WAIVE_INTEREST);
return new LoanTransactionData(null, transactionType, currencyData, waiveOfInterest.getTransactionDate(), waiveOfInterest.getAmount()); return new LoanTransactionData(null, transactionType, currencyData, waiveOfInterest.getTransactionDate(), waiveOfInterest.getAmount(), null, null, null, null);
} }
@Override @Override
@@ -339,7 +339,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.WRITEOFF); EnumOptionData transactionType = LoanEnumerations.transactionType(LoanTransactionType.WRITEOFF);
return new LoanTransactionData(null, transactionType, null, new LocalDate(), null); return new LoanTransactionData(null, transactionType, null, new LocalDate(), null, null, null, null, null);
} }
@Override @Override
@@ -372,8 +372,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
currency.getName(), currency.getDecimalPlaces(), currency.getName(), currency.getDecimalPlaces(),
currency.getDisplaySymbol(), currency.getNameCode()); currency.getDisplaySymbol(), currency.getNameCode());
final EnumOptionData transactionType = LoanEnumerations.transactionType(transaction.getTypeOf()); return transaction.toData(currencyData);
return new LoanTransactionData(transactionId, transactionType, currencyData, transaction.getTransactionDate(), transaction.getAmount());
} }
private static final class LoanMapper implements private static final class LoanMapper implements
@@ -611,6 +610,10 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
public String LoanPaymentsSchema() { public String LoanPaymentsSchema() {
return " tr.id as id, tr.transaction_type_enum as transactionType, tr.transaction_date as `date`, tr.amount as total, " return " tr.id as id, tr.transaction_type_enum as transactionType, tr.transaction_date as `date`, tr.amount as total, "
+ "tr.principal_portion_derived as principal, "
+ "tr.interest_portion_derived as interest, "
+ "tr.fee_charges_portion_derived as fees, "
+ "tr.penalty_charges_portion_derived as penalties, "
+ " l.currency_code as currencyCode, l.currency_digits as currencyDigits, rc.`name` as currencyName, " + " l.currency_code as currencyCode, l.currency_digits as currencyDigits, rc.`name` as currencyName, "
+ " rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode " + " rc.display_symbol as currencyDisplaySymbol, rc.internationalized_name_code as currencyNameCode "
+ " from m_loan l " + " from m_loan l "
@@ -622,22 +625,26 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
public LoanTransactionData mapRow(final ResultSet rs, public LoanTransactionData mapRow(final ResultSet rs,
@SuppressWarnings("unused") final int rowNum) throws SQLException { @SuppressWarnings("unused") final int rowNum) throws SQLException {
String currencyCode = rs.getString("currencyCode"); final String currencyCode = rs.getString("currencyCode");
String currencyName = rs.getString("currencyName"); final String currencyName = rs.getString("currencyName");
String currencyNameCode = rs.getString("currencyNameCode"); final String currencyNameCode = rs.getString("currencyNameCode");
String currencyDisplaySymbol = rs.getString("currencyDisplaySymbol"); final String currencyDisplaySymbol = rs.getString("currencyDisplaySymbol");
Integer currencyDigits = JdbcSupport.getInteger(rs, "currencyDigits"); final Integer currencyDigits = JdbcSupport.getInteger(rs, "currencyDigits");
CurrencyData currencyData = new CurrencyData(currencyCode, final CurrencyData currencyData = new CurrencyData(currencyCode,
currencyName, currencyDigits, currencyDisplaySymbol, currencyName, currencyDigits, currencyDisplaySymbol,
currencyNameCode); currencyNameCode);
Long id = rs.getLong("id"); final Long id = rs.getLong("id");
int transactionTypeInt = JdbcSupport.getInteger(rs, "transactionType"); final int transactionTypeInt = JdbcSupport.getInteger(rs, "transactionType");
EnumOptionData transactionType = LoanEnumerations.transactionType(transactionTypeInt); final EnumOptionData transactionType = LoanEnumerations.transactionType(transactionTypeInt);
LocalDate date = JdbcSupport.getLocalDate(rs, "date"); final LocalDate date = JdbcSupport.getLocalDate(rs, "date");
BigDecimal totalAmount = rs.getBigDecimal("total"); final BigDecimal totalAmount = JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "total");
final BigDecimal principalPortion = JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "principal");
return new LoanTransactionData(id, transactionType, currencyData, date, totalAmount); final BigDecimal interestPortion = JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "interest");
final BigDecimal feeChargesPortion = JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "fees");
final BigDecimal penaltyChargesPortion = JdbcSupport.getBigDecimalDefaultToZeroIfNull(rs, "penalties");
return new LoanTransactionData(id, transactionType, currencyData, date, totalAmount, principalPortion, interestPortion, feeChargesPortion, penaltyChargesPortion);
} }
} }
} }