Files
sx-fc/app/models/printer/order_queue_printer.rb
2020-07-29 11:36:43 +06:30

234 lines
8.3 KiB
Ruby
Executable File

class Printer::OrderQueuePrinter < Printer::PrinterWorker
def print_order_item(print_settings, oqs, order_id, order_item_id, print_status, before_updated_qty="", options="")
# Must be one print
if print_settings.print_copies == 0
print_settings.print_copies = 1
print_settings.save!
end
order_item = print_query('order_item', order_item_id) #OrderItem.find_by_item_code(item_code)
options = order_item[0].options
# check for item not to show
# if order_item[0].price != 0
pdf = print_settings.unique_code.constantize.new(print_settings,order_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
booking_id = Booking.get_booking_id(order_id)
# end
ActionCable.server.broadcast("print_channel",
queue: oqs.station_name,
unique_code: print_settings.unique_code,
print_copies: print_settings.print_copies,
data: {
order_item: order_item[0].as_json(methods: :type),
print_status: print_status.gsub(/[()]/, ""),
booking_id: booking_id,
precision: print_settings.precision
}
)
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
#For print copy
# pdf.render_file filename.gsub(".","-copy.")
# self.print(filename.gsub(".","-copy."), oqs.printer_name)
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="")
#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)
# For Print Per Item
if oqs.cut_per_item
order_items.each do |odi|
odi_item = print_query('order_item', odi.order_items_id)
filename = directory_name + "/order_item_#{order_id}.pdf"
# filename = "tmp/order_item_#{order_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_item[0], print_status, options, oqs.use_alternate_name, before_updated_qty)
# pdf.render_file "tmp/order_item.pdf"
pdf.render_file filename
#no print in cloud server
if ENV["SERVER_MODE"] != "cloud"
self.print(filename, oqs.printer_name)
# self.print(filename.gsub(".","-copy."), oqs.printer_name)
end
#end
end
# For Print Order Summary
else
order = print_query('order_summary', order_id)
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
booking_id = Booking.get_booking_id(order_id) #order[0].order_id
ActionCable.server.broadcast("print_channel",
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}
)
#For print copy
# pdf.render_file filename.gsub(".","-copy.")
# self.print(filename.gsub(".","-copy."), oqs.printer_name)
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