/* * 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.sys.document.service; import org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.Chart; import org.kuali.kfs.coa.businessobject.ObjectCode; import org.kuali.kfs.coa.businessobject.ObjectType; import org.kuali.kfs.coa.businessobject.ProjectCode; import org.kuali.kfs.coa.businessobject.SubAccount; import org.kuali.kfs.coa.businessobject.SubObjectCode; import org.kuali.kfs.sys.businessobject.AccountingLine; import org.kuali.rice.krad.datadictionary.DataDictionary; public interface AccountingLineRuleHelperService { /** * This method validates that an accounting line object contains values that actually exist in the DB. SubAccount and SubObject * are only checked if there are values in them. The others throw errors if they area null. * * @param accountingLine * @parm accountingLineByPosition * @return success or failure of validating the AccountingLine * @throws IllegalStateException */ public abstract boolean validateAccountingLine(AccountingLine accountingLine); /** * This method validates that the chart is active for use in the system. * * @param chart * @param accountIdentifyingPropertyName * @param dataDictionary * @return boolean True if the Chart is valid. */ public abstract boolean isValidChart(String accountIdentifyingPropertyName, Chart chart, DataDictionary dataDictionary); /** * This method validates that the chart is active for use in the system. * * @param chart * @param dataDictionary * @param accountIdentifyingPropertyName * @param errorPropertyName * @return boolean True if the Chart is valid. */ public abstract boolean isValidChart(Chart chart, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * This method validates that the account is active for use in the system. * * @param accountIdentifyingPropertyName * @param account * @param dataDictionary * @return boolean True if it is valid. */ public abstract boolean isValidAccount(String accountIdentifyingPropertyName, Account account, DataDictionary dataDictionary); /** * This method validates that the account is active for use in the system. * * @param account * @param dataDictionary * @param accountIdentifyingPropertyName * @param errorPropertyName * @return boolean True if it is valid. */ public abstract boolean isValidAccount(Account account, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * Checks that the given overrideCode is sufficient for the given BO, adding errors to the global map if not. * * @param line * @param overrideCode * @return whether the given overrideCode is sufficient for the given BO. */ public abstract boolean hasRequiredOverrides(AccountingLine line, String overrideCode); /** * This method validates that a sub account is active. * * @param accountIdentifyingPropertyName * @param subAccount * @param dataDictionary * @return true if it exists */ public abstract boolean isValidSubAccount(String accountIdentifyingPropertyName, SubAccount subAccount, DataDictionary dataDictionary); /** * This method validates that a sub account is active. * * @param subAccount * @param dataDictionary * @param accountIdentifyingPropertyName * @param errorPropertyName * @return true if it exists */ public abstract boolean isValidSubAccount(SubAccount subAccount, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * This method validates that an object code is active. * * @param accountIdentifyingPropertyName * @param objectCode * @param dataDictionary * @return boolean True if the object code is valid. */ public abstract boolean isValidObjectCode(String accountIdentifyingPropertyName, ObjectCode objectCode, DataDictionary dataDictionary); /** * This method validates that an object code is active. * * @param objectCode * @param dataDictionary * @param accountIdentifyingPropertyName * @param errorPropertyName * @return boolean True if the object code is valid. */ public abstract boolean isValidObjectCode(ObjectCode objectCode, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * This method validates that a sub object code is active. * * @param accountIdentifyingPropertyName * @param subObjectCode * @param dataDictionary * @return boolean True if it is valid. */ public abstract boolean isValidSubObjectCode(String accountIdentifyingPropertyName, SubObjectCode subObjectCode, DataDictionary dataDictionary); /** * This method validates that a sub object code is active. * * @param subObjectCode * @param dataDictionary * @param errorPropertyName * @return boolean True if it is valid. */ public abstract boolean isValidSubObjectCode(SubObjectCode subObjectCode, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * This method validates that a project code is active. * * @param accountIdentifyingPropertyName * @param projectCode * @param dataDictionary * @return boolean True if it is valid. */ public abstract boolean isValidProjectCode(String accountIdentifyingPropertyName, ProjectCode projectCode, DataDictionary dataDictionary); /** * This method validates that a project code is active. * * @param projectCode * @param dataDictionary * @param errorPropertyName * @param accountIdentifyingPropertyName * @return boolean True if it is valid. */ public abstract boolean isValidProjectCode(ProjectCode projectCode, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * For the most part, object type codes aren't required on an accounting line; however, in some situations (e.g. Journal * Voucher) they are entered directly into the accounting line and must be validated. In those cases, they must be validated for * activeness. * * @param accountIdentifyingPropertyName * @param objectTypeCode * @param dataDictionary * @return boolean True if the object type code is valid, false otherwise. */ public abstract boolean isValidObjectTypeCode(String accountIdentifyingPropertyName, ObjectType objectTypeCode, DataDictionary dataDictionary); /** * For the most part, object type codes aren't required on an accounting line; however, in some situations (e.g. Journal * Voucher) they are entered directly into the accounting line and must be validated. In those cases, they must be validated for * activeness. * * @param objectTypeCode * @param dataDictionary * @param accountIdentifyingPropertyName * @param errorPropertyName * @return boolean True if the object type code is valid, false otherwise. */ public abstract boolean isValidObjectTypeCode(ObjectType objectTypeCode, DataDictionary dataDictionary, String errorPropertyName, String accountIdentifyingPropertyName); /** * @return short label for chart code defined in data dictionary */ public abstract String getChartLabel(); /** * @return short label for account number defined in data dictionary */ public abstract String getAccountLabel(); /** * @return short label for sub account number defined in data dictionary */ public abstract String getSubAccountLabel(); /** * @return short label for object code defined in data dictionary */ public abstract String getObjectCodeLabel(); /** * @return short label for sub object code defined in data dictionary */ public abstract String getSubObjectCodeLabel(); /** * @return short label for project code defined in data dictionary */ public abstract String getProjectCodeLabel(); /** * @return short label for object type code defined in data dictionary */ public abstract String getObjectTypeCodeLabel(); /** * @return short label for object sub type code defined in data dictionary */ public abstract String getObjectSubTypeCodeLabel(); /** * @return short label for organization code defined in data dictionary */ public abstract String getOrganizationCodeLabel(); /** * @return short label for fund group code defined in data dictionary */ public abstract String getFundGroupCodeLabel(); /** * @return short label for sub fund group code defined in data dictionary */ public abstract String getSubFundGroupCodeLabel(); }