add pending order

This commit is contained in:
Zin Moe
2020-03-13 12:10:18 +06:30
parent 03fe9e43f2
commit 05fff8c136
10 changed files with 591 additions and 97 deletions

View File

@@ -54,9 +54,6 @@ class Foodcourt::OrdersController < BaseFoodcourtController
end
end
def app_orders
# @pending_orders = Sale.pending_order('food_court')
# @completed = Sale.completed_sale('food_court')
if !params[:booking_id].nil? && !params[:booking_id].blank?
@booking = Booking.select("orders.*,bookings.*,customers.*")
.joins("JOIN booking_orders ON booking_orders.booking_id=bookings.booking_id")
@@ -67,10 +64,203 @@ class Foodcourt::OrdersController < BaseFoodcourtController
@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)
if @pending.sale_status == "new"
@status = "sale"
end
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 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
@completed, @bookings = Sale.get_mobile_orders
@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