cancel qr pay action
This commit is contained in:
@@ -216,4 +216,100 @@ class Foodcourt::QrpayController < BaseFoodcourtController
|
||||
ActionCable.server.broadcast('second_display_view_channel', { data: @qr_string, qr_svg: @qr_svg, grand_total: @sale_data.grand_total, invoice_no: @sale_data.receipt_no })
|
||||
end
|
||||
end
|
||||
|
||||
def cancel
|
||||
# cancel orders and related
|
||||
sale_id = params[:sale_id]
|
||||
sale = Sale.find_by_sale_id(sale_id)
|
||||
order = sale.orders.first
|
||||
booking = order.booking
|
||||
|
||||
if !sale_id.present?
|
||||
respond_to do |format|
|
||||
format.json { render :json => { :status => false, :error_message => "Sale does not exist" } }
|
||||
end
|
||||
end
|
||||
|
||||
if !order.present?
|
||||
respond_to do |format|
|
||||
format.json { render :json => { :status => false, :error_message => "Order does not exist" } }
|
||||
end
|
||||
end
|
||||
|
||||
if !booking.present?
|
||||
respond_to do |format|
|
||||
format.json { render :json => { :status => false, :error_message => "Booking does not exist" } }
|
||||
end
|
||||
end
|
||||
|
||||
if order.order_items.present?
|
||||
order.order_items.update_all(order_item_status: 'cancelled')
|
||||
end
|
||||
|
||||
order.status = 'cancelled'
|
||||
order.save
|
||||
|
||||
booking.booking_status = 'cancelled'
|
||||
booking.save
|
||||
|
||||
# void order
|
||||
remark = ""
|
||||
order_source = 'foodcourt'
|
||||
access_code = 'null'
|
||||
|
||||
# update count for shift sale
|
||||
if(sale.sale_status == "completed")
|
||||
if sale.shift_sale_id != nil
|
||||
shift = ShiftSale.find(sale.shift_sale_id)
|
||||
shift.calculate(sale_id, "void")
|
||||
end
|
||||
else
|
||||
# void before sale payment complete
|
||||
if sale.shift_sale_id != nil
|
||||
shift = ShiftSale.find(sale.shift_sale_id)
|
||||
shift.total_void = shift.total_void + sale.grand_total
|
||||
shift.save
|
||||
end
|
||||
end
|
||||
|
||||
if sale.discount_type == "member_discount"
|
||||
sale.update_attributes(total_discount: 0)
|
||||
sale.compute_by_sale_items(0, nil, order_source)
|
||||
end
|
||||
|
||||
sale.rounding_adjustment = 0.0
|
||||
sale.payment_status = 'void'
|
||||
sale.sale_status = 'void'
|
||||
sale.save
|
||||
|
||||
# TODO: call close order to qr pay
|
||||
|
||||
PrintReceiptJob.perform_later(current_shop.shop_code, sale.sale_id)
|
||||
|
||||
if table = sale.booking.dining_facility
|
||||
unless table.current_bookings.exists?
|
||||
table.update_attributes(status: 'available')
|
||||
end
|
||||
end
|
||||
|
||||
action_by = current_user.name
|
||||
if access_code != "null" && current_user.role == "cashier"
|
||||
action_by = Employee.find_by_emp_id(access_code).name
|
||||
end
|
||||
|
||||
# remark = "Void Sale ID #{sale_id} | Receipt No #{sale.receipt_no} | Receipt No #{sale.receipt_no} | Table ->#{table.name}"
|
||||
sale_audit = SaleAudit.record_audit_for_edit(sale.sale_id, current_user.name, action_by,remark, "SALEVOID")
|
||||
|
||||
# update complete order items in oqs
|
||||
SaleOrder.where("sale_id = '#{sale.sale_id}'").find_each do |sodr|
|
||||
AssignedOrderItem.where("order_id = '#{ sodr.order_id }'").find_each do |aoi|
|
||||
aoi.delivery_status = 1
|
||||
aoi.save
|
||||
end
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
format.json { render :json => { status: true, order_id: order.order_id } }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user