diff --git a/app/controllers/spree/admin/payment_methods_controller_decorator.rb b/app/controllers/spree/admin/payment_methods_controller_decorator.rb index 443e50a6d1..151a32e235 100644 --- a/app/controllers/spree/admin/payment_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/payment_methods_controller_decorator.rb @@ -3,14 +3,18 @@ Spree::Admin::PaymentMethodsController.class_eval do # ! Redundant code copied from Spree::Admin::ResourceController with modifications marked def collection return parent.send(controller_name) if parent_data.present? - collection = if model_class.respond_to?(:accessible_by) && !current_ability.has_block?(params[:action], model_class) + collection = if model_class.respond_to?(:accessible_by) && + !current_ability.has_block?(params[:action], model_class) + model_class.accessible_by(current_ability, action). - managed_by(spree_current_user).by_distributor # this line added + managed_by(spree_current_user).by_distributor # This line added + else model_class.scoped. - managed_by(spree_current_user).by_distributor # this line added + managed_by(spree_current_user).by_distributor # This line added end + # This block added if params.key? :enterprise_id distributor = Enterprise.find params[:enterprise_id] collection = collection.for_distributor(distributor) diff --git a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb index c90a256ff7..064e021da2 100644 --- a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb @@ -7,13 +7,25 @@ module Spree # ! 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) - model_class.accessible_by(current_ability, action). - by_distributor # this line added - else - model_class.scoped. - by_distributor # this line added + + collection = if model_class.respond_to?(:accessible_by) && + !current_ability.has_block?(params[:action], model_class) + + model_class.accessible_by(current_ability, action). + by_distributor # This line added + + else + model_class.scoped. + by_distributor # This line added + end + + # This block added + if params.key? :enterprise_id + distributor = Enterprise.find params[:enterprise_id] + collection = collection.for_distributor(distributor) end + + collection end # This method was originally written because ProductDistributions referenced shipping diff --git a/app/models/spree/shipping_method_decorator.rb b/app/models/spree/shipping_method_decorator.rb index dd8ec43c87..bbc774a42e 100644 --- a/app/models/spree/shipping_method_decorator.rb +++ b/app/models/spree/shipping_method_decorator.rb @@ -2,6 +2,11 @@ Spree::ShippingMethod.class_eval do has_and_belongs_to_many :distributors, join_table: 'distributors_shipping_methods', :class_name => 'Enterprise', association_foreign_key: 'distributor_id' attr_accessible :distributor_ids + scope :for_distributor, lambda { |distributor| + joins(:distributors). + where('enterprises.id = ?', distributor) + } + scope :by_distributor, lambda { joins(:distributors). order('enterprises.name, spree_shipping_methods.name'). diff --git a/app/views/admin/enterprises/index.html.erb b/app/views/admin/enterprises/index.html.erb index 51c4fa803b..084ec06e8e 100644 --- a/app/views/admin/enterprises/index.html.erb +++ b/app/views/admin/enterprises/index.html.erb @@ -42,7 +42,7 @@ <%= link_to_delete_enterprise enterprise %>
<%= link_to_with_icon 'icon-chevron-right', 'Payment Methods', spree.admin_payment_methods_path(enterprise_id: enterprise.id) %> (<%= enterprise.payment_methods.count %>)
- <%= link_to_with_icon 'icon-plane', 'Shipping Methods', spree.admin_shipping_methods_path %> (<%= enterprise.shipping_methods.count %>)
+ <%= link_to_with_icon 'icon-plane', 'Shipping Methods', spree.admin_shipping_methods_path(enterprise_id: enterprise.id) %> (<%= enterprise.shipping_methods.count %>)
<%#= link_to_with_icon 'icon-money', 'Enterprise Fees', main_app.admin_enterprise_fees_path %> diff --git a/spec/features/admin/shipping_methods_spec.rb b/spec/features/admin/shipping_methods_spec.rb index 1cb4faa1ff..cab648e5af 100644 --- a/spec/features/admin/shipping_methods_spec.rb +++ b/spec/features/admin/shipping_methods_spec.rb @@ -83,5 +83,20 @@ feature 'shipping methods' do shipping_method = Spree::ShippingMethod.find_by_name('Teleport') shipping_method.distributors.should == [distributor1] end + + it "shows me only payment methods for the enterprise I select" do + sm1 + sm2 + + click_link 'Enterprises' + within(".enterprise-#{distributor1.id}") { click_link 'Shipping Methods' } + page.should have_content sm1.name + page.should_not have_content sm2.name + + click_link 'Enterprises' + within(".enterprise-#{distributor2.id}") { click_link 'Shipping Methods' } + page.should_not have_content sm1.name + page.should have_content sm2.name + end end end diff --git a/spec/models/spree/shipping_method_spec.rb b/spec/models/spree/shipping_method_spec.rb index 21b0f5e953..556ca037ce 100644 --- a/spec/models/spree/shipping_method_spec.rb +++ b/spec/models/spree/shipping_method_spec.rb @@ -18,6 +18,15 @@ module Spree sm.reload.distributors.should == [d1, d2] end + it "finds shipping methods for a particular distributor" do + d1 = create(:distributor_enterprise) + d2 = create(:distributor_enterprise) + sm1 = create(:shipping_method, distributors: [d1, d1]) + sm2 = create(:shipping_method, distributors: [d2, d2]) + + ShippingMethod.for_distributor(d1).should == [sm1] + end + it "can order by distributor" do d1 = create(:distributor_enterprise, name: '222') d2 = create(:distributor_enterprise, name: '111')