diff --git a/Gemfile.lock b/Gemfile.lock index 84791b6b..a64de866 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -47,7 +47,7 @@ GEM minitest (~> 5.1) tzinfo (~> 1.1) aescrypt (1.0.0) - airbrussh (1.3.4) + airbrussh (1.4.0) sshkit (>= 1.6.1, != 1.7.0) arel (8.0.0) axlsx (2.0.1) @@ -88,7 +88,7 @@ GEM coffee-script-source (1.12.2) concurrent-ruby (1.1.5) connection_pool (2.2.2) - crass (1.0.4) + crass (1.0.5) cups (0.1.10) database_cleaner (1.7.0) diff-lcs (1.3) @@ -110,7 +110,7 @@ GEM htmlentities (4.3.4) httparty (0.15.7) multi_xml (>= 0.5.2) - i18n (1.6.0) + i18n (1.7.0) concurrent-ruby (~> 1.0) jbuilder (2.9.1) activesupport (>= 4.2.0) @@ -150,7 +150,7 @@ GEM method_source (0.9.2) mime-types (3.3) mime-types-data (~> 3.2015) - mime-types-data (3.2019.0904) + mime-types-data (3.2019.1009) mini_magick (4.9.5) mini_mime (1.0.2) mini_portile2 (2.4.0) @@ -175,9 +175,9 @@ GEM prawn (2.2.2) pdf-core (~> 0.7.0) ttfunk (~> 1.5) - prawn-qrcode (0.3.1) + prawn-qrcode (0.4.0) prawn (>= 1) - rqrcode (>= 0.4.1) + rqrcode (>= 1.0.0) prawn-table (0.2.2) prawn (>= 1.3.0, < 3.0.0) puma (3.12.1) @@ -230,8 +230,8 @@ GEM rspec-support (~> 3.8.0) rspec-mocks (3.8.2) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.8.0) - rspec-rails (3.8.2) + rspec-support (~> 3.9.0) + rspec-rails (3.9.0) actionpack (>= 3.0) activesupport (>= 3.0) railties (>= 3.0) diff --git a/app/controllers/api/orders_controller.rb b/app/controllers/api/orders_controller.rb index aab34b42..bd2c3e18 100755 --- a/app/controllers/api/orders_controller.rb +++ b/app/controllers/api/orders_controller.rb @@ -66,11 +66,22 @@ class Api::OrdersController < Api::ApiController Rails.logger.debug "Table ID - " + params[:table_id].to_s if checkin_checkout_time(params[:booking_id]) + + 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 + #for extratime is_extra_time = false extra_time = '' - params[:order_items].each { |i| + 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 @@ -82,8 +93,7 @@ class Api::OrdersController < Api::ApiController end } #end extra time - puts params[:order_items] - puts "ORDER ITEMS" + # begin @order = Order.new @order.source = params[:order_source] @@ -98,51 +108,26 @@ class Api::OrdersController < Api::ApiController @order.is_extra_time = is_extra_time @order.extra_time = extra_time - #Create Table Booking or Room Booking - if !params["booking_id"].nil? - # check booking id is already completed. - booking = Booking.find(params[:booking_id]) - if booking - if booking.dining_facility_id.to_i == params[:table_id].to_i && booking.booking_status != 'moved' - if !booking.sale_id.nil? - sale_status = check_order_with_booking(booking) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - else - @order.new_booking = false - @order.booking_id = params[:booking_id] - end - else - sale_status = check_order_with_table(params[:table_id]) + #Create Table Booking or Room Booking + 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 - if sale_status - return return_json_status_with_code(400, "bill requested") - end - end - end #booking exists - else - sale_status = check_order_with_table(params[:table_id]) - - if sale_status - # return false , @message = "bill requested" - return return_json_status_with_code(400, "bill requested") - end - end - - @status, @booking = @order.generate - if @status && @booking - Order.process_order_queue(@order.order_id,@order.table_id,@order.source) - end - 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 - # # for parallel order + @status, @booking = @order.generate + if @status && @booking + Order.process_order_queue(@order.order_id,@order.table_id,@order.source) + end + 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 + # # for parallel order # remoteIP = "" # begin # @status, @booking = @order.generate @@ -211,12 +196,9 @@ class Api::OrdersController < Api::ApiController def checkin_checkout_time(booking_id) status = true if !booking_id.nil? - today = Time.now.utc - booking = Booking.find(booking_id) - if !booking.nil? - if !booking.checkout_at.nil? - checkout_time = booking.checkout_at.utc - if checkout_time <= today + if booking = Booking.find(booking_id) + if booking.checkout_at.present? + if booking.checkout_at.utc <= Time.now.utc status = false end end @@ -256,11 +238,11 @@ class Api::OrdersController < Api::ApiController oqs = assign_item.order_queue_station printer = PrintSetting.all - + unique_code="OrderItemPdf" if !printer.empty? printer.each do |printer_setting| - if printer_setting.unique_code == 'OrderItemPdf' + if printer_setting.unique_code == 'OrderItemPdf' unique_code="OrderItemPdf" elsif printer_setting.unique_code == 'OrderItemSlimPdf' unique_code="OrderItemSlimPdf" @@ -272,9 +254,9 @@ class Api::OrdersController < Api::ApiController unique_code="OrderItemCustomisePdf" elsif printer_setting.unique_code == 'OrderSetItemCustomisePdf' unique_code="OrderSetItemCustomisePdf" - end + end end - end + end print_settings=PrintSetting.find_by_unique_code(unique_code) order_queue_printer= Printer::OrderQueuePrinter.new(print_settings) @@ -301,6 +283,5 @@ class Api::OrdersController < Api::ApiController return from end - -end +end diff --git a/app/controllers/origami/addorders_controller.rb b/app/controllers/origami/addorders_controller.rb index 22442fb0..ba302f88 100755 --- a/app/controllers/origami/addorders_controller.rb +++ b/app/controllers/origami/addorders_controller.rb @@ -38,20 +38,10 @@ class Origami::AddordersController < BaseOrigamiController @booking = @table.get_booking if @booking @booking_id = @booking.booking_id - @order_items = Array.new - @booking.booking_orders.each do |booking_order| - order = Order.find(booking_order.order_id) - if (order.status == "new") - @obj_order = order - @customer = order.customer - @date = order.created_at - order.order_items.each do |item| - @order_items.push(item) - end - end - end - else - @booking = nil + @obj_order = @booking.orders.first + @customer = @obj_order.customer + @date = @obj_order.created_at + @order_items = @booking.order_items end end @@ -102,8 +92,16 @@ class Origami::AddordersController < BaseOrigamiController end def create - # Rails.logger.debug "Order Source - " + params[:order_source].to_s - # Rails.logger.debug "Table ID - " + params[:table_id].to_s + 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 = '' @@ -131,6 +129,7 @@ class Origami::AddordersController < BaseOrigamiController else customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[:customer_id] # for no customer id from mobile end + @order = Order.new @order.source = params[:order_source] @order.order_type = params[:order_type] @@ -144,82 +143,51 @@ class Origami::AddordersController < BaseOrigamiController @order.is_extra_time = is_extra_time @order.extra_time = extra_time - #Create Table Booking or Room Booking - if !params["booking_id"].nil? - # check booking id is already completed. - booking = Booking.find(params[:booking_id]) - if params[:table_id].to_i > 0 - table_status = booking.dining_facility_id.to_i == params[:table_id].to_i - else - table_status = true - end - if booking - if table_status && booking.booking_status != 'moved' - if !booking.sale_id.nil? - sale_status = check_order_with_booking(booking) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - else - @order.new_booking = false - @order.booking_id = params[:booking_id] - end - else - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - end - end - end #booking exists - else - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - # return false , @message = "bill requested" - return return_json_status_with_code(400, "bill requested") - end - end + + 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 - @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 + 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') + 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) + @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 + # 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 - else - result = {:status=> @status, :data => 0 } + #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 diff --git a/app/controllers/origami/food_court_controller.rb b/app/controllers/origami/food_court_controller.rb index 857da01f..1157bb44 100644 --- a/app/controllers/origami/food_court_controller.rb +++ b/app/controllers/origami/food_court_controller.rb @@ -6,7 +6,7 @@ class Origami::FoodCourtController < ApplicationController redirect_to root_path end end - + def index today = DateTime.now day = Date.today.wday @@ -14,7 +14,7 @@ class Origami::FoodCourtController < ApplicationController @menus = [] @menu = [] # else - # @menus = Menu.all + # @menus = Menu.all # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') # end @zone = Zone.all @@ -27,14 +27,14 @@ class Origami::FoodCourtController < ApplicationController lookup_dine_in = Lookup.collection_of('dinein_cashier') if !lookup_dine_in.empty? lookup_dine_in.each do |dine_in| - if dine_in[0].downcase == "dineincashier" - if dine_in[1] == '1' + if dine_in[0].downcase == "dineincashier" + if dine_in[1] == '1' @quick_service_only = false end end end end - + render "origami/addorders/detail" end @@ -46,7 +46,7 @@ class Origami::FoodCourtController < ApplicationController @menus = [] @menu = [] # else - # @menus = Menu.all + # @menus = Menu.all # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') # end if(params[:id][0,3] == "BKI") @@ -58,38 +58,33 @@ class Origami::FoodCourtController < ApplicationController @table = DiningFacility.find(@table_id) @booking = @table.get_booking end - - @sale_id = params[:sale_id] + + @sale_id = @booking.sale_id if @booking @booking_id = @booking.booking_id - @order_items = Array.new - @booking.booking_orders.each do |booking_order| - order = Order.find(booking_order.order_id) - if (order.status == "new") - @obj_order = order - @customer = order.customer - @date = order.created_at - order.order_items.each do |item| - @order_items.push(item) - end - end - end - else - @booking = nil + @obj_order = @booking.orders.first + @customer = @obj_order.customer + @date = @obj_order.created_at + @order_items = @booking.order_items end - render "origami/addorders/detail" + + render "origami/addorders/detail" end def update_modify_order - Rails.logger.debug "Order Source - " + params[:order_source].to_s - Rails.logger.debug "Table ID - " + params[:table_id].to_s + 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 = "food_court" + cashier_type = "food_court" items_arr = [] - JSON.parse(params[:order_items]).each { |i| + 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 @@ -108,82 +103,32 @@ class Origami::FoodCourtController < ApplicationController } # begin - @order = Order.new - @order.source = params[:order_source] - @order.order_type = params[:order_type] - @order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[: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.new_booking = true - @order.waiters = current_login_employee.name - @order.employee_name = current_login_employee.name + order = Order.new + order.source = params[:order_source] + order.order_type = params[:order_type] + order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[: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.is_extra_time = is_extra_time + order.extra_time = extra_time - #Create Table Booking or Room Booking - if !params["booking_id"].nil? - # check booking id is already completed. - booking = Booking.find(params[:booking_id]) - if params[:table_id].to_i > 0 - table_status = booking.dining_facility_id.to_i == params[:table_id].to_i - else - table_status = true - end - if booking - if table_status && booking.booking_status != 'moved' - if !booking.sale_id.nil? - sale_status = check_order_with_booking(booking) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - else - @order.new_booking = false - @order.booking_id = params[:booking_id] - end - else - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - end - end - end #booking exists + 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 - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - # return false , @message = "bill requested" - return return_json_status_with_code(400, "bill requested") - end - end + render :json => { :status => true, :data => 'OK' } end - - @status, @booking = @order.generate - if(params[:sale_id][0,3] == "SAL") - if @status && @booking && (@order.source == 'quick_service' || @order.source == 'food_court') - if params[:sale_id] - @sale = Sale.find(params[:sale_id]) - if @order.table_id.to_i > 0 - @table_id = @order.table_id - else - @table_id = nil - end - update = Sale.add_to_existing_pending_invoice(@table_id,params[:sale_id],@booking) - end - - result = {:status=> true, :data => @sale } - render :json => result.to_json - end - elsif (params[:sale_id][0,3] == "BKI") - result = {:status=> true, :data => 'OK' } - render :json => result.to_json - else - result = {:status=> true, :data => nil } - render :json => result.to_json - end + else + render :json => { :status => false } + end end @@ -209,9 +154,9 @@ class Origami::FoodCourtController < ApplicationController return @sub_menu end end - + def get_all_product() - @product = Product.all + @product = Product.all end # render json for http status code diff --git a/app/controllers/origami/pending_order_controller.rb b/app/controllers/origami/pending_order_controller.rb index 20b3f6f7..4b412c17 100644 --- a/app/controllers/origami/pending_order_controller.rb +++ b/app/controllers/origami/pending_order_controller.rb @@ -7,12 +7,32 @@ class Origami::PendingOrderController < BaseOrigamiController @order = Sale.pending_order(@cashier_type) @completed = Sale.completed_sale(@cashier_type) @customers = Customer.pluck("customer_id, name") - + @occupied_table = @sale.count.length + @order.count.length - + end def show + id = params[:sale_id] + if id.start_with?("SAL") + @sale = Sale.find(id) + if @sale.sale_status == "new" + @bookings = @sale.bookings.first + @status = "sale" + else + redirect_to "/origami/#{params[:type]}" and return + end + elsif id.start_with?("BKI") + @bookings = Booking.find(id) + @order = @bookings.orders.where(status: "new").first + @order_items = @bookings.order_items + @status = "order" + end + + if @dining = @bookings.dining_facility + @table_id = @dining.id + end + @cashier_type = params[:type] @sales = Sale.pending_sale(@cashier_type) @orders = Sale.pending_order(@cashier_type) @@ -20,38 +40,6 @@ class Origami::PendingOrderController < BaseOrigamiController @customers = Customer.pluck("customer_id, name") @occupied_table = @sales.count.length + @orders.count.length - - @id = params[:sale_id] - if(@id[0,3] == "SAL") - @sale = Sale.find(@id) - @order = SaleOrder.find_by_sale_id(@sale.sale_id).order_id - @booking = BookingOrder.find_by_order_id(@order).booking_id - @bookings = Booking.find(@booking) - @status = "sale" - else - # @booking = BookingOrder.find_by_order_id(@order).booking_id - @bookings = Booking.find(@id) - @status = "order" - - @order_items = Array.new - @bookings.booking_orders.each do |booking_order| - @order = Order.find(booking_order.order_id) - if (@order.status == "new") - @order.order_items.each do |item| - @order_items.push(item) - end - end - end - end - # puts @status - if @bookings.dining_facility_id.to_i > 0 - @table_id = Booking.find(@bookings.booking_id).dining_facility_id - @dining = DiningFacility.find(@table_id) - else - @table_id = nil - @dining = nil - end - @customers = Customer.pluck("customer_id, name") end def completed_sale @@ -64,13 +52,13 @@ class Origami::PendingOrderController < BaseOrigamiController @occupied_table = @sales.count.length + @orders.count.length @id = params[:sale_id] - + @sale = Sale.find(@id) @order = SaleOrder.find_by_sale_id(@sale.sale_id).order_id @booking = BookingOrder.find_by_order_id(@order).booking_id @bookings = Booking.find(@booking) @status = "sale" - + if @bookings.dining_facility_id.to_i > 0 @table_id = Booking.find(@bookings.booking_id).dining_facility_id @dining = DiningFacility.find(@table_id) @@ -96,7 +84,7 @@ class Origami::PendingOrderController < BaseOrigamiController @completed = Sale.completed_sale(@cashier_type) @occupied_table = @sales.count.length + @orders.count.length - + @id = params[:sale_id] @customers = Customer.pluck("customer_id, name") @@ -105,7 +93,7 @@ class Origami::PendingOrderController < BaseOrigamiController @booking = BookingOrder.find_by_order_id(@order).booking_id @bookings = Booking.find(@booking) @status = "sale" - + if @bookings.dining_facility_id.to_i > 0 @table_id = Booking.find(@bookings.booking_id).dining_facility_id @dining = DiningFacility.find(@table_id) @@ -116,7 +104,7 @@ class Origami::PendingOrderController < BaseOrigamiController @sale_payment = SalePayment.select("SUM(payment_amount) as payment_amount") .where("sale_id = ? and payment_method=?", @sale.sale_id, "creditnote") - + @sale_taxes = [] sale_taxes = SaleTax.where("sale_id = ?", @sale.sale_id) if !sale_taxes.empty? diff --git a/app/controllers/origami/quick_service_controller.rb b/app/controllers/origami/quick_service_controller.rb index cc39db10..3e69485a 100644 --- a/app/controllers/origami/quick_service_controller.rb +++ b/app/controllers/origami/quick_service_controller.rb @@ -10,13 +10,13 @@ class Origami::QuickServiceController < ApplicationController def index today = DateTime.now day = Date.today.wday - # if params[:menu] == "true" - @menus = [] - @menu = [] - # else - # @menus = Menu.all - # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') - # end + # if params[:menu] == "true" + @menus = [] + @menu = [] + # else + # @menus = Menu.all + # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # end @zone = Zone.all @customer = Customer.all @tables = Table.all.active.order('status desc') @@ -51,13 +51,13 @@ class Origami::QuickServiceController < ApplicationController @cashier_type = "quick_service" today = DateTime.now day = Date.today.wday - # if params[:menu] == "true" - @menus = [] - @menu = [] - # else - # @menus = Menu.all - # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') - # end + # if params[:menu] == "true" + @menus = [] + @menu = [] + # else + # @menus = Menu.all + # @menu = MenuCategory.active.where("menu_id =#{@menus[0].id}").order('order_by asc') + # end if(params[:id][0,3] == "BKI") @table_id = nil @table = nil @@ -68,34 +68,29 @@ class Origami::QuickServiceController < ApplicationController @booking = @table.get_booking end - @sale_id = params[:sale_id] + @sale_id = @booking.sale_id if @booking @booking_id = @booking.booking_id - @order_items = Array.new - @booking.booking_orders.each do |booking_order| - order = Order.find(booking_order.order_id) - if (order.status == "new") - @obj_order = order - @customer = order.customer - @date = order.created_at - order.order_items.each do |item| - @order_items.push(item) - end - end - end - else - @booking = nil + @obj_order = @booking.orders.first + @customer = @obj_order.customer + @date = @obj_order.created_at + @order_items = @booking.order_items end - render "origami/addorders/detail" + + render "origami/addorders/detail" end def update_modify_order - Rails.logger.debug "Order Source - " + params[:order_source].to_s - Rails.logger.debug "Table ID - " + params[:table_id].to_s + 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" + cashier_type = "quick_service" items_arr = [] JSON.parse(params[:order_items]).each { |i| @@ -117,82 +112,32 @@ class Origami::QuickServiceController < ApplicationController } # begin - @order = Order.new - @order.source = params[:order_source] - @order.order_type = params[:order_type] - @order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[: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.new_booking = true - @order.waiters = current_login_employee.name - @order.employee_name = current_login_employee.name + order = Order.new + order.source = params[:order_source] + order.order_type = params[:order_type] + order.customer_id = params[:customer_id] == ""? "CUS-000000000001" : params[: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.is_extra_time = is_extra_time - @order.extra_time = extra_time + order.new_booking = false + order.booking_id = booking.booking_id - #Create Table Booking or Room Booking - if !params["booking_id"].nil? - # check booking id is already completed. - booking = Booking.find(params[:booking_id]) - if params[:table_id].to_i > 0 - table_status = booking.dining_facility_id.to_i == params[:table_id].to_i - else - table_status = true - end - if booking - if table_status && booking.booking_status != 'moved' - if !booking.sale_id.nil? - sale_status = check_order_with_booking(booking) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - else - @order.new_booking = false - @order.booking_id = params[:booking_id] - end - else - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - return return_json_status_with_code(400, "bill requested") - end - end - end - end #booking exists + if order.generate + if sale + Sale.add_to_existing_pending_invoice(nil, sale.sale_id, booking) + render :json => { :status => true, :data => sale } else - if params[:table_id].to_i > 0 - sale_status = check_order_with_table(params[:table_id]) - if sale_status - # return false , @message = "bill requested" - return return_json_status_with_code(400, "bill requested") - end - end - end - - @status, @booking = @order.generate - if(params[:sale_id][0,3] == "SAL") - if @status && @booking && @order.source == 'quick_service' - if params[:sale_id] - @sale = Sale.find(params[:sale_id]) - if @order.table_id.to_i > 0 - @table_id = @order.table_id - else - @table_id = nil - end - update = Sale.add_to_existing_pending_invoice(@table_id,params[:sale_id],@booking) - end - - result = {:status=> true, :data => @sale } - render :json => result.to_json - end - elsif (params[:sale_id][0,3] == "BKI") - result = {:status=> true, :data => 'OK' } - render :json => result.to_json - else - result = {:status=> true, :data => nil } - render :json => result.to_json + render :json => { :status => true, :data => 'OK' } end + else + render :json => { :status => false } + end end @@ -234,20 +179,20 @@ class Origami::QuickServiceController < ApplicationController def check_order_with_table(table_id) table = DiningFacility.find(table_id) if table - booking = table.get_current_booking - # puts booking - if booking + booking = table.get_current_booking + # puts 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 + @order.new_booking = true + return false end else - @order.new_booking = false - @order.booking_id = booking.booking_id - return false - end - end + @order.new_booking = false + @order.booking_id = booking.booking_id + return false + end + end end end diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 36864ed8..6d36f319 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -16,7 +16,7 @@ class Origami::RequestBillsController < ApplicationController @status = false @error_message = "Operation failed, Could not request bill!" else - table = DiningFacility.find(booking.dining_facility_id) + table = DiningFacility.find_by(id: booking.dining_facility_id) if sale_data = booking.sale @status = true diff --git a/app/controllers/reports/dailysale_controller.rb b/app/controllers/reports/dailysale_controller.rb index 6fb7fe3f..2603fce4 100755 --- a/app/controllers/reports/dailysale_controller.rb +++ b/app/controllers/reports/dailysale_controller.rb @@ -9,6 +9,7 @@ class Reports::DailysaleController < BaseReportController @to = to @payment_methods = PaymentMethodSetting.where("is_active='1'").pluck("payment_method") + # get printer info @print_settings = PrintSetting.get_precision_delimiter() respond_to do |format| diff --git a/app/controllers/reports/hourly_saleitem_controller.rb b/app/controllers/reports/hourly_saleitem_controller.rb index 24547c0c..a08c24e4 100644 --- a/app/controllers/reports/hourly_saleitem_controller.rb +++ b/app/controllers/reports/hourly_saleitem_controller.rb @@ -27,8 +27,6 @@ class Reports::HourlySaleitemController < BaseReportController account_type = params[:account_type] @type = params[:sale_type] @sale_data, @other_charges,@product, @discount_data , @cash_data , @card_data , @credit_data , @foc_data , @grand_total , @change_amount = Sale.get_by_hourly_items(shift_sale_range,shift, from, to, Sale::SALE_STATUS_COMPLETED,@type,account_type) - # logger.debug 'product>>>>>>>>>>>>>>>>>>>>>>>>>>' - # logger.debug @sale_data.group(:date_format) @sale_taxes = Sale.get_separate_tax(shift_sale_range,shift,from,to,nil) @@ -59,7 +57,7 @@ class Reports::HourlySaleitemController < BaseReportController # @hourly_total_qty = @sale_data.group_by {|s| s.date_format }.collect{|key,qty| {"date" => key , "total_qty" => qty.sum{|d| d.qty.to_i}}} @hourly_total_qty = @sale_data.group_by(&:date_format).map { |k,v|{"date" => k , "total_qty" => v.count }} - puts @hourly_total_qty.to_json + respond_to do |format| format.html format.xls diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb index 0edc3dab..e5f35e03 100755 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -108,10 +108,10 @@ class DiningFacility < ApplicationRecord return booking elsif (checkout_at_hr == hr && checkout_at_min <= free_time_min) return booking - else + else return nil end - else + else return nil end end @@ -135,7 +135,7 @@ class DiningFacility < ApplicationRecord end end end - + bookings.each do |booking| now = Time.now.utc hr = (now.strftime("%H").to_i).to_int @@ -164,7 +164,7 @@ class DiningFacility < ApplicationRecord #if ENV["SERVER_MODE"] != 'cloud' 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 @@ -176,7 +176,7 @@ class DiningFacility < ApplicationRecord if table.length > 0 if ENV["SERVER_MODE"] == 'cloud' from = request.subdomain + "." + request.domain - else + else from = "" end if ENV["SERVER_MODE"] != 'cloud' @@ -203,5 +203,5 @@ class DiningFacility < ApplicationRecord end return status end - + end diff --git a/app/models/order.rb b/app/models/order.rb index fe7e706e..cd350e34 100755 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -57,13 +57,12 @@ class Order < ApplicationRecord if self.is_extra_time if !booking.checkout_at.nil? new_time = booking.checkout_at + self.extra_time.to_i - booking.update_attributes(checkout_at: new_time) + booking.update(checkout_at: new_time) end end #end extra time end - booking.save! self.default_values # cashier already opened? @@ -211,7 +210,6 @@ class Order < ApplicationRecord self.customer = Customer.find(1) if self.customer_id.nil? self.source = "emenu" if self.source.nil? self.order_type = "dine-in" if self.order_type.nil? - end protected diff --git a/app/models/sale.rb b/app/models/sale.rb index 67245590..8be79db3 100644 --- a/app/models/sale.rb +++ b/app/models/sale.rb @@ -2533,72 +2533,25 @@ end def self.add_to_existing_pending_invoice(dining,sale_id,booking) + sale = Sale.find(sale_id) existing_booking = Booking.find_by_sale_id(sale_id) - if dining.to_i > 0 - table = DiningFacility.find(dining) - table.bookings.each do |booking| - # if !booking.checkout_at.nil? - # existing_booking.update_attributes(checkout_at: checkout_at) - # end - if booking.sale_id.nil? - booking.booking_orders.each do |booking_order| - booking.booking_status = 'moved' - order = Order.find(booking_order.order_id) - order.status = 'billed' - order.order_items.each do |item| - item.order_item_status = 'billed' - end - # create sale item - saleobj = Sale.find(sale_id) - order.order_items.each do |orer_item| - saleobj.add_item (orer_item) - end + if booking.sale_id.nil? || booking.booking_id != existing_booking.booking_id + booking.orders.where(status: 'new').update(booking: existing_booking) + booking.update(booking_status: 'moved') + end - # Re-compute for add - saleobj.compute(order.source) - saleobj.save - order.save - booking.save - end - - booking_order = BookingOrder.where('booking_id=?',booking) - booking_order.each do |bo| - bo.booking_id = existing_booking.booking_id - bo.save - end - end - end - else - if booking.sale_id.nil? - booking.booking_orders.each do |booking_order| - - booking.booking_status = 'moved' - order = Order.find(booking_order.order_id) - order.status = 'billed' - order.order_items.each do |item| - item.order_item_status = 'billed' - end - # create sale item - saleobj = Sale.find(sale_id) - order.order_items.each do |orer_item| - saleobj.add_item (orer_item) - end - - # Re-compute for add - saleobj.compute(order.source) - saleobj.save - order.save - booking.save - end - - booking_order = BookingOrder.where('booking_id=?',booking) - booking_order.each do |bo| - bo.booking_id = existing_booking.booking_id - bo.save - end - end + existing_booking.orders.where(status: 'new').each do |order| + order.status = 'billed' + order.order_items.each do |item| + item.order_item_status = 'billed' + sale.add_item(item) end + order.save + sale.compute(order.source) + sale.orders << order + end + end def self.get_shift_sale_items(sh_id) @@ -2908,16 +2861,17 @@ def self.get_hourly_item_query(type) "i.status as status_type,i.remark as remark,"+ "i.unit_price,i.price as price,i.product_name as product_name, " + "i.menu_category_name,i.menu_category_code as menu_category_id, " + - "date_format(CONVERT_TZ(receipt_date,'+00:00', '+06:30'), '%I %p') - as date_format") + + "concat(hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')), ':00 - ', hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) + 1, ':00') as date_format," + + "hour(CONVERT_TZ(receipt_date,'+00:00', '+06:30')) as hour") query = query.joins("JOIN sale_items i ON i.sale_id = sales.sale_id" + " JOIN shift_sales sh ON sh.`id` = sales.shift_sale_id") # "JOIN employee_accesses ea ON ea.`employee_id` = sales.cashier_id ") query = query.joins(" JOIN accounts acc ON acc.id = i.account_id") query = query.where("#{sale_type}") - query = query.group("acc.title,i.account_id,i.menu_category_code,i.item_instance_code,i.product_name,i.unit_price") - .order("date_format asc") + query = query.group("acc.title,i.account_id,i.menu_category_code,i.item_instance_code,i.product_name,i.unit_price,hour") + .order("hour asc") # query = query.order("i.menu_category_name asc, SUM(i.qty) desc") end diff --git a/app/views/reports/dailysale/index.html.erb b/app/views/reports/dailysale/index.html.erb index 5f7e35e0..3347408a 100755 --- a/app/views/reports/dailysale/index.html.erb +++ b/app/views/reports/dailysale/index.html.erb @@ -26,10 +26,58 @@