1 /* 2 * Copyright 2008 The Kuali Foundation 3 * 4 * Licensed under the Educational Community License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.opensource.org/licenses/ecl2.php 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.kuali.ole.sys.document.service; 17 18 import org.kuali.ole.sys.businessobject.AccountingLine; 19 import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySourceDetail; 20 import org.kuali.ole.sys.document.AccountingDocument; 21 import org.kuali.ole.sys.document.GeneralLedgerPendingEntrySource; 22 23 /** 24 * A collection of methods that help accounting docs determine whether an accounting line represents a debit or not 25 */ 26 public interface DebitDeterminerService { 27 /** 28 * @param debitCreditCode 29 * @return true if debitCreditCode equals the the debit constant 30 */ 31 public abstract boolean isDebitCode(String debitCreditCode); 32 33 /** 34 * <ol> 35 * <li>object type is included in determining if a line is debit or credit. 36 * </ol> 37 * the following are credits (return false) 38 * <ol> 39 * <li> (isIncome || isLiability) && (lineAmount > 0) 40 * <li> (isExpense || isAsset) && (lineAmount < 0) 41 * </ol> 42 * the following are debits (return true) 43 * <ol> 44 * <li> (isIncome || isLiability) && (lineAmount < 0) 45 * <li> (isExpense || isAsset) && (lineAmount > 0) 46 * </ol> 47 * the following are invalid ( throws an <code>IllegalStateException</code>) 48 * <ol> 49 * <li> document isErrorCorrection 50 * <li> lineAmount == 0 51 * <li> ! (isIncome || isLiability || isExpense || isAsset) 52 * </ol> 53 * 54 * @param rule 55 * @param accountingDocument 56 * @param accountingLine 57 * @return boolean 58 */ 59 public abstract boolean isDebitConsideringType(GeneralLedgerPendingEntrySource poster, GeneralLedgerPendingEntrySourceDetail postable); 60 61 /** 62 * <ol> 63 * <li>object type is not included in determining if a line is debit or credit. 64 * <li>accounting line section (source/target) is not included in determining if a line is debit or credit. 65 * </ol> 66 * the following are credits (return false) 67 * <ol> 68 * <li> none 69 * </ol> 70 * the following are debits (return true) 71 * <ol> 72 * <li> (isIncome || isLiability || isExpense || isAsset) && (lineAmount > 0) 73 * </ol> 74 * the following are invalid ( throws an <code>IllegalStateException</code>) 75 * <ol> 76 * <li> lineAmount <= 0 77 * <li> ! (isIncome || isLiability || isExpense || isAsset) 78 * </ol> 79 * 80 * @param rule 81 * @param accountingDocument 82 * @param accountingLine 83 * @return boolean 84 */ 85 public abstract boolean isDebitConsideringNothingPositiveOnly(GeneralLedgerPendingEntrySource poster, GeneralLedgerPendingEntrySourceDetail postable); 86 87 /** 88 * <ol> 89 * <li>accounting line section (source/target) type is included in determining if a line is debit or credit. 90 * <li> zero line amounts are never allowed 91 * </ol> 92 * the following are credits (return false) 93 * <ol> 94 * <li> isSourceLine && (isIncome || isExpense || isAsset || isLiability) && (lineAmount > 0) 95 * <li> isTargetLine && (isIncome || isExpense || isAsset || isLiability) && (lineAmount < 0) 96 * </ol> 97 * the following are debits (return true) 98 * <ol> 99 * <li> isSourceLine && (isIncome || isExpense || isAsset || isLiability) && (lineAmount < 0) 100 * <li> isTargetLine && (isIncome || isExpense || isAsset || isLiability) && (lineAmount > 0) 101 * </ol> 102 * the following are invalid ( throws an <code>IllegalStateException</code>) 103 * <ol> 104 * <li> lineAmount == 0 105 * <li> ! (isIncome || isLiability || isExpense || isAsset) 106 * </ol> 107 * 108 * @param rule 109 * @param accountingDocument 110 * @param accountingLine 111 * @return boolean 112 */ 113 public abstract boolean isDebitConsideringSection(AccountingDocument accountingDocument, AccountingLine accountingLine); 114 115 /** 116 * <ol> 117 * <li>accounting line section (source/target) and object type is included in determining if a line is debit or credit. 118 * <li> negative line amounts are <b>Only</b> allowed during error correction 119 * </ol> 120 * the following are credits (return false) 121 * <ol> 122 * <li> isSourceLine && (isExpense || isAsset) && (lineAmount > 0) 123 * <li> isTargetLine && (isIncome || isLiability) && (lineAmount > 0) 124 * <li> isErrorCorrection && isSourceLine && (isIncome || isLiability) && (lineAmount < 0) 125 * <li> isErrorCorrection && isTargetLine && (isExpense || isAsset) && (lineAmount < 0) 126 * </ol> 127 * the following are debits (return true) 128 * <ol> 129 * <li> isSourceLine && (isIncome || isLiability) && (lineAmount > 0) 130 * <li> isTargetLine && (isExpense || isAsset) && (lineAmount > 0) 131 * <li> isErrorCorrection && (isExpense || isAsset) && (lineAmount < 0) 132 * <li> isErrorCorrection && (isIncome || isLiability) && (lineAmount < 0) 133 * </ol> 134 * the following are invalid ( throws an <code>IllegalStateException</code>) 135 * <ol> 136 * <li> !isErrorCorrection && !(lineAmount > 0) 137 * </ol> 138 * 139 * @param rule 140 * @param accountingDocument 141 * @param accountingLine 142 * @return boolean 143 */ 144 public abstract boolean isDebitConsideringSectionAndTypePositiveOnly(AccountingDocument accountingDocument, AccountingLine accountingLine); 145 146 /** 147 * This method is to convert amount to positive or negative based on the object type and Debit CreditCode combination. 148 * 149 */ 150 public String getConvertedAmount(String objectType , String debitCreditCode, String amount) ; 151 152 /** 153 * throws an <code>IllegalStateException</code> if the document is an error correction. otherwise does nothing 154 * 155 * @param rule 156 * @param accountingDocument 157 */ 158 public abstract void disallowErrorCorrectionDocumentCheck(GeneralLedgerPendingEntrySource poster); 159 160 /** 161 * Convience method for determine if a document is an error correction document. 162 * 163 * @param accountingDocument 164 * @return true if document is an error correct 165 */ 166 public abstract boolean isErrorCorrection(GeneralLedgerPendingEntrySource poster); 167 168 /** 169 * Determines whether an accounting line is an asset line. 170 * 171 * @param accountingLine 172 * @return boolean True if a line is an asset line. 173 */ 174 public abstract boolean isAsset(GeneralLedgerPendingEntrySourceDetail postable); 175 176 /** 177 * Determines whether an accounting line is a liability line. 178 * 179 * @param accountingLine 180 * @return boolean True if the line is a liability line. 181 */ 182 public abstract boolean isLiability(GeneralLedgerPendingEntrySourceDetail postable); 183 184 /** 185 * Determines whether an accounting line is an income line or not. This goes agains the configurable object type code list in 186 * the ApplicationParameter mechanism. This list can be configured externally. 187 * 188 * @param accountingLine 189 * @return boolean True if the line is an income line. 190 */ 191 public abstract boolean isIncome(GeneralLedgerPendingEntrySourceDetail postable); 192 193 /** 194 * Check object code type to determine whether the accounting line is expense. 195 * 196 * @param accountingLine 197 * @return boolean True if the line is an expense line. 198 */ 199 public abstract boolean isExpense(GeneralLedgerPendingEntrySourceDetail postable); 200 201 /** 202 * Determines whether an accounting line is an expense or asset. 203 * 204 * @param line 205 * @return boolean True if it's an expense or asset. 206 */ 207 public abstract boolean isExpenseOrAsset(GeneralLedgerPendingEntrySourceDetail postable); 208 209 /** 210 * Determines whether an accounting line is an income or liability line. 211 * 212 * @param line 213 * @return boolean True if the line is an income or liability line. 214 */ 215 public abstract boolean isIncomeOrLiability(GeneralLedgerPendingEntrySourceDetail postable); 216 217 /** 218 * Check object code type to determine whether the accounting line is revenue. 219 * 220 * @param line 221 * @return boolean True if the line is a revenue line. 222 */ 223 public abstract boolean isRevenue(GeneralLedgerPendingEntrySourceDetail postable); 224 225 /** 226 * Determines whether the <code>objectTypeCode</code> is an asset. 227 * 228 * @param objectTypeCode 229 * @return Is she asset or something completely different? 230 */ 231 public abstract boolean isAssetTypeCode(String objectTypeCode); 232 233 /** 234 * Determines whether the <code>objectTypeCode</code> is a liability. 235 * 236 * @param objectTypeCode 237 * @return Is she liability or something completely different? 238 */ 239 public abstract boolean isLiabilityTypeCode(String objectTypeCode); 240 241 /** 242 * Gets the isDebitCalculationIllegalStateExceptionMessage attribute. 243 * @return Returns the isDebitCalculationIllegalStateExceptionMessage. 244 */ 245 public abstract String getDebitCalculationIllegalStateExceptionMessage(); 246 247 /** 248 * Gets the isErrorCorrectionIllegalStateExceptionMessage attribute. 249 * @return Returns the isErrorCorrectionIllegalStateExceptionMessage. 250 */ 251 public abstract String getErrorCorrectionIllegalStateExceptionMessage(); 252 253 /** 254 * Gets the isInvalidLineTypeIllegalArgumentExceptionMessage attribute. 255 * @return Returns the isInvalidLineTypeIllegalArgumentExceptionMessage. 256 */ 257 public abstract String getInvalidLineTypeIllegalArgumentExceptionMessage(); 258 }