/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.purap.document.validation.impl; import org.kuali.kfs.module.purap.PurapConstants; import org.kuali.kfs.module.purap.PurapKeyConstants; import org.kuali.kfs.module.purap.PurapPropertyConstants; import org.kuali.kfs.module.purap.businessobject.PurApItem; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; import org.kuali.kfs.module.purap.businessobject.PurchasingItemBase; import org.kuali.kfs.module.purap.document.PurchaseOrderAmendmentDocument; import org.kuali.kfs.module.purap.document.service.PurchaseOrderService; import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.WorkflowDocument; import org.kuali.rice.krad.util.GlobalVariables; public class PurchaseOrderAmendmentNewIndividualItemValidation extends PurchaseOrderNewIndividualItemValidation { private PurchaseOrderService purchaseOrderService; /** * Overrides the method in PurchaseOrderNewIndividualItemValidation to add additional validations that are specific to Amendment. * * @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) */ @Override public boolean validate(AttributedDocumentEvent event) { boolean valid = super.validate(event); PurchaseOrderItem item = (PurchaseOrderItem) getItemForValidation(); String identifierString = item.getItemIdentifierString(); if ((item.getItemInvoicedTotalQuantity() != null) && (!(item.getItemInvoicedTotalQuantity()).isZero())) { if (item.getItemQuantity() == null) { valid = false; GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_NULL, "Item Quantity", identifierString); } else if (item.getItemQuantity().compareTo(item.getItemInvoicedTotalQuantity()) < 0) { valid = false; GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_INVALID, "Item Quantity", identifierString); } } if (item.getItemInvoicedTotalAmount() != null) { KualiDecimal total = item.getTotalAmount().abs(); if ((total == null) || total.compareTo(item.getItemInvoicedTotalAmount().abs()) < 0) { valid = false; GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_AMND_INVALID_AMT, "Item Extended Price", identifierString); } } PurchaseOrderAmendmentDocument document = (PurchaseOrderAmendmentDocument)event.getDocument(); WorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); // run additional accounting line check for items added to POA via receiving line, only after document in enroute if ( !(workflowDocument.isInitiated() || workflowDocument.isSaved()) && purchaseOrderService.isNewUnorderedItem(item) ) { // check to see if the account lines are empty if (item.getSourceAccountingLines() == null || item.getSourceAccountingLines().size() == 0) { valid = false; GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNTING_INCOMPLETE, identifierString, identifierString); } } return valid; } /** * Overrides to provide validation for PurchaseOrderAmendmentDocument. * @see org.kuali.kfs.module.purap.document.validation.impl.PurchasingDocumentRuleBase#validateCommodityCodes(org.kuali.kfs.module.purap.businessobject.PurApItem, boolean) */ @Override protected boolean validateCommodityCodes(PurApItem item, boolean commodityCodeRequired) { //If the item is inactive then don't need any of the following validations. if (!((PurchaseOrderItem)item).isItemActiveIndicator()) { return true; } else { return super.validateCommodityCodes(item, commodityCodeRequired); } } /** * Overrides the method in PurchasingDocumentRuleBase so that we'll return true * if the item has been previously saved to the database and we'll only check for * the commodity code active flag if the item has not been previously saved to * the database. * * @param item * @param commodityCodeRequired * @return */ protected boolean validateThatCommodityCodeIsActive(PurApItem item) { if (item.getVersionNumber() != null) { return true; } else { if (!((PurchasingItemBase)item).getCommodityCode().isActive()) { GlobalVariables.getMessageMap().putError(PurapPropertyConstants.ITEM_COMMODITY_CODE, PurapKeyConstants.PUR_COMMODITY_CODE_INACTIVE, " in " + item.getItemIdentifierString()); return false; } return true; } } public PurchaseOrderService getPurchaseOrderService() { return purchaseOrderService; } public void setPurchaseOrderService(PurchaseOrderService purchaseOrderService) { this.purchaseOrderService = purchaseOrderService; } }