From 9a0ee254afcb577502ebbc5c90e11f3c83165b56 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Tue, 4 Feb 2020 10:57:03 +0000 Subject: [PATCH] Extract checkout_workflow from checkout#update --- app/controllers/checkout_controller.rb | 50 +++++++++++++++----------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 122cca9e13..a3294a16c2 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -46,26 +46,7 @@ class CheckoutController < Spree::StoreController fire_event('spree.checkout.update') - while @order.state != "complete" - if @order.state == "payment" - return if redirect_to_paypal_express_form_if_needed - end - - if @order.state == "delivery" - @order.select_shipping_method(shipping_method_id) - end - - next if advance_order_state(@order) - - flash[:error] = if @order.errors.present? - @order.errors.full_messages.to_sentence - else - t(:payment_processing_failed) - end - update_failed - return - end - return update_failed unless @order.state == "complete" || @order.completed? + return unless checkout_workflow(shipping_method_id) set_default_bill_address set_default_ship_address @@ -91,6 +72,35 @@ class CheckoutController < Spree::StoreController update_failed end + def checkout_workflow(shipping_method_id) + while @order.state != "complete" + if @order.state == "payment" + return false if redirect_to_paypal_express_form_if_needed + end + + if @order.state == "delivery" + @order.select_shipping_method(shipping_method_id) + end + + next if advance_order_state(@order) + + flash[:error] = if @order.errors.present? + @order.errors.full_messages.to_sentence + else + t(:payment_processing_failed) + end + update_failed + return false + end + + if @order.completed? + true + else + update_failed + false + end + end + # Clears the cached order. Required for #current_order to return a new order # to serve as cart. See https://github.com/spree/spree/blob/1-3-stable/core/lib/spree/core/controller_helpers/order.rb#L14 # for details.