1 /* 2 * The Kuali Financial System, a comprehensive financial management system for higher education. 3 * 4 * Copyright 2005-2014 The Kuali Foundation 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Affero General Public License as 8 * published by the Free Software Foundation, either version 3 of the 9 * License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Affero General Public License for more details. 15 * 16 * You should have received a copy of the GNU Affero General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 package org.kuali.kfs.module.cam.document.service; 20 21 import java.lang.reflect.InvocationTargetException; 22 23 import org.kuali.kfs.module.cam.businessobject.Asset; 24 import org.kuali.kfs.module.cam.businessobject.AssetGlobal; 25 import org.kuali.kfs.module.cam.businessobject.AssetPayment; 26 import org.kuali.kfs.module.cam.businessobject.AssetPaymentAllocationType; 27 import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail; 28 import org.kuali.kfs.module.cam.document.AssetPaymentDocument; 29 30 public interface AssetPaymentService { 31 32 /** 33 * Finds out the maximum value of payment sequence for an asset 34 * 35 * @param assetPayment 36 * Asset Payment 37 * @return Maximum sequence value of asset payment within an asset 38 */ 39 Integer getMaxSequenceNumber(Long capitalAssetNumber); 40 41 /** 42 * Checks if asset payment is federally funder or not 43 * 44 * @param assetPayment 45 * Payment record 46 * @return True if financial object sub type code indicates federal 47 * contribution 48 */ 49 boolean isPaymentFederalOwned(AssetPayment assetPayment); 50 51 /** 52 * Checks active status of financial object of the payment 53 * 54 * @param assetPayment 55 * Payment record 56 * @return True if object is active 57 */ 58 boolean isPaymentFinancialObjectActive(AssetPayment assetPayment); 59 60 /** 61 * Stores the approved asset payment detail records in the asset payment 62 * table, and updates the total cost of the asset in the asset table 63 * 64 * @param assetPaymentDetail 65 */ 66 void processApprovedAssetPayment(AssetPaymentDocument assetPaymentDocument); 67 68 /** 69 * This method uses reflection and performs below steps on all Amount fields 70 * <li>If it is a depreciation field, then reset the value to null, so that 71 * they don't get copied to offset payments</li> <li>If it is an amount 72 * field, then reverse the amount by multiplying with -1</li> 73 * 74 * @param offsetPayment 75 * Offset payment 76 * @param reverseAmount 77 * true if amounts needs to be multiplied with -1 78 * @param nullPeriodDepreciation 79 * true if depreciation period amount needs to be null 80 * @throws NoSuchMethodException 81 * @throws IllegalAccessException 82 * @throws InvocationTargetException 83 */ 84 void adjustPaymentAmounts(AssetPayment assetPayment, boolean reverseAmount, boolean nullPeriodDepreciation) throws IllegalAccessException, InvocationTargetException; 85 86 /** 87 * Checks if payment is eligible for GL posting 88 * 89 * @param assetPayment 90 * AssetPayment 91 * @return true if elgible for GL posting 92 */ 93 boolean isPaymentEligibleForGLPosting(AssetPayment assetPayment); 94 95 /** 96 * Checks if object sub type is non depreciable federally owned 97 * 98 * @param string 99 * objectSubType 100 * @return true if is NON_DEPRECIABLE_FEDERALLY_OWNED_OBJECT_SUB_TYPES 101 */ 102 boolean isNonDepreciableFederallyOwnedObjSubType(String objectSubType); 103 104 /** 105 * sets in an assetPaymentDetail BO the posting year and posting period that 106 * is retrived from the university date table using the asset payment posted 107 * date as a key. 108 * 109 * @param assetPaymentDetail 110 * @return boolean 111 */ 112 boolean extractPostedDatePeriod(AssetPaymentDetail assetPaymentDetail); 113 114 /** 115 * Returns asset payment details quantity 116 * 117 * @param assetGlobal 118 * @return Integer 119 */ 120 Integer getAssetPaymentDetailQuantity(AssetGlobal assetGlobal); 121 122 /** 123 * Validates the assets inputed in the asset payment document 124 * 125 * @param errorPath 126 * @param asset 127 * @return 128 */ 129 boolean validateAssets(String errorPath, Asset asset); 130 131 /** 132 * This method determines whether or not an asset has different object sub 133 * type codes in its documents. 134 * 135 * @return true when the asset has payments with object codes that point to 136 * different object sub type codes 137 */ 138 boolean hasDifferentObjectSubTypes(AssetPaymentDocument document); 139 140 /** 141 * Check if payment is eligible for CAPITALIZATION GL posting. 142 * 143 * @param assetPayment 144 * @return 145 */ 146 boolean isPaymentEligibleForCapitalizationGLPosting(AssetPayment assetPayment); 147 148 /** 149 * Check if payment is eligible for ACCUMMULATE_DEPRECIATION GL posting. 150 * 151 * @param assetPayment 152 * @return 153 */ 154 boolean isPaymentEligibleForAccumDeprGLPosting(AssetPayment assetPayment); 155 156 /** 157 * Check if payment is eligible for OFFSET_AMOUNT GL posting. 158 * 159 * @param assetPayment 160 * @return 161 */ 162 boolean isPaymentEligibleForOffsetGLPosting(AssetPayment assetPayment); 163 164 /** 165 * Return the AssetPaymentDistributionType associated with the provided 166 * code. 167 * 168 * 169 * @param distributionCode 170 * @return AssetPaymentDistributionType 171 */ 172 AssetPaymentAllocationType getAssetDistributionType(String distributionCode); 173 }