Extract PostCheckoutActions from checkout controller

This commit is contained in:
luisramos0
2020-02-07 17:04:47 +00:00
committed by Luis Ramos
parent e2cdb01a28
commit 3fcf286516
2 changed files with 44 additions and 23 deletions

View File

@@ -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

View File

@@ -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