Package org.mifosplatform.portfolio.savings.domain.interest

Source Code of org.mifosplatform.portfolio.savings.domain.interest.CompoundInterestHelper

/**
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package org.mifosplatform.portfolio.savings.domain.interest;

import java.math.BigDecimal;
import java.util.List;

import org.joda.time.LocalDate;
import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
import org.mifosplatform.organisation.monetary.domain.Money;

public class CompoundInterestHelper {

    /**
     * @param currency
     * @param allPeriods
     * @param lockUntil
     *            - account locked date used with the combination of
     *            immediateWithdrawalOfInterest to avoid exclusion of
     *            interestEarned
     * @param interestTransferEnabled
     *            - boolean flag used to avoid addition of interest to next
     *            posting period as income while calculating interest
     * @return
     */
    public Money calculateInterestForAllPostingPeriods(final MonetaryCurrency currency, final List<PostingPeriod> allPeriods,
            LocalDate lockUntil, Boolean interestTransferEnabled) {

        // sum up the 'rounded' values that are posted each posting period
        Money interestEarned = Money.zero(currency);

        // total interest earned in previous periods but not yet recognised
        BigDecimal interestEarnedButNotPosted = BigDecimal.ZERO;
        for (final PostingPeriod postingPeriod : allPeriods) {

            final BigDecimal interestEarnedThisPeriod = postingPeriod.calculateInterest(interestEarnedButNotPosted);

            final Money moneyToBePostedForPeriod = Money.of(currency, interestEarnedThisPeriod);

            interestEarned = interestEarned.plus(moneyToBePostedForPeriod);
            // these checks are for fixed deposit account for not include
            // interest for accounts which has post interest to linked savings
            // account and if already transfered then it includes in interest
            // calculation.
            if (postingPeriod.isInterestTransfered() || !interestTransferEnabled
                    || (lockUntil != null && !postingPeriod.dateOfPostingTransaction().isAfter(lockUntil))) {
                interestEarnedButNotPosted = interestEarnedButNotPosted.add(moneyToBePostedForPeriod.getAmount());
            }
        }

        return interestEarned;
    }
}
TOP

Related Classes of org.mifosplatform.portfolio.savings.domain.interest.CompoundInterestHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.