diff --git a/app/controllers/api/check_in_process_controller.rb b/app/controllers/api/check_in_process_controller.rb index 602ef600..3e703cc2 100644 --- a/app/controllers/api/check_in_process_controller.rb +++ b/app/controllers/api/check_in_process_controller.rb @@ -1,8 +1,8 @@ class Api::CheckInProcessController < Api::ApiController # before_action :authenticate def check_in_time - if params[:dining_id] - dining_facility = DiningFacility.find(params[:dining_id]) + if params[:dining_id] + dining_facility = DiningFacility.find(params[:dining_id]) if params[:booking_id] data = Booking.where("dining_facility_id = #{params[:dining_id]} AND booking_id = '#{params[:booking_id]}'") if data.count > 0 @@ -10,7 +10,7 @@ class Api::CheckInProcessController < Api::ApiController else booking = nil end - else + else booking = dining_facility.get_current_booking end if !booking.nil? @@ -21,7 +21,7 @@ class Api::CheckInProcessController < Api::ApiController #Send to background job for processing if ENV["SERVER_MODE"] == 'cloud' from = request.subdomain + "." + request.domain - else + else from = "" end ActionCable.server.broadcast "check_in_booking_channel",table: table,from:from @@ -37,7 +37,7 @@ class Api::CheckInProcessController < Api::ApiController end lookup_checkout_time = Lookup.collection_of("checkout_alert_time") - + if !lookup_checkout_time.empty? now = Time.now.utc lookup_checkout_time.each do |checkout_time| @@ -52,16 +52,18 @@ class Api::CheckInProcessController < Api::ApiController else render :json => { :status => true } end - - else + + else render :json => { :status => false, :error_message => "No current booking!" } end + else + render :json => { :status => false } end end def check_in_process if params[:dining_id] - dining_facility = DiningFacility.find(params[:dining_id]) + dining_facility = DiningFacility.find(params[:dining_id]) if dining_facility.is_active && dining_facility.status == "available" if params[:checkin_time] checkin_at = nil @@ -75,7 +77,7 @@ class Api::CheckInProcessController < Api::ApiController if dining_facility.check_time(checkin_at, "checkin") booking = dining_facility.get_current_booking if booking.nil? - + booking = Booking.create({:dining_facility_id => params[:dining_id],:type => "TableBooking", :checkin_by=>current_login_employee.name,:checkin_at => checkin_at,:checkout_at =>nil, :booking_status => "assign", :reserved_at => nil, :reserved_by => nil }) if booking.save! @@ -98,7 +100,7 @@ class Api::CheckInProcessController < Api::ApiController booking = dining_facility.get_current_checkout_booking if booking.nil? lookup_checkout_time = Lookup.collection_of("checkout_time") - + if !lookup_checkout_time.empty? today = Time.now.utc.getlocal checkout_at = Time.now.utc.getlocal @@ -118,7 +120,7 @@ class Api::CheckInProcessController < Api::ApiController # else # type = "RoomBooking" # end - + booking = Booking.create({:dining_facility_id => params[:dining_id],:type => "TableBooking", :checkin_by=>current_login_employee.name,:checkin_at => Time.now.utc,:checkout_at =>checkout_at, :booking_status => "assign", :reserved_at => checkout_at, :reserved_by => current_login_employee.name }) if booking.save! @@ -133,13 +135,13 @@ class Api::CheckInProcessController < Api::ApiController unique_code = "CheckInOutPdf" printer = PrintSetting.find_by_unique_code(unique_code) - # print when complete click + # 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, dining_facility) end - end + end render :json => { :status => true, :booking_id => booking.booking_id, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } else render :json => { :status => true } @@ -176,7 +178,7 @@ class Api::CheckInProcessController < Api::ApiController booking.save! render :json => { :status => true, :checkout_at => booking.checkout_at.utc.getlocal.strftime("%Y-%m-%d %H:%M") } - elsif !params[:booking_id].nil? && params[:time].nil? + elsif !params[:booking_id].nil? && params[:time].nil? error_message = "time is required!" render :json => { :status => false, :error_message => error_message } elsif params[:booking_id].nil? && !params[:time].nil? diff --git a/app/controllers/api/restaurant/menu_controller.rb b/app/controllers/api/restaurant/menu_controller.rb index 7dfa0ec5..ae9f7b12 100755 --- a/app/controllers/api/restaurant/menu_controller.rb +++ b/app/controllers/api/restaurant/menu_controller.rb @@ -6,7 +6,8 @@ class Api::Restaurant::MenuController < Api::ApiController param_checksum = params[:checksum] # checksum = File.readlines("public/checksums/menu_json.txt").pop.chomp - all_menu = Menu.active.all + all_menu = Menu.includes(:menu_categories => [:children, :menu_items => [:menu_item_instances => :menu_instance_item_sets, :item_sets => :menu_item_instances]]).active.all + @request_url = '' if ENV["SERVER_MODE"] == "cloud" @request_url = request.base_url @@ -14,20 +15,21 @@ class Api::Restaurant::MenuController < Api::ApiController # to hash menu_array = [] all_menu.each do |m| - menu_array.push(m.to_json(:include => {:menu_categories => - { :include => { :menu_items => - { :include => [:menu_item_sets, :menu_item_instances => - { :include => :menu_instance_item_sets}]} } }})) - end - + menu_array.push(m.to_json(:include => { :menu_categories => { :include => { :menu_items => { :include => [ :item_sets, :menu_item_instances => { :include => :menu_instance_item_sets } ] } } } } )) + end + #export Checksum file generate by md5 menu_checksum = Digest::MD5.hexdigest(menu_array.to_json) if menu_checksum != param_checksum response.headers['CHECKSUM'] = menu_checksum - @menus = all_menu + @menus = all_menu + @item_attributes = MenuItemAttribute.all.load + @item_options = MenuItemOption.all.load + else + render :json => nil end - # @current_menu = Menu.current_menu + # @current_menu = Menu.current_menu end #Description diff --git a/app/controllers/origami/dashboard_controller.rb b/app/controllers/origami/dashboard_controller.rb index 4ff6e8b3..52eb5cf4 100644 --- a/app/controllers/origami/dashboard_controller.rb +++ b/app/controllers/origami/dashboard_controller.rb @@ -99,7 +99,7 @@ class Origami::DashboardController < BaseOrigamiController end def get_all_menu - @menus = Menu.includes(:menu_categories => :children).includes(:menu_categories => {:menu_items => :menu_item_instances}).includes(:menu_categories => {:menu_items => :item_sets }).includes(:menu_categories => {:menu_items => {:item_sets => :menu_item_instances}}).active.all + @menus = Menu.includes(:menu_categories => [:children, :menu_items => [:menu_item_instances => :menu_instance_item_sets, :item_sets => :menu_item_instances]]).active.all @item_attributes = MenuItemAttribute.all.load @item_options = MenuItemOption.all.load end diff --git a/app/views/api/restaurant/menu/_menu_item.json.jbuilder b/app/views/api/restaurant/menu/_menu_item.json.jbuilder index c6cc8468..4f283e2c 100755 --- a/app/views/api/restaurant/menu/_menu_item.json.jbuilder +++ b/app/views/api/restaurant/menu/_menu_item.json.jbuilder @@ -1,52 +1,21 @@ # Format for attributes json attr_format = [] -# Format for attributes json +# Format for attributes json if item.is_available - if item.item_attributes.count > 0 - item.item_attributes.each do|attr_id| - menu_attr = MenuItemAttribute.find(attr_id) - if attr_format.count == 0 - attr_format.push({ type: menu_attr.attribute_type, values: [menu_attr.name] }) - next - end - - attr_format.each do |af| - if menu_attr.attribute_type.in? attr_format.map {|k| k[:type]} - if menu_attr.attribute_type == af[:type] - af[:values].push(menu_attr.name) - end - else - new_attr = {type: menu_attr.attribute_type, values: [ menu_attr.name ] } - attr_format.push(new_attr) - break - end - end - end + # Format for attributes json + attr_format = [] + # Format for attributes json + if item.item_attributes.count > 0 + item_attributes = @item_attributes.select{ |x| item.item_attributes.include?(x.id.to_s) } + attr_format = item_attributes.group_by {|att| att.attribute_type }.map { |type, values| {type: type, values: values.map(&:name)} } end # Format for option json opt_format = [] - # Format for attributes json - if item.item_options.count > 0 - item.item_options.each do|opt| - menu_opt = MenuItemOption.find(opt) - if opt_format.count == 0 - opt_format.push({ type: menu_opt.option_type, values: [menu_opt.name] }) - next - end - - opt_format.each do |of| - if menu_opt.option_type.in? opt_format.map {|k| k[:type]} - if menu_opt.option_type == of[:type] - of[:values].push(menu_opt.name) - end - else - new_opt = {type: menu_opt.option_type, values: [ menu_opt.name ] } - opt_format.push(new_opt) - break - end - end - end + # Format for attributes json + if item.item_options.count > 0 + item_options = @item_options.select{ |x| item.item_options.include?(x.id.to_s) } + opt_format = item_options.group_by {|opt| opt.option_type }.map { |type, values| {type: type, values: values.map(&:name)} } end #Menu Item Information @@ -68,17 +37,15 @@ if item.is_available json.is_sub_item item.is_sub_item json.unit item.unit - # Item Sets of Menu Item + # Item Sets of Menu Item json.item_sets item.item_sets do |its| json.id its.id json.name its.name json.alt_name its.alt_name json.min_selectable_qty its.min_selectable_qty json.max_selectable_qty its.max_selectable_qty - json.instances its.menu_item_instances do |i| - json.id i.id - end - end + json.instances its.menu_item_instances.map { |i| {id: i.id} } + end json.attributes attr_format json.options opt_format @@ -97,25 +64,18 @@ if item.is_available json.instances item.menu_item_instances do |is| if is.is_available # Convert id to name for attributes - instance_attr = [] + instance_attr = @item_attributes.select{ |x| item.item_attributes.include?(x.id) }.pluck(:name) - is.item_attributes.each do |ia| - # mItemAttr = MenuItemAttribute.find(is) - # instance_attr.push(ia) - mItemAttr = MenuItemAttribute.find(ia).name - instance_attr.push(mItemAttr) - end - - json.id is.id - json.code is.item_instance_code - json.name is.item_instance_name - json.price is.price - json.is_available is.is_available - json.is_default is.is_default - json.is_on_promotion is.is_on_promotion - json.promotion_price is.promotion_price - json.values instance_attr - # json.item_sets is.item_sets + json.id is.id + json.code is.item_instance_code + json.name is.item_instance_name + json.price is.price + json.is_available is.is_available + json.is_default is.is_default + json.is_on_promotion is.is_on_promotion + json.promotion_price is.promotion_price + json.values instance_attr + # json.item_sets is.item_sets end end @@ -125,4 +85,4 @@ if item.is_available # json.partial! 'api/restaurant/menu/menu_item', item: item # end # end -end \ No newline at end of file +end