475 tranche waive charge
This commit is contained in:
+11
-1
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+2
-1
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
-2
@@ -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;
|
||||||
|
|||||||
+2
-1
@@ -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) {
|
||||||
|
|||||||
+2
-1
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-9
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user