/*
* 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:
*
AEFConst.CONFIG_ERROR, AEFConst.FACTORY_ERROR
*
Common Errors
*/
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:
*
AEFConst.APPLICATION_NOT_IN_PROPER_STATE
*
AEFConst.OPERATION_TIMEOUT
*
AEFConst.WAIT_INTERRUPTED
*
AEFConst.CONFIG_ERROR, AEFConst.INVALID_KEY_SEQUENCE
*
AEFConst.INVALID_ARGUMENT, AEFConst.INVALID_DEPARTMENT
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_CLASS_REQUIRED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_STOCK_REQUIRED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_DEPARTMENT_PROHIBITED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_CLASS_PROHIBITED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_DEPARTMENT_REQUIRED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_STOCK_PROHIBITED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_PRICE_REQUIRED
*
AEFConst.INVALID_ARGUMENT, AEFConst.ITEM_QUANTITY_REQUIRED
*
AEFConst.INVALID_ARGUMENT, AEFConst.DATA_OUT_OF_RANGE
*
AEFConst.INVALID_ARGUMENT, AEFConst.EXTENDED_PRICE_TOO_LARGE
*
AEFConst.ITEM_NOT_FOUND, AEFConst.NONE
*
AEFConst.ITEM_NOT_FOR_SALE, AEFConst.NONE
*
AEFConst.APPLICATION_LIMIT_EXCEEDED, AEFConst.ITEM_LIMIT
*
AEFConst.PROCEDURE_NOT_ALLOWED, AEFConst.NOT_AUTHORIZED
*
AEFConst.PRINTER_ERROR, AEFConst.NONE
*
AEFConst.PRINTER_ERROR, AEFConst.JOURNAL_ERROR
*
AEFConst.PRINTER_ERROR, AEFConst._BUFFER_FULL
*
AEFConst.PRINTER_ERROR, AEFConst.COVER_OPEN
*
AEFConst.ITEM_NOT_RETURNABLE
*
AEFConst.UNSUPPORTED_OPERATION
*
AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED
*
Common Errors
*/
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:
*
AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED
*
Common Errors
*/
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:
*
AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED
*
Common Errors
*/
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:
*
AEFConst.INVALID_ARGUMENT, AEFConst.ID_REQUIRED
*
Common Errors
*/
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);
}