diff --git a/app/models/enterprise.rb b/app/models/enterprise.rb index 17c9380097..96f48aa111 100644 --- a/app/models/enterprise.rb +++ b/app/models/enterprise.rb @@ -27,9 +27,9 @@ class Enterprise < ActiveRecord::Base def to_param "#{id}-#{name.parameterize}" end - + def available_variants - ProductDistribution.find_all_by_distributor_id( self.id ).map{ |pd| pd.product.variants + [pd.product.master] }.flatten + Spree::Variant.joins(:product => :product_distributions).where('product_distributions.distributor_id=?', self.id) end diff --git a/app/models/spree/order_decorator.rb b/app/models/spree/order_decorator.rb index e50b4350f4..a04462801c 100644 --- a/app/models/spree/order_decorator.rb +++ b/app/models/spree/order_decorator.rb @@ -39,7 +39,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/distributor_change_validator.rb b/lib/open_food_web/distributor_change_validator.rb index ca7545eefc..0301c8a7ac 100644 --- a/lib/open_food_web/distributor_change_validator.rb +++ b/lib/open_food_web/distributor_change_validator.rb @@ -11,12 +11,16 @@ class DistributorChangeValidator 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 all_available_distributors + @all_available_distributors ||= (available_distributors(Enterprise.all) || []) + end + def available_distributors enterprises enterprises.select do |e| (@order.line_item_variants - e.available_variants).empty? end end -end \ No newline at end of file +end