001/* 002 * Copyright 2008-2009 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 */ 016package org.kuali.ole.module.purap.document.validation.impl; 017 018import org.kuali.ole.module.purap.PurapConstants; 019import org.kuali.ole.module.purap.PurapKeyConstants; 020import org.kuali.ole.module.purap.businessobject.PurApAccountingLine; 021import org.kuali.ole.module.purap.businessobject.PurApItem; 022import org.kuali.ole.module.purap.document.PurchaseOrderDocument; 023import org.kuali.ole.module.purap.document.service.PurchaseOrderService; 024import org.kuali.ole.sys.context.SpringContext; 025import org.kuali.ole.sys.document.validation.GenericValidation; 026import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent; 027import org.kuali.rice.krad.util.GlobalVariables; 028 029import java.util.List; 030 031public class PurchaseOrderAmendmentAccountValidation extends GenericValidation { 032 033 public boolean validate(AttributedDocumentEvent event) { 034 035 boolean valid = true; 036 PurchaseOrderDocument poaDocument = (PurchaseOrderDocument) event.getDocument(); 037 List<PurApItem> items = poaDocument.getItemsActiveOnly(); 038 039 PurchaseOrderDocument po = SpringContext.getBean(PurchaseOrderService.class).getCurrentPurchaseOrder(poaDocument.getPurapDocumentIdentifier()); 040 List<PurApItem> poItems = po.getItems(); 041 042 for (PurApItem item : items) { 043 String identifierString = item.getItemIdentifierString(); 044 045 // check to see if the account has been expired or inactive 046 if (item.getItemTypeCode().equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_ITEM_CODE) && item.getSourceAccountingLines() != null && item.getSourceAccountingLines().size() > 0) { 047 048 // check only if there are changes on the item 049 if (isItemChanged(item, poItems)) { 050 List<PurApAccountingLine> accountingLines = item.getSourceAccountingLines(); 051 for (PurApAccountingLine accountingLine : accountingLines) { 052 if (accountingLine.getAccount().isExpired()) { 053 valid = false; 054 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNT_EXPIRED, accountingLine.getAccount().getAccountNumber()); 055 break; 056 } 057 if (!accountingLine.getAccount().isActive()) { 058 valid = false; 059 GlobalVariables.getMessageMap().putError(PurapConstants.ITEM_TAB_ERROR_PROPERTY, PurapKeyConstants.ERROR_ITEM_ACCOUNT_INACTIVE, accountingLine.getAccount().getAccountNumber()); 060 break; 061 } 062 } 063 } 064 } 065 } 066 067 return valid; 068 } 069 070 private boolean isItemChanged(PurApItem poaItem, List<PurApItem> poItems) { 071 072 boolean changed = false; 073 074 int poaItemId = poaItem.getItemLineNumber().intValue(); 075 076 for (PurApItem poItem : poItems) { 077 078 if (poItem.getItemTypeCode().equals(PurapConstants.ItemTypeCodes.ITEM_TYPE_ITEM_CODE) && poaItemId == poItem.getItemLineNumber().intValue()) { 079 // required fields so they cannot be null 080 if (poaItem.getItemQuantity().intValue() != poItem.getItemQuantity().intValue()) { 081 changed = true; 082 } 083 if (!poaItem.getItemUnitOfMeasureCode().equals(poItem.getItemUnitOfMeasureCode())) { 084 changed = true; 085 } 086 if (poaItem.getItemUnitPrice().floatValue() != poItem.getItemUnitPrice().floatValue()) { 087 changed = true; 088 } 089 if (poaItem.getTotalAmount().floatValue() != poItem.getTotalAmount().floatValue()) { 090 changed = true; 091 } 092 if (poaItem.getItemAssignedToTradeInIndicator() != poItem.getItemAssignedToTradeInIndicator()) { 093 changed = true; 094 } 095 // optional fields 096 if ((poaItem.getItemCatalogNumber() != null && !poaItem.getItemCatalogNumber().equals(poItem.getItemCatalogNumber())) || 097 (poItem.getItemCatalogNumber() != null && !poItem.getItemCatalogNumber().equals(poaItem.getItemCatalogNumber()))) { 098 changed = true; 099 } 100 if ((poaItem.getItemDescription() != null && !poaItem.getItemDescription().equals(poItem.getItemDescription())) || 101 (poItem.getItemDescription() != null && !poItem.getItemDescription().equals(poaItem.getItemDescription()))) { 102 changed = true; 103 } 104 if ((poaItem.getExtendedPrice() != null && poItem.getExtendedPrice() != null && poaItem.getExtendedPrice().floatValue() != poItem.getExtendedPrice().floatValue()) || 105 (poaItem.getExtendedPrice() != null && poaItem.getExtendedPrice().floatValue() != 0 && poItem.getExtendedPrice() == null) || 106 (poaItem.getExtendedPrice() == null && poItem.getExtendedPrice() != null && poItem.getExtendedPrice().floatValue() != 0)) { 107 changed = true; 108 } 109 if ((poaItem.getItemTaxAmount() != null && poItem.getItemTaxAmount() != null && poaItem.getItemTaxAmount().floatValue() != poItem.getItemTaxAmount().floatValue()) || 110 (poaItem.getItemTaxAmount() != null && poaItem.getItemTaxAmount().floatValue() != 0 && poItem.getItemTaxAmount() != null) || 111 (poaItem.getItemTaxAmount() == null && poItem.getItemTaxAmount() != null && poItem.getItemTaxAmount().floatValue() != 0)) { 112 changed = true; 113 } 114 115 break; 116 } 117 } 118 119 return changed; 120 } 121}