diff --git a/app/controllers/split_checkout_controller.rb b/app/controllers/split_checkout_controller.rb index 8245dd57a7..952569c9e9 100644 --- a/app/controllers/split_checkout_controller.rb +++ b/app/controllers/split_checkout_controller.rb @@ -37,10 +37,7 @@ class SplitCheckoutController < ::BaseController clear_invalid_payments redirect_to_step else - if @shipping_method_id.blank? - @order.errors.add(:base, "no_shipping_method_selected") - end - flash.now[:error] = "#{I18n.t('split_checkout.errors.global')}" + flash.now[:error] = I18n.t('split_checkout.errors.global') render :edit end end @@ -60,7 +57,6 @@ class SplitCheckoutController < ::BaseController def update_order return unless params[:order] - return if @order.state == "address" && params[:shipping_method_id].blank? @order.update(order_params) && advance_order_state end diff --git a/app/models/spree/order/checkout.rb b/app/models/spree/order/checkout.rb index 148348ce1e..dd4d0a80e6 100644 --- a/app/models/spree/order/checkout.rb +++ b/app/models/spree/order/checkout.rb @@ -75,7 +75,9 @@ module Spree before_transition to: :delivery, do: :create_proposed_shipments before_transition to: :delivery, do: :ensure_available_shipping_rates + before_transition to: :payment, do: :validate_shipping_method! before_transition to: :payment, do: :create_tax_charge! + before_transition to: :confirmation, do: :validate_payment_method! after_transition to: :complete, do: :finalize! after_transition to: :resumed, do: :after_resume @@ -135,6 +137,24 @@ module Spree updated_at: Time.zone.now, ) end + + private + + def validate_shipping_method! + return unless user && Flipper.enabled?(:split_checkout, user) + return if shipping_method.present? + + errors.add :shipping_method, I18n.t('split_checkout.errors.select_a_shipping_method') + throw :halt + end + + def validate_payment_method! + return unless user && Flipper.enabled?(:split_checkout, user) + return if payments.any? + + errors.add :payment_method, I18n.t('split_checkout.errors.select_a_payment_method') + throw :halt + end end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index f3a04446f6..0113a7e9a3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1660,8 +1660,6 @@ en: label: Country delivery_address: title: Delivery address - errors: - no_shipping_method_selected: No shipping method selected submit: Next - Payment method cancel: Back to Edit basket step2: @@ -1697,6 +1695,8 @@ en: required: Field cannot be blank invalid_number: "Please enter a valid phone number" invalid_email: "Please enter a valid email address" + select_a_shipping_method: Select a shipping method + select_a_payment_method: Select a payment method order_paid: PAID order_not_paid: NOT PAID order_total: Total order