/* * 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.module.cam.document.service; import java.lang.reflect.InvocationTargetException; import org.kuali.kfs.module.cam.businessobject.Asset; import org.kuali.kfs.module.cam.businessobject.AssetGlobal; import org.kuali.kfs.module.cam.businessobject.AssetPayment; import org.kuali.kfs.module.cam.businessobject.AssetPaymentAllocationType; import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail; import org.kuali.kfs.module.cam.document.AssetPaymentDocument; public interface AssetPaymentService { /** * Finds out the maximum value of payment sequence for an asset * * @param assetPayment * Asset Payment * @return Maximum sequence value of asset payment within an asset */ Integer getMaxSequenceNumber(Long capitalAssetNumber); /** * Checks if asset payment is federally funder or not * * @param assetPayment * Payment record * @return True if financial object sub type code indicates federal * contribution */ boolean isPaymentFederalOwned(AssetPayment assetPayment); /** * Checks active status of financial object of the payment * * @param assetPayment * Payment record * @return True if object is active */ boolean isPaymentFinancialObjectActive(AssetPayment assetPayment); /** * Stores the approved asset payment detail records in the asset payment * table, and updates the total cost of the asset in the asset table * * @param assetPaymentDetail */ void processApprovedAssetPayment(AssetPaymentDocument assetPaymentDocument); /** * This method uses reflection and performs below steps on all Amount fields * <li>If it is a depreciation field, then reset the value to null, so that * they don't get copied to offset payments</li> <li>If it is an amount * field, then reverse the amount by multiplying with -1</li> * * @param offsetPayment * Offset payment * @param reverseAmount * true if amounts needs to be multiplied with -1 * @param nullPeriodDepreciation * true if depreciation period amount needs to be null * @throws NoSuchMethodException * @throws IllegalAccessException * @throws InvocationTargetException */ void adjustPaymentAmounts(AssetPayment assetPayment, boolean reverseAmount, boolean nullPeriodDepreciation) throws IllegalAccessException, InvocationTargetException; /** * Checks if payment is eligible for GL posting * * @param assetPayment * AssetPayment * @return true if elgible for GL posting */ boolean isPaymentEligibleForGLPosting(AssetPayment assetPayment); /** * Checks if object sub type is non depreciable federally owned * * @param string * objectSubType * @return true if is NON_DEPRECIABLE_FEDERALLY_OWNED_OBJECT_SUB_TYPES */ boolean isNonDepreciableFederallyOwnedObjSubType(String objectSubType); /** * sets in an assetPaymentDetail BO the posting year and posting period that * is retrived from the university date table using the asset payment posted * date as a key. * * @param assetPaymentDetail * @return boolean */ boolean extractPostedDatePeriod(AssetPaymentDetail assetPaymentDetail); /** * Returns asset payment details quantity * * @param assetGlobal * @return Integer */ Integer getAssetPaymentDetailQuantity(AssetGlobal assetGlobal); /** * Validates the assets inputed in the asset payment document * * @param errorPath * @param asset * @return */ boolean validateAssets(String errorPath, Asset asset); /** * This method determines whether or not an asset has different object sub * type codes in its documents. * * @return true when the asset has payments with object codes that point to * different object sub type codes */ boolean hasDifferentObjectSubTypes(AssetPaymentDocument document); /** * Check if payment is eligible for CAPITALIZATION GL posting. * * @param assetPayment * @return */ boolean isPaymentEligibleForCapitalizationGLPosting(AssetPayment assetPayment); /** * Check if payment is eligible for ACCUMMULATE_DEPRECIATION GL posting. * * @param assetPayment * @return */ boolean isPaymentEligibleForAccumDeprGLPosting(AssetPayment assetPayment); /** * Check if payment is eligible for OFFSET_AMOUNT GL posting. * * @param assetPayment * @return */ boolean isPaymentEligibleForOffsetGLPosting(AssetPayment assetPayment); /** * Return the AssetPaymentDistributionType associated with the provided * code. * * * @param distributionCode * @return AssetPaymentDistributionType */ AssetPaymentAllocationType getAssetDistributionType(String distributionCode); }