diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index 697d756091..dbe21b05dc 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -6,10 +6,20 @@ Spree::Product.class_eval do accepts_nested_attributes_for :product_distributions, :allow_destroy => true - attr_accessible :supplier_id, :distributor_ids + attr_accessible :supplier_id, :distributor_ids, :product_distributions_attributes validates_presence_of :supplier scope :in_supplier, lambda { |supplier| where(:supplier_id => supplier) } scope :in_distributor, lambda { |distributor| joins(:product_distributions).where('product_distributions.distributor_id = ?', (distributor.respond_to?(:id) ? distributor.id : distributor.to_i)) } + + + # Build a product distribution for each distributor + def build_product_distributions + Spree::Distributor.all.each do |distributor| + unless self.product_distributions.find_by_distributor_id distributor.id + self.product_distributions.build(:distributor => distributor) + end + end + end end diff --git a/app/views/spree/admin/products/_distributors.html.haml b/app/views/spree/admin/products/_distributors.html.haml index f65b538370..04580f53ed 100644 --- a/app/views/spree/admin/products/_distributors.html.haml +++ b/app/views/spree/admin/products/_distributors.html.haml @@ -1,15 +1,14 @@ %h2 Distributors = f.field_container :product_distributions do - - Spree::Distributor.all.each do |d| - - f.object.product_distributions.build(:distributor => d) unless f.object.product_distributions.find_by_distributor_id d.id + - f.object.build_product_distributions %table = f.fields_for :product_distributions do |pd_form| %tr %td - = hidden_field_tag "#{pd_form.object_name}[_destroy]", 1 - = check_box_tag "#{pd_form.object_name}[_destroy]", 0 + = hidden_field_tag "#{pd_form.object_name}[_destroy]", 1, :id => nil + = check_box_tag "#{pd_form.object_name}[_destroy]", 0, !pd_form.object.new_record? %td - = pd_form.object.distributor.name + = label_tag "#{pd_form.object_name}[_destroy]", pd_form.object.distributor.name = pd_form.hidden_field :distributor_id %td = pd_form.collection_select :shipping_method_id, Spree::ShippingMethod.all, :id, :name