001    /**
002     * Copyright 2004-2013 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.hr.time.principal.validation;
017    
018    import org.apache.commons.lang.StringUtils;
019    import org.kuali.hr.time.principal.PrincipalHRAttributes;
020    import org.kuali.hr.time.util.ValidationUtils;
021    import org.kuali.rice.kns.document.MaintenanceDocument;
022    import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
023    import org.kuali.rice.krad.bo.PersistableBusinessObject;
024    
025    public class PrincipalHRAttributesRule extends MaintenanceDocumentRuleBase {
026    
027            private boolean validatePrincipalId(PrincipalHRAttributes principalHRAttr) {
028                    if (principalHRAttr.getPrincipalId() != null
029                                    && !ValidationUtils.validatePrincipalId(principalHRAttr
030                                                    .getPrincipalId())) {
031                            this.putFieldError("principalId", "error.existence",
032                                            "principalId '" + principalHRAttr.getPrincipalId() + "'");
033                            return false;
034                    } else {
035                            return true;
036                    }
037            }
038            
039            private boolean validatePayCalendar(PrincipalHRAttributes principalHRAttr) {
040                    if (principalHRAttr.getPayCalendar() != null
041                                    && !ValidationUtils.validateCalendarByType(principalHRAttr.getPayCalendar(), "Pay")) {
042                            this.putFieldError("payCalendar", "error.existence",
043                                            "Pay Calendar '" + principalHRAttr.getPayCalendar() + "'");
044                            return false;
045                    } else {
046                            return true;
047                    }
048            }
049            
050            private boolean validateLeaveCalendar(PrincipalHRAttributes principalHRAttr) {
051                    if (principalHRAttr.getLeaveCalendar() != null
052                                    && !ValidationUtils.validateCalendarByType(principalHRAttr.getLeaveCalendar(), "Leave")) {
053                            this.putFieldError("leaveCalendar", "error.existence",
054                                            "Leave Calendar '" + principalHRAttr.getLeaveCalendar() + "'");
055                            return false;
056                    } else {
057                            return true;
058                    }
059            }
060            
061            
062            private boolean validateLeavePlan(PrincipalHRAttributes principalHRAttr) {
063                    if (principalHRAttr.getLeavePlan() != null
064                                    && !ValidationUtils.validateLeavePlan(principalHRAttr.getLeavePlan(), null)) {
065                            this.putFieldError("leavePlan", "error.existence",
066                                            "leavePlan '" + principalHRAttr.getLeavePlan() + "'");
067                            return false;
068                    } else {
069                            return true;
070                    }
071            }
072    
073        private boolean validateServiceDate(PrincipalHRAttributes principalHRAttr) {
074            if (StringUtils.isNotEmpty(principalHRAttr.getLeavePlan())
075                    && principalHRAttr.getServiceDate() == null) {
076                this.putFieldError("leavePlan", "validation.prerequisite", "'Service Date'");
077                return false;
078            }
079            return true;
080        }
081            
082            boolean validateEffectiveDate(PrincipalHRAttributes principalHRAttr) {
083                    boolean valid = true;
084                    if (principalHRAttr.getEffectiveDate() != null && !ValidationUtils.validateOneYearFutureDate(principalHRAttr.getEffectiveDate())) {
085                            this.putFieldError("effectiveDate", "error.date.exceed.year", "Effective Date");
086                            valid = false;
087                    }
088                    return valid;
089            }
090            
091            @Override
092            protected boolean processCustomRouteDocumentBusinessRules(
093                            MaintenanceDocument document) {
094                    boolean valid = false;
095    
096    
097                    LOG.debug("entering custom validation for Job");
098                    PersistableBusinessObject pbo = (PersistableBusinessObject) this.getNewBo();
099                    if (pbo instanceof PrincipalHRAttributes) {
100                            PrincipalHRAttributes principalHRAttr = (PrincipalHRAttributes) pbo;
101                            if (principalHRAttr != null) {
102                                    valid = true;
103                                    valid &= this.validatePrincipalId(principalHRAttr);
104                                    // KPME-1442 Kagata
105                                    //valid &= this.validateEffectiveDate(principalHRAttr);
106                                    valid &= this.validatePayCalendar(principalHRAttr);
107                                    valid &= this.validateLeaveCalendar(principalHRAttr);
108                                    valid &= this.validateLeavePlan(principalHRAttr);
109                    valid &= this.validateServiceDate(principalHRAttr);
110                            }
111                    }
112                    return valid;
113            }
114    
115    }