class Foodcourt::OrdersController < BaseFoodcourtController def show @webview = false if check_mobile @webview = true end @tables = Table.unscoped.all.active.order('status desc') @rooms = Room.unscoped.all.active.order('status desc') @complete = Sale.where("DATE_FORMAT(created_at,'%Y-%m-%d') = ? and sale_status != 'new'",DateTime.now.strftime('%Y-%m-%d')) @orders = Order.includes("sale_orders").where("DATE_FORMAT(date,'%Y-%m-%d') = ? and status != 'billed' and source != 'quick_service'",DateTime.now.strftime('%Y-%m-%d')).order('date desc') @order = Order.find(params[:order_id]) booking = Booking.select('bookings.booking_id, bookings.dining_facility_id') .joins(" JOIN booking_orders as bo on bo.booking_id = bookings.booking_id") .where("bo.order_id='#{params[:order_id]}'").first() @booking = Array.new if !booking.nil? if booking.dining_facility_id.to_i > 0 dining_facilities = DiningFacility.find_by_id(booking.dining_facility_id) @booking.push({'booking_id' => booking.booking_id, 'dining_facility_id' => booking.dining_facility_id, 'type' => dining_facilities.type}) else @booking.push({'booking_id' => booking.booking_id, 'dining_facility_id' => booking.dining_facility_id, 'type' => nil}) end end @customers = Customer.pluck("customer_id, name") #for split bill lookup_spit_bill = Lookup.collection_of('split_bill') @split_bill = 0 if !lookup_spit_bill[0].nil? @split_bill = lookup_spit_bill[0][1] end sale_order = SaleOrder.find_by_order_id(@order.order_id) if sale_order unless sale_order.sale_id.nil? sale = Sale.find(sale_order.sale_id) @sale_status = sale.sale_status end end @order.order_items.each_with_index do |item, order_item_index| if !item.set_menu_items.nil? instance_item_sets = JSON.parse(item.set_menu_items) arr_instance_item_sets = Array.new instance_item_sets.each do |instance_item| item_instance_name = MenuItemInstance.find_by_item_instance_code(instance_item["item_instance_code"]).item_instance_name arr_instance_item_sets.push(item_instance_name) item.price = item.price.to_f + instance_item["price"].to_f end @order.order_items[order_item_index].set_menu_items = arr_instance_item_sets end end end def app_orders if params[:booking_id].present? @booking = Booking.select("orders.*,bookings.*,customers.*") .joins("JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id") .joins("JOIN orders ON orders.order_id=booking_orders.order_id") .joins("JOIN customers ON orders.customer_id=customers.customer_id") .where("orders.source='app' and bookings.booking_id='#{params[:booking_id]}'").first @customer_id =@booking.customer_id @booking_id =@booking.booking_id @order_id =@booking.order_id @sale_data = Sale.find_by_sale_id(@booking.sale_id) elsif params[:pending_id] id = params[:pending_id] if id.include? "SAL" @pending = Sale.includes(:sale_items).find_by(sale_id: id) @status = "sale" elsif id.include? "BKI" @pending = Booking.includes(:order_items).find_by(booking_id: id) @status = "order" end end @current_shift = ShiftSale.current_shift status = ['completed', 'void'] @pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, status) @pending_completed = Sale.where('shift_sale_id = ? AND sale_status IN (?)', @current_shift.id, status) @pending_orders = Sale.pending_order('food_court') @completed, @bookings = Sale.get_foodcourt_current_shift_orders end def current_shift_order_count @current_shift = ShiftSale.current_shift status = ['completed', 'void'] @pending_sales = Sale.where('shift_sale_id = ? AND sale_status NOT IN (?)', @current_shift.id, status) @pending_orders = Sale.pending_order('food_court') @occupied_table = @pending_sales.length + @pending_orders.length render json: @occupied_table end def modify_order @cashier_type = "food_court" today = DateTime.now day = Date.today.wday @menus = [] @menu = [] if params[:id].include? "BKI" @table_id = nil @table = nil @booking = Booking.find(params[:id]) else @table_id = params[:id] @table = DiningFacility.find(@table_id) @booking = @table.get_booking end @sale_id = @booking.sale_id if @booking @booking_id = @booking.booking_id @obj_order = @booking.orders.first @customer = @obj_order.customer @date = @obj_order.created_at @order_items = @booking.order_items end render "foodcourt/addorders/detail" end def update_modify_order booking = Booking.find(params[:booking_id]) sale = booking.sale if sale && sale.sale_status != 'new' render :json => { :status => false } end is_extra_time = false extra_time = '' cashier_type = "quick_service" 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": i["options"]} else items = {"order_item_id": i["order_item_id"],"item_instance_code": i["item_instance_code"],"quantity": i["quantity"],"options": i["options"]} end items_arr.push(items) } # begin order = Order.new order.source = params[:order_source] order.order_type = params[:order_type] # order.customer_id = params[:customer_id].present? ? params[:customer_id] : walkin.customer_id # for no customer id from mobile order.items = items_arr order.guest = params[:guest_info] order.table_id = params[:table_id] # this is dining facilities's id 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 order.new_booking = false order.booking_id = booking.booking_id if order.generate if sale Sale.add_to_existing_pending_invoice(nil, sale.sale_id, booking) render :json => { :status => true, :data => sale } else render :json => { :status => true, :data => 'OK' } end else render :json => { :status => false } end end def request_bill sale_data =[] if !ShiftSale.current_shift.nil? order_id = params[:order_id] # order_id order = Order.find(order_id) booking = order.booking if booking.checkin_at.utc > Time.now.utc && booking.checkout_at.nil? @status = false @error_message = "Operation failed, Could not request bill!" else table = DiningFacility.find_by(id: booking.dining_facility_id) if booking.sale_id.nil? if sale_data = Sale.generate_invoice_from_booking(booking, current_login_employee, current_user, order.source, params[:current_checkin_induties_count]) # in-duty update in_duties = InDuty.where("booking_id=?", booking.id) if !in_duties.empty? in_duties.each do |in_duty| induty = InDuty.find(in_duty.id) induty.sale_id = sale_data.sale_id induty.out_time = Time.now.utc induty.save end end action_by = current_user.name type = "REQUEST_BILL" remark = "Request bill Receipt No #{sale_data.receipt_no}" sale_audit = SaleAudit.record_audit_sale(sale_data.sale_id,remark,action_by,type ) # Promotion Activation Promotion.promo_activate(sale_data) #bill channel if ENV["SERVER_MODE"] == 'cloud' from = request.subdomain + "." + request.domain else from = "" end if ["quick_service", "cashier"].include? order.source ActionCable.server.broadcast "bill_channel", table: table, from: from end unless ["quick_service", "food_court"].include? order.source #check checkInOut pdf print checkout_time = Lookup.collection_of('checkout_time') if !booking.dining_facility_id.nil? terminal = DiningFacility.find_by_id(booking.dining_facility_id) cashier_terminal = CashierTerminal.find_by_id(terminal.zone_id) if (!checkout_time.empty?) && (ENV["SERVER_MODE"] != "cloud") #no print in cloud server unique_code = "CheckInOutPdf" printer = PrintSetting.find_by_unique_code(unique_code) # print when complete click order_queue_printer = Printer::OrderQueuePrinter.new(printer) if !printer.nil? order_queue_printer.print_check_in_out(printer, cashier_terminal, booking, table) end end end end @status = true sale_id = sale_data.sale_id else @status = false sale_id = nil end else @status = true sale_id = booking.sale_id end end else @status = false @error_message = "No Current Open Shift for This Employee" end if ["quick_service", "food_court"].include? order.source redirect_to "/foodcourt/sale/#{sale_data.sale_id}/food_court/payment#" end # end def completed customer =Customer.find_by_customer_id(params[:customer_id]) phone_number =customer.contact_no if Order.send_message(phone_number,params[:order_id],current_shop.name) booking =Booking.find(params[:booking_id]) booking.booking_status ='completed' booking.save! end end end