From 760bf269ca473e7c12ecc2e3719ab23d2b4cc280 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Wed, 7 Jun 2023 18:47:16 +0100 Subject: [PATCH] Pull validations-related methods out into a separate module --- app/models/concerns/order_validations.rb | 42 ++++++++++++++++++++++++ app/models/spree/order.rb | 32 +----------------- 2 files changed, 43 insertions(+), 31 deletions(-) create mode 100644 app/models/concerns/order_validations.rb diff --git a/app/models/concerns/order_validations.rb b/app/models/concerns/order_validations.rb new file mode 100644 index 0000000000..1adf4e4a63 --- /dev/null +++ b/app/models/concerns/order_validations.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require 'active_support/concern' + +module OrderValidations + extend ActiveSupport::Concern + + private + + def disallow_guest_order + return unless using_guest_checkout? && registered_email? + + errors.add(:email, I18n.t('devise.failure.already_registered')) + end + + # Check that line_items in the current order are available from a newly selected distribution + def products_available_from_new_distribution + return if OrderCycleDistributedVariants.new(order_cycle, distributor) + .distributes_order_variants?(self) + + errors.add(:base, I18n.t(:spree_order_availability_error)) + end + + # Determine if email is required (we don't want validation errors before we hit the checkout) + def require_email + true unless (new_record? || cart?) && !checkout_processing + end + + def ensure_line_items_present + return if line_items.present? + + errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) + false + end + + def ensure_available_shipping_rates + return unless shipments.empty? || shipments.any? { |shipment| shipment.shipping_rates.blank? } + + errors.add(:base, Spree.t(:items_cannot_be_shipped)) + false + end +end diff --git a/app/models/spree/order.rb b/app/models/spree/order.rb index 7f8d69474c..cc8bd1acf4 100644 --- a/app/models/spree/order.rb +++ b/app/models/spree/order.rb @@ -8,6 +8,7 @@ require 'open_food_network/tag_rule_applicator' module Spree class Order < ApplicationRecord include OrderShipment + include OrderValidations include Checkout include Balance include SetUnusedAddressFields @@ -576,20 +577,6 @@ module Spree private - def disallow_guest_order - return unless using_guest_checkout? && registered_email? - - errors.add(:email, I18n.t('devise.failure.already_registered')) - end - - # Check that line_items in the current order are available from a newly selected distribution - def products_available_from_new_distribution - return if OrderCycleDistributedVariants.new(order_cycle, distributor) - .distributes_order_variants?(self) - - errors.add(:base, I18n.t(:spree_order_availability_error)) - end - def deliver_order_confirmation_email return if subscription.present? @@ -626,23 +613,6 @@ module Spree self.email = user.email if user end - # Determine if email is required (we don't want validation errors before we hit the checkout) - def require_email - return true unless (new_record? || cart?) && !checkout_processing - end - - def ensure_line_items_present - return if line_items.present? - - errors.add(:base, Spree.t(:there_are_no_items_for_this_order)) && (return false) - end - - def ensure_available_shipping_rates - return unless shipments.empty? || shipments.any? { |shipment| shipment.shipping_rates.blank? } - - errors.add(:base, Spree.t(:items_cannot_be_shipped)) && (return false) - end - def after_cancel shipments.each(&:cancel!) payments.checkout.each(&:void!)