From b750547066e18d95307a3e5b490e74b462c05b20 Mon Sep 17 00:00:00 2001 From: phyusin Date: Wed, 28 Nov 2018 10:54:37 +0630 Subject: [PATCH] change future checkin time flow --- app/controllers/api/bill_controller.rb | 112 +++++++------- .../api/check_in_process_controller.rb | 2 +- .../origami/request_bills_controller.rb | 139 +++++++++--------- app/models/dining_facility.rb | 3 +- app/views/origami/home/show.html.erb | 14 +- app/views/origami/rooms/show.html.erb | 14 +- 6 files changed, 160 insertions(+), 124 deletions(-) diff --git a/app/controllers/api/bill_controller.rb b/app/controllers/api/bill_controller.rb index 224a1e60..b9cbe2ca 100755 --- a/app/controllers/api/bill_controller.rb +++ b/app/controllers/api/bill_controller.rb @@ -11,39 +11,44 @@ class Api::BillController < Api::ApiController table = 0 if (params[:booking_id]) booking = Booking.find(params[:booking_id]) - # for Multiple Cashier by Zone - table = DiningFacility.find(booking.dining_facility_id) - - bk_order = BookingOrder.find_by_booking_id(booking.booking_id) - order = Order.find(bk_order.order_id) - - cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) - - shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{cashier_zone.cashier_terminal_id}").first - - #for multiple zone with terminal - if !shift.nil? - cashier = Employee.find(shift.employee_id) + if booking.checkin_at.utc.strftime("%Y-%m-%d %H:%M") > Time.now.utc.strftime("%Y-%m-%d %H:%M") && booking.checkout_at.nil? + @status = false + @error_message = "Operation failed, Could not request bill!" else - multiple_zone = CashierTerminalByZone.where("zone_id = #{table.zone_id}") - multiple_zone.each do |zone| - shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{zone.cashier_terminal_id}").first - if !shift.nil? then - cashier = Employee.find(shift.employee_id) - break + # for Multiple Cashier by Zone + table = DiningFacility.find(booking.dining_facility_id) + + bk_order = BookingOrder.find_by_booking_id(booking.booking_id) + order = Order.find(bk_order.order_id) + + cashier_zone = CashierTerminalByZone.find_by_zone_id(table.zone_id) + + shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{cashier_zone.cashier_terminal_id}").first + + #for multiple zone with terminal + if !shift.nil? + cashier = Employee.find(shift.employee_id) + else + multiple_zone = CashierTerminalByZone.where("zone_id = #{table.zone_id}") + multiple_zone.each do |zone| + shift = ShiftSale.where("shift_started_at is not null and shift_closed_at is null and cashier_terminal_id = #{zone.cashier_terminal_id}").first + if !shift.nil? then + cashier = Employee.find(shift.employee_id) + break + end end end - end - if booking - if booking.sale_id.nil? - @sale = Sale.new - @status, @sale_id = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee, cashier, order.source) - @sale_data = Sale.find_by_sale_id(@sale_id) - else - @status = true - @sale_id = booking.sale_id - @sale_data = Sale.find_by_sale_id(@sale_id) + if booking + if booking.sale_id.nil? + @sale = Sale.new + @status, @sale_id = @sale.generate_invoice_from_booking(params[:booking_id], current_login_employee, cashier, order.source) + @sale_data = Sale.find_by_sale_id(@sale_id) + else + @status = true + @sale_id = booking.sale_id + @sale_data = Sale.find_by_sale_id(@sale_id) + end end end elsif (params[:order_id]) @@ -59,35 +64,36 @@ class Api::BillController < Api::ApiController # Bind shift sale id to sale # @sale_data.shift_sale_id = shift_by_terminal.id # @sale_data.save + if @status + #check checkInOut pdf print + check_booking = Booking.find_by_sale_id(@sale_id) + checkout_time = Lookup.collection_of('checkout_time') + terminal = DiningFacility.find_by_id(check_booking.dining_facility_id) + cashier_terminal = CashierTerminal.find_by_id(terminal.zone_id) - #check checkInOut pdf print - check_booking = Booking.find_by_sale_id(@sale_id) - checkout_time = Lookup.collection_of('checkout_time') - terminal = DiningFacility.find_by_id(check_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) - 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) - # print when complete click - order_queue_printer = Printer::OrderQueuePrinter.new(printer) + if !printer.nil? + order_queue_printer.print_check_in_out(printer,cashier_terminal , check_booking, table) + end + end - if !printer.nil? - order_queue_printer.print_check_in_out(printer,cashier_terminal , check_booking, table) + Promotion.promo_activate(@sale) + + #BillBroadcastJob.perform_later(table) + if ENV["SERVER_MODE"] == 'cloud' + from = request.subdomain + "." + request.domain + else + from = "" end - end - - Promotion.promo_activate(@sale) - - #BillBroadcastJob.perform_later(table) - if ENV["SERVER_MODE"] == 'cloud' - from = request.subdomain + "." + request.domain - else - from = "" - end - ActionCable.server.broadcast "bill_channel",table: table, from: from + ActionCable.server.broadcast "bill_channel",table: table, from: from + end else @status = false @error_message = "No Current Open Shift" diff --git a/app/controllers/api/check_in_process_controller.rb b/app/controllers/api/check_in_process_controller.rb index c10d9593..a9ea01be 100644 --- a/app/controllers/api/check_in_process_controller.rb +++ b/app/controllers/api/check_in_process_controller.rb @@ -62,7 +62,7 @@ class Api::CheckInProcessController < Api::ApiController def check_in_process if params[:dining_id] dining_facility = DiningFacility.find(params[:dining_id]) - if dining_facility.status == "available" + if dining_facility.is_active && dining_facility.status == "available" if params[:checkin_time] checkin_at = nil if !params[:checkin_time].empty? diff --git a/app/controllers/origami/request_bills_controller.rb b/app/controllers/origami/request_bills_controller.rb index 0bae60f3..e1cec136 100755 --- a/app/controllers/origami/request_bills_controller.rb +++ b/app/controllers/origami/request_bills_controller.rb @@ -16,78 +16,83 @@ class Origami::RequestBillsController < ApplicationController bk_order = BookingOrder.find_by_order_id(order_id) order = Order.find(order_id) check_booking = Booking.find_by_booking_id(bk_order.booking_id) - if check_booking.dining_facility_id.to_i > 0 - table = DiningFacility.find(check_booking.dining_facility_id) + if check_booking.checkin_at.utc.strftime("%Y-%m-%d %H:%M") > Time.now.utc.strftime("%Y-%m-%d %H:%M") && check_booking.checkout_at.nil? + @status = false + @error_message = "Operation failed, Could not request bill!" else - table = nil - end - - if check_booking.sale_id.nil? - # Create Sale if it doesn't exist - @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source) - @sale_data = Sale.find_by_sale_id(@sale_id) - @sale_items = SaleItem.where("sale_id=?",@sale_id) - - # in-duty update - in_duties = InDuty.where("booking_id=?",bk_order.booking_id) - if !in_duties.empty? - in_duties.each do |in_duty| - induty = InDuty.find(in_duty.id) - induty.sale_id = @sale_id - induty.save - end + if check_booking.dining_facility_id.to_i > 0 + table = DiningFacility.find(check_booking.dining_facility_id) + else + table = nil end - else - @sale_data = Sale.find_by_sale_id(check_booking.sale_id) - @sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id) - end + + if check_booking.sale_id.nil? + # Create Sale if it doesn't exist + @status, @sale_id = @sale.generate_invoice_from_booking(check_booking.id,current_login_employee, current_user, order.source) + @sale_data = Sale.find_by_sale_id(@sale_id) + @sale_items = SaleItem.where("sale_id=?",@sale_id) - # Bind shift sale id to sale - # @sale_data.shift_sale_id = shift.id - # @sale_data.save - - 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) - - #bill channel - if ENV["SERVER_MODE"] == 'cloud' - from = request.subdomain + "." + request.domain - else - from = "" - end - - if order.source == "cashier" || order.source == "quick_service" - ActionCable.server.broadcast "bill_channel",table: table, from: from - end - if order.source == "quick_service" || order.source == "food_court" - result = {:status=> @status, :data => @sale.sale_id } - render :json => result.to_json - else - #check checkInOut pdf print - check_booking = Booking.find_by_sale_id(@sale_id) - checkout_time = Lookup.collection_of('checkout_time') - if !check_booking.dining_facility_id.nil? - terminal = DiningFacility.find_by_id(check_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, check_booking, table) + # in-duty update + in_duties = InDuty.where("booking_id=?",bk_order.booking_id) + if !in_duties.empty? + in_duties.each do |in_duty| + induty = InDuty.find(in_duty.id) + induty.sale_id = @sale_id + induty.save end + end + else + @sale_data = Sale.find_by_sale_id(check_booking.sale_id) + @sale_items = SaleItem.where("sale_id=?",@sale_data.sale_id) + end + + # Bind shift sale id to sale + # @sale_data.shift_sale_id = shift.id + # @sale_data.save + + 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) + + #bill channel + if ENV["SERVER_MODE"] == 'cloud' + from = request.subdomain + "." + request.domain + else + from = "" + end + + if order.source == "cashier" || order.source == "quick_service" + ActionCable.server.broadcast "bill_channel",table: table, from: from + end + if order.source == "quick_service" || order.source == "food_court" + result = {:status=> @status, :data => @sale.sale_id } + render :json => result.to_json + else + #check checkInOut pdf print + check_booking = Booking.find_by_sale_id(@sale_id) + checkout_time = Lookup.collection_of('checkout_time') + if !check_booking.dining_facility_id.nil? + terminal = DiningFacility.find_by_id(check_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, check_booking, table) + end + end end - end + end end else @status = false diff --git a/app/models/dining_facility.rb b/app/models/dining_facility.rb index 12020320..260333e7 100755 --- a/app/models/dining_facility.rb +++ b/app/models/dining_facility.rb @@ -32,7 +32,8 @@ class DiningFacility < ApplicationRecord end def get_current_booking - booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_by is null").limit(1) #and checkout_at is null + booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and (CASE WHEN checkin_at > '#{DateTime.now.utc}' THEN checkin_at >= '#{DateTime.now.utc}' ELSE checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' END) and checkout_by is null").limit(1) #and checkout_at is null + # booking = Booking.where("dining_facility_id = #{self.id} and booking_status ='assign' and checkin_at between '#{DateTime.now.utc - 5.hours}' and '#{DateTime.now.utc}' and checkout_by is null").limit(1) #and checkout_at is null if booking.count > 0 then return booking[0] else diff --git a/app/views/origami/home/show.html.erb b/app/views/origami/home/show.html.erb index eca1a7ef..d4f0c8fd 100755 --- a/app/views/origami/home/show.html.erb +++ b/app/views/origami/home/show.html.erb @@ -1078,7 +1078,19 @@ // data: 'order_id='+ order_id, success: function (result) { if (!result.status) { - swal("Information!", result.error_message); + swal({ + title: 'Oops', + text: result.error_message, + type: 'error', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + location.reload(); + } + }); } else { location.reload(); diff --git a/app/views/origami/rooms/show.html.erb b/app/views/origami/rooms/show.html.erb index b7df32a0..311927c5 100755 --- a/app/views/origami/rooms/show.html.erb +++ b/app/views/origami/rooms/show.html.erb @@ -1146,7 +1146,19 @@ $('#request_bills').click(function() { // data: 'order_id='+ order_id, success: function (result) { if (!result.status) { - swal("Information!", result.error_message); + swal({ + title: 'Oops', + text: result.error_message, + type: 'error', + html: true, + closeOnConfirm: false, + closeOnCancel: false, + allowOutsideClick: false + }, function (isConfirm) { + if(isConfirm){ + location.reload(); + } + }); } else { location.reload();