diff --git a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb index a8f3803085..d6c64425ef 100644 --- a/app/controllers/spree/admin/shipping_methods_controller_decorator.rb +++ b/app/controllers/spree/admin/shipping_methods_controller_decorator.rb @@ -2,6 +2,7 @@ module Spree module Admin ShippingMethodsController.class_eval do before_filter :do_not_destroy_referenced_shipping_methods, :only => :destroy + before_filter :load_hubs, only: [:new, :edit] # Sort shipping methods by distributor name # ! Code copied from Spree::Admin::ResourceController with two added lines @@ -41,6 +42,11 @@ module Spree redirect_to collection_url and return end end + + private + def load_hubs + @hubs = Enterprise.managed_by(spree_current_user).is_distributor.sort_by!{ |d| [(@shipping_method.has_distributor? d) ? 0 : 1, d.name] } + end end end end diff --git a/app/models/spree/shipping_method_decorator.rb b/app/models/spree/shipping_method_decorator.rb index a9628b3c73..05a975ecd1 100644 --- a/app/models/spree/shipping_method_decorator.rb +++ b/app/models/spree/shipping_method_decorator.rb @@ -34,6 +34,10 @@ Spree::ShippingMethod.class_eval do end end + def has_distributor?(distributor) + self.distributors.include?(distributor) + end + def adjustment_label 'Shipping' end 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 deleted file mode 100644 index 0604fd996a..0000000000 --- a/app/overrides/spree/admin/shipping_methods/_form/add_distributor.html.haml.deface +++ /dev/null @@ -1,6 +0,0 @@ -/ insert_bottom "[data-hook='admin_shipping_method_form_availability_fields'] > fieldset" - -= 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/edit/add_hubs_sidebar.html.haml.deface b/app/overrides/spree/admin/shipping_methods/edit/add_hubs_sidebar.html.haml.deface new file mode 100644 index 0000000000..74fc957e71 --- /dev/null +++ b/app/overrides/spree/admin/shipping_methods/edit/add_hubs_sidebar.html.haml.deface @@ -0,0 +1,3 @@ +/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")" + += render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { :f => f } \ No newline at end of file diff --git a/app/overrides/spree/admin/shipping_methods/new/add_hubs_sidebar.html.haml.deface b/app/overrides/spree/admin/shipping_methods/new/add_hubs_sidebar.html.haml.deface new file mode 100644 index 0000000000..74fc957e71 --- /dev/null +++ b/app/overrides/spree/admin/shipping_methods/new/add_hubs_sidebar.html.haml.deface @@ -0,0 +1,3 @@ +/ insert_after "code[erb-loud]:contains(\"render :partial => 'form', :locals => { :f => f }\")" + += render :partial => 'spree/admin/shared/hubs_sidebar', :locals => { :f => f } \ No newline at end of file diff --git a/app/overrides/spree/admin/shipping_methods/new/remove_configuration_sidebar.deface b/app/overrides/spree/admin/shipping_methods/new/remove_configuration_sidebar.deface new file mode 100644 index 0000000000..cc3fbcdee1 --- /dev/null +++ b/app/overrides/spree/admin/shipping_methods/new/remove_configuration_sidebar.deface @@ -0,0 +1 @@ +remove "code[erb-loud]:contains(\"render :partial => 'spree/admin/shared/configuration_menu'\")" \ No newline at end of file diff --git a/app/views/spree/admin/shared/_hubs_sidebar.html.haml b/app/views/spree/admin/shared/_hubs_sidebar.html.haml new file mode 100644 index 0000000000..ea32f4d784 --- /dev/null +++ b/app/views/spree/admin/shared/_hubs_sidebar.html.haml @@ -0,0 +1,21 @@ +- hubs_color = @hubs.count > 0 ? "blue" : "red" +.sidebar_item.four.columns#hubs + .four.columns.alpha.header{ class: "#{hubs_color}" } + %span.four.columns.alpha.centered Distributors + .four.columns.alpha.list{ class: "#{hubs_color}" } + - if @hubs.count > 0 + -# = hidden_field_tag "enterprise[hub_ids][]", [] + - @hubs.each do |hub| + %a.four.columns.alpha.list-item{ class: "#{cycle('odd','even')}", href: "#{main_app.edit_admin_enterprise_path(hub)}" } + %span.three.columns.alpha + = hub.name + %span.one.column.omega + = f.check_box :distributor_ids, { multiple: true }, hub.id, nil + - else + .four.columns.alpha.list-item + %span.three.columns.alpha None Available + %span.one.column.omega + %span.icon-remove-sign + %a.four.columns.alpha.button{ href: "#{main_app.admin_enterprises_path}", class: "#{hubs_color}" } + MANAGE + %span.icon-arrow-right \ No newline at end of file diff --git a/spec/features/admin/shipping_methods_spec.rb b/spec/features/admin/shipping_methods_spec.rb index ab7940acc2..0057376148 100644 --- a/spec/features/admin/shipping_methods_spec.rb +++ b/spec/features/admin/shipping_methods_spec.rb @@ -21,8 +21,8 @@ feature 'shipping methods' do # 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_ids' - select 'Nautical Travels', from: 'shipping_method_distributor_ids' + check "shipping_method_distributor_ids_#{d1.id}" + check "shipping_method_distributor_ids_#{d2.id}" click_button 'Create' # Then the shipping method should have its distributor set @@ -85,7 +85,7 @@ feature 'shipping methods' do fill_in 'shipping_method_name', :with => 'Teleport' - select distributor1.name, :from => 'shipping_method_distributor_ids' + check "shipping_method_distributor_ids_#{distributor1.id}" click_button 'Create' flash_message.should == 'Shipping method "Teleport" has been successfully created!'