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    }