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 org.kuali.kfs.module.bc.BCKeyConstants; 019 import org.kuali.kfs.module.bc.businessobject.CalculatedSalaryFoundationTrackerOverride; 020 import org.kuali.kfs.module.bc.document.service.CalculatedSalaryFoundationTrackerOverrideService; 021 022 import org.kuali.kfs.sys.context.SpringContext; 023 import org.kuali.kfs.sys.service.UniversityDateService; 024 import org.kuali.rice.kns.document.MaintenanceDocument; 025 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase; 026 import org.kuali.rice.kns.util.ObjectUtils; 027 028 public class CalculatedSalaryFoundationTrackerOverrideRule extends MaintenanceDocumentRuleBase { 029 030 protected CalculatedSalaryFoundationTrackerOverride oldCalculatedSalaryFoundationTrackerOverride; 031 protected CalculatedSalaryFoundationTrackerOverride newCalculatedSalaryFoundationTrackerOverride; 032 protected CalculatedSalaryFoundationTrackerOverrideService calculatedSalaryFoundationTrackerOverrideService; 033 034 public CalculatedSalaryFoundationTrackerOverrideRule() { 035 super(); 036 037 // Pseudo-inject some services. 038 // 039 // This approach is being used to make it simpler to convert the Rule classes 040 // to spring-managed with these services injected by Spring at some later date. 041 // When this happens, just remove these calls to the setters with 042 // SpringContext, and configure the bean defs for spring. 043 this.setCalculatedSalaryFoundationTrackerOverrideService(SpringContext.getBean(CalculatedSalaryFoundationTrackerOverrideService.class)); 044 } 045 046 /** 047 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument) 048 */ 049 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) { 050 boolean success = true; 051 setupConvenienceObjects(document); 052 success &= checkFiscalYearIsCurrent(document); 053 success &= checkAppointmentIsValid(); 054 success &= checkPositionIsValid(); 055 056 return success; 057 } 058 059 /** 060 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument) 061 */ 062 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) { 063 boolean success = true; 064 setupConvenienceObjects(document); 065 checkFiscalYearIsCurrent(document); 066 checkAppointmentIsValid(); 067 checkPositionIsValid(); 068 return success; 069 } 070 071 protected void setupConvenienceObjects(MaintenanceDocument document) { 072 073 // setup oldAccount convenience objects, make sure all possible sub-objects are populated 074 oldCalculatedSalaryFoundationTrackerOverride = (CalculatedSalaryFoundationTrackerOverride) super.getOldBo(); 075 076 // setup newAccount convenience objects, make sure all possible sub-objects are populated 077 newCalculatedSalaryFoundationTrackerOverride = (CalculatedSalaryFoundationTrackerOverride) super.getNewBo(); 078 } 079 080 protected boolean checkFiscalYearIsCurrent(MaintenanceDocument document) { 081 boolean success = true; 082 083 if ((ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear())) && (document.isNew())) { 084 085 Integer currentFiscalYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); 086 Integer universityFiscalYear = newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear(); 087 if (!(universityFiscalYear.equals(currentFiscalYear))) { 088 putFieldError("universityFiscalYear", BCKeyConstants.ERROR_FISCAL_YEAR_NOT_CURRENT, "Fiscal Year"); 089 success &= false; 090 } 091 } 092 return success; 093 } 094 095 protected boolean checkAppointmentIsValid() { 096 boolean success = true; 097 098 if ((ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getEmplid())) && (ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getPositionNumber())) && (ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear()))) { 099 100 String emplid = newCalculatedSalaryFoundationTrackerOverride.getEmplid(); 101 String positionNumber = newCalculatedSalaryFoundationTrackerOverride.getPositionNumber(); 102 Integer universityFiscalYear = newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear(); 103 boolean result = calculatedSalaryFoundationTrackerOverrideService.isValidAppointment(universityFiscalYear, positionNumber, emplid); 104 if (!result) { 105 putFieldError("emplid", BCKeyConstants.ERROR_INVALID_APPOINTMENT, "Employee Id"); 106 success &= false; 107 } 108 } 109 else { 110 putFieldError("emplid", BCKeyConstants.ERROR_INVALID_APPOINTMENT, "Employee Id"); 111 success &= false; 112 } 113 return success; 114 } 115 116 protected boolean checkPositionIsValid() { 117 boolean success = true; 118 119 if ((ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getPositionNumber())) && (ObjectUtils.isNotNull(newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear()))) { 120 121 String emplid = newCalculatedSalaryFoundationTrackerOverride.getEmplid(); 122 String positionNumber = newCalculatedSalaryFoundationTrackerOverride.getPositionNumber(); 123 Integer universityFiscalYear = newCalculatedSalaryFoundationTrackerOverride.getUniversityFiscalYear(); 124 boolean result = calculatedSalaryFoundationTrackerOverrideService.isValidAppointment(universityFiscalYear, positionNumber, emplid); 125 if (!result) { 126 putFieldError("positionNumber", BCKeyConstants.ERROR_INVALID_POSITION, "Position Number"); 127 success &= false; 128 } 129 } 130 else { 131 putFieldError("positionNumber", BCKeyConstants.ERROR_INVALID_POSITION, "Position Number"); 132 success &= false; 133 } 134 return success; 135 } 136 137 /** 138 * Sets the calculatedSalaryFoundationTrackerOverrideService attribute value. 139 * 140 * @param calculatedSalaryFoundationTrackerOverrideService The calculatedSalaryFoundationTrackerOverrideService to set. 141 */ 142 public void setCalculatedSalaryFoundationTrackerOverrideService(CalculatedSalaryFoundationTrackerOverrideService calculatedSalaryFoundationTrackerOverrideService) { 143 this.calculatedSalaryFoundationTrackerOverrideService = calculatedSalaryFoundationTrackerOverrideService; 144 } 145 146 }