diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java index 19a19489c..fb341a6b2 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/Loan.java @@ -243,7 +243,7 @@ public class Loan extends AbstractPersistable { @Embedded private LoanSummary summary; - @OneToOne(mappedBy = "loan", cascade = CascadeType.ALL) + @OneToOne(mappedBy = "loan", cascade = CascadeType.ALL, optional = true, orphanRemoval = true) private LoanSummaryArrearsAging summaryArrearsAging; @Transient @@ -319,11 +319,9 @@ public class Loan extends AbstractPersistable { if (loanCharges != null && !loanCharges.isEmpty()) { this.charges = associateChargesWithThisLoan(loanCharges); this.summary = updateSummaryWithTotalFeeChargesDueAtDisbursement(deriveSumTotalOfChargesDueAtDisbursement()); - this.summaryArrearsAging = new LoanSummaryArrearsAging(this); } else { this.charges = null; this.summary = new LoanSummary(); - this.summaryArrearsAging = new LoanSummaryArrearsAging(this); } if (collateral != null && !collateral.isEmpty()) { this.collateral = associateWithThisLoan(collateral); @@ -674,11 +672,17 @@ public class Loan extends AbstractPersistable { if (isNotDisbursed()) { this.summary.zeroFields(); - this.summaryArrearsAging.zeroFields(); + this.summaryArrearsAging = null; } else { final Money principal = this.loanRepaymentScheduleDetail.getPrincipal(); this.summary.updateSummary(loanCurrency(), principal, this.repaymentScheduleInstallments, this.loanSummaryWrapper); + if (this.summaryArrearsAging == null) { + this.summaryArrearsAging = new LoanSummaryArrearsAging(this); + } this.summaryArrearsAging.updateSummary(loanCurrency(), this.repaymentScheduleInstallments, this.loanSummaryWrapper); + if (this.summaryArrearsAging.isNotInArrears(loanCurrency())) { + this.summaryArrearsAging = null; + } } } diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanSummaryArrearsAging.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanSummaryArrearsAging.java index 447d2964f..3497049d5 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanSummaryArrearsAging.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/domain/LoanSummaryArrearsAging.java @@ -55,7 +55,6 @@ public final class LoanSummaryArrearsAging implements Persistable { @Column(name = "penalty_charges_overdue_derived", scale = 6, precision = 19) private BigDecimal totalPenaltyChargesOverdue; - @SuppressWarnings("unused") @Column(name = "total_overdue_derived", scale = 6, precision = 19) private BigDecimal totalOverdue; @@ -64,6 +63,7 @@ public final class LoanSummaryArrearsAging implements Persistable { @Column(name = "overdue_since_date_derived") private Date overdueSinceDate; + @SuppressWarnings("unused") @OneToOne @PrimaryKeyJoinColumn private Loan loan; @@ -120,4 +120,8 @@ public final class LoanSummaryArrearsAging implements Persistable { this.overdueSinceDate = null; } } + + public boolean isNotInArrears(final MonetaryCurrency currency) { + return Money.of(currency, this.totalOverdue).isZero(); + } } \ No newline at end of file diff --git a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java index 0146eec03..5eb13dfa0 100644 --- a/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java +++ b/mifosng-provider/src/main/java/org/mifosplatform/portfolio/loanaccount/service/LoanReadPlatformServiceImpl.java @@ -313,11 +313,11 @@ public class LoanReadPlatformServiceImpl implements LoanReadPlatformService { + " la.total_overdue_derived as totalOverdue," + " la.overdue_since_date_derived as overdueSinceDate" + " from m_loan l" // - + " left join m_client c on c.id = l.client_id" // - + " left join m_group g on g.id = l.group_id" // + " join m_product_loan lp on lp.id = l.product_id" // + " join m_currency rc on rc.`code` = l.currency_code" // - + " join m_loan_arrears_aging la on la.loan_id = l.id" // + + " left join m_client c on c.id = l.client_id" // + + " left join m_group g on g.id = l.group_id" // + + " left join m_loan_arrears_aging la on la.loan_id = l.id" // + " left join m_fund f on f.id = l.fund_id" // + " left join m_staff s on s.id = l.loan_officer_id" // + " left join m_appuser sbu on sbu.id = l.submittedon_userid"