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.PaymentRequestDocument;
023 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
024 import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument;
025 import org.kuali.kfs.module.purap.document.service.PaymentRequestService;
026 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService;
027 import org.kuali.kfs.sys.document.validation.GenericValidation;
028 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
029 import org.kuali.kfs.vnd.VendorUtils;
030 import org.kuali.kfs.vnd.businessobject.VendorDetail;
031 import org.kuali.kfs.vnd.document.service.VendorService;
032 import org.kuali.rice.kns.util.GlobalVariables;
033 import org.kuali.rice.kns.util.ObjectUtils;
034
035 public class VendorCreditMemoInitTabReferenceNumberValidation extends GenericValidation {
036
037 private PaymentRequestService paymentRequestService;
038 private PurchaseOrderService purchaseOrderService;
039 private VendorService vendorService;
040
041 /**
042 * Validates only one of preq, po, or vendor number was given. Then validates the existence of that number.
043 */
044 public boolean validate(AttributedDocumentEvent event) {
045 boolean valid = true;
046 VendorCreditMemoDocument cmDocument = (VendorCreditMemoDocument) event.getDocument();
047
048 if (!(ObjectUtils.isNotNull(cmDocument.getPaymentRequestIdentifier()) ^ StringUtils.isNotEmpty(cmDocument.getVendorNumber()) ^ ObjectUtils.isNotNull(cmDocument.getPurchaseOrderIdentifier())) || (ObjectUtils.isNotNull(cmDocument.getPaymentRequestIdentifier()) && StringUtils.isNotEmpty(cmDocument.getVendorNumber()) && ObjectUtils.isNotNull(cmDocument.getPurchaseOrderIdentifier()))) {
049 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_CREDIT_MEMO_REQUIRED_FIELDS);
050 valid = false;
051 }
052 else {
053 // Make sure PREQ is valid if entered
054 Integer preqNumber = cmDocument.getPaymentRequestIdentifier();
055 if (ObjectUtils.isNotNull(preqNumber)) {
056 PaymentRequestDocument preq = paymentRequestService.getPaymentRequestById(preqNumber);
057 if (ObjectUtils.isNull(preq)) {
058 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(PurapPropertyConstants.PAYMENT_REQUEST_ID, PurapKeyConstants.ERROR_CREDIT_MEMO_PAYMENT_REQEUEST_INVALID, preqNumber.toString());
059 valid = false;
060 }
061 else if ((PurapConstants.PaymentRequestStatuses.IN_PROCESS.equals(preq.getStatusCode())) || (PurapConstants.PaymentRequestStatuses.CANCELLED_STATUSES.contains(preq.getStatusCode()))) {
062 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(PurapPropertyConstants.PAYMENT_REQUEST_ID, PurapKeyConstants.ERROR_CREDIT_MEMO_PAYMENT_REQEUEST_INVALID_SATATUS, preqNumber.toString());
063 valid = false;
064 }
065 }
066
067 // Make sure PO # is valid if entered
068 Integer purchaseOrderID = cmDocument.getPurchaseOrderIdentifier();
069 if (ObjectUtils.isNotNull(purchaseOrderID)) {
070 PurchaseOrderDocument purchaseOrder = purchaseOrderService.getCurrentPurchaseOrder(purchaseOrderID);
071 if (ObjectUtils.isNull(purchaseOrder)) {
072 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_CREDIT_MEMO_PURCHASE_ORDER_INVALID, purchaseOrderID.toString());
073 valid = false;
074 }
075 else if (purchaseOrder.isPendingActionIndicator()) {
076 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_PURCHASE_PENDING_ACTION);
077 valid &= false;
078 }
079 else if (!(StringUtils.equals(purchaseOrder.getStatusCode(), PurapConstants.PurchaseOrderStatuses.OPEN) || StringUtils.equals(purchaseOrder.getStatusCode(), PurapConstants.PurchaseOrderStatuses.CLOSED))) {
080 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, PurapKeyConstants.ERROR_CREDIT_MEMO_PURCAHSE_ORDER_INVALID_STATUS, purchaseOrderID.toString());
081 valid = false;
082 }
083 }
084
085 // Make sure vendorNumber is valid if entered
086 String vendorNumber = cmDocument.getVendorNumber();
087 if (StringUtils.isNotEmpty(vendorNumber)) {
088 VendorDetail vendor = vendorService.getVendorDetail(VendorUtils.getVendorHeaderId(vendorNumber), VendorUtils.getVendorDetailId(vendorNumber));
089 if (ObjectUtils.isNull(vendor)) {
090 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(PurapPropertyConstants.VENDOR_NUMBER, PurapKeyConstants.ERROR_CREDIT_MEMO_VENDOR_NUMBER_INVALID, vendorNumber);
091 valid = false;
092 }
093 }
094 }
095 return valid;
096 }
097
098 public PaymentRequestService getPaymentRequestService() {
099 return paymentRequestService;
100 }
101
102 public void setPaymentRequestService(PaymentRequestService paymentRequestService) {
103 this.paymentRequestService = paymentRequestService;
104 }
105
106 public PurchaseOrderService getPurchaseOrderService() {
107 return purchaseOrderService;
108 }
109
110 public void setPurchaseOrderService(PurchaseOrderService purchaseOrderService) {
111 this.purchaseOrderService = purchaseOrderService;
112 }
113
114 public VendorService getVendorService() {
115 return vendorService;
116 }
117
118 public void setVendorService(VendorService vendorService) {
119 this.vendorService = vendorService;
120 }
121
122 }