/* * GSAItemReturnActionImpl * * 07/23/2003 * * Copyright: * Licensed Materials - Property of IBM * "Restricted Materials of IBM" * 5724-AEF * (C) Copyright IBM Corp. 2003. * * %W% %E% */ package com.ibm.retail.AEF.action; import com.ibm.retail.AEF.automation.*; import com.ibm.retail.AEF.util.*; import com.ibm.retail.si.util.*; import com.ibm.retail.AEF.data.*; import com.ibm.retail.AEF.event.*; import com.ibm.retail.si.Copyright; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.rmi.*; import java.util.*; /** * GSAItemReturnActionImpl is a class which the POSAutomationProvider uses to * return items in a transaction on the POS application. * */ public class GSAItemReturnActionImpl extends GSAItemEntryActionImpl { static String copyright() { return com.ibm.retail.si.Copyright.IBM_COPYRIGHT_SHORT;} /** * Constructor * * @param request The ActionRequest which contains an ItemIdentifier. * @exception com.ibm.retail.AEF.util.AEFException * Among the possible AEFException error codes are: * <br>AEFConst.CONFIG_ERROR, AEFConst.FACTORY_ERROR * <br><a href="../commonerrorcodes.html">Common Errors</a> */ public GSAItemReturnActionImpl(ActionRequest request) throws AEFException { super(request); if (log.isTraceEnabled()) { tempAEFMessage.setMessage("+Enter GSAItemReturnActionImpl.GSAItemReturnActionImpl()."); log.trace(tempAEFMessage); } setReturnFlag(true); if (log.isTraceEnabled()) { tempAEFMessage.setMessage("-Exit GSAItemReturnActionImpl.GSAItemReturnActionImpl()."); log.trace(tempAEFMessage); } } /** * Perform the action represented by the ActionRequest and return an ActionResult. * * * @return Object An ArrayList of the items. * @exception com.ibm.retail.AEF.util.AEFException * Among the possible AEFException error codes are: * <br>AEFConst.APPLICATION_NOT_IN_PROPER_STATE * <br>AEFConst.OPERATION_TIMEOUT * <br>AEFConst.WAIT_INTERRUPTED * <br>AEFConst.CONFIG_ERROR, AEFConst.INVALID_KEY_SEQUENCE * <br>AEFConst.INVALID_ARGUMENT, AEFConst.INVALID_DEPARTMENT * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_CLASS_REQUIRED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_STOCK_REQUIRED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_DEPARTMENT_PROHIBITED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_CLASS_PROHIBITED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_DEPARTMENT_REQUIRED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_STOCK_PROHIBITED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_PRICE_REQUIRED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_QUANTITY_REQUIRED * <br>AEFConst.INVALID_ARGUMENT, AEFConst.DATA_OUT_OF_RANGE * <br>AEFConst.INVALID_ARGUMENT, AEFConst.EXTENDED_PRICE_TOO_LARGE * <br>AEFConst.ITEM_NOT_FOUND, AEFConst.NONE * <br>AEFConst.ITEM_NOT_FOR_SALE, AEFConst.NONE * <br>AEFConst.APPLICATION_LIMIT_EXCEEDED, AEFConst.ITEM_LIMIT * <br>AEFConst.PROCEDURE_NOT_ALLOWED, AEFConst.NOT_AUTHORIZED * <br>AEFConst.PRINTER_ERROR, AEFConst.NONE * <br>AEFConst.PRINTER_ERROR, AEFConst.JOURNAL_ERROR * <br>AEFConst.PRINTER_ERROR, AEFConst._BUFFER_FULL * <br>AEFConst.PRINTER_ERROR, AEFConst.COVER_OPEN * <br>AEFConst.ITEM_NOT_RETURNABLE * <br>AEFConst.UNSUPPORTED_OPERATION * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED * <br><a href="../commonerrorcodes.html">Common Errors</a> */ public Object performAction() throws AEFException { if (log.isTraceEnabled()) { tempAEFMessage.setMessage("+Enter GSAItemReturnActionImpl.performAction()."); log.trace(tempAEFMessage); } Object retVal = null; if (log.isDebugEnabled()) { tempAEFMessage.setMessage("GSAItemReturnActionImpl.performAction started for item: " + itemID); log.debug(tempAEFMessage); } try { // Set the original salesPerson if any. setOriginalSalesperson(); // Verify that a price was passed in. If not throw an exception! if (itemID.getPrice() != null) { retVal = super.performAction(); // Call super to add the item as a return. } else { throw(new AEFException(AEFConst.UNSUPPORTED_OPERATION, AEFConst.NONE, "GSAItemReturnActionImpl.performAction(): GSA does not support this action because a price is required.")); } } catch (AEFException e) { tempAEFMessage.setMessage("There was an AEF exception thrown in performAction of GSAItemReturnActionImpl."); log.error(tempAEFMessage, e); throw e; } if (log.isTraceEnabled()) { tempAEFMessage.setMessage("-Exit GSAItemReturnActionImpl.performAction()."); log.trace(tempAEFMessage); } return retVal; } /** * Determines if the default original salesperson ID is allowed during a return. * * @return boolean True if the enter key can be used instead of the original salesperson for a return. * @exception com.ibm.retail.AEF.util.AEFException * Among the possible AEFException error codes are: * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED * <br><a href="../commonerrorcodes.html">Common Errors</a> */ public boolean isDefaultOriginalSalespersonValid() throws AEFException { if (log.isTraceEnabled()) { tempAEFMessage.setMessage("+Enter GSAItemReturnActionImpl.isDefaultOriginalSalespersonValid()."); log.trace(tempAEFMessage); } boolean retVal = false; try { TerminalOptions termOpts = (TerminalOptions)dataProvider.getPropertyValue(OptionsProperties.CATEGORY, OptionsProperties.TERMINAL_OPTIONS); retVal = !(termOpts.isEnabled(TerminalOptionsProperties.ORIGINAL_SALES_PERSON_REQUIRED)); } catch (RemoteException re) { tempAEFMessage.setMessage("There was a remote exception thrown in isDefaultOriginalSalespersonValid() of GSAItemReturnActionImpl."); log.error(tempAEFMessage, re); } if (log.isTraceEnabled()) { tempAEFMessage.setMessage("-Exit GSAItemReturnActionImpl.isDefaultOriginalSalespersonValid()."); log.trace(tempAEFMessage); } return (retVal); } /** * Determines if the original salesperson is required for a return. * * @return boolean True if the original salesperson is required for a return. * @exception com.ibm.retail.AEF.util.AEFException * Among the possible AEFException error codes are: * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED * <br><a href="../commonerrorcodes.html">Common Errors</a> */ public boolean isOriginalSalespersonRequired() throws AEFException { if (log.isTraceEnabled()) { tempAEFMessage.setMessage("+Enter GSAItemReturnActionImpl.isOriginalSalespersonRequired()."); log.trace(tempAEFMessage); } boolean retVal = false; try { String currentTransactionType = (String)dataProvider.getPropertyValue(TransactionStatusProperties.CATEGORY, TransactionStatusProperties.TRANSACTION_TYPE); StoreOptions storeOpts = (StoreOptions)dataProvider.getPropertyValue(OptionsProperties.CATEGORY, OptionsProperties.STORE_OPTIONS); Collection transOptions = storeOpts.getTransactionDefinitions(); TransactionDefinition transDef = null; if ( (transOptions != null) && (!transOptions.isEmpty()) ) { Iterator it = transOptions.iterator(); while (it.hasNext()) { transDef = (TransactionDefinition)(it.next()); if (transDef.getType().equals(currentTransactionType)) { retVal = transDef.promptForOriginalSalesperson(); } } } } catch (AEFException ae) { tempAEFMessage.setMessage("There was an AEF exception thrown in isOriginalSalespersonRequired() of GSAItemReturnActionImpl."); log.error(tempAEFMessage, ae); } catch (RemoteException re) { tempAEFMessage.setMessage("There was a remote exception thrown in isOriginalSalespersonRequired() of GSAItemReturnActionImpl."); log.error(tempAEFMessage, re); } if (log.isTraceEnabled()) { tempAEFMessage.setMessage("-Exit GSAItemReturnActionImpl.isOriginalSalespersonRequired()."); log.trace(tempAEFMessage); } return(retVal); } /** * Sets the original salesperson. * * @exception com.ibm.retail.AEF.util.AEFException * Among the possible AEFException error codes are: * <br>AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED * <br><a href="../commonerrorcodes.html">Common Errors</a> */ public void setOriginalSalesperson() throws AEFException { if (log.isTraceEnabled()) { tempAEFMessage.setMessage("+Enter GSAItemReturnActionImpl.setOriginalSalesperson()."); log.trace(tempAEFMessage); } try { if (itemID.getOriginalSalesperson() != null) { dataProvider.setPropertyValue(ItemSalesProperties.CATEGORY, ItemSalesProperties.ORIGINAL_SALESPERSON, itemID.getOriginalSalesperson()); } else { if(isOriginalSalespersonRequired() == true && isDefaultOriginalSalespersonValid() == false) { throw(new AEFException(AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED, "GSAItemReturnActionImpl.setOriginalSalesperson(): The original salesperson is required for a return.")); } } } catch (RemoteException re) { tempAEFMessage.setMessage("There was a remote exception thrown in setOriginalSalesperson() of GSAItemReturnActionImpl."); log.error(tempAEFMessage, re); } if (log.isTraceEnabled()) { tempAEFMessage.setMessage("-Exit GSAItemReturnActionImpl.setOriginalSalesperson()."); log.trace(tempAEFMessage); } } // Instance and Class Variables private static Log log = LogFactory.getLog(GSAItemReturnActionImpl.class); }