From 9e83b1b7ee49b090a0ae8b68c84832eb7a57c0af Mon Sep 17 00:00:00 2001 From: Dev Team Date: Fri, 23 May 2025 17:26:48 +0630 Subject: [PATCH] cancel qr pay action --- app/controllers/foodcourt/qrpay_controller.rb | 96 +++++++++++++++++++ app/views/foodcourt/qrpay/init.html.erb | 48 +++++----- config/routes.rb | 1 + 3 files changed, 123 insertions(+), 22 deletions(-) diff --git a/app/controllers/foodcourt/qrpay_controller.rb b/app/controllers/foodcourt/qrpay_controller.rb index a39f8481..4097e161 100644 --- a/app/controllers/foodcourt/qrpay_controller.rb +++ b/app/controllers/foodcourt/qrpay_controller.rb @@ -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 diff --git a/app/views/foodcourt/qrpay/init.html.erb b/app/views/foodcourt/qrpay/init.html.erb index 01099222..4f38e31d 100644 --- a/app/views/foodcourt/qrpay/init.html.erb +++ b/app/views/foodcourt/qrpay/init.html.erb @@ -199,6 +199,7 @@
+

Waiting for Customer Payment

@@ -209,32 +210,14 @@
+
+ +
" id="server_mode">
-
- <%= link_to '/foodcourt/app_orders', class: 'btn btn-block btn-default waves-effect', :id => 'foodcourt_back', style: "padding-top: 0;" do%> - reply - BACK - <% end %> - - <% if @sale_payment.nil? %> -
- <% if current_login_employee.role == "cashier" %> - Void - Edit - <% else %> -