/*
* 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.util.Collection;
import java.util.List;
import java.util.Set;
import org.kuali.kfs.module.cam.businessobject.Asset;
import org.kuali.rice.kew.api.WorkflowDocument;
import org.kuali.rice.kns.document.MaintenanceDocument;
import org.kuali.rice.krad.document.Document;
/**
* The interface defines methods for Asset Document
*/
public interface AssetService {
/**
* Check if asset has started depreciation already.
*
* @param asset
* @return
*/
boolean isAssetDepreciationStarted(Asset asset);
/**
* Checks if given mainenanceDocument has started routing.
*
* @param document
* @return
*/
boolean isDocumentEnrouting(Document document);
/**
* A helper method for determining the route levels for a given document.
*
* @param workflowDocument
* @return List
*/
public Set<String> getCurrentRouteLevels(WorkflowDocument workflowDocument);
boolean isAssetMovableCheckByAsset(Asset asset);
boolean isCapitalAsset(Asset asset);
boolean isAssetRetired(Asset asset);
boolean isInServiceDateChanged(Asset oldAsset, Asset newAsset);
/**
* @return if MaintenanceDocument is an asset fabrication or not
*/
public boolean isAssetFabrication(MaintenanceDocument maintenanceDocument);
/**
* @return if the asset is on loan or not
*/
boolean isAssetLoaned(Asset asset);
/**
* The Asset Type Code is allowed to be changed only: (1)If the tag number has not been assigned or (2)The asset is tagged, and
* the asset created in the current fiscal year
*
* @return
*/
boolean isAssetTaggedInPriorFiscalYear(Asset asset);
/**
* The Tag Number check excludes value of "N" and retired assets.
*
* @return
*/
boolean isTagNumberCheckExclude(Asset asset);
/**
* Test if any of the off campus location field is entered.
*
* @param asset
* @return
*/
boolean isOffCampusLocationEntered(Asset asset);
/**
* Test if financialObjectSubTypeCode is changed.
*
* @param oldAsset
* @param newAsset
* @return
*/
boolean isFinancialObjectSubTypeCodeChanged(Asset oldAsset, Asset newAsset);
/**
* Test if assetTypeCode is changed.
*
* @param oldAsset
* @param newAsset
* @return
*/
boolean isAssetTypeCodeChanged(Asset oldAsset, Asset newAsset);
/**
* Test if Depreciable Life Limit is "0" This method...
*
* @param asset
* @return
*/
boolean isAssetDepreciableLifeLimitZero(Asset asset);
/**
* Test two capitalAssetNumber equal.
*
* @param capitalAssetNumber1
* @param capitalAssetNumber2
* @return
*/
boolean isCapitalAssetNumberDuplicate(Long capitalAssetNumber1, Long capitalAssetNumber2);
/**
* This method calls the service codes to calculate the summary fields for each asset
*
* @param asset
*/
void setAssetSummaryFields(Asset asset);
/**
* This will check the financial object sub type code in system parameters
* <li>return TRUE if found in MOVABLE_EQUIPMENT_OBJECT_SUB_TYPE_CODES</li>
* <li>return FALSE if found in NON_MOVABLE_EQUIPMENT_OBJECT_SUB_TYPE_CODES</li>
* <li>throw ValidationException if not defined in neither one of them</li>
*
* @param financialObjectSubType
* @return boolean
*/
public boolean isAssetMovableCheckByPayment(String financialObjectSubTypeCode);
/**
* This will check whether the asset is movable based on the financial object sub type code of the asset or its first payment, and the values defined in system parameters
* <li>return TRUE if found in MOVABLE_EQUIPMENT_OBJECT_SUB_TYPE_CODES</li>
* <li>return FALSE if found in NON_MOVABLE_EQUIPMENT_OBJECT_SUB_TYPE_CODES</li>
* <li>throw ValidationException if not defined in neither one of them</li>
*
* @param financialObjectSubType
* @return boolean
*/
public boolean isAssetMovableCheckByPayment(Asset asset);
/**
* This will check if the list of financial object sub type code are compatible with each other.
* <li> return TRUE if all Object sub type code are compatible with each other.
* <li> return FALSE if any non copatible object sub type code are found.
*
* @param financialObjectSubTypeCode
* @return
*/
boolean isObjectSubTypeCompatible(List<String> financialObjectSubTypeCode);
/**
* This method returns all active assets found matching this tag number
*
* @param campusTagNumber Campus Tag Number
* @return List of assets found matching tag number
*/
public List<Asset> findActiveAssetsMatchingTagNumber(String campusTagNumber);
/**
* This method returns all active and not active assets found matching this tag number
*
* @param campusTagNumber Campus Tag Number
* @return List of assets found matching tag number
*/
public Collection<Asset> findAssetsMatchingTagNumber(String campusTagNumber);
/**
* For the given Asset sets the separateHistory.
*
* @param asset for which to set the separateHistory
*/
public void setSeparateHistory(Asset asset);
/**
* @param capitalAssetNumber to check whether it got separated
* @return the list of document numbers that separated the particular asset
*/
public List<String> getDocumentNumbersThatSeparatedThisAsset(Long capitalAssetNumber);
/**
* Sets the fiscal year and month in the asset object based on the creation date of the asset
*
* @param asset
*/
public void setFiscalPeriod(Asset asset);
}