package com.floreantpos.jreports; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.List; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperPrintManager; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.data.JRTableModelDataSource; import net.sf.jasperreports.engine.print.JRPrinterAWT; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.floreantpos.main.Application; import com.floreantpos.model.Restaurant; import com.floreantpos.model.Ticket; import com.floreantpos.model.TicketItem; import com.floreantpos.model.TicketItemModifier; import com.floreantpos.model.TicketItemModifierGroup; import com.floreantpos.model.dao.RestaurantDAO; public class JReportPrintService { private static Log logger = LogFactory.getLog(JReportPrintService.class); public static void printTicket(Ticket ticket) { Restaurant restaurant = RestaurantDAO.getInstance().get(Integer.valueOf(1)); HashMap map = new HashMap(); map.put("headerLine1", restaurant.getName()); map.put("headerLine2", restaurant.getAddressLine1()); map.put("headerLine3", restaurant.getAddressLine2()); map.put("headerLine4", restaurant.getAddressLine3()); map.put("headerLine5", "Tel: " + restaurant.getTelephone()); map.put("checkNo", "Chk#: " + ticket.getId()); map.put("tableNo", "Table#: " + ticket.getTableNumber()); map.put("guestCount", "Guests #: " + ticket.getNumberOfGuests()); map.put("serverName", "Server: " + ticket.getOwner()); map.put("reportDate", "Date: " + Application.formatDate(new Date())); map.put("grandSubtotal", Application.formatNumber(ticket.getSubtotalAmount())); map.put("grandTotal", Application.formatNumber(ticket.getTotalAmount())); map.put("taxAmount", Application.formatNumber(ticket.getTaxAmount())); if (ticket.getGratuity() != null) { map.put("tipAmount", Application.formatNumber(ticket.getGratuity().getAmount())); } InputStream ticketReportStream = null; try { //ticketReportStream = JReportPrintService.class.getResourceAsStream("/com/floreantpos/jreports/TicketReceiptReport.jrxml"); ticketReportStream = JReportPrintService.class.getResourceAsStream("/com/floreantpos/jreports/TicketReceiptReport.jasper"); //JasperReport ticketReport = JasperCompileManager.compileReport(ticketReportStream); JasperReport ticketReport = (JasperReport) JRLoader.loadObject(ticketReportStream); JasperPrint jasperPrint = JasperFillManager.fillReport(ticketReport, map, new JRTableModelDataSource(new TicketDataSource(ticket))); JasperViewer.viewReport(jasperPrint, false); JasperPrintManager.printReport(jasperPrint, false); } catch (JRException e) { logger.error("Error while printing to normal printer", e); } finally { try { ticketReportStream.close(); } catch (Exception x) { } } } public static void printTicketToKitchen(Ticket ticket) { Restaurant restaurant = RestaurantDAO.getInstance().get(Integer.valueOf(1)); HashMap map = new HashMap(); map.put("headerLine1", restaurant.getName()); map.put("checkNo", "Chk#: " + ticket.getId()); map.put("tableNo", "Table#: " + ticket.getTableNumber()); map.put("guestCount", "Guests: " + ticket.getNumberOfGuests()); map.put("serverName", "Server: " + ticket.getOwner()); map.put("reportDate", "Date: " + Application.formatDate(new Date())); InputStream ticketReportStream = null; try { ticketReportStream = JReportPrintService.class.getResourceAsStream("/com/floreantpos/jreports/KitchenReceipt.jasper"); JasperReport ticketReport = (JasperReport) JRLoader.loadObject(ticketReportStream); JasperPrint jasperPrint = JasperFillManager.fillReport(ticketReport, map, new JRTableModelDataSource(new KitchenTicketDataSource(ticket))); //JasperViewer.viewReport(jasperPrint, false); JRPrinterAWT.printToKitchen = true; JasperPrintManager.printReport(jasperPrint, false); //no exception, so print to kitchen successful. //now mark items as printed. markItemsAsPrinted(ticket); } catch (JRException e) { logger.error("Error while printing to normal printer", e); } finally { try { ticketReportStream.close(); } catch (Exception x) { } } } private static void markItemsAsPrinted(Ticket ticket) { List<TicketItem> ticketItems = ticket.getTicketItems(); if (ticketItems != null) { for (TicketItem ticketItem : ticketItems) { if (!ticketItem.isPrintedToKitchen()) { ticketItem.setPrintedToKitchen(true); } List<TicketItemModifierGroup> modifierGroups = ticketItem.getTicketItemModifierGroups(); if (modifierGroups != null) { for (TicketItemModifierGroup modifierGroup : modifierGroups) { List<TicketItemModifier> modifiers = modifierGroup.getTicketItemModifiers(); if (modifiers != null) { for (TicketItemModifier modifier : modifiers) { if (!modifier.isPrintedToKitchen()) { modifier.setPrintedToKitchen(true); } } } } } } } } }