From 358ca25f31d73407a1d5f0628c1db2726b063d93 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 17 Oct 2013 11:16:26 +1100 Subject: [PATCH] Admin can assign multiple distributors to a shipping method --- .../shipping_methods_controller_decorator.rb | 2 +- .../_form/add_distributor.html.haml.deface | 7 ++++--- .../index/add_distributor_td.html.haml.deface | 2 +- .../index/add_distributor_th.html.haml.deface | 2 +- spec/features/admin/shipping_methods_spec.rb | 15 ++++++++------- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb index 8dbd8eb3d0..c90a256ff7 100644 --- a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb @@ -4,7 +4,7 @@ module Spree before_filter :do_not_destroy_referenced_shipping_methods, :only => :destroy # Sort shipping methods by distributor name - # ! Redundant code copied from Spree::Admin::ResourceController with two added lines + # ! Code copied from Spree::Admin::ResourceController with two added lines def collection return parent.send(controller_name) if parent_data.present? if model_class.respond_to?(:accessible_by) && !current_ability.has_block?(params[:action], model_class) diff --git a/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface b/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface index a3d2455e00..0604fd996a 100644 --- a/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface +++ b/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface @@ -1,5 +1,6 @@ / insert_bottom "[data-hook='admin_shipping_method_form_availability_fields'] > fieldset" -= f.field_container :shipping_category do - = f.label :distributor_id, 'Distributor' - = f.collection_select :distributor_id, Enterprise.is_distributor, :id, :name, {include_blank: false}, {class: 'select2 fullwidth'} += f.field_container :distributors do + = f.label :distributor_ids, 'Distributors' + - distributors = Enterprise.is_distributor.managed_by(spree_current_user) | f.object.distributors + = f.collection_select(:distributor_ids, distributors, :id, :name, {include_blank: false}, {class: "select2 fullwidth", multiple: true}) diff --git a/app/overrides/spree/admin/shipping_methods/index/add_distributor_td.html.haml.deface b/app/overrides/spree/admin/shipping_methods/index/add_distributor_td.html.haml.deface index 743332e544..71685c3d51 100644 --- a/app/overrides/spree/admin/shipping_methods/index/add_distributor_td.html.haml.deface +++ b/app/overrides/spree/admin/shipping_methods/index/add_distributor_td.html.haml.deface @@ -1,4 +1,4 @@ / insert_top "[data-hook='admin_shipping_methods_index_rows']" %td.align-center - = shipping_method.distributor.name + = enterprises_to_names shipping_method.distributors diff --git a/app/overrides/spree/admin/shipping_methods/index/add_distributor_th.html.haml.deface b/app/overrides/spree/admin/shipping_methods/index/add_distributor_th.html.haml.deface index d3df31b265..44b4b352b4 100644 --- a/app/overrides/spree/admin/shipping_methods/index/add_distributor_th.html.haml.deface +++ b/app/overrides/spree/admin/shipping_methods/index/add_distributor_th.html.haml.deface @@ -1,4 +1,4 @@ / insert_top "[data-hook='admin_shipping_methods_index_headers']" %th - Distributor + Distributors diff --git a/spec/features/admin/shipping_methods_spec.rb b/spec/features/admin/shipping_methods_spec.rb index 89889702e0..4a145d5c15 100644 --- a/spec/features/admin/shipping_methods_spec.rb +++ b/spec/features/admin/shipping_methods_spec.rb @@ -9,14 +9,16 @@ feature 'shipping methods' do @sm = create(:shipping_method) end - scenario "creating a shipping method owned by a distributor" do - # Given a distributor - distributor = create(:distributor_enterprise, name: 'Aeronautical Adventures') + scenario "creating a shipping method owned by some distributors" do + # Given some distributors + d1 = create(:distributor_enterprise, name: 'Aeronautical Adventures') + d2 = create(:distributor_enterprise, name: 'Nautical Travels') - # When I create a shipping method and set the distributor + # When I create a shipping method and set the distributors visit spree.new_admin_shipping_method_path fill_in 'shipping_method_name', with: 'Carrier Pidgeon' - select 'Aeronautical Adventures', from: 'shipping_method_distributor_id' + select 'Aeronautical Adventures', from: 'shipping_method_distributor_ids' + select 'Nautical Travels', from: 'shipping_method_distributor_ids' click_button 'Create' # Then the shipping method should have its distributor set @@ -24,10 +26,9 @@ feature 'shipping methods' do sm = Spree::ShippingMethod.last sm.name.should == 'Carrier Pidgeon' - sm.distributor.should == distributor + sm.distributors.should == [d1, d2] end - it "shipping method requires distributor" it "at checkout, user can only see shipping methods for their current distributor (checkout spec)"