class Origami::AddordersController < BaseOrigamiController # before_action :set_dining, only: [:detail] def index @webview = false if check_mobile @webview = true end @tables = Table.active.order('zone_id asc').group("zone_id") @rooms = Room.active.order('zone_id asc').group("zone_id") @all_table = Table.active.order('status desc') @all_room = Room.active.order('status desc') end def detail @cashier_type = params[:type] @webview = false if check_mobile @webview = true end display_type = Lookup.find_by_lookup_type("display_type") if !display_type.nil? && display_type.value.to_i ==2 @display_type = display_type.value else @display_type = nil end # if params[:menu] == "true" @menus = [] @menu = [] @table_id = params[:id] @table = DiningFacility.find(@table_id) @booking = @table.get_booking if @booking @booking_id = @booking.booking_id if @obj_order = @booking.orders.first @customer = @obj_order.customer @date = @obj_order.created_at @order_items = @booking.order_items end end end def get_menu_category () if (params[:id]) #Pull this menu @menu = MenuCategory.find_by_id(params[:id]) return @menu else MenuCategory.current_menu end end def get_item_instance @instance = MenuItemInstance.find(params[:id]) end def get_menu() if (params[:id]) #Pull this menu @menu = Menu.find_by_id(params[:id]) @menu_category = MenuCategory.where("menu_id='#{@menu.id}'").order("order_by asc") return @menu else Menu.current_menu end end def get_menu_sub_category () id = params[:id] if (id) #Pull this menu @sub_menu = MenuCategory.where("menu_category_id = #{id}").active return @sub_menu end end def get_all_product() @product = Product.all end def create if params[:booking_id].present? booking = Booking.find(params[:booking_id]) end if params[:table_id].present? if booking.nil? || booking.dining_facility_id.to_i != params[:table_id].to_i table = DiningFacility.find(params[:table_id]) booking = table.get_current_booking end end is_extra_time = false extra_time = '' items_arr = [] JSON.parse(params[:order_items]).each { |i| i["item_instance_code"] = i["item_instance_code"].downcase.to_s if i["item_instance_code"].include? "ext" is_extra_time = true arr_exts = i["item_instance_code"].split("_") if arr_exts[1].match(/^(\d)+$/) time = arr_exts[1].to_i*60*i["quantity"].to_i extra_time = Time.at(time) end end if i["parent_order_item_id"] items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"parent_order_item_id": i["parent_order_item_id"],"options": JSON.parse(i["options"])} else items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": JSON.parse(i["options"])} end items_arr.push(items) } # begin if params[:order_source] == "quick_service" && params[:table_id].to_i == 0 customer_id = takeaway.customer_id # for no customer id from mobile else customer_id = params[:customer_id].present? ? params[:customer_id] : walkin.customer_id # for no customer id from mobile end Order.transaction do @order = Order.new @order.source = params[:order_source] @order.order_type = params[:order_type] @order.customer_id = customer_id @order.items = items_arr @order.guest = params[:guest_info] @order.table_id = params[:table_id] # this is dining facilities's id @order.new_booking = true @order.waiters = current_login_employee.name @order.employee_name = current_login_employee.name @order.is_extra_time = is_extra_time @order.extra_time = extra_time if booking.nil? || booking.sale_id.present? || booking.booking_status == 'moved' @order.new_booking = true else @order.new_booking = false @order.booking_id = booking.booking_id end @status, @booking = @order.generate if @status && @booking #send order broadcast to order_channel if @order.table_id.to_i > 0 table = DiningFacility.find(@booking.dining_facility_id) type = 'order' from = getCloudDomain #get sub domain in cloud mode ActionCable.server.broadcast "order_channel", table: table,type:type,from:from end if params[:order_source] != "quick_service" && params[:order_source] != "food_court" process_order_queue(@order.order_id,@order.table_id,@order.source) end end # Order.send_customer_view(@booking) if current_user.role != "waiter" && params[:create_type] == "create_pay" if @status && @booking && (@order.source == 'quick_service') || (@order.source == 'food_court') @status, @sale = Sale.request_bill(@order,current_user,current_login_employee) # for second display if @order.source == 'quick_service' from = getCloudDomain #get sub domain in cloud mode ActionCable.server.broadcast "second_display_channel",data: @sale,status:"sale",from:from end #end result = {:status=> @status, :data => @sale } render :json => result.to_json end else result = {:status=> @status, :data => 0 } render :json => result.to_json end end end # render json for http status code def return_json_status_with_code(code, msg) render status: code, json: { message: msg, booking_id: booking_id }.to_json end def check_order_with_table(table_id) table = DiningFacility.find(table_id) if table booking = table.get_current_booking if booking if !booking.sale_id.nil? if booking.sale.sale_status == "completed" || booking.sale.sale_status == "new" @order.new_booking = true return false end else @order.new_booking = false @order.booking_id = booking.booking_id return false end end end end # this can always true def check_order_with_booking(booking) if booking.sale.sale_status == "completed" || booking.sale.sale_status == "new" @order.new_booking = true return false else @order.new_booking = false @order.booking_id = params[:booking_id] return false end end def process_order_queue(order_id, table_id, order_source) #Send to background job for processing order = Order.find(order_id) sidekiq = Lookup.find_by_lookup_type("sidekiq") if ENV["SERVER_MODE"] != 'cloud' if Printer::PrinterWorker.printers.blank? msg = 'Print Error ! Please contact to service' ActionCable.server.broadcast "call_waiter_channel", table: msg, time:'print_error', from: '' end end if !sidekiq.nil? OrderQueueProcessorJob.perform_later(order_id, table_id) else if order oqs = OrderQueueStation.new oqs.process_order(order, table_id, order_source) end from = getCloudDomain #get sub domain in cloud mode assign_order = AssignedOrderItem.assigned_order_item_by_job(order_id) ActionCable.server.broadcast "order_queue_station_channel", order: assign_order, from: from end end def check_cup_status(status) if status.include? "Active: active (running)" || "Active: active (exited)" #"Cup Server is already running" return true end return false end #get cloud domain def getCloudDomain from = "" if ENV["SERVER_MODE"] == 'cloud' from = request.subdomain.to_s + "." + request.domain.to_s end return from end end