[ 
https://issues.apache.org/jira/browse/FINERACT-167?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15322189#comment-15322189
 ] 

ASF GitHub Bot commented on FINERACT-167:
-----------------------------------------

Github user nazeer1100126 commented on a diff in the pull request:

    https://github.com/apache/incubator-fineract/pull/130#discussion_r66404831
  
    --- Diff: 
fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
 ---
    @@ -5972,4 +5986,204 @@ public BigDecimal 
getDerivedAmountForCharge(LoanCharge loanCharge) {
             return amount;
         }
     
    +    public LoanRepaymentScheduleInstallment 
fetchLoanForeclosureDetail(final LocalDate closureDate) {
    +        Money totalPrincipal = Money.of(getCurrency(), 
this.getSummary().getTotalPrincipalOutstanding());
    +        Money[] receivables = 
retriveIncomeOutstandingTillDate(closureDate);
    +        final List<LoanInterestRecalcualtionAdditionalDetails> 
compoundingDetails = null;
    +        return new LoanRepaymentScheduleInstallment(null, 0, 
LocalDate.now(), LocalDate.now(), totalPrincipal.getAmount(),
    +                receivables[0].getAmount(), receivables[1].getAmount(), 
receivables[2].getAmount(), false, compoundingDetails);
    +    }
    +
    +    public Money[] retriveIncomeOutstandingTillDate(final LocalDate 
paymentDate) {
    +        Money[] balances = new Money[3];
    +        final MonetaryCurrency currency = getCurrency();
    +        Money interest = Money.zero(currency);
    +        Money fee = Money.zero(currency);
    +        Money penalty = Money.zero(currency);
    +        boolean isArrearsPresent = false;
    +        for (final LoanRepaymentScheduleInstallment installment : 
this.repaymentScheduleInstallments) {
    +            if (installment.isNotFullyPaidOff()) {
    +                if (!isArrearsPresent || 
!installment.getDueDate().isAfter(paymentDate)) {
    +                    interest = 
interest.plus(installment.getInterestOutstanding(currency));
    +                    fee = 
fee.plus(installment.getFeeChargesOutstanding(currency));
    +                    penalty = 
penalty.plus(installment.getPenaltyChargesOutstanding(currency));
    +                    isArrearsPresent = true;
    +                } else if 
(installment.getFromDate().isBefore(paymentDate)) {
    +                    int totalPeriodDays = 
Days.daysBetween(installment.getFromDate(), installment.getDueDate()).getDays();
    +                    int tillDays = 
Days.daysBetween(installment.getFromDate(), paymentDate).getDays();
    +                    interest = 
interest.plus(calculateInterestForDays(totalPeriodDays, 
installment.getInterestOutstanding(currency)
    +                            .getAmount(), tillDays));
    +                    for (LoanCharge loanCharge : this.charges) {
    +                        if (loanCharge.isActive()
    +                                && 
loanCharge.isDueForCollectionFromAndUpToAndIncluding(installment.getFromDate(), 
paymentDate)) {
    +                            if (loanCharge.isPenaltyCharge()) {
    +                                penalty = 
penalty.plus(loanCharge.getAmountOutstanding(currency));
    +                            } else {
    +                                fee = 
fee.plus(loanCharge.getAmountOutstanding(currency));
    +                            }
    +                        }
    +                    }
    +                }
    +            }
    +        }
    +        balances[0] = interest;
    +        balances[1] = fee;
    +        balances[2] = penalty;
    +        return balances;
    +    }
    +
    +    private double calculateInterestForDays(int daysInPeriod, BigDecimal 
interest, int days) {
    +        if (interest.doubleValue() == 0) { return 0; }
    +        return ((interest.doubleValue()) / daysInPeriod) * days;
    +    }
    +
    +    public boolean canForecloseLoan() {
    --- End diff --
    
    This method is not required as already validation is done


> Implementation of loan foreclosure functionality
> ------------------------------------------------
>
>                 Key: FINERACT-167
>                 URL: https://issues.apache.org/jira/browse/FINERACT-167
>             Project: Apache Fineract
>          Issue Type: New Feature
>          Components: Loan
>            Reporter: Vishwanath R
>            Assignee: Markus Geiss
>
> On foreclosure of the active loan application, the following things should 
> happen,
> 1) Repay total loan outstanding principal amount.
> 2) Repay total Interest amount (accrued and due) till Foreclosure date.
> 3) Repay total Fee, Charges or Penalties due, if any till Foreclosure date.
> 4) Accounting entries will be made as per product configuration for interest 
> and loan portfolio payments.
> 5) Future installment Interest, Fee, Charge, or Penalty, if any, is waived 
> off (there won’t be any accounting entries for these transactions).



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to