From 87a0a5846d254d06afff5d802d533acf70d5fc0c Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Tue, 6 Jul 2021 11:18:13 +0200 Subject: [PATCH] WIP; only advance order to delivery state Use the hidden_field_tag rails helper and move it --- app/controllers/checkout_controller.rb | 6 ++--- app/controllers/split_checkout_controller.rb | 23 ++++++++++++++++++++ app/models/spree/payment.rb | 2 +- app/views/split_checkout/_form.html.haml | 1 + 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/app/controllers/checkout_controller.rb b/app/controllers/checkout_controller.rb index 547f180a72..d7bbb2ce42 100644 --- a/app/controllers/checkout_controller.rb +++ b/app/controllers/checkout_controller.rb @@ -46,7 +46,7 @@ class CheckoutController < ::BaseController params_adapter = Checkout::FormDataAdapter.new(permitted_params, @order, spree_current_user) return action_failed unless @order.update(params_adapter.params[:order] || {}) - checkout_workflow(params_adapter.shipping_method_id) + checkout_workflow(params_adapter.shipping_method_id, params[:advance_to_state]) rescue Spree::Core::GatewayError => e rescue_from_spree_gateway_error(e) rescue StandardError => e @@ -167,8 +167,8 @@ class CheckoutController < ::BaseController end end - def checkout_workflow(shipping_method_id) - while @order.state != "complete" + def checkout_workflow(shipping_method_id, advance_to_state = "complete") + while @order.state != advance_to_state if @order.state == "payment" return if redirect_to_payment_gateway diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 4067ad5060..48f48b8f84 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -1,3 +1,26 @@ class SplitCheckoutController < CheckoutController + def update + byebug + params_adapter = Checkout::FormDataAdapter.new(permitted_params, @order, spree_current_user) + return action_failed unless @order.update(params_adapter.params[:order] || {}) + checkout_workflow(params_adapter.shipping_method_id, params[:advance_to_state] || "delivery") + rescue Spree::Core::GatewayError => e + byebug + rescue_from_spree_gateway_error(e) + rescue StandardError => e + byebug + flash[:error] = I18n.t("checkout.failed") + action_failed(e) + ensure + @order.update_order! + end + + private + + def redirect_to_payment_gateway + return unless params&.dig(:order)&.dig(:payments_attributes)&.first&.dig(:payments_attributes) + + super + end end diff --git a/app/models/spree/payment.rb b/app/models/spree/payment.rb index d807d6fac1..915ada2f2e 100644 --- a/app/models/spree/payment.rb +++ b/app/models/spree/payment.rb @@ -145,7 +145,7 @@ module Spree adjustment.originator = payment_method adjustment.label = adjustment_label adjustment.save - else + elsif payment_method.present? payment_method.create_adjustment(adjustment_label, self, true) adjustment.reload end diff --git a/app/views/split_checkout/_form.html.haml b/app/views/split_checkout/_form.html.haml index 7c8ebf418d..e71e87677c 100644 --- a/app/views/split_checkout/_form.html.haml +++ b/app/views/split_checkout/_form.html.haml @@ -7,4 +7,5 @@ %div.checkout-step.medium-6 - if true ## test step + = hidden_field_tag "advance_to_state", "delivery" = render "split_checkout/your_details", f: f