diff --git a/app/models/spree/distributor.rb b/app/models/spree/distributor.rb index 3a40d6a607..8ba54538e5 100644 --- a/app/models/spree/distributor.rb +++ b/app/models/spree/distributor.rb @@ -4,7 +4,7 @@ module Spree belongs_to :pickup_address, :foreign_key => 'pickup_address_id', :class_name => 'Spree::Address' has_many :orders - has_many :product_distributions + has_many :product_distributions, :dependent => :destroy has_many :products, :through => :product_distributions accepts_nested_attributes_for :pickup_address diff --git a/app/models/spree/product_decorator.rb b/app/models/spree/product_decorator.rb index f60c36ad3e..697d756091 100644 --- a/app/models/spree/product_decorator.rb +++ b/app/models/spree/product_decorator.rb @@ -1,9 +1,11 @@ Spree::Product.class_eval do belongs_to :supplier - has_many :product_distributions + has_many :product_distributions, :dependent => :destroy has_many :distributors, :through => :product_distributions + accepts_nested_attributes_for :product_distributions, :allow_destroy => true + attr_accessible :supplier_id, :distributor_ids validates_presence_of :supplier diff --git a/app/overrides/add_distributor_to_admin_product.rb b/app/overrides/add_distributor_to_admin_product.rb index 1ba2939f21..f0fdcae265 100644 --- a/app/overrides/add_distributor_to_admin_product.rb +++ b/app/overrides/add_distributor_to_admin_product.rb @@ -1,9 +1,9 @@ Deface::Override.new(:virtual_path => "spree/admin/products/_form", - :insert_top => "[data-hook='admin_product_form_right']", - :partial => "spree/admin/products/distributors", - :name => "distributors") + :insert_bottom => "[data-hook='admin_product_form_additional_fields']", + :partial => "spree/admin/products/distributors", + :name => "distributors") Deface::Override.new(:virtual_path => "spree/admin/products/new", - :insert_bottom => ".left", - :partial => "spree/admin/products/distributors", - :name => "distributors") + :insert_bottom => ".left", + :partial => "spree/admin/products/distributors", + :name => "distributors") diff --git a/app/views/spree/admin/products/_distributors.html.haml b/app/views/spree/admin/products/_distributors.html.haml index c3abf108ad..f65b538370 100644 --- a/app/views/spree/admin/products/_distributors.html.haml +++ b/app/views/spree/admin/products/_distributors.html.haml @@ -1,5 +1,15 @@ -= f.field_container :distributors do - = f.label :distributors - %br - = f.collection_check_boxes(:distributor_ids, Spree::Distributor.all, :id, :name) - = f.error_message_on :distributors +%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 + %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 + %td + = pd_form.object.distributor.name + = pd_form.hidden_field :distributor_id + %td + = pd_form.collection_select :shipping_method_id, Spree::ShippingMethod.all, :id, :name diff --git a/spec/requests/admin/product_spec.rb b/spec/requests/admin/product_spec.rb index 6f06ceb0b4..5b3004adb4 100644 --- a/spec/requests/admin/product_spec.rb +++ b/spec/requests/admin/product_spec.rb @@ -10,10 +10,11 @@ feature %q{ background do @supplier = create(:supplier, :name => 'New supplier') @distributors = (1..3).map { create(:distributor) } + @shipping_method = create(:shipping_method, :name => 'My shipping method') end context "creating a product" do - scenario "I should be able to assign a supplier to the product" do + scenario "assigning a supplier and distributors to the product" do login_to_admin_section click_link 'Products' @@ -22,8 +23,11 @@ feature %q{ fill_in 'product_name', :with => 'A new product !!!' fill_in 'product_price', :with => '19.99' select 'New supplier', :from => 'product_supplier_id' + check @distributors[0].name + select 'My shipping method', :from => 'product_product_distributions_attributes_0_shipping_method_id' check @distributors[2].name + select 'My shipping method', :from => 'product_product_distributions_attributes_2_shipping_method_id' click_button 'Create' @@ -31,8 +35,7 @@ feature %q{ product = Spree::Product.find_by_name('A new product !!!') product.supplier.should == @supplier product.distributors.should == [@distributors[0], @distributors[2]] + product.product_distributions.map { |pd| pd.shipping_method }.should == [@shipping_method, @shipping_method] end end - - context "Given I am cloning a Product" end