diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 2fe5c3c5a5..67df7f1d62 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -50,7 +50,7 @@ class Enterprise < ActiveRecord::Base end def distributed_variants - Spree::Product.in_distributor(self).map { |product| product.variants + [product.master] }.flatten + Spree::Variant.joins(:product).merge(Spree::Product.in_distributor(self)).select('spree_variants.*') end diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index 980f24c777..389939067f 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -40,7 +40,7 @@ Spree::Order.class_eval do end def line_item_variants - line_items.map{ |li| li.variant } + line_items.map { |li| li.variant } end diff --git a/lib/open_food_web/distribution_change_validator.rb b/lib/open_food_web/distribution_change_validator.rb index f972977e95..0e622e065c 100644 --- a/lib/open_food_web/distribution_change_validator.rb +++ b/lib/open_food_web/distribution_change_validator.rb @@ -11,7 +11,7 @@ class DistributionChangeValidator def can_change_to_distributor? distributor # Distributor may not be changed once an item has been added to the cart/order, unless all items are available from the specified distributor - @order.line_items.empty? || (available_distributors(Enterprise.all) || []).include?(distributor) + @order.line_items.empty? || all_available_distributors.include?(distributor) end def product_compatible_with_current_order(product) @@ -28,6 +28,10 @@ class DistributionChangeValidator distributors end + def all_available_distributors + @all_available_distributors ||= (available_distributors(Enterprise.all) || []) + end + def available_distributors enterprises enterprises.select do |e| (@order.line_item_variants - e.distributed_variants).empty?