475 tranche waive charge

This commit is contained in:
nazeer shaik
2017-07-05 16:21:44 +05:30
parent ee150b1a44
commit 77b0625a5d
6 changed files with 28 additions and 15 deletions
@@ -35,15 +35,17 @@ public class DisbursementData implements Comparable<DisbursementData> {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private final String loanChargeId; private final String loanChargeId;
private final BigDecimal chargeAmount; private final BigDecimal chargeAmount;
private final BigDecimal waivedChargeAmount;
public DisbursementData(Long id, final LocalDate expectedDisbursementDate, final LocalDate actualDisbursementDate, public DisbursementData(Long id, final LocalDate expectedDisbursementDate, final LocalDate actualDisbursementDate,
final BigDecimal principalDisbursed, final String loanChargeId, BigDecimal chargeAmount) { final BigDecimal principalDisbursed, final String loanChargeId, BigDecimal chargeAmount, BigDecimal waivedChargeAmount) {
this.id = id; this.id = id;
this.expectedDisbursementDate = expectedDisbursementDate; this.expectedDisbursementDate = expectedDisbursementDate;
this.actualDisbursementDate = actualDisbursementDate; this.actualDisbursementDate = actualDisbursementDate;
this.principal = principalDisbursed; this.principal = principalDisbursed;
this.loanChargeId = loanChargeId; this.loanChargeId = loanChargeId;
this.chargeAmount = chargeAmount; this.chargeAmount = chargeAmount;
this.waivedChargeAmount = waivedChargeAmount;
} }
public LocalDate disbursementDate() { public LocalDate disbursementDate() {
@@ -83,4 +85,12 @@ public class DisbursementData implements Comparable<DisbursementData> {
return target != null && target.isAfter(fromNotInclusive) && !target.isAfter(upToAndInclusive); return target != null && target.isAfter(fromNotInclusive) && !target.isAfter(upToAndInclusive);
} }
public BigDecimal getWaivedChargeAmount() {
if(this.waivedChargeAmount == null){
return BigDecimal.ZERO;
}
return this.waivedChargeAmount;
}
} }
@@ -75,6 +75,7 @@ public class RepaymentScheduleRelatedLoanData {
} }
public DisbursementData disbursementData() { public DisbursementData disbursementData() {
return new DisbursementData(null, this.expectedDisbursementDate, this.actualDisbursementDate, this.principal, null, null); BigDecimal waivedChargeAmount = null;
return new DisbursementData(null, this.expectedDisbursementDate, this.actualDisbursementDate, this.principal, null, null, waivedChargeAmount);
} }
} }
@@ -5576,9 +5576,9 @@ public class Loan extends AbstractPersistableCustom<Long> {
if (loanDisbursementDetails.actualDisbursementDate() != null) { if (loanDisbursementDetails.actualDisbursementDate() != null) {
actualDisbursementDate = new LocalDate(loanDisbursementDetails.actualDisbursementDate()); actualDisbursementDate = new LocalDate(loanDisbursementDetails.actualDisbursementDate());
} }
BigDecimal waivedChargeAmount = null;
disbursementData.add(new DisbursementData(loanDisbursementDetails.getId(), expectedDisbursementDate, actualDisbursementDate, disbursementData.add(new DisbursementData(loanDisbursementDetails.getId(), expectedDisbursementDate, actualDisbursementDate,
loanDisbursementDetails.principal(), null, null)); loanDisbursementDetails.principal(), null, null, waivedChargeAmount));
} }
return disbursementData; return disbursementData;
@@ -119,7 +119,8 @@ public class LoanDisbursementDetails extends AbstractPersistableCustom<Long> {
if (this.actualDisbursementDate != null) { if (this.actualDisbursementDate != null) {
actualDisburseDate = new LocalDate(this.actualDisbursementDate); actualDisburseDate = new LocalDate(this.actualDisbursementDate);
} }
return new DisbursementData(getId(), expectedDisburseDate, actualDisburseDate, this.principal, null, null); BigDecimal waivedChargeAmount = null;
return new DisbursementData(getId(), expectedDisburseDate, actualDisburseDate, this.principal, null, null, waivedChargeAmount);
} }
public void updateActualDisbursementDate(Date actualDisbursementDate) { public void updateActualDisbursementDate(Date actualDisbursementDate) {
@@ -515,7 +515,8 @@ public class LoanScheduleAssembler {
&& StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) { && StringUtils.isNotBlank((jsonObject.get(LoanApiConstants.disbursementPrincipalParameterName).getAsString()))) {
principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal(); principal = jsonObject.getAsJsonPrimitive(LoanApiConstants.disbursementPrincipalParameterName).getAsBigDecimal();
} }
disbursementDatas.add(new DisbursementData(null, expectedDisbursementDate, null, principal, null, null)); BigDecimal waivedChargeAmount = null;
disbursementDatas.add(new DisbursementData(null, expectedDisbursementDate, null, principal, null, null, waivedChargeAmount));
i++; i++;
} while (i < disbursementDataArray.size()); } while (i < disbursementDataArray.size());
} }
@@ -62,7 +62,6 @@ import org.apache.fineract.portfolio.calendar.data.CalendarData;
import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType; import org.apache.fineract.portfolio.calendar.domain.CalendarEntityType;
import org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformService; import org.apache.fineract.portfolio.calendar.service.CalendarReadPlatformService;
import org.apache.fineract.portfolio.charge.data.ChargeData; import org.apache.fineract.portfolio.charge.data.ChargeData;
import org.apache.fineract.portfolio.charge.domain.ChargeCalculationType;
import org.apache.fineract.portfolio.charge.domain.ChargeTimeType; import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
import org.apache.fineract.portfolio.charge.service.ChargeReadPlatformService; import org.apache.fineract.portfolio.charge.service.ChargeReadPlatformService;
import org.apache.fineract.portfolio.client.data.ClientData; import org.apache.fineract.portfolio.client.data.ClientData;
@@ -93,8 +92,6 @@ import org.apache.fineract.portfolio.loanaccount.data.PaidInAdvanceData;
import org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData; import org.apache.fineract.portfolio.loanaccount.data.RepaymentScheduleRelatedLoanData;
import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO; import org.apache.fineract.portfolio.loanaccount.data.ScheduleGeneratorDTO;
import org.apache.fineract.portfolio.loanaccount.domain.Loan; import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
import org.apache.fineract.portfolio.loanaccount.domain.LoanInstallmentCharge;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleInstallment;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleTransactionProcessorFactory; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleTransactionProcessorFactory;
import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper; import org.apache.fineract.portfolio.loanaccount.domain.LoanRepositoryWrapper;
@@ -1056,7 +1053,10 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
@Override @Override
public LoanScheduleData extractData(final ResultSet rs) throws SQLException, DataAccessException { public LoanScheduleData extractData(final ResultSet rs) throws SQLException, DataAccessException {
BigDecimal waivedChargeAmount = BigDecimal.ZERO;
for (DisbursementData disbursementDetail : disbursementData) {
waivedChargeAmount = waivedChargeAmount.add(disbursementDetail.getWaivedChargeAmount());
}
final LoanSchedulePeriodData disbursementPeriod = LoanSchedulePeriodData.disbursementOnlyPeriod( final LoanSchedulePeriodData disbursementPeriod = LoanSchedulePeriodData.disbursementOnlyPeriod(
this.disbursement.disbursementDate(), this.disbursement.amount(), this.totalFeeChargesDueAtDisbursement, this.disbursement.disbursementDate(), this.disbursement.amount(), this.totalFeeChargesDueAtDisbursement,
this.disbursement.isDisbursed()); this.disbursement.isDisbursed());
@@ -1095,9 +1095,9 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
Money totalOutstanding = Money.zero(monCurrency); Money totalOutstanding = Money.zero(monCurrency);
// update totals with details of fees charged during disbursement // update totals with details of fees charged during disbursement
totalFeeChargesCharged = totalFeeChargesCharged.plus(disbursementPeriod.feeChargesDue()); totalFeeChargesCharged = totalFeeChargesCharged.plus(disbursementPeriod.feeChargesDue().subtract(waivedChargeAmount));
totalRepaymentExpected = totalRepaymentExpected.plus(disbursementPeriod.feeChargesDue()); totalRepaymentExpected = totalRepaymentExpected.plus(disbursementPeriod.feeChargesDue()).minus(waivedChargeAmount);
totalRepayment = totalRepayment.plus(disbursementPeriod.feeChargesPaid()); totalRepayment = totalRepayment.plus(disbursementPeriod.feeChargesPaid()).minus(waivedChargeAmount);
totalOutstanding = totalOutstanding.plus(disbursementPeriod.feeChargesDue()).minus(disbursementPeriod.feeChargesPaid()); totalOutstanding = totalOutstanding.plus(disbursementPeriod.feeChargesDue()).minus(disbursementPeriod.feeChargesPaid());
Integer loanTermInDays = Integer.valueOf(0); Integer loanTermInDays = Integer.valueOf(0);
@@ -1121,7 +1121,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
disbursementChargeAmount, data.isDisbursed()); disbursementChargeAmount, data.isDisbursed());
} else { } else {
periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(), periodData = LoanSchedulePeriodData.disbursementOnlyPeriod(data.disbursementDate(), data.amount(),
disbursementChargeAmount.add(data.getChargeAmount()), data.isDisbursed()); disbursementChargeAmount.add(data.getChargeAmount()).subtract(waivedChargeAmount), data.isDisbursed());
} }
if (periodData != null) { if (periodData != null) {
periods.add(periodData); periods.add(periodData);
@@ -1543,7 +1543,7 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService {
final BigDecimal waivedAmount = rs.getBigDecimal("waivedAmount"); final BigDecimal waivedAmount = rs.getBigDecimal("waivedAmount");
if (chargeAmount != null && waivedAmount != null) chargeAmount = chargeAmount.subtract(waivedAmount); if (chargeAmount != null && waivedAmount != null) chargeAmount = chargeAmount.subtract(waivedAmount);
final DisbursementData disbursementData = new DisbursementData(id, expectedDisbursementdate, actualDisbursementdate, principal, final DisbursementData disbursementData = new DisbursementData(id, expectedDisbursementdate, actualDisbursementdate, principal,
loanChargeId, chargeAmount); loanChargeId, chargeAmount, waivedAmount);
return disbursementData; return disbursementData;
} }