/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.tem.document.validation.impl; import java.util.List; import org.kuali.kfs.module.tem.TemConstants; import org.kuali.kfs.module.tem.businessobject.TravelPayment; import org.kuali.kfs.module.tem.document.TravelDocument; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.document.validation.GenericValidation; import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent; import org.kuali.rice.krad.bo.Note; import org.kuali.rice.krad.util.GlobalVariables; import org.kuali.rice.krad.util.MessageMap; import org.kuali.rice.krad.util.ObjectUtils; /** * Validates that when certain conditions exist, notes are present on the document to explain the conditions */ public class TravelPaymentRequiredNotesValidation extends GenericValidation { protected TravelDocument travelDocumentForValidation; protected TravelPayment travelPaymentForValidation; /** * Verifies that if special handling or exception attached are checked, notes for them are present. * @param event the event triggering this validation * @return true if the validation successfully verified the status of the document, false otherwise */ @Override public boolean validate(AttributedDocumentEvent event) { boolean isValid = true; MessageMap errors = GlobalVariables.getMessageMap(); final boolean noteless = hasNoNotes(); /* if special handling indicated, must be a note explaining why */ if (getTravelPaymentForValidation().isSpecialHandlingCode() && noteless) { errors.putErrorWithoutFullErrorPath(TemConstants.GENERAL_TRAVEL_PAYMENT_TAB_KEY, KFSKeyConstants.ERROR_SPECIAL_HANDLING_NOTE_MISSING); isValid = false; } /* if exception attached indicated, must be a note explaining why */ if (getTravelPaymentForValidation().isExceptionAttachedIndicator() && noteless) { errors.putErrorWithoutFullErrorPath(TemConstants.GENERAL_TRAVEL_PAYMENT_TAB_KEY, KFSKeyConstants.ERROR_EXCEPTION_ATTACHED_NOTE_MISSING); isValid = false; } return isValid; } /** * Return true if disbursement voucher does not have any notes * * @param document submitted disbursement voucher document * @return whether the given document has no notes */ protected boolean hasNoNotes() { final List<Note> notes = getTravelDocumentForValidation().getNotes(); return (ObjectUtils.isNull(notes) || notes.isEmpty()); } /** * @return the travel document which is being validated */ public TravelDocument getTravelDocumentForValidation() { return travelDocumentForValidation; } /** * Sets the travel document which is being validated * @param travelDocumentForValidation the travel document which is about to get itself all validated */ public void setTravelDocumentForValidation(TravelDocument travelDocumentForValidation) { this.travelDocumentForValidation = travelDocumentForValidation; } /** * @return the travel payment which should be validated */ public TravelPayment getTravelPaymentForValidation() { return travelPaymentForValidation; } /** * Sets the travel payment which should be validated * @param travelPaymentForValidation the travel payment which should be validated */ public void setTravelPaymentForValidation(TravelPayment travelPaymentForValidation) { this.travelPaymentForValidation = travelPaymentForValidation; } }