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.bc.document.validation.impl; 017 018 import java.util.List; 019 020 import org.kuali.kfs.module.bc.BCPropertyConstants; 021 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 022 import org.kuali.kfs.module.bc.document.service.BudgetConstructionRuleHelperService; 023 import org.kuali.kfs.module.bc.document.service.SalarySettingRuleHelperService; 024 import org.kuali.kfs.module.bc.document.validation.SalarySettingRule; 025 import org.kuali.kfs.sys.KFSPropertyConstants; 026 import org.kuali.kfs.sys.context.SpringContext; 027 import org.kuali.rice.kns.util.ErrorMap; 028 import org.kuali.rice.kns.util.GlobalVariables; 029 import org.kuali.rice.kns.util.MessageMap; 030 031 /** 032 * the rule implementation for the actions of salary setting component 033 */ 034 public class SalarySettingRules implements SalarySettingRule { 035 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SalarySettingRules.class); 036 037 private BudgetConstructionRuleHelperService budgetConstructionRuleHelperService = SpringContext.getBean(BudgetConstructionRuleHelperService.class); 038 private SalarySettingRuleHelperService salarySettingRuleHelperService = SpringContext.getBean(SalarySettingRuleHelperService.class); 039 private MessageMap errorMap = GlobalVariables.getMessageMap(); 040 041 /** 042 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processQuickSaveAppointmentFunding(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 043 */ 044 public boolean processQuickSaveAppointmentFunding(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 045 LOG.debug("processQuickSaveAppointmentFunding() start"); 046 047 boolean hasValidFormat = budgetConstructionRuleHelperService.isFieldFormatValid(appointmentFunding, errorMap); 048 if (!hasValidFormat) { 049 return hasValidFormat; 050 } 051 052 boolean hasValidAmounts = this.hasValidAmountsQuickSalarySetting(appointmentFunding, errorMap); 053 if (!hasValidAmounts) { 054 return hasValidAmounts; 055 } 056 return true; 057 } 058 059 /** 060 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processSaveAppointmentFunding(java.util.List, 061 * org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 062 */ 063 public boolean processSaveAppointmentFunding(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 064 LOG.debug("processSaveAppointmentFunding() start"); 065 066 boolean hasValidFormat = budgetConstructionRuleHelperService.isFieldFormatValid(appointmentFunding, errorMap); 067 if (!hasValidFormat) { 068 return hasValidFormat; 069 } 070 071 boolean hasValidReferences = this.hasValidRefences(appointmentFunding, errorMap); 072 if (!hasValidReferences) { 073 return hasValidReferences; 074 } 075 076 boolean isObjectCodeMatching = salarySettingRuleHelperService.hasObjectCodeMatchingDefaultOfPosition(appointmentFunding, errorMap); 077 if (!isObjectCodeMatching) { 078 return isObjectCodeMatching; 079 } 080 081 boolean hasActiveJob = salarySettingRuleHelperService.hasActiveJob(appointmentFunding, errorMap); 082 if (!hasActiveJob) { 083 return hasActiveJob; 084 } 085 086 // using request amount as property to light up on error 087 boolean isAssociatedWithBudgetableDocument = budgetConstructionRuleHelperService.isAssociatedWithValidDocument(appointmentFunding, errorMap, BCPropertyConstants.APPOINTMENT_REQUESTED_AMOUNT); 088 if (!isAssociatedWithBudgetableDocument) { 089 return isAssociatedWithBudgetableDocument; 090 } 091 092 boolean hasValidAmounts = this.hasValidAmounts(appointmentFunding, errorMap); 093 if (!hasValidAmounts) { 094 return hasValidAmounts; 095 } 096 097 return true; 098 } 099 100 /** 101 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processAddAppointmentFunding(java.util.List, 102 * org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 103 */ 104 public boolean processAddAppointmentFunding(List<PendingBudgetConstructionAppointmentFunding> existingAppointmentFundings, PendingBudgetConstructionAppointmentFunding appointmentFunding) { 105 LOG.debug("processAddAppointmentFunding() start"); 106 107 boolean hasNoExistingLine = salarySettingRuleHelperService.hasNoExistingLine(existingAppointmentFundings, appointmentFunding, errorMap); 108 if (!hasNoExistingLine) { 109 return hasNoExistingLine; 110 } 111 112 boolean hasValidFormat = budgetConstructionRuleHelperService.isFieldFormatValid(appointmentFunding, errorMap); 113 if (!hasValidFormat) { 114 return hasValidFormat; 115 } 116 117 boolean hasValidReferences = this.hasValidRefences(appointmentFunding, errorMap); 118 if (!hasValidReferences) { 119 return hasValidReferences; 120 } 121 122 boolean isObjectCodeMatching = salarySettingRuleHelperService.hasObjectCodeMatchingDefaultOfPosition(appointmentFunding, errorMap); 123 if (!isObjectCodeMatching) { 124 return isObjectCodeMatching; 125 } 126 127 boolean hasActiveJob = salarySettingRuleHelperService.hasActiveJob(appointmentFunding, errorMap); 128 if (!hasActiveJob) { 129 return hasActiveJob; 130 } 131 132 boolean isAssociatedWithBudgetableDocument = budgetConstructionRuleHelperService.isAssociatedWithValidDocument(appointmentFunding, errorMap, KFSPropertyConstants.ACCOUNT_NUMBER); 133 if (!isAssociatedWithBudgetableDocument) { 134 return isAssociatedWithBudgetableDocument; 135 } else { 136 appointmentFunding.setBudgetable(Boolean.TRUE); 137 } 138 139 boolean hasValidAmounts = this.hasValidAmounts(appointmentFunding, errorMap); 140 if (!hasValidAmounts) { 141 return hasValidAmounts; 142 } 143 144 return true; 145 } 146 147 /** 148 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processAdjustSalaraySettingLinePercent(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 149 */ 150 public boolean processAdjustSalaraySettingLinePercent(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 151 boolean canBeAdjusted = salarySettingRuleHelperService.canBeAdjusted(appointmentFunding, errorMap); 152 if (!canBeAdjusted) { 153 return false; 154 } 155 156 boolean hasValidAdjustmentAmount = salarySettingRuleHelperService.hasValidAdjustmentAmount(appointmentFunding, errorMap); 157 if (!hasValidAdjustmentAmount) { 158 return false; 159 } 160 161 return true; 162 } 163 164 /** 165 * @see org.kuali.kfs.module.bc.document.validation.SalarySettingRule#processNormalizePayrateAndAmount(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 166 */ 167 public boolean processNormalizePayrateAndAmount(PendingBudgetConstructionAppointmentFunding appointmentFunding) { 168 return salarySettingRuleHelperService.hasValidPayRateOrAnnualAmount(appointmentFunding, errorMap); 169 } 170 171 // test if all references of the given appointment funding are valid 172 private boolean hasValidRefences(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap) { 173 boolean hasValidReference = budgetConstructionRuleHelperService.hasValidChart(appointmentFunding, errorMap); 174 hasValidReference &= budgetConstructionRuleHelperService.hasValidAccount(appointmentFunding, errorMap); 175 hasValidReference &= budgetConstructionRuleHelperService.hasValidObjectCode(appointmentFunding, errorMap); 176 hasValidReference &= budgetConstructionRuleHelperService.hasValidSubAccount(appointmentFunding, errorMap); 177 hasValidReference &= budgetConstructionRuleHelperService.hasValidSubObjectCode(appointmentFunding, errorMap); 178 hasValidReference &= budgetConstructionRuleHelperService.hasDetailPositionRequiredObjectCode(appointmentFunding, errorMap); 179 hasValidReference &= budgetConstructionRuleHelperService.hasValidPosition(appointmentFunding, errorMap); 180 hasValidReference &= budgetConstructionRuleHelperService.hasValidIncumbent(appointmentFunding, errorMap); 181 182 return hasValidReference; 183 } 184 185 // test if all amounts are legal 186 private boolean hasValidAmounts(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap) { 187 boolean hasValidAmounts = salarySettingRuleHelperService.hasValidRequestedAmount(appointmentFunding, errorMap); 188 hasValidAmounts &= salarySettingRuleHelperService.hasValidRequestedFteQuantity(appointmentFunding, errorMap); 189 hasValidAmounts &= salarySettingRuleHelperService.hasValidRequestedFundingMonth(appointmentFunding, errorMap); 190 hasValidAmounts &= salarySettingRuleHelperService.hasValidRequestedTimePercent(appointmentFunding, errorMap); 191 hasValidAmounts &= salarySettingRuleHelperService.hasRequestedAmountZeroWhenFullYearLeave(appointmentFunding, errorMap); 192 hasValidAmounts &= salarySettingRuleHelperService.hasRequestedFteQuantityZeroWhenFullYearLeave(appointmentFunding, errorMap); 193 hasValidAmounts &= salarySettingRuleHelperService.hasValidRequestedCsfAmount(appointmentFunding, errorMap); 194 hasValidAmounts &= salarySettingRuleHelperService.hasValidRequestedCsfTimePercent(appointmentFunding, errorMap); 195 196 return hasValidAmounts; 197 } 198 199 // test if request amount and FTE interaction is legal 200 private boolean hasValidAmountsQuickSalarySetting(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap) { 201 boolean hasValidAmounts = salarySettingRuleHelperService.hasValidRequestedAmountQuickSalarySetting(appointmentFunding, errorMap); 202 203 return hasValidAmounts; 204 } 205 }