diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index f593e8896d..65d308bc0d 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -35,15 +35,7 @@ class CheckoutController < Spree::StoreController rescue_from Spree::Core::GatewayError, with: :rescue_from_spree_gateway_error def edit - if valid_payment_intent_provided? - if advance_order_state(@order) && order_complete? - checkout_succeeded - redirect_to(order_path(@order)) && return - else - flash[:error] = order_workflow_error - current_order.updater.shipping_address_from_distributor - end - end + return handle_redirect_from_stripe if valid_payment_intent_provided? # This is only required because of spree_paypal_express. If we implement # a version of paypal that uses this controller, and more specifically @@ -168,6 +160,16 @@ class CheckoutController < Spree::StoreController @order.payments.last.response_code == params["payment_intent"] end + def handle_redirect_from_stripe + if advance_order_state(@order) && order_complete? + checkout_succeeded + redirect_to(order_path(@order)) && return + else + flash[:error] = order_workflow_error + checkout_failed + end + end + def checkout_workflow(shipping_method_id) while @order.state != "complete" if @order.state == "payment" @@ -216,8 +218,7 @@ class CheckoutController < Spree::StoreController checkout_succeeded update_succeeded_response else - checkout_failed - update_failed_response + update_failed end end @@ -226,21 +227,12 @@ class CheckoutController < Spree::StoreController end def checkout_succeeded - save_order_addresses_as_user_default - ResetOrderService.new(self, current_order).call + Checkout::PostCheckoutActions.new(@order).success(self, params, spree_current_user) session[:access_token] = current_order.token flash[:notice] = t(:order_processed_successfully) end - def save_order_addresses_as_user_default - return unless params[:order] - - user_default_address_setter = UserDefaultAddressSetter.new(@order, spree_current_user) - user_default_address_setter.set_default_bill_address if params[:order][:default_bill_address] - user_default_address_setter.set_default_ship_address if params[:order][:default_ship_address] - end - def update_succeeded_response respond_to do |format| format.html do @@ -258,8 +250,7 @@ class CheckoutController < Spree::StoreController end def checkout_failed - current_order.updater.shipping_address_from_distributor - RestartCheckout.new(@order).call + Checkout::PostCheckoutActions.new(@order).failure end def update_failed_response diff --git a/app/services/checkout/post_checkout_actions.rb b/app/services/checkout/post_checkout_actions.rb new file mode 100644 index 0000000000..63e32e9185 --- /dev/null +++ b/app/services/checkout/post_checkout_actions.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +# Executes actions after checkout +module Checkout + class PostCheckoutActions + def initialize(order) + @order = order + end + + def success(controller, params, current_user) + save_order_addresses_as_user_default(params, current_user) + ResetOrderService.new(controller, @order).call + end + + def failure + @order.updater.shipping_address_from_distributor + RestartCheckout.new(@order).call + end + + private + + def save_order_addresses_as_user_default(params, current_user) + return unless params[:order] + + user_default_address_setter = UserDefaultAddressSetter.new(@order, current_user) + user_default_address_setter.set_default_bill_address if params[:order][:default_bill_address] + user_default_address_setter.set_default_ship_address if params[:order][:default_ship_address] + end + end +end