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.kuali.kfs.module.purap.PurapConstants; 019 import org.kuali.kfs.module.purap.PurapKeyConstants; 020 import org.kuali.kfs.module.purap.PurapPropertyConstants; 021 import org.kuali.kfs.module.purap.businessobject.PurApItem; 022 import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; 023 import org.kuali.kfs.module.purap.businessobject.PurchasingItemBase; 024 import org.kuali.kfs.module.purap.document.PurchaseOrderAmendmentDocument; 025 import org.kuali.kfs.module.purap.document.service.PurchaseOrderService; 026 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent; 027 import org.kuali.rice.kns.util.GlobalVariables; 028 import org.kuali.rice.kns.util.KualiDecimal; 029 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument; 030 031 public class PurchaseOrderAmendmentNewIndividualItemValidation extends PurchaseOrderNewIndividualItemValidation { 032 033 private PurchaseOrderService purchaseOrderService; 034 035 /** 036 * Overrides the method in PurchaseOrderNewIndividualItemValidation to add additional validations that are specific to Amendment. 037 * 038 * @see org.kuali.kfs.module.purap.document.validation.impl.PurchaseOrderDocumentRule#newIndividualItemValidation(org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument, java.lang.String, org.kuali.kfs.module.purap.businessobject.PurApItem) 039 */ 040 @Override 041 public boolean validate(AttributedDocumentEvent event) { 042 boolean valid = super.validate(event); 043 PurchaseOrderItem item = (PurchaseOrderItem) getItemForValidation(); 044 String identifierString = item.getItemIdentifierString(); 045 if ((item.getItemInvoicedTotalQuantity() != null) && (!(item.getItemInvoicedTotalQuantity()).isZero())) { 046 if (item.getItemQuantity() == null) { 047 valid = false; 048 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_NULL, "Item Quantity", identifierString); 049 } 050 else if (item.getItemQuantity().compareTo(item.getItemInvoicedTotalQuantity()) < 0) { 051 valid = false; 052 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_INVALID, "Item Quantity", identifierString); 053 } 054 } 055 056 if (item.getItemInvoicedTotalAmount() != null) { 057 KualiDecimal total = item.getTotalAmount().abs(); 058 if ((total == null) || total.compareTo(item.getItemInvoicedTotalAmount().abs()) < 0) { 059 valid = false; 060 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_INVALID_AMT, "Item Extended Price", identifierString); 061 } 062 } 063 064 PurchaseOrderAmendmentDocument document = (PurchaseOrderAmendmentDocument)event.getDocument(); 065 KualiWorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 066 067 // run additional accounting line check for items added to POA via receiving line, only after document in enroute 068 if ( !(workflowDocument.stateIsInitiated() || workflowDocument.stateIsSaved()) && purchaseOrderService.isNewUnorderedItem(item) ) { 069 070 // check to see if the account lines are empty 071 if (item.getSourceAccountingLines() == null || item.getSourceAccountingLines().size() == 0) { 072 valid = false; 073 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNTING_INCOMPLETE, identifierString, identifierString); 074 } 075 } 076 077 return valid; 078 } 079 080 /** 081 * Overrides to provide validation for PurchaseOrderAmendmentDocument. 082 * @see org.kuali.kfs.module.purap.document.validation.impl.PurchasingDocumentRuleBase#validateCommodityCodes(org.kuali.kfs.module.purap.businessobject.PurApItem, boolean) 083 */ 084 @Override 085 protected boolean validateCommodityCodes(PurApItem item, boolean commodityCodeRequired) { 086 //If the item is inactive then don't need any of the following validations. 087 if (!((PurchaseOrderItem)item).isItemActiveIndicator()) { 088 return true; 089 } 090 else { 091 return super.validateCommodityCodes(item, commodityCodeRequired); 092 } 093 } 094 095 /** 096 * Overrides the method in PurchasingDocumentRuleBase so that we'll return true 097 * if the item has been previously saved to the database and we'll only check for 098 * the commodity code active flag if the item has not been previously saved to 099 * the database. 100 * 101 * @param item 102 * @param commodityCodeRequired 103 * @return 104 */ 105 protected boolean validateThatCommodityCodeIsActive(PurApItem item) { 106 if (item.getVersionNumber() != null) { 107 return true; 108 } 109 else { 110 if (!((PurchasingItemBase)item).getCommodityCode().isActive()) { 111 GlobalVariables.getMessageMap().putError(PurapPropertyConstants.ITEM_COMMODITY_CODE, PurapKeyConstants.PUR_COMMODITY_CODE_INACTIVE, " in " + item.getItemIdentifierString()); 112 return false; 113 } 114 return true; 115 } 116 } 117 118 public PurchaseOrderService getPurchaseOrderService() { 119 return purchaseOrderService; 120 } 121 122 public void setPurchaseOrderService(PurchaseOrderService purchaseOrderService) { 123 this.purchaseOrderService = purchaseOrderService; 124 } 125 }