Files
sx-fc/app/models/dining_facility.rb
Thein Lin Kyaw 3a99e1bb09 update for order process
Add activereocrd-import gem for bulk insert
2019-12-09 10:33:19 +06:30

171 lines
5.5 KiB
Ruby
Executable File

class DiningFacility < ApplicationRecord
belongs_to :zone
has_many :dining_charges
has_many :in_juties
has_many :bookings
has_many :current_bookings, -> { left_joins(:sale).assign.within_time_limit.merge(Booking.where(checkout_at: nil).or(Booking.merge(Sale.where(sale_status: ['new', nil])))) }, class_name: "Booking"
has_one :current_checkin_booking, -> { assign.within_time_limit.where(checkout_at: nil) }, class_name: "Booking"
has_one :current_checkout_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(checkout_at: nil).merge(Sale.where(sale_status: ['new', nil])) }, class_name: "Booking"
has_one :current_reserved_booking, -> { left_joins(:sale).assign.within_time_limit.where.not(reserved_at: nil).merge(Sale.where(sale_status: nil)) }, class_name: "Booking"
TABLE_TYPE = "Table"
ROOM_TYPE = "Room"
default_scope { order('order_by asc') }
scope :active, -> {where(is_active: true)}
def make_available
self.status = 'available'
self.save
end
def make_occupied
self.status = 'occupied'
self.save
end
def get_booking
booking = self.current_checkin_booking
if booking
if booking.dining_facility_id.to_i == self.id
if booking.booking_status == 'assign'
return booking
end
end
end
end
def get_current_booking
checkin_time_lookup = Lookup.get_checkin_time_limit
Booking.where(dining_facility_id: self.id, booking_status: 'assign', checkout_at: nil).where("checkin_at > ?", checkin_time_lookup.hours.ago).first #and checkout_at is null
end
def get_checkout_booking
booking = self.current_reserved_booking
if booking
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")
free_time_min = 0
if !lookup_checkout_time.empty?
now = Time.now.utc
lookup_checkout_time.each do |checkout_time|
arr_time = checkout_time[0].split("-")
start_time = Time.parse(arr_time[0].strip).utc.strftime("%H:%M%p")
end_time = Time.parse(arr_time[1].strip).utc.strftime("%H:%M%p")
if start_time <= now && now <= end_time
free_time_min = checkout_time[1].to_i
end
end
end
now = Time.now.utc
hr = (now.strftime("%H").to_i).to_int
min = (now.strftime("%M").to_i).to_int
if !booking.checkout_at.nil?
checkout_at = booking.checkout_at.utc
checkout_at_hr = (checkout_at.strftime("%H").to_i).to_int
checkout_at_min = (checkout_at.strftime("%M").to_i).to_int
checkout_at_min -= min
if (checkout_at_hr < hr)
return booking
elsif (checkout_at_hr == hr && checkout_at_min <= free_time_min)
return booking
else
return nil
end
else
return nil
end
end
end
def self.get_checkin_booking
checkin_time_lookup = Lookup.get_checkin_time_limit
bookings = self.current_checkin_booking
arr_booking = Array.new
if bookings
lookup_checkout_time = Lookup.collection_of("checkout_alert_time")
free_time_min = 0
if !lookup_checkout_time.empty?
now = Time.now.utc
lookup_checkout_time.each do |checkout_time|
arr_time = checkout_time[0].split("-")
start_time = Time.parse(arr_time[0].strip).utc.strftime("%H:%M%p")
end_time = Time.parse(arr_time[1].strip).utc.strftime("%H:%M%p")
if start_time <= now && now <= end_time
free_time_min = checkout_time[1].to_i
end
end
end
bookings.each do |booking|
now = Time.now.utc
hr = (now.strftime("%H").to_i).to_int
min = (now.strftime("%M").to_i).to_int
if !booking.checkout_at.nil?
checkout_at = booking.checkout_at.utc
checkout_at_hr = (checkout_at.strftime("%H").to_i).to_int
checkout_at_min = (checkout_at.strftime("%M").to_i).to_int
checkout_at_min -= min
if (checkout_at_hr < hr)
arr_booking.push({'table_id' => booking.dining_facility_id})
elsif (checkout_at_hr == hr && checkout_at_min <= free_time_min)
arr_booking.push({'table_id' => booking.dining_facility_id})
end
end
end
end
return arr_booking
end
#send order items and send to order queue
def self.check_in_booking(table_id)
table = DiningFacility.find(table_id)
#Send to background job for processing
# CheckInBookingJob.perform_later(table)
#if ENV["SERVER_MODE"] != 'cloud'
if ENV["SERVER_MODE"] == 'cloud'
from = request.subdomain + "." + request.domain
else
from = ""
end
ActionCable.server.broadcast "check_in_booking_channel",table: table,from:from
#end
end
def self.checkin_time
table = DiningFacility.get_checkin_booking
if table.length > 0
if ENV["SERVER_MODE"] == 'cloud'
from = request.subdomain + "." + request.domain
else
from = ""
end
if ENV["SERVER_MODE"] != 'cloud'
ActionCable.server.broadcast "checkin_channel",table: table,from:from
end
end
end
def check_time(time, booking = nil, type)
status = true
today = Time.now.utc.strftime("%Y-%m-%d %H:%M")
check_time = time.strftime("%Y-%m-%d %H:%M")
if type.downcase == "checkin"
if check_time < today
status = false
end
else
if !booking.nil?
checkin_at = booking.checkin_at.utc.strftime("%Y-%m-%d %H:%M")
if check_time <= checkin_at
status = false
end
end
end
return status
end
end