diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 7c49428640..fbd4f98837 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -82,9 +82,11 @@ class SplitCheckoutController < ::BaseController end def advance_order_state - return if @order.confirmation? || @order.complete? + return if @order.complete? - OrderWorkflow.new(@order).advance_to_confirmation + workflow_options = raw_params.slice(:shipping_method_id) + + OrderWorkflow.new(@order).advance_to_confirmation(workflow_options) end def checkout_step diff --git a/app/services/order_workflow.rb b/app/services/order_workflow.rb index 1451454416..39571a6545 100644 --- a/app/services/order_workflow.rb +++ b/app/services/order_workflow.rb @@ -27,8 +27,12 @@ class OrderWorkflow advance_to_state("payment", advance_order_options) end - def advance_to_confirmation - advance_to_state("confirmation", advance_order_options) + def advance_to_confirmation(options = {}) + if options[:shipping_method_id] + order.select_shipping_method(options[:shipping_method_id]) + end + + advance_to_state("confirmation") end private @@ -38,7 +42,7 @@ class OrderWorkflow { shipping_method_id: shipping_method_id } end - def advance_to_state(target_state, options) + def advance_to_state(target_state, options = {}) until order.state == target_state break unless order.next