MenuEvents.addItem(pos, event);
}
}
public static synchronized void addItem(PosScreen pos, AWTEvent event) {
PosTransaction trans = PosTransaction.getCurrentTx(pos.getSession());
Input input = pos.getInput();
String[] func = input.getFunction("QTY");
String value = input.value();
// no value; just return
if (event != null && UtilValidate.isEmpty(value)) {
String buttonName = ButtonEventConfig.getButtonName(event);
if (UtilValidate.isNotEmpty(buttonName)) {
if (buttonName.startsWith("SKU.")) {
value = buttonName.substring(4);
}
}
if (UtilValidate.isEmpty(value)) {
return;
}
}
if (!trans.isOpen()) {
pos.showDialog("dialog/error/terminalclosed");
} else {
// check for quantity
BigDecimal quantity = BigDecimal.ONE;
if (func != null && "QTY".equals(func[0])) {
try {
quantity = new BigDecimal(func[1]);
} catch (NumberFormatException e) {
quantity = BigDecimal.ONE;
}
}
// locate the product ID
String productId = null;
try {
List<GenericValue> items = trans.lookupItem(value);
if (items != null) {
ListIterator<GenericValue> it = items.listIterator();
if (it.hasNext()) {
GenericValue product = it.next();
productId = product.getString("productId");
Hashtable<String, Object> productsMap = new Hashtable<String, Object>();
productsMap.put(product.getString("productId"), product.get("internalName"));
while (it.hasNext()) {
product = it.next();
if (!productId.equals(product.getString("productId"))) {
productsMap.put(product.getString("productId"), product.get("internalName"));
}
}
if (productsMap.size() > 1 && ButtonEventConfig.getButtonName(event).equals("menuSku")) {
SelectProduct SelectProduct = new SelectProduct(productsMap, trans, pos);
productId = SelectProduct.openDlg();
}
}
}
} catch (GeneralException e) {
Debug.logError(e, module);
pos.showDialog("dialog/error/producterror");
}
// Check for Aggregated item
boolean aggregatedItem = false;
ProductConfigWrapper pcw = null;
try {
aggregatedItem = trans.isAggregatedItem(productId);
if (aggregatedItem) {
pcw = trans.getProductConfigWrapper(productId);
pcw.setDefaultConfig();
ConfigureItem configureItem = new ConfigureItem(pcw, trans, pos);
pcw = configureItem.openDlg();
configureItem = null;
}
} catch (Exception e) {
Debug.logError(e, module);
pos.showDialog("dialog/error/producterror");
}
// add the item to the cart; report any errors to the user
if (productId != null) {
try {
if (!aggregatedItem) {
trans.addItem(productId, quantity);
} else {
trans.addItem(productId, quantity, pcw);
}
} catch (CartItemModifyException e) {
Debug.logError(e, module);
pos.showDialog("dialog/error/producterror");
} catch (ItemNotFoundException e) {
pos.showDialog("dialog/error/productnotfound");
}
} else {
pos.showDialog("dialog/error/productnotfound");
}
}
// clear the qty flag
input.clearFunction("QTY");
// re-calc tax
trans.calcTax();
// refresh the others
pos.refresh();
}