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.purap.document.validation.impl;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.kuali.kfs.module.purap.PurapConstants;
020 import org.kuali.kfs.module.purap.PurapKeyConstants;
021 import org.kuali.kfs.module.purap.PurapPropertyConstants;
022 import org.kuali.kfs.module.purap.PurapConstants.PODocumentsStrings;
023 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
024 import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument;
025 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
026 import org.kuali.kfs.sys.service.PostalCodeValidationService;
027 import org.kuali.kfs.vnd.VendorPropertyConstants;
028 import org.kuali.kfs.vnd.VendorConstants.VendorTypes;
029 import org.kuali.kfs.vnd.businessobject.VendorDetail;
030 import org.kuali.kfs.vnd.document.service.VendorService;
031 import org.kuali.rice.kns.service.DataDictionaryService;
032 import org.kuali.rice.kns.util.GlobalVariables;
033 import org.kuali.rice.kns.util.MessageMap;
034 import org.kuali.rice.kns.util.ObjectUtils;
035
036 public class PurchaseOrderProcessVendorValidation extends PurchasingProcessVendorValidation {
037
038 private DataDictionaryService dataDictionaryService;
039 private PostalCodeValidationService postalCodeValidationService;
040 // private VendorService vendorService;
041
042 /**
043 * Validation for the Stipulation tab.
044 *
045 * @param poDocument the purchase order document to be validated
046 * @return boolean false if the vendor stipulation description is blank.
047 */
048 public boolean validate(AttributedDocumentEvent event) {
049 boolean valid = super.validate(event);
050 PurchasingAccountsPayableDocument purapDocument = (PurchasingAccountsPayableDocument)event.getDocument();
051 PurchaseOrderDocument poDocument = (PurchaseOrderDocument) purapDocument;
052 MessageMap errorMap = GlobalVariables.getMessageMap();
053 errorMap.clearErrorPath();
054 errorMap.addToErrorPath(PurapConstants.VENDOR_ERRORS);
055
056 // check to see if the vendor exists in the database, i.e. its ID is not null
057 Integer vendorHeaderID = poDocument.getVendorHeaderGeneratedIdentifier();
058 if (ObjectUtils.isNull(vendorHeaderID)) {
059 valid = false;
060 errorMap.putError(VendorPropertyConstants.VENDOR_NAME, PurapKeyConstants.ERROR_NONEXIST_VENDOR);
061 }
062
063 // vendor active validation...
064 VendorDetail vendorDetail = super.getVendorService().getVendorDetail(poDocument.getVendorHeaderGeneratedIdentifier(), poDocument.getVendorDetailAssignedIdentifier());
065 if (ObjectUtils.isNull(vendorDetail))
066 return valid;
067
068 // make sure that the vendor is active
069 if (!vendorDetail.isActiveIndicator()) {
070 valid &= false;
071 errorMap.putError(VendorPropertyConstants.VENDOR_NAME, PurapKeyConstants.ERROR_INACTIVE_VENDOR);
072 }
073
074 // validate vendor address
075 postalCodeValidationService.validateAddress(poDocument.getVendorCountryCode(), poDocument.getVendorStateCode(), poDocument.getVendorPostalCode(), PurapPropertyConstants.VENDOR_STATE_CODE, PurapPropertyConstants.VENDOR_POSTAL_CODE);
076
077 // Do checks for alternate payee vendor.
078 Integer alternateVendorHdrGeneratedId = poDocument.getAlternateVendorHeaderGeneratedIdentifier();
079 Integer alternateVendorHdrDetailAssignedId = poDocument.getAlternateVendorDetailAssignedIdentifier();
080
081 VendorDetail alternateVendor = super.getVendorService().getVendorDetail(alternateVendorHdrGeneratedId,alternateVendorHdrDetailAssignedId);
082
083 if (alternateVendor != null) {
084 if (alternateVendor.isVendorDebarred()) {
085 errorMap.putError(PurapPropertyConstants.ALTERNATE_VENDOR_NAME,PurapKeyConstants.ERROR_PURCHASE_ORDER_ALTERNATE_VENDOR_DEBARRED);
086 valid &= false;
087 }
088 if (StringUtils.equals(alternateVendor.getVendorHeader().getVendorTypeCode(), VendorTypes.DISBURSEMENT_VOUCHER)) {
089 errorMap.putError(PurapPropertyConstants.ALTERNATE_VENDOR_NAME,PurapKeyConstants.ERROR_PURCHASE_ORDER_ALTERNATE_VENDOR_DV_TYPE);
090 valid &= false;
091 }
092 if (!alternateVendor.isActiveIndicator()) {
093 errorMap.putError(PurapPropertyConstants.ALTERNATE_VENDOR_NAME,PurapKeyConstants.ERROR_PURCHASE_ORDER_ALTERNATE_VENDOR_INACTIVE,PODocumentsStrings.ALTERNATE_PAYEE_VENDOR);
094 valid &= false;
095 }
096 }
097
098 errorMap.clearErrorPath();
099 return valid;
100 }
101
102 public DataDictionaryService getDataDictionaryService() {
103 return dataDictionaryService;
104 }
105
106 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
107 this.dataDictionaryService = dataDictionaryService;
108 }
109
110 public void setPostalCodeValidationService(PostalCodeValidationService postalCodeValidationService) {
111 this.postalCodeValidationService = postalCodeValidationService;
112 }
113 // public VendorService getVendorService() {
114 // return vendorService;
115 // }
116
117 // public void setVendorService(VendorService vendorService) {
118 // this.vendorService = vendorService;
119 // }
120 }