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 }