class Printer::OrderQueuePrinter < Printer::PrinterWorker def print_order_item(print_settings, oqs, order_id, order_item_id, print_status, before_updated_qty="", options="") booking_id = Booking.get_booking_id(order_id) order_item = print_query('order_item', order_item_id).first #OrderItem.find_by_item_code(item_code) if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 print_settings.save! end options = order_item.options # check for item not to show pdf = print_settings.unique_code.constantize.new(print_settings, order_item, print_status, options, oqs.use_alternate_name, before_updated_qty) shop = Shop.current_shop directory_name = "public/orders_#{shop.shop_code}" Dir.mkdir(directory_name) unless File.exists?(directory_name) filename = directory_name + "/order_item_#{order_id}_#{order_item_id}" + ".pdf" pdf.render_file filename if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end else ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", queue: oqs.station_name, unique_code: print_settings.unique_code, print_copies: print_settings.print_copies, data: { order_item: order_item.as_json(methods: :type), print_status: print_status.gsub(/[()]/, ""), booking_id: booking_id, precision: print_settings.precision } ) end return filename, order_id, oqs.printer_name end # Query for per order def print_order_summary(print_settings, oqs, order_id, order_items, print_status, before_updated_qty="", options="") booking_id = Booking.get_booking_id(order_id) #order[0].order_id order = print_query('order_summary', order_id) if Lookup.collection_of('print_settings').none? { |x| x == ["ActionCable", "1"] } #Use CUPS service #Generate PDF #Print # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 print_settings.save! end shop = Shop.current_shop directory_name = "public/orders_#{shop.shop_code}" Dir.mkdir(directory_name) unless File.exists?(directory_name) filename = directory_name + "/order_summary_#{order_id}.pdf" # filename = "tmp/order_summary_#{order_id}" + ".pdf" pdf = print_settings.unique_code.constantize.new(print_settings, order, print_status, order_items, oqs.use_alternate_name, before_updated_qty) pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end else ActionCable.server.broadcast("print_channel_#{Shop.current_shop.shop_code}", queue: oqs.station_name, unique_code: print_settings.unique_code, print_copies: print_settings.print_copies, data: { order_item: order_items, order: order.as_json(methods: :type), print_status: "", booking_id: booking_id, precision: print_settings.precision } ) end return filename, order_id, oqs.printer_name end # Print for orders in booking def print_booking_summary(print_settings, oqs, booking_id, print_status, before_updated_qty="") # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 print_settings.save! end print_setting = PrintSetting.all.order("id ASC") order = print_query('booking_summary', booking_id) shop = Shop.current_shop directory_name = 'public/orders_'+shop.shop_code Dir.mkdir(directory_name) unless File.exists?(directory_name) # For Print Per Item if oqs.cut_per_item order.each do|odi| # filename = "tmp/order_item_#{booking_id}" + ".pdf" filename = directory_name + "/order_item_#{booking_id}" + ".pdf" # For Item Options options = odi.options == "[]"? "" : odi.options # check for item not to show #if odi.price != 0 pdf = print_settings.unique_code.constantize.new(print_settings, odi, print_status, options, oqs.use_alternate_name, before_updated_qty) pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end #For print copy # pdf.render_file filename.gsub(".","-copy.") # self.print(filename.gsub(".","-copy."), oqs.printer_name) #end end # For Print Order Summary else # filename = "tmp/booking_summary_#{booking_id}" + ".pdf" filename = directory_name + "/booking_summary_#{booking_id}" + ".pdf" pdf = print_settings.unique_code.constantize.new(print_settings, order, print_status, oqs.use_alternate_name, before_updated_qty) pdf.render_file filename #no print in cloud server if ENV["SERVER_MODE"] != "cloud" self.print(filename, oqs.printer_name) end #For print copy # pdf.render_file filename.gsub(".","-copy.") # self.print(filename.gsub(".","-copy."), oqs.printer_name) end return filename, booking_id, oqs.printer_name end # Query for OQS with status def print_query(type, id) query = OrderItem.select("order_items.order_id, order_items.item_code, order_items.item_name, order_items.qty, order_items.price, order_items.options, order_items.item_order_by as order_by, order_items.created_at as order_at, order_items.set_menu_items, cus.name as customer, df.type, df.name as dining,item.alt_name as alt_name") .joins("left join orders ON orders.order_id = order_items.order_id") .joins("left join booking_orders AS bo ON bo.order_id=order_items.order_id") .joins("left join bookings AS b ON b.booking_id = bo.booking_id") .joins("left join dining_facilities AS df ON df.id = b.dining_facility_id") .joins("left join customers as cus ON cus.customer_id = orders.customer_id") .joins("left join menu_items as item ON item.item_code = order_items.item_code") if type == "order_item" query.where("order_items.order_items_id = ?", id) .group("order_items.item_code") elsif type == "order_summary" query.where("orders.order_id = ?", id) .group("order_items.order_items_id") else # order summary for booking query.where("b.booking_id = ?", id) end end # Check in-out time def print_check_in_out(print_settings, cashier_terminal, booking, table) #Use CUPS service #Generate PDF #Print sale_id = booking.sale_id filename = "tmp/check_in_out_#{sale_id}" + ".pdf" pdf = CheckInOutPdf.new(print_settings,booking, table) print_setting = PrintSetting.all # if order_item[0].price != 0 if !print_setting.empty? print_setting.each do |print_settings| if print_settings.unique_code == 'CheckInOutPdf' pdf = CheckInOutPdf.new(print_settings,booking, table) end end end pdf.render_file filename # Must be one print if print_settings.print_copies == 0 print_settings.print_copies = 1 print_settings.save! end # print_settings.print_copies = 1 # print_settings.save! #no print in cloud server if ENV["SERVER_MODE"] != "cloud" self.print(filename, print_settings.printer_name) end end end