/**
* 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.charge.service;
import java.util.Collection;
import org.mifosplatform.portfolio.charge.data.ChargeData;
import org.mifosplatform.portfolio.charge.domain.ChargeTimeType;
public interface ChargeReadPlatformService {
Collection<ChargeData> retrieveAllCharges();
Collection<ChargeData> retrieveAllChargesForCurrency(String currencyCode);
ChargeData retrieveCharge(Long chargeId);
ChargeData retrieveNewChargeDetails();
/**
* Returns all charges that can be applied to Cients
*
* @return
*/
Collection<ChargeData> retrieveAllChargesApplicableToClients();
/**
* Returns all Fees (excluding penalties) applicable for loans
*
* @return
*/
Collection<ChargeData> retrieveLoanApplicableFees();
/**
* Returns all charges applicable for a given loan account
*
* @param excludeChargeTimes
* Excludes Given List of Charge Types from the response
* @return
*/
Collection<ChargeData> retrieveLoanAccountApplicableCharges(final Long loanId, ChargeTimeType[] excludeChargeTimes);
/**
* Returns all charges applicable for a given loan product (filter based on
* Currency of Selected Loan Product)
*
* @param excludeChargeTimes
* Excludes Given List of Charge Types from the response
* @return
*/
Collection<ChargeData> retrieveLoanProductApplicableCharges(final Long loanProductId, ChargeTimeType[] excludeChargeTimes);
/**
* Returns all Penalties applicable for loans
*
* @return
*/
Collection<ChargeData> retrieveLoanApplicablePenalties();
/**
* Returns all Charges associated with a given Loan Product
*
* @param loanProductId
* @return
*/
Collection<ChargeData> retrieveLoanProductCharges(Long loanProductId);
/**
* Returns all charges applicable for a given loan product
*
* @param loanProductId
* @param chargeTime
* Filters based on the type of the charge to be returned
* @return
*/
Collection<ChargeData> retrieveLoanProductCharges(Long loanProductId, ChargeTimeType chargeTime);
/**
* Returns all charges applicable for savings
*
* @param feeChargesOnly
* @return
*/
Collection<ChargeData> retrieveSavingsProductApplicableCharges(boolean feeChargesOnly);
/**
* Returns all penalties applicable for savings
*
* @return
*/
Collection<ChargeData> retrieveSavingsApplicablePenalties();
/**
* Returns all charges applicable for a given savings product
*
* @param savingsProductId
* @return
*/
Collection<ChargeData> retrieveSavingsProductCharges(Long savingsProductId);
/** Retrieve savings account charges **/
Collection<ChargeData> retrieveSavingsAccountApplicableCharges(Long savingsId);
}