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.cam.document.validation.impl;
017
018 import java.sql.Date;
019 import java.util.HashMap;
020 import java.util.Map;
021
022 import org.kuali.kfs.module.cam.CamsKeyConstants;
023 import org.kuali.kfs.module.cam.CamsPropertyConstants;
024 import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail;
025 import org.kuali.kfs.module.cam.document.AssetPaymentDocument;
026 import org.kuali.kfs.module.cam.document.service.AssetPaymentService;
027 import org.kuali.kfs.sys.KFSKeyConstants;
028 import org.kuali.kfs.sys.KFSPropertyConstants;
029 import org.kuali.kfs.sys.businessobject.AccountingLine;
030 import org.kuali.kfs.sys.businessobject.UniversityDate;
031 import org.kuali.kfs.sys.document.validation.GenericValidation;
032 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
033 import org.kuali.kfs.sys.service.UniversityDateService;
034 import org.kuali.rice.kns.service.BusinessObjectService;
035 import org.kuali.rice.kns.service.DataDictionaryService;
036 import org.kuali.rice.kns.service.DateTimeService;
037 import org.kuali.rice.kns.util.GlobalVariables;
038
039 /**
040 * This class validates asset payment posting date
041 */
042 public class AssetPaymentPostingDateValidation extends GenericValidation {
043
044 private AccountingLine accountingLineForValidation;
045 private DateTimeService dateTimeService;
046 private BusinessObjectService businessObjectService;
047 private DataDictionaryService dataDictionaryService;
048 private UniversityDateService universityDateService;
049 private AssetPaymentService assetPaymentService;
050
051
052 /**
053 * Validates asset payment posting date
054 *
055 * @see org.kuali.kfs.sys.document.validation.Validation#validate(org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent)
056 */
057 public boolean validate(AttributedDocumentEvent event) {
058 // skip check if accounting line is from CAB
059 AssetPaymentDocument assetPaymentDocument = (AssetPaymentDocument) event.getDocument();
060 if (assetPaymentDocument.isCapitalAssetBuilderOriginIndicator()) {
061 return true;
062 }
063
064 boolean valid = true;
065 AssetPaymentDetail assetPaymentDetail = (AssetPaymentDetail) getAccountingLineForValidation();
066 Date expenditureFinancialDocumentPostedDate = assetPaymentDetail.getExpenditureFinancialDocumentPostedDate();
067 if (expenditureFinancialDocumentPostedDate != null) {
068 // check if date is after today
069 java.util.Date today = dateTimeService.getCurrentDate();
070 if (expenditureFinancialDocumentPostedDate.after(today)) {
071 GlobalVariables.getMessageMap().putError(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE, CamsKeyConstants.Payment.ERROR_POSTING_DATE_FUTURE_NOT_ALLOWED);
072 return false;
073 }
074 Map<String, Object> keyToFind = new HashMap<String, Object>();
075 keyToFind.put(KFSPropertyConstants.UNIVERSITY_DATE, expenditureFinancialDocumentPostedDate);
076 UniversityDate universityDate = (UniversityDate) businessObjectService.findByPrimaryKey(UniversityDate.class, keyToFind);
077
078 if (universityDate == null) {
079 String label = dataDictionaryService.getDataDictionary().getBusinessObjectEntry(AssetPaymentDetail.class.getName()).getAttributeDefinition(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE).getLabel();
080 GlobalVariables.getMessageMap().putError(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE, KFSKeyConstants.ERROR_EXISTENCE, label);
081 return false;
082 }
083
084 // Validating the fiscal year extracted from posted document date is not greater than the current fiscal year.
085 Integer currentFiscalYear = universityDateService.getCurrentFiscalYear();
086 if (universityDate.getUniversityFiscalYear().compareTo(currentFiscalYear) > 0) {
087 GlobalVariables.getMessageMap().putError(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE, CamsKeyConstants.Payment.ERROR_INVALID_DOC_POST_DATE);
088 valid = false;
089 }
090 if (valid) {
091 assetPaymentService.extractPostedDatePeriod(assetPaymentDetail);
092 }
093 }
094 else {
095 String label = dataDictionaryService.getDataDictionary().getBusinessObjectEntry(AssetPaymentDetail.class.getName()).getAttributeDefinition(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE).getLabel();
096 GlobalVariables.getMessageMap().putError(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE, KFSKeyConstants.ERROR_REQUIRED, label);
097 valid = false;
098 }
099 return valid;
100 }
101
102 public AccountingLine getAccountingLineForValidation() {
103 return accountingLineForValidation;
104 }
105
106 public void setAccountingLineForValidation(AccountingLine accountingLine) {
107 this.accountingLineForValidation = accountingLine;
108 }
109
110 public DateTimeService getDateTimeService() {
111 return dateTimeService;
112 }
113
114 public void setDateTimeService(DateTimeService dateTimeService) {
115 this.dateTimeService = dateTimeService;
116 }
117
118 public BusinessObjectService getBusinessObjectService() {
119 return businessObjectService;
120 }
121
122 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
123 this.businessObjectService = businessObjectService;
124 }
125
126 public DataDictionaryService getDataDictionaryService() {
127 return dataDictionaryService;
128 }
129
130 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
131 this.dataDictionaryService = dataDictionaryService;
132 }
133
134 public UniversityDateService getUniversityDateService() {
135 return universityDateService;
136 }
137
138 public void setUniversityDateService(UniversityDateService universityDateService) {
139 this.universityDateService = universityDateService;
140 }
141
142 public AssetPaymentService getAssetPaymentService() {
143 return assetPaymentService;
144 }
145
146 public void setAssetPaymentService(AssetPaymentService assetPaymentService) {
147 this.assetPaymentService = assetPaymentService;
148 }
149 }