From 647e1d196ce78cce2fc3add29245ef89a5a3d043 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Wed, 30 Oct 2013 14:46:49 +1100 Subject: [PATCH] Position enterprise groups --- .../admin/openfoodnetwork.css.scss | 11 +++++++++++ .../admin/enterprise_groups_controller.rb | 19 +++++++++++++++++++ app/models/enterprise_group.rb | 3 +++ .../admin/enterprise_groups/index.html.haml | 8 +++++++- config/routes.rb | 5 ++++- ...31125_add_position_to_enterprise_groups.rb | 5 +++++ db/schema.rb | 3 ++- spec/features/admin/enterprise_groups_spec.rb | 14 ++++++++++++++ spec/models/enterprise_group_spec.rb | 8 ++++++++ 9 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20131030031125_add_position_to_enterprise_groups.rb diff --git a/app/assets/stylesheets/admin/openfoodnetwork.css.scss b/app/assets/stylesheets/admin/openfoodnetwork.css.scss index 875949501d..8f429e4431 100644 --- a/app/assets/stylesheets/admin/openfoodnetwork.css.scss +++ b/app/assets/stylesheets/admin/openfoodnetwork.css.scss @@ -1,3 +1,8 @@ +table .blank-action { + display: inline-block; + width: 29px; +} + #header #logo { top: 10px; } @@ -101,3 +106,9 @@ table#listing_payment_methods { word-wrap: break-word; } } + +table#listing_enterprise_groups { + td.actions { + text-align: left; + } +} diff --git a/app/controllers/admin/enterprise_groups_controller.rb b/app/controllers/admin/enterprise_groups_controller.rb index c3b79f9f95..466bde2cd5 100644 --- a/app/controllers/admin/enterprise_groups_controller.rb +++ b/app/controllers/admin/enterprise_groups_controller.rb @@ -3,5 +3,24 @@ module Admin def index end + def move_up + @enterprise_group = EnterpriseGroup.find params[:enterprise_group_id] + @enterprise_group.move_higher + redirect_to main_app.admin_enterprise_groups_path + end + + def move_down + @enterprise_group = EnterpriseGroup.find params[:enterprise_group_id] + @enterprise_group.move_lower + redirect_to main_app.admin_enterprise_groups_path + end + + + private + + def collection + EnterpriseGroup.by_position + end + end end diff --git a/app/models/enterprise_group.rb b/app/models/enterprise_group.rb index 009e5282d5..41d2a997cc 100644 --- a/app/models/enterprise_group.rb +++ b/app/models/enterprise_group.rb @@ -1,7 +1,10 @@ class EnterpriseGroup < ActiveRecord::Base + acts_as_list + has_and_belongs_to_many :enterprises validates :name, presence: true + scope :by_position, order('position ASC') scope :on_front_page, where(on_front_page: true) end diff --git a/app/views/admin/enterprise_groups/index.html.haml b/app/views/admin/enterprise_groups/index.html.haml index b01dd7b017..81e9c014b4 100644 --- a/app/views/admin/enterprise_groups/index.html.haml +++ b/app/views/admin/enterprise_groups/index.html.haml @@ -17,9 +17,15 @@ %tbody - @enterprise_groups.each do |enterprise_group| %tr - %td= enterprise_group.name + %td.name= enterprise_group.name %td= enterprise_group.on_front_page ? 'Y' : 'N' %td= enterprise_group.enterprises.map(&:name).join ', ' %td.actions = link_to '', main_app.edit_admin_enterprise_group_path(enterprise_group), class: 'edit-enterprise-group icon-edit no-text' = link_to_delete enterprise_group, no_text: true + + - if enterprise_group.last? + .blank-action + - else + = link_to_with_icon 'icon-arrow-down', '', main_app.admin_enterprise_group_move_down_path(enterprise_group), class: 'move-down no-text' + = link_to_with_icon 'icon-arrow-up', '', main_app.admin_enterprise_group_move_up_path(enterprise_group), class: 'move-up no-text' unless enterprise_group.first? diff --git a/config/routes.rb b/config/routes.rb index 47438230d4..f74a92c144 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -30,7 +30,10 @@ Openfoodnetwork::Application.routes.draw do post :bulk_update, :on => :collection, :as => :bulk_update end - resources :enterprise_groups + resources :enterprise_groups do + get :move_up + get :move_down + end end get "new_landing_page", :controller => 'home', :action => "new_landing_page" diff --git a/db/migrate/20131030031125_add_position_to_enterprise_groups.rb b/db/migrate/20131030031125_add_position_to_enterprise_groups.rb new file mode 100644 index 0000000000..199a045784 --- /dev/null +++ b/db/migrate/20131030031125_add_position_to_enterprise_groups.rb @@ -0,0 +1,5 @@ +class AddPositionToEnterpriseGroups < ActiveRecord::Migration + def change + add_column :enterprise_groups, :position, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 9ab81d5317..d24254c517 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20131024005253) do +ActiveRecord::Schema.define(:version => 20131030031125) do create_table "adjustment_metadata", :force => true do |t| t.integer "adjustment_id" @@ -173,6 +173,7 @@ ActiveRecord::Schema.define(:version => 20131024005253) do create_table "enterprise_groups", :force => true do |t| t.string "name" t.boolean "on_front_page" + t.integer "position" end create_table "enterprise_groups_enterprises", :id => false, :force => true do |t| diff --git a/spec/features/admin/enterprise_groups_spec.rb b/spec/features/admin/enterprise_groups_spec.rb index 75decd0c2a..012179e75a 100644 --- a/spec/features/admin/enterprise_groups_spec.rb +++ b/spec/features/admin/enterprise_groups_spec.rb @@ -73,6 +73,20 @@ feature %q{ eg.enterprises.should == [e2] end + scenario "re-ordering enterprise groups" do + eg1 = create(:enterprise_group, name: 'A') + eg2 = create(:enterprise_group, name: 'B') + + click_link 'Configuration' + click_link 'Enterprise Groups' + + page.all('td.name').map(&:text).should == ['A', 'B'] + all("a.move-down").first.click + page.all('td.name').map(&:text).should == ['B', 'A'] + all("a.move-up").last.click + page.all('td.name').map(&:text).should == ['A', 'B'] + end + scenario "deleting an enterprise group", js: true do eg = create(:enterprise_group, name: 'EGEGEG') diff --git a/spec/models/enterprise_group_spec.rb b/spec/models/enterprise_group_spec.rb index b7ead82121..167a8c2f7b 100644 --- a/spec/models/enterprise_group_spec.rb +++ b/spec/models/enterprise_group_spec.rb @@ -30,6 +30,14 @@ describe EnterpriseGroup do end describe "scopes" do + it "orders enterprise groups by their position" do + eg1 = create(:enterprise_group, position: 1) + eg2 = create(:enterprise_group, position: 3) + eg3 = create(:enterprise_group, position: 2) + + EnterpriseGroup.by_position.should == [eg1, eg3, eg2] + end + it "finds enterprise groups on the front page" do eg1 = create(:enterprise_group, on_front_page: true) eg2 = create(:enterprise_group, on_front_page: false)