package vitalvinyl.pos.action.pos; import org.apache.log4j.Logger; import vitalvinyl.manager.order.InsufficientFundsException; import vitalvinyl.manager.order.OrderManager; import vitalvinyl.manager.order.OrderManagerFactory; import vitalvinyl.model.order.PurchaseItem; import vitalvinyl.model.order.Payment; import vitalvinyl.model.media.Media; import vitalvinyl.model.gear.Gear; import vitalvinyl.model.promotion.TicketEvent; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; public class CloseOrder extends RegisterOrder { private static final Logger logger = Logger.getLogger(CloseOrder.class); private static final int RECEIPT_COLUMNS = 48; public String doDefault() { logger.debug("doDefault - start"); try { // find the item order = loadOrder(); //TODO: uncomment when testing on live printer printReceipt(prepareCustomerInvoice()); // do not processRegisterOrder if the order has already been completed if (order.isProcessed()) { addErrorMessage(getText("order.alreadyprocessed.label")); return INPUT; } logger.debug("Closing order: " + order.getID()); OrderManager manager = OrderManagerFactory.getManager(); manager.processRegisterOrder(order); return SUCCESS; } catch (InsufficientFundsException e) { logger.warn(e.getMessage(), e); addErrorMessage(getText("order.mustcompletepayment.label")); } catch (Exception e) { logger.warn(e.getMessage(), e); addErrorMessage(e.getMessage()); } finally { logger.debug("doDefault - end"); } return INPUT; } public String centerString(String input) { String output = ""; int start = RECEIPT_COLUMNS / 2 - (input.length() / 2); for (int spaces = 1; spaces < start; spaces++) { output += " "; } output += input; return output; } public String rightJustifyString(String input) { String output = ""; int start = RECEIPT_COLUMNS - input.length(); for (int spaces = 0; spaces < start; spaces++) { output += " "; } output += input; return output; } private static String pad(String str, int padlen, String pad) { String padding = ""; if (str.length() > Math.abs(padlen)) { str = str.substring(0, Math.abs(padlen)); } int len = Math.abs(padlen) - str.length(); if (len < 1) return str; for (int i = 0 ; i < len ; ++i) { padding = padding + pad; } return (padlen < 0 ? padding + str : str + padding); } public String prepareCustomerInvoice() { String output = ""; try { output += centerString("Vital Culture") + "\r\n"; output += centerString("3 West 15th St") + "\r\n"; output += centerString("Mpls, MN 55403") + "\r\n"; output += centerString("612.874.8892") + "\r\n"; output += "\r\n"; output += "************************************************\r\n"; for (Iterator itr = mediaItems.iterator(); itr.hasNext();) { PurchaseItem purchaseItem = (PurchaseItem) itr.next(); Media media = (Media) purchaseItem.getItem(); output += pad(String.valueOf(media.getID()), 7, " "); output += pad(media.getArtist().getName(), 15, " "); output += pad(media.getName() , 17, " "); output += pad(roundMoney(order.getSubTotal(purchaseItem.getID())), -9, " "); output += "\r\n"; } for (Iterator itr = gearItems.iterator(); itr.hasNext();) { PurchaseItem purchaseItem = (PurchaseItem) itr.next(); Gear gear = (Gear) purchaseItem.getItem(); output += pad(String.valueOf(gear.getID()), 7, " "); output += pad(gear.getManufacturer().getName(), 15, " "); output += pad(gear.getName() , 17, " "); output += pad(roundMoney(order.getSubTotal(purchaseItem.getID())), -9, " "); output += "\r\n"; } for (Iterator itr = ticketItems.iterator(); itr.hasNext();) { PurchaseItem purchaseItem = (PurchaseItem) itr.next(); TicketEvent ticketEvent = (TicketEvent) purchaseItem.getItem(); output += pad(String.valueOf(ticketEvent.getID()), 7, " "); output += pad(ticketEvent.getPartner().getCompany(), 15, " "); output += pad(ticketEvent.getName() , 17, " "); output += pad(roundMoney(order.getSubTotal(purchaseItem.getID())), -9, " "); output += "\r\n"; } output += rightJustifyString("_________") + "\r\n"; output += rightJustifyString("Subtotal: " + pad(roundMoney(order.getSubTotal()), -9, " ")) + "\r\n"; output += rightJustifyString("Tax: " + pad(roundMoney(order.getTax()), -9, " ")) + "\r\n"; output += rightJustifyString("=========") + "\r\n"; output += rightJustifyString("Total: " + pad(roundMoney(order.getTotal()), -9, " ")) + "\r\n"; output += rightJustifyString("=========") + "\r\n"; for (Iterator itr = order.getPayments().iterator(); itr.hasNext();) { Payment payment = (Payment) itr.next(); if (payment.getCashAmount() > 0) { output += rightJustifyString("Cash: " + pad(roundMoney(payment.getCashAmount()), -9, " ")) + "\r\n"; } else if (payment.getCreditAmount() > 0) { output += rightJustifyString("Credit: " + "TID: " + payment.getTransactionID() + " " + "***" + payment.getCcLastFour() + " " + payment.getCcExpirationMonth() + "/" + payment.getCcExpirationYear() + " ") + "\r\n"; output += rightJustifyString(pad(roundMoney(payment.getCashAmount()), -9, " ")) + "\r\n"; } else if (payment.getGiftCertificateAmount() > 0) { output += rightJustifyString("Gift Cert: " + pad(roundMoney(payment.getCashAmount()), -9, " ")) + "\r\n"; } else if (payment.getCheckAmount() > 0) { output += rightJustifyString("Check: " + "#" + payment.getCheckNumber() + " " + pad(roundMoney(payment.getCashAmount()), -9, " ")) + "\r\n"; } } output += rightJustifyString("_________") + "\r\n"; output += rightJustifyString("Amount Tendered: " + pad(roundMoney(order.getTotalPayments()), -9, " ")) + "\r\n"; output += rightJustifyString("Change: " + pad(roundMoney(order.remainingDue()), -9, " ")) + "\r\n"; output += "\r\n"; String tempInfo = ""; tempInfo += getAssignedTill().getTillNumber() + " "; tempInfo += order.getID() + " "; tempInfo += order.getConception() + " "; output += centerString(tempInfo) + "\r\n"; output += "************************************************\r\n"; output += " NO RETURNS ON VINYLS AND CDS. FOR CONVENIENT \r\n"; output += " RETURNS/EXCHANGES, PLEASE SAVE YOUR RECIEPT. \r\n"; output += " VISIT US ONLINE AT WWW.VITALCULTURE.COM \r\n"; output += " THANK YOU FOR SHOPPING VITAL! \r\n"; output += "************************************************\r\n"; output += "\r\n"; output += "\r\n"; output += "\r\n"; output += "\r\n"; output += "\r\n"; output += "\r\n"; output += "\r\n"; } catch (Exception e) { logger.warn(e.getMessage(), e); addErrorMessage(e.getMessage()); } finally { logger.debug("doDefault - end"); } return output; } public static void printReceipt(String sText) { try { FileWriter out = new FileWriter("lpt1"); //FileWriter out = new FileWriter("c:/receipt.txt"); out.write(sText); //out.write(0x0D); // CR out.close(); } catch (IOException e) { e.printStackTrace(); } } }