From d2701226b693a4c0b58746f52e07f5c60481d627 Mon Sep 17 00:00:00 2001 From: Andy Brett Date: Thu, 10 Jun 2021 16:37:16 -0700 Subject: [PATCH] complete order immediately before adding payment --- .../spree/admin/orders/customer_details_controller.rb | 2 +- app/controllers/spree/admin/payments_controller.rb | 7 ++++--- app/models/spree/order/checkout.rb | 6 ------ app/services/order_workflow.rb | 8 ++++++++ 4 files changed, 13 insertions(+), 10 deletions(-) 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