001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.sys.document.service; 017 018 import org.kuali.kfs.coa.businessobject.Account; 019 import org.kuali.kfs.coa.businessobject.Chart; 020 import org.kuali.kfs.coa.businessobject.ObjectCode; 021 import org.kuali.kfs.coa.businessobject.ObjectType; 022 import org.kuali.kfs.coa.businessobject.ProjectCode; 023 import org.kuali.kfs.coa.businessobject.SubAccount; 024 import org.kuali.kfs.coa.businessobject.SubObjectCode; 025 import org.kuali.kfs.sys.businessobject.AccountingLine; 026 import org.kuali.rice.kns.datadictionary.DataDictionary; 027 028 public interface AccountingLineRuleHelperService { 029 /** 030 * This method validates that an accounting line object contains values that actually exist in the DB. SubAccount and SubObject 031 * are only checked if there are values in them. The others throw errors if they area null. 032 * 033 * @param accountingLine 034 * @return success or failure of validating the AccountingLine 035 * @throws IllegalStateException 036 */ 037 public abstract boolean validateAccountingLine(AccountingLine accountingLine); 038 039 /** 040 * This method validates that the chart is active for use in the system. 041 * 042 * @param chart 043 * @param dataDictionary 044 * @return boolean True if the Chart is valid. 045 */ 046 public abstract boolean isValidChart(Chart chart, DataDictionary dataDictionary); 047 048 /** 049 * This method validates that the chart is active for use in the system. 050 * 051 * @param chart 052 * @param dataDictionary 053 * @param errorPropertyName 054 * @return boolean True if the Chart is valid. 055 */ 056 public abstract boolean isValidChart(Chart chart, DataDictionary dataDictionary, String errorPropertyName); 057 058 /** 059 * This method validates that the account is active for use in the system. 060 * 061 * @param account 062 * @param dataDictionary 063 * @return boolean True if it is valid. 064 */ 065 public abstract boolean isValidAccount(Account account, DataDictionary dataDictionary); 066 067 /** 068 * This method validates that the account is active for use in the system. 069 * 070 * @param account 071 * @param dataDictionary 072 * @param errorPropertyName 073 * @return boolean True if it is valid. 074 */ 075 public abstract boolean isValidAccount(Account account, DataDictionary dataDictionary, String errorPropertyName); 076 077 /** 078 * Checks that the given overrideCode is sufficient for the given BO, adding errors to the global map if not. 079 * 080 * @param line 081 * @param overrideCode 082 * @return whether the given overrideCode is sufficient for the given BO. 083 */ 084 public abstract boolean hasRequiredOverrides(AccountingLine line, String overrideCode); 085 086 /** 087 * This method validates that a sub account is active. 088 * 089 * @param subAccount 090 * @param dataDictionary 091 * @return true if it exists 092 */ 093 public abstract boolean isValidSubAccount(SubAccount subAccount, DataDictionary dataDictionary); 094 095 /** 096 * This method validates that a sub account is active. 097 * 098 * @param subAccount 099 * @param dataDictionary 100 * @param errorPropertyName 101 * @return true if it exists 102 */ 103 public abstract boolean isValidSubAccount(SubAccount subAccount, DataDictionary dataDictionary, String errorPropertyName); 104 105 /** 106 * This method validates that an object code is active. 107 * 108 * @param objectCode 109 * @param dataDictionary 110 * @return boolean True if the object code is valid. 111 */ 112 public abstract boolean isValidObjectCode(ObjectCode objectCode, DataDictionary dataDictionary); 113 114 /** 115 * This method validates that an object code is active. 116 * 117 * @param objectCode 118 * @param dataDictionary 119 * @param errorPropertyName 120 * @return boolean True if the object code is valid. 121 */ 122 public abstract boolean isValidObjectCode(ObjectCode objectCode, DataDictionary dataDictionary, String errorPropertyName); 123 124 /** 125 * This method validates that a sub object code is active. 126 * 127 * @param subObjectCode 128 * @param dataDictionary 129 * @return boolean True if it is valid. 130 */ 131 public abstract boolean isValidSubObjectCode(SubObjectCode subObjectCode, DataDictionary dataDictionary); 132 133 /** 134 * This method validates that a sub object code is active. 135 * 136 * @param subObjectCode 137 * @param dataDictionary 138 * @param errorPropertyName 139 * @return boolean True if it is valid. 140 */ 141 public abstract boolean isValidSubObjectCode(SubObjectCode subObjectCode, DataDictionary dataDictionary, String errorPropertyName); 142 143 /** 144 * This method validates that a project code is active. 145 * 146 * @param projectCode 147 * @param dataDictionary 148 * @return boolean True if it is valid. 149 */ 150 public abstract boolean isValidProjectCode(ProjectCode projectCode, DataDictionary dataDictionary); 151 152 /** 153 * This method validates that a project code is active. 154 * 155 * @param projectCode 156 * @param dataDictionary 157 * @param errorPropertyName 158 * @return boolean True if it is valid. 159 */ 160 public abstract boolean isValidProjectCode(ProjectCode projectCode, DataDictionary dataDictionary, String errorPropertyName); 161 162 /** 163 * For the most part, object type codes aren't required on an accounting line; however, in some situations (e.g. Journal 164 * Voucher) they are entered directly into the accounting line and must be validated. In those cases, they must be validated for 165 * activeness. 166 * 167 * @param objectTypeCode 168 * @param dataDictionary 169 * @return boolean True if the object type code is valid, false otherwise. 170 */ 171 public abstract boolean isValidObjectTypeCode(ObjectType objectTypeCode, DataDictionary dataDictionary); 172 173 /** 174 * For the most part, object type codes aren't required on an accounting line; however, in some situations (e.g. Journal 175 * Voucher) they are entered directly into the accounting line and must be validated. In those cases, they must be validated for 176 * activeness. 177 * 178 * @param objectTypeCode 179 * @param dataDictionary 180 * @param errorPropertyName 181 * @return boolean True if the object type code is valid, false otherwise. 182 */ 183 public abstract boolean isValidObjectTypeCode(ObjectType objectTypeCode, DataDictionary dataDictionary, String errorPropertyName); 184 185 /** 186 * @return short label for chart code defined in data dictionary 187 */ 188 public abstract String getChartLabel(); 189 190 /** 191 * @return short label for account number defined in data dictionary 192 */ 193 public abstract String getAccountLabel(); 194 195 /** 196 * @return short label for sub account number defined in data dictionary 197 */ 198 public abstract String getSubAccountLabel(); 199 200 /** 201 * @return short label for object code defined in data dictionary 202 */ 203 public abstract String getObjectCodeLabel(); 204 205 /** 206 * @return short label for sub object code defined in data dictionary 207 */ 208 public abstract String getSubObjectCodeLabel(); 209 210 /** 211 * @return short label for project code defined in data dictionary 212 */ 213 public abstract String getProjectCodeLabel(); 214 215 /** 216 * @return short label for object type code defined in data dictionary 217 */ 218 public abstract String getObjectTypeCodeLabel(); 219 220 /** 221 * @return short label for object sub type code defined in data dictionary 222 */ 223 public abstract String getObjectSubTypeCodeLabel(); 224 225 /** 226 * @return short label for organization code defined in data dictionary 227 */ 228 public abstract String getOrganizationCodeLabel(); 229 230 /** 231 * @return short label for fund group code defined in data dictionary 232 */ 233 public abstract String getFundGroupCodeLabel(); 234 235 /** 236 * @return short label for sub fund group code defined in data dictionary 237 */ 238 public abstract String getSubFundGroupCodeLabel(); 239 }