/*
* 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 org.apache.commons.lang.StringUtils;
import org.kuali.kfs.module.tem.TemKeyConstants;
import org.kuali.kfs.module.tem.TemPropertyConstants;
import org.kuali.kfs.module.tem.businessobject.ActualExpense;
import org.kuali.kfs.module.tem.businessobject.MileageRate;
import org.kuali.kfs.module.tem.document.TravelDocument;
import org.kuali.kfs.module.tem.document.service.MileageRateService;
import org.kuali.kfs.sys.document.validation.GenericValidation;
import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* Determines that an actual expense - if it has a mileage rate expense object code - has a valid mileage rate for the document-effective
* date of the expense
*/
public class ActualExpenseMileageRateExistsValidation extends GenericValidation {
protected ActualExpense actualExpenseForValidation;
protected MileageRateService mileageRateService;
@Override
public boolean validate(AttributedDocumentEvent event) {
if (!StringUtils.isBlank(getActualExpenseForValidation().getExpenseTypeCode())) {
if (ObjectUtils.isNull(getActualExpenseForValidation().getExpenseType()) || !StringUtils.equals(getActualExpenseForValidation().getExpenseType().getCode(), getActualExpenseForValidation().getExpenseTypeCode())) {
getActualExpenseForValidation().refreshReferenceObject(TemPropertyConstants.EXPENSE_TYPE);
}
if (getActualExpenseForValidation().isMileage()) {
final TravelDocument doc = (TravelDocument)event.getDocument();
final java.sql.Date effectiveDate = doc.getEffectiveDateForMileageRate(getActualExpenseForValidation());
final MileageRate rate = getMileageRateService().findMileageRateByExpenseTypeCodeAndDate(getActualExpenseForValidation().getExpenseTypeCode(), effectiveDate);
if (ObjectUtils.isNull(rate)) {
GlobalVariables.getMessageMap().putError(TemPropertyConstants.EXPENSE_TYPE_CODE, TemKeyConstants.ERROR_ACTUAL_EXPENSE_MISSING_MILEAGE_RATE, new String[] { getActualExpenseForValidation().getExpenseType().getName() });
return false;
}
}
}
return true;
}
public MileageRateService getMileageRateService() {
return mileageRateService;
}
public void setMileageRateService(MileageRateService mileageRateService) {
this.mileageRateService = mileageRateService;
}
public ActualExpense getActualExpenseForValidation() {
return actualExpenseForValidation;
}
public void setActualExpenseForValidation(ActualExpense actualExpenseForValidation) {
this.actualExpenseForValidation = actualExpenseForValidation;
}
}