/*
* 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.bc.document.service;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.businessobject.Chart;
import org.kuali.kfs.coa.businessobject.ObjectCode;
import org.kuali.kfs.coa.businessobject.SubAccount;
import org.kuali.kfs.coa.businessobject.SubObjectCode;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition;
import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
import org.kuali.kfs.module.bc.document.BudgetConstructionDocument;
import org.kuali.rice.krad.util.MessageMap;
/**
* define a set of validations methods for buddget construction
*/
public interface BudgetConstructionRuleHelperService {
/**
* test if the given appointment funding is associated with a labor detail allowed object
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a labor detail allowed object; otherwise, false
*/
public boolean hasDetailPositionRequiredObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid account
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid account; otherwise, false
*/
public boolean hasValidAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid chart of accounts
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid chart of accounts; otherwise, false
*/
public boolean hasValidChart(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid incumbent
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid incumbent; otherwise, false
*/
public boolean hasValidIncumbent(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* separate quick salary setting test if the given appointment funding is associated with a valid incumbent
*
* @param appointmentFunding
* @param errorMap
* @return
*/
public boolean hasValidIncumbentQuickSalarySetting(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid financial object
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid financial object; otherwise, false
*/
public boolean hasValidObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid budget position
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid budget position; otherwise, false
*/
public boolean hasValidPosition(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid sub account
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid sub account; otherwise, false
*/
public boolean hasValidSubAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* test if the given appointment funding is associated with a valid sub object
*
* @param appointmentFunding the given appointment funding
* @param errorMap the error map that contains errors if any
* @return true if the given appointment funding is associated with a valid sub object; otherwise, false
*/
public boolean hasValidSubObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* determine whether the given appointment funding can be associated with a valid budget construction document
*
* @param appointmentFunding the given appointment funding
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given appointment funding can be associated with a valid budget construction document; otherwise, false
*/
public boolean isAssociatedWithValidDocument(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap, String errorPropertyName);
/**
* determine wether the given budget document is allowed to be budgeted
*
* @param budgetConstructionDocument the given budget document
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given budget document can be budgeted; otherwise, false
*/
public boolean isBudgetableDocument(BudgetConstructionDocument budgetConstructionDocument, MessageMap errorMap, String errorPropertyName);
/**
* determine whether the given object requires a detail position
*
* @param financialObject the given financial object
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given object requires a detail position; otherwise, false
*/
public boolean isDetailPositionRequiredObjectCode(ObjectCode financialObject, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* determine if the fields in the given appointment funding line are in the correct formats defined in the data dictionary
*
* @param appointmentFunding the given appointment funding
* @param errorMap the given error map that can hold the error message if any
* @return true if the fields in the given appointment funding line are in the correct formats defined in the data dictionary;
* otherwise, false
*/
public boolean isFieldFormatValid(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
/**
* determine whether the given account is valid
*
* @param account the given account
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given account is valid; otherwise, false
*/
public boolean isValidAccount(Account account, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* determine whether the given chart is valid
*
* @param chart the given chart
* @param invalidValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given chart is valid; otherwise, false
*/
public boolean isValidChart(Chart chart, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* determine whether the given budget construction intended incumbent is valid
*
* @param intendedIncumbent the given budget construction intended incumbent
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given budget construction intended incumbent is valid; otherwise, false
*/
public boolean isValidIncumbent(BudgetConstructionIntendedIncumbent intendedIncumbent, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* Runs existence and active tests on the ObjectCode reference This method is different than the one in
* AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
* AccountingLineRuleHelper
*
* @param objectCode the given object code
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given object code is valid; otherwise, false
*/
public boolean isValidObjectCode(ObjectCode objectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* determine whether the given budget construction position is valid
*
* @param position the given budget construction position
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given budget construction position is valid; otherwise, false
*/
public boolean isValidPosition(BudgetConstructionPosition position, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* determine whether the given sub account is valid
*
* @param subAccount the given sub account
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given sub account is valid; otherwise, false
*/
public boolean isValidSubAccount(SubAccount subAccount, String currentValue, MessageMap errorMap, String errorPropertyName);
/**
* Runs existence and active tests on the SubObjectCode reference This method is different than the one in
* AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
* AccountingLineRuleHelper
*
* @param subObjectCode the given sub object
* @param currentValue the given current value
* @param errorMap the given error map that can hold the error message if any
* @param errorPropertyName the specified property name that is tested
* @return true if the given sub object is valid; otherwise, false
*/
public boolean isValidSubObjectCode(SubObjectCode subObjectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
}