diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 2654e5c0ff..66d5b445f7 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -175,9 +175,7 @@ class CheckoutController < Spree::StoreController return if redirect_to_payment_gateway end - @order.select_shipping_method(shipping_method_id) if @order.state == "delivery" - - next if OrderWorkflow.new(@order).next + next if OrderWorkflow.new(@order).next({ shipping_method_id: shipping_method_id }) return update_failed end diff --git a/app/services/order_workflow.rb b/app/services/order_workflow.rb index 1351bfeee6..d333149283 100644 --- a/app/services/order_workflow.rb +++ b/app/services/order_workflow.rb @@ -13,9 +13,13 @@ class OrderWorkflow advance_order!(advance_order_options) end - def next + def next(options = {}) tries ||= 3 - order.next + result = order.next + + after_transition_hook(options) + + result rescue ActiveRecord::StaleObjectError retry unless (tries -= 1).zero? false