From 895e142e2c5051fff3580e5c8d7078b2667c5755 Mon Sep 17 00:00:00 2001 From: Ahmed Ejaz Date: Sun, 26 Oct 2025 02:08:53 +0500 Subject: [PATCH] Enhance order cycle closure handling with improved messaging and redirection logic --- app/controllers/concerns/order_stock_check.rb | 42 +++++++++++++------ config/locales/en.yml | 1 + 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/app/controllers/concerns/order_stock_check.rb b/app/controllers/concerns/order_stock_check.rb index d1b0b7d7e9..a1a579b581 100644 --- a/app/controllers/concerns/order_stock_check.rb +++ b/app/controllers/concerns/order_stock_check.rb @@ -24,23 +24,41 @@ module OrderStockCheck return unless current_order_cycle&.closed? Alert.raise_with_record("Notice: order cycle closed during checkout completion", current_order) - if should_empty_order - current_order.empty! - current_order.assign_order_cycle! nil - end - flash[:info] = I18n.t('order_cycle_closed') - respond_to do |format| - format.cable_ready { - render status: :see_other, cable_ready: cable_car.redirect_to(url: main_app.shop_path) - } - format.json { render json: { path: main_app.shop_path }, status: :see_other } - format.html { redirect_to main_app.shop_path, status: :see_other } - end + handle_closed_order_cycle(should_empty_order) + + flash[:info] = build_order_cycle_message(should_empty_order) + redirect_to_shop_page(should_empty_order) end private + def handle_closed_order_cycle(should_empty_order) + return unless should_empty_order + + current_order.empty! + current_order.assign_order_cycle!(nil) + end + + def build_order_cycle_message(should_empty_order) + # If order is not emptied, we assume user will contact support for next steps + key = should_empty_order ? 'order_cycle_closed' : 'order_cycle_closed_next_steps' + I18n.t(key, order_number: current_order.number) + end + + def redirect_to_shop_page(should_empty_order) + # If order is not emptied, redirect to shops page because shop page empties the order by default + redirect_url = should_empty_order ? main_app.shop_path : main_app.shops_path + + respond_to do |format| + format.cable_ready { + render status: :see_other, cable_ready: cable_car.redirect_to(url: redirect_url) + } + format.json { render json: { path: redirect_url }, status: :see_other } + format.html { redirect_to redirect_url, status: :see_other } + end + end + def check_stock_service @check_stock_service ||= Orders::CheckStockService.new(order: @order) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 67b83796d9..a7aa68ffd3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -3500,6 +3500,7 @@ en: order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle" order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise" order_cycle_closed: "The order cycle you've selected has just closed. Please try again!" + order_cycle_closed_next_steps: "The order cycle you've selected has just closed. Please contact us to complete your order #%{order_number}!" back_to_orders_list: "Back To Orders List" no_orders_found: "No Orders Found" order_information: "Order Information"