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.document.BulkReceivingDocument; 023 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; 024 import org.kuali.kfs.module.purap.document.service.BulkReceivingService; 025 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService; 026 import org.kuali.kfs.module.purap.document.validation.ContinuePurapRule; 027 import org.kuali.kfs.sys.KFSKeyConstants; 028 import org.kuali.kfs.sys.KFSPropertyConstants; 029 import org.kuali.kfs.sys.context.SpringContext; 030 import org.kuali.rice.kns.document.Document; 031 import org.kuali.rice.kns.document.TransactionalDocument; 032 import org.kuali.rice.kns.rules.DocumentRuleBase; 033 import org.kuali.rice.kns.util.GlobalVariables; 034 import org.kuali.rice.kns.util.ObjectUtils; 035 036 public class BulkReceivingDocumentRule extends DocumentRuleBase implements ContinuePurapRule { 037 038 @Override 039 protected boolean processCustomRouteDocumentBusinessRules(Document document) { 040 041 boolean valid = true; 042 043 BulkReceivingDocument bulkReceivingDocument = (BulkReceivingDocument)document; 044 045 GlobalVariables.getMessageMap().clearErrorPath(); 046 GlobalVariables.getMessageMap().addToErrorPath(KFSPropertyConstants.DOCUMENT); 047 048 valid &= super.processCustomRouteDocumentBusinessRules(document); 049 valid &= canCreateBulkReceivingDocument(bulkReceivingDocument); 050 051 return valid; 052 } 053 054 public boolean processContinuePurapBusinessRules(TransactionalDocument document) { 055 056 boolean valid = true; 057 BulkReceivingDocument bulkReceivingDocument = (BulkReceivingDocument)document; 058 059 GlobalVariables.getMessageMap().clearErrorPath(); 060 GlobalVariables.getMessageMap().addToErrorPath(KFSPropertyConstants.DOCUMENT); 061 062 valid = hasRequiredFieldsForContinue(bulkReceivingDocument) && 063 canCreateBulkReceivingDocument(bulkReceivingDocument); 064 065 return valid; 066 } 067 068 /** 069 * Make sure the required fields on the init screen are filled in. 070 * 071 * @param bulkReceivingDocument 072 * @return 073 */ 074 protected boolean hasRequiredFieldsForContinue(BulkReceivingDocument bulkReceivingDocument){ 075 076 boolean valid = true; 077 078 if (ObjectUtils.isNull(bulkReceivingDocument.getShipmentReceivedDate())) { 079 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.SHIPMENT_RECEIVED_DATE, KFSKeyConstants.ERROR_REQUIRED, PurapConstants.BulkReceivingDocumentStrings.VENDOR_DATE); 080 valid = false; 081 } 082 083 return valid; 084 } 085 086 /** 087 * Determines if it is valid to create a bulk receiving document. 088 * 089 * @param bulkReceivingDocument 090 * @return 091 */ 092 protected boolean canCreateBulkReceivingDocument(BulkReceivingDocument bulkReceivingDocument){ 093 094 boolean valid = true; 095 096 if (bulkReceivingDocument.getPurchaseOrderIdentifier() != null){ 097 PurchaseOrderDocument po = SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(bulkReceivingDocument.getPurchaseOrderIdentifier()); 098 099 if (ObjectUtils.isNull(po)){ 100 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_BULK_RECEIVING_DOCUMENT_INVALID_PO, bulkReceivingDocument.getDocumentNumber(), bulkReceivingDocument.getPurchaseOrderIdentifier().toString()); 101 valid = false; 102 }else{ 103 if (!(po.getStatusCode().equals(PurapConstants.PurchaseOrderStatuses.OPEN) || 104 po.getStatusCode().equals(PurapConstants.PurchaseOrderStatuses.CLOSED))){ 105 valid &= false; 106 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_BULK_RECEIVING_PO_NOT_OPEN, bulkReceivingDocument.getDocumentNumber(), bulkReceivingDocument.getPurchaseOrderIdentifier().toString()); 107 }else{ 108 String docNumberInProcess = SpringContext.getBean(BulkReceivingService.class).getBulkReceivingDocumentNumberInProcessForPurchaseOrder(po.getPurapDocumentIdentifier(), bulkReceivingDocument.getDocumentNumber()); 109 if (StringUtils.isNotEmpty(docNumberInProcess)){ 110 valid &= false; 111 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_BULK_RECEIVING_DOCUMENT_ACTIVE_FOR_PO, docNumberInProcess, bulkReceivingDocument.getPurchaseOrderIdentifier().toString()); 112 } 113 } 114 } 115 } 116 117 return valid; 118 } 119 120 }