/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.coa.service;
import java.util.List;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.businessobject.Organization;
/**
* This interface defines methods that an Org Service must provide.
*/
public interface OrganizationService {
/**
* This method retrieves an organization instance by its composite primary keys (parameters passed in).
*
* @param chartOfAccountsCode
* @param organizationCode
* @return An Org instance.
*/
public Organization getByPrimaryId(String chartOfAccountsCode, String organizationCode);
/**
* Method is used by KualiOrgReviewAttribute to enable caching of orgs for routing.
*
* @see org.kuali.kfs.coa.service.OrganizationService#getByPrimaryId(java.lang.String, java.lang.String)
*/
public Organization getByPrimaryIdWithCaching(String chartOfAccountsCode, String organizationCode);
/**
* Retrieves a List of Accounts that are active, and are tied to this Org. If there are no Accounts that meet this criteria, an
* empty list will be returned.
*
* @param chartOfAccountsCode - chartCode for the Org you want Accounts for
* @param organizationCode - orgCode for the Org you want Accounts for
* @return A List of Accounts that are active, and tied to this Org
*/
public List<Account> getActiveAccountsByOrg(String chartOfAccountsCode, String organizationCode);
/**
* Retrieves a List of Orgs that are active, and that ReportTo this Org If there are no Orgs that meet this criteria, an empty
* list will be returned.
*
* @param chartOfAccountsCode - chartCode for the Org you want Child Orgs for
* @param organizationCode - orgCode for the Org you want Child Orgs for
* @return A List of Orgs that are active, and report to this Org
*/
public List<Organization> getActiveChildOrgs(String chartOfAccountsCode, String organizationCode);
/**
* Returns a list of active organizations with the given organization type code.
*
* @param organizationTypeCode
* @return
*/
public List<Organization> getActiveOrgsByType(String organizationTypeCode);
/**
* Returns a list of active financial processing organizations.
*
* @return A List of Orgs that are active and financial processing.
*/
public List<Organization> getActiveFinancialOrgs();
/**
* returns the chart and organization of the ACTIVE root-level organization
*/
public String[] getRootOrganizationCode();
/**
* This method traverses the hierarchy to see if the organization represented by the potentialChildChartCode and potentialChildOrganizationCode
* reports to the organization represented by the potentialParentChartCode and potentialParentOrganizationCode
*
* @param potentialChildChartCode
* @param potentialChildOrganizationCode
* @param potentialParentChartCode
* @param potentialParentOrganizationCode
* @return boolean indicating whether the organization represented by the first two parameters reports to one represented by the last two parameters
*/
public boolean isParentOrganization(String potentialChildChartCode, String potentialChildOrganizationCode, String potentialParentChartCode, String potentialParentOrganizationCode);
/**
* Flushes an internal cache used to resolve parent organizations.
*
* Called from the KualiOrgMaintainable when an org is saved via the document.
*
*/
public void flushParentOrgCache();
}