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.module.cam.document.service; 017 018 import java.lang.reflect.InvocationTargetException; 019 020 import org.kuali.kfs.module.cam.businessobject.Asset; 021 import org.kuali.kfs.module.cam.businessobject.AssetGlobal; 022 import org.kuali.kfs.module.cam.businessobject.AssetPayment; 023 import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail; 024 import org.kuali.kfs.module.cam.document.AssetPaymentDocument; 025 026 public interface AssetPaymentService { 027 028 /** 029 * Finds out the maximum value of payment sequence for an asset 030 * 031 * @param assetPayment Asset Payment 032 * @return Maximum sequence value of asset payment within an asset 033 */ 034 Integer getMaxSequenceNumber(Long capitalAssetNumber); 035 036 /** 037 * Checks if asset payment is federally funder or not 038 * 039 * @param assetPayment Payment record 040 * @return True if financial object sub type code indicates federal contribution 041 */ 042 boolean isPaymentFederalOwned(AssetPayment assetPayment); 043 044 /** 045 * Checks active status of financial object of the payment 046 * 047 * @param assetPayment Payment record 048 * @return True if object is active 049 */ 050 boolean isPaymentFinancialObjectActive(AssetPayment assetPayment); 051 052 053 /** 054 * Stores the approved asset payment detail records in the asset payment table, and updates the total cost of the asset in the 055 * asset table 056 * 057 * @param assetPaymentDetail 058 */ 059 public void processApprovedAssetPayment(AssetPaymentDocument assetPaymentDocument); 060 061 062 /** 063 * This method uses reflection and performs below steps on all Amount fields 064 * <li>If it is a depreciation field, then reset the value to null, so that they don't get copied to offset payments </li> 065 * <li>If it is an amount field, then reverse the amount by multiplying with -1 </li> 066 * 067 * @param offsetPayment Offset payment 068 * @param reverseAmount true if amounts needs to be multiplied with -1 069 * @param nullPeriodDepreciation true if depreciation period amount needs to be null 070 * @throws NoSuchMethodException 071 * @throws IllegalAccessException 072 * @throws InvocationTargetException 073 */ 074 public void adjustPaymentAmounts(AssetPayment assetPayment, boolean reverseAmount, boolean nullPeriodDepreciation) throws IllegalAccessException, InvocationTargetException; 075 076 /** 077 * Checks if payment is eligible for GL posting 078 * 079 * @param assetPayment AssetPayment 080 * @return true if elgible for GL posting 081 */ 082 public boolean isPaymentEligibleForGLPosting(AssetPayment assetPayment); 083 084 085 /** 086 * Checks if object sub type is non depreciable federally owned 087 * 088 * @param string objectSubType 089 * @return true if is NON_DEPRECIABLE_FEDERALLY_OWNED_OBJECT_SUB_TYPES 090 */ 091 public boolean isNonDepreciableFederallyOwnedObjSubType(String objectSubType); 092 093 /** 094 * sets in an assetPaymentDetail BO the posting year and posting period that is retrived from the university date table using 095 * the asset payment posted date as a key. 096 * 097 * @param assetPaymentDetail 098 * @return boolean 099 */ 100 public boolean extractPostedDatePeriod(AssetPaymentDetail assetPaymentDetail); 101 102 /** 103 * Returns asset payment details quantity 104 * 105 * @param assetGlobal 106 * @return Integer 107 */ 108 public Integer getAssetPaymentDetailQuantity(AssetGlobal assetGlobal); 109 110 111 /** 112 * Validates the assets inputed in the asset payment document 113 * 114 * @param errorPath 115 * @param asset 116 * @return 117 */ 118 public boolean validateAssets(String errorPath, Asset asset); 119 120 /** 121 * This method determines whether or not an asset has different object sub type codes in its documents. 122 * 123 * @return true when the asset has payments with object codes that point to different object sub type codes 124 */ 125 public boolean hasDifferentObjectSubTypes(AssetPaymentDocument document); 126 127 /** 128 * Check if payment is eligible for CAPITALIZATION GL posting. 129 * 130 * @param assetPayment 131 * @return 132 */ 133 public boolean isPaymentEligibleForCapitalizationGLPosting(AssetPayment assetPayment); 134 135 /** 136 * Check if payment is eligible for ACCUMMULATE_DEPRECIATION GL posting. 137 * 138 * @param assetPayment 139 * @return 140 */ 141 public boolean isPaymentEligibleForAccumDeprGLPosting(AssetPayment assetPayment); 142 143 144 /** 145 * Check if payment is eligible for OFFSET_AMOUNT GL posting. 146 * 147 * @param assetPayment 148 * @return 149 */ 150 public boolean isPaymentEligibleForOffsetGLPosting(AssetPayment assetPayment); 151 152 }