diff --git a/app/controllers/spree/admin/orders/customer_details_controller.rb b/app/controllers/spree/admin/orders/customer_details_controller.rb index a476c31fd2..3644fbaf65 100644 --- a/app/controllers/spree/admin/orders/customer_details_controller.rb +++ b/app/controllers/spree/admin/orders/customer_details_controller.rb @@ -25,7 +25,7 @@ module Spree @order.associate_user!(Spree.user_class.find_by(email: @order.email)) end - OrderWorkflow.new(@order).complete + OrderWorkflow.new(@order).advance_to_payment @order.shipments.map(&:refresh_rates) flash[:success] = Spree.t('customer_details_updated') diff --git a/app/controllers/spree/admin/payments_controller.rb b/app/controllers/spree/admin/payments_controller.rb index 0a6219ef71..543ec7d707 100644 --- a/app/controllers/spree/admin/payments_controller.rb +++ b/app/controllers/spree/admin/payments_controller.rb @@ -35,15 +35,16 @@ module Spree return end - authorize_stripe_sca_payment - if @order.completed? - @payment.process! + authorize_stripe_sca_payment + @payment.process_offline! flash[:success] = flash_message_for(@payment, :successfully_created) redirect_to spree.admin_order_payments_path(@order) else OrderWorkflow.new(@order).complete! + authorize_stripe_sca_payment + @payment.process_offline! flash[:success] = Spree.t(:new_order_completed) redirect_to spree.edit_admin_order_url(@order) diff --git a/app/models/spree/order/checkout.rb b/app/models/spree/order/checkout.rb index 9d50612390..9a8a0511c9 100644 --- a/app/models/spree/order/checkout.rb +++ b/app/models/spree/order/checkout.rb @@ -67,12 +67,6 @@ module Spree transition to: :cart, unless: :completed? end - if states[:payment] - before_transition to: :complete do |order| - order.process_payments! if order.payment_required? - end - end - before_transition from: :cart, do: :ensure_line_items_present before_transition to: :delivery, do: :create_proposed_shipments diff --git a/app/services/order_workflow.rb b/app/services/order_workflow.rb index a21ccc67f2..6c7780ca43 100644 --- a/app/services/order_workflow.rb +++ b/app/services/order_workflow.rb @@ -23,6 +23,14 @@ class OrderWorkflow result end + def advance_to_payment + until order.state == "payment" + break unless order.next + + after_transition_hook(advance_order_options) + end + end + private def advance_order_options