effective_committees 0.3.13 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/effective/committees_controller.rb +9 -0
  3. data/app/datatables/admin/effective_committee_files_datatable.rb +1 -2
  4. data/app/datatables/admin/effective_committee_members_datatable.rb +1 -0
  5. data/app/datatables/admin/effective_committees_datatable.rb +17 -5
  6. data/app/datatables/effective_committee_members_datatable.rb +1 -0
  7. data/app/datatables/effective_committees_datatable.rb +17 -8
  8. data/app/helpers/effective_committees_helper.rb +35 -0
  9. data/app/models/effective/committee.rb +3 -0
  10. data/app/models/effective/committee_folder.rb +1 -1
  11. data/app/models/effective/committee_member.rb +2 -0
  12. data/app/views/admin/committee_folders/_form.html.haml +4 -6
  13. data/app/views/admin/committee_members/_form.html.haml +7 -5
  14. data/app/views/admin/committees/_fields.html.haml +6 -5
  15. data/app/views/admin/committees/_form.html.haml +2 -2
  16. data/app/views/effective/committee_folders/_committee_folder.html.haml +8 -2
  17. data/app/views/effective/committee_members/_form.html.haml +3 -1
  18. data/app/views/effective/committees/_committee.html.haml +21 -2
  19. data/app/views/effective/committees/_dashboard.html.haml +14 -2
  20. data/app/views/effective/committees/_form.html.haml +1 -1
  21. data/app/views/effective/committees/_form_committee.html.haml +1 -1
  22. data/app/views/effective/committees/index.html.haml +30 -15
  23. data/app/views/effective/committees/my_committees.html.haml +46 -0
  24. data/config/routes.rb +2 -0
  25. data/db/migrate/101_create_effective_committees.rb +4 -0
  26. data/lib/effective_committees/version.rb +1 -1
  27. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 514536a74523036c232572b6ba134e8266e351da77d29ce03968c8ad7c35b10b
4
- data.tar.gz: 0fdbc2739fb43d5c8afac621ee1f38e7d4a1897479b43b00859c40ffa400d65a
3
+ metadata.gz: d8a33f8d6be9ba291dc023ec6e8446f7c4ca40cf66177622cfb85800f766d350
4
+ data.tar.gz: 3a1b0d3a1935cbc0eda280459ebe6438fc4e720ca3b1c71567a6c31d73edfd8c
5
5
  SHA512:
6
- metadata.gz: d97271ef86b32abf000fe80f6a89b32448332ffab1230d148bed953ec530a78f72d970dd1198b650cded26ddfba13ea00203d10e2098e049ce83bd6f783c14da
7
- data.tar.gz: 265815fa3980cc47ee5ffc2a602f7d5388dde9366a4fd2a849084a36481d03fa43b2cccad3c9c4714b4effc4fcb9bd1ebce0724a2a64d54717060795c16554e5
6
+ metadata.gz: cd7e918cfc94e6002b680f6214e4ee1c6b299a472c7ea140ccb9ac6ea4875e8fabb11d9192d8c30b9dc8897c097b10bcdb55815911bbb7a5a5ae67c956e84bbd
7
+ data.tar.gz: 71c6f864296103d659ad309605b28ca71aeb53b9e12087c3f2013569419ddd8bfc5ecf52a030737e36aec42221a9efc241d5526531d8e5799428aa85bbd7228a
@@ -6,6 +6,15 @@ module Effective
6
6
 
7
7
  resource_scope -> { Effective::Committee.all.deep }
8
8
 
9
+ def index
10
+ @committees = resource_scope.for_index
11
+ @page_title = EffectiveResources.et('effective_committees.name')
12
+
13
+ EffectiveResources.authorize!(self, :index, Effective::Committee)
14
+
15
+ render 'index'
16
+ end
17
+
9
18
  private
10
19
 
11
20
  def permitted_params
@@ -7,8 +7,7 @@ module Admin
7
7
  col :id, visible: false
8
8
 
9
9
  col :committee
10
- col :committee_folder, label: 'Folder'
11
-
10
+ col :committee_folder
12
11
  col :file
13
12
  col :title
14
13
  col :notes
@@ -22,6 +22,7 @@ module Admin
22
22
  end
23
23
  end
24
24
 
25
+ col :category
25
26
  col :start_on
26
27
  col :end_on
27
28
 
@@ -1,18 +1,30 @@
1
1
  module Admin
2
2
  class EffectiveCommitteesDatatable < Effective::Datatable
3
3
  datatable do
4
-
5
4
  col :updated_at, visible: false
6
5
  col :created_at, visible: false
7
6
 
8
7
  col :id, visible: false
9
8
 
10
- col :title, label: 'Committee'
9
+ col :title, label: committee_label
11
10
  col :slug, visible: false
12
11
  col :body, visible: false
13
12
 
14
- col :committee_members, label: 'Members'
15
- col :committee_members_count, label: 'Members Count', visible: false
13
+ col :display_on_index, label: "Display on #{committees_name_label} page"
14
+ col :display_on_dashboard
15
+
16
+ col(:committee_members, label: committee_members_label) do |committee|
17
+ committee.committee_members.select(&:active?).sort_by(&:to_s).map do |member|
18
+ content_tag(:div, class: 'col-resource_item') do
19
+ label = link_to(member.to_s, "/admin/users/#{member.user_id}/edit")
20
+ badge = badge(member.category) if member.category.present?
21
+
22
+ [label, badge].compact.join(' ').html_safe
23
+ end
24
+ end.join.html_safe
25
+ end
26
+
27
+ col :committee_members_count, label: "#{committee_members_label} Count", visible: false
16
28
 
17
29
  col :committee_folders, label: 'Folders', visible: false
18
30
  col :committee_folders_count, label: 'Folders Count', visible: false
@@ -21,7 +33,7 @@ module Admin
21
33
  col :committee_files_count, label: 'Files Count', visible: false
22
34
 
23
35
  actions_col do |committee|
24
- dropdown_link_to('View Committee', effective_committees.committee_path(committee), target: '_blank')
36
+ dropdown_link_to("View #{committee_label}", effective_committees.committee_path(committee), target: '_blank')
25
37
  end
26
38
 
27
39
  end
@@ -11,6 +11,7 @@ class EffectiveCommitteeMembersDatatable < Effective::Datatable
11
11
  end
12
12
  end
13
13
 
14
+ col :category
14
15
  col :start_on
15
16
  col :end_on
16
17
 
@@ -5,23 +5,32 @@ class EffectiveCommitteesDatatable < Effective::Datatable
5
5
 
6
6
  col :id, visible: false
7
7
 
8
- col :title, label: 'Committee'
8
+ col :title, label: committee_label
9
9
 
10
- col :committee_members, label: 'Members', visible: false
10
+ col(:committee_members, label: committee_members_label, visible: false) do |committee|
11
+ committee.committee_members.select(&:active?).sort_by(&:to_s).map do |member|
12
+ content_tag(:div, class: 'col-resource_item') do
13
+ label = link_to(member.to_s, "/admin/users/#{member.user_id}/edit")
14
+ badge = badge(member.category) if member.category.present?
11
15
 
12
- col :committee_members_count, label: 'Members' do |committee|
13
- pluralize(committee.committee_members_count, 'members')
16
+ [label, badge].compact.join(' ').html_safe
17
+ end
18
+ end.join.html_safe
19
+ end
20
+
21
+ col :committee_members_count, as: :string, label: committee_members_label do |committee|
22
+ pluralize(committee.committee_members.select(&:active?).length, committee_member_label.downcase)
14
23
  end
15
24
 
16
25
  col :committee_folders, label: 'Folders'
17
26
 
18
- col :committee_folders_count, label: 'Folders', visible: false do |committee|
27
+ col :committee_folders_count, as: :string, label: 'Folders', visible: false do |committee|
19
28
  pluralize(committee.committee_folders_count, 'folders')
20
29
  end
21
30
 
22
31
  col :committee_files, label: 'Files', visible: false
23
32
 
24
- col :committee_files_count, label: 'Files' do |committee|
33
+ col :committee_files_count, as: :string, label: 'Files' do |committee|
25
34
  pluralize(committee.committee_files_count, 'files')
26
35
  end
27
36
 
@@ -29,8 +38,8 @@ class EffectiveCommitteesDatatable < Effective::Datatable
29
38
  end
30
39
 
31
40
  collection do
32
- # This only displays active committees
33
- Effective::Committee.deep.where(id: current_user.committees)
41
+ # This only displays committees published to the dashboard that the committee_member has active? access to
42
+ Effective::Committee.deep.for_dashboard.where(id: current_user.committees)
34
43
  end
35
44
 
36
45
  end
@@ -1,3 +1,38 @@
1
1
  module EffectiveCommitteesHelper
2
2
 
3
+ def committees_name_label
4
+ et('effective_committees.name')
5
+ end
6
+
7
+ def committee_label
8
+ et(Effective::Committee)
9
+ end
10
+
11
+ def committees_label
12
+ ets(Effective::Committee)
13
+ end
14
+
15
+ def committee_member_label
16
+ et(Effective::CommitteeMember)
17
+ end
18
+
19
+ def committee_members_label
20
+ ets(Effective::CommitteeMember)
21
+ end
22
+
23
+ def committee_folder_label
24
+ et(Effective::CommitteeFolder)
25
+ end
26
+
27
+ def committee_folders_label
28
+ ets(Effective::CommitteeFolder)
29
+ end
30
+
31
+ def committee_file_label
32
+ et(Effective::CommitteeFile)
33
+ end
34
+
35
+ def committee_files_label
36
+ ets(Effective::CommitteeFile)
37
+ end
3
38
  end
@@ -32,6 +32,9 @@ module Effective
32
32
  scope :sorted, -> { order(:title) }
33
33
  scope :deep, -> { with_rich_text_body.includes(committee_members: [:user], committee_folders: [:committee_files, :rich_text_body]) }
34
34
 
35
+ scope :for_dashboard, -> { where(display_on_dashboard: true) }
36
+ scope :for_index, -> { where(display_on_index: true) }
37
+
35
38
  validates :title, presence: true, uniqueness: true, length: { maximum: 255 }
36
39
 
37
40
  def to_s
@@ -10,7 +10,7 @@ module Effective
10
10
  belongs_to :committee, polymorphic: true, counter_cache: true
11
11
 
12
12
  has_rich_text :body
13
- has_many :committee_files, -> { Effective::CommitteeFile.sorted.deep }, dependent: :destroy, inverse_of: :committee
13
+ has_many :committee_files, -> { Effective::CommitteeFile.sorted.deep }, dependent: :destroy, inverse_of: :committee_folder
14
14
 
15
15
  effective_resource do
16
16
  title :string
@@ -18,6 +18,8 @@ module Effective
18
18
  effective_resource do
19
19
  roles_mask :integer
20
20
 
21
+ category :string
22
+
21
23
  start_on :date
22
24
  end_on :date
23
25
 
@@ -3,18 +3,16 @@
3
3
  = f.hidden_field :committee_id
4
4
  = f.hidden_field :committee_type
5
5
  - else
6
- = f.select :committee, { 'Committees' => Effective::Committee.sorted }, polymorphic: true
6
+ = f.select :committee, { committees_label => Effective::Committee.sorted }, polymorphic: true
7
7
 
8
8
  = f.text_field :title
9
9
 
10
- - if f.object.persisted? || f.object.errors.include?(:slug)
11
- - current_url = (effective_committees.commitee_url(f.object) rescue nil)
12
- = f.text_field :slug, hint: "The slug controls this committee's internet address. Be careful, changing the slug will break links that other websites may have to the old address.<br>#{('This folder is currently reachable via ' + link_to(current_url.gsub(f.object.slug, '<strong>' + f.object.slug + '</strong>').html_safe, current_url)) if current_url }".html_safe
10
+ = acts_as_slugged_fields(f, url: (effective_committees.commitee_url(f.object) rescue nil))
13
11
 
14
12
  - if defined?(EffectiveArticleEditor)
15
- = f.article_editor :body, hint: 'Displayed on the folder page'
13
+ = f.article_editor :body, hint: "Displayed on the #{committee_folder_label} page"
16
14
  - else
17
- = f.rich_text_area :body, hint: 'Displayed on the folder page'
15
+ = f.rich_text_area :body, hint: "Displayed on the #{commitee_fodler_label} page"
18
16
 
19
17
  = f.submit
20
18
 
@@ -12,18 +12,20 @@
12
12
 
13
13
  - if f.object.new_record?
14
14
  - if inline_datatable? && inline_datatable.attributes[:committee_id].present?
15
- = f.select :user_ids, current_user.class.all, label: 'Add user(s)', required: true, ajax_url: ajax_url, hint: 'Add one or more users'
15
+ = f.select :user_ids, current_user.class.all, label: 'Add user(s)', required: true, ajax_url: ajax_url, hint: "Add one or more #{committee_member_label.downcase}"
16
16
 
17
17
  - if inline_datatable? && inline_datatable.attributes[:user_id].present?
18
- = f.select :committee_ids, Effective::Committee.sorted.all, label: 'Add committee(s)', hint: 'Add one or more committees'
18
+ = f.select :committee_ids, Effective::Committee.sorted.all, label: "Add #{commitee_label}(s)", hint: "Add one or more #{commitees_label.downcase}"
19
19
 
20
20
  - unless inline_datatable?
21
- = f.select :committee_id, Effective::Committee.sorted.all, label: 'Committee'
22
- = f.select :user_ids, current_user.class.sorted, label: 'User(s)', required: true, ajax_url: ajax_url, hint: 'Add one or more user at a time'
21
+ = f.select :committee_id, Effective::Committee.sorted.all
22
+ = f.select :user_ids, current_user.class.sorted, label: 'User(s)', required: true, ajax_url: ajax_url, hint: "Add one or more #{committee_member_label.downcase}"
23
23
 
24
24
  - if f.object.persisted?
25
25
  = f.static_field :committee
26
- = f.static_field :user, label: 'Committee Member'
26
+ = f.static_field :user, label: committee_member_label
27
+
28
+ = f.text_field :category
27
29
 
28
30
  .row
29
31
  .col= f.date_field :start_on, hint: 'optional start date'
@@ -1,10 +1,11 @@
1
1
  = f.text_field :title
2
2
 
3
- - if f.object.persisted? || f.object.errors.include?(:slug)
4
- - current_url = (effective_committees.committee_url(f.object) rescue nil)
5
- = f.text_field :slug, hint: "The slug controls this committee's internet address. Be careful, changing the slug will break links that other websites may have to the old address.<br>#{('This committee is currently reachable via ' + link_to(current_url.gsub(f.object.slug, '<strong>' + f.object.slug + '</strong>').html_safe, current_url)) if current_url }".html_safe
3
+ = acts_as_slugged_fields(f, url: (effective_committees.committee_url(f.object) rescue nil))
4
+
5
+ = f.check_box :display_on_index, label: "Display on the #{committees_name_label} page"
6
+ = f.check_box :display_on_dashboard, label: "Display to #{committee_members_label.downcase} on their dashboard"
6
7
 
7
8
  - if defined?(EffectiveArticleEditor)
8
- = f.article_editor :body, hint: 'Displayed on the committee page'
9
+ = f.article_editor :body, hint: "Displayed on the #{committee_label} page"
9
10
  - else
10
- = f.rich_text_area :body, hint: 'Displayed on the committee page'
11
+ = f.rich_text_area :body, hint: "Displayed on the #{committee_label} page"
@@ -1,9 +1,9 @@
1
1
  = tabs do
2
- = tab 'Committee' do
2
+ = tab(committee_label) do
3
3
  = render 'admin/committees/form_committee', committee: committee
4
4
 
5
5
  - if committee.persisted?
6
- = tab 'Members' do
6
+ = tab(Effective::CommitteeMember) do
7
7
  - datatable = Admin::EffectiveCommitteeMembersDatatable.new(committee: committee)
8
8
  = render_inline_datatable(datatable)
9
9
 
@@ -1,6 +1,12 @@
1
1
  %nav{'aria-label': 'breadcrumb'}
2
2
  %ol.breadcrumb
3
- %li.breadcrumb-item= link_to('All Committees', effective_committees.committees_path)
3
+ - if EffectiveResources.authorized?(self, :index, Effective::Committee)
4
+ %li.breadcrumb-item= link_to("All #{committees_label}", effective_committees.committees_path)
5
+ - elsif EffectiveResources.authorized?(self, :my_committees, Effective::Committee)
6
+ %li.breadcrumb-item= link_to("My #{committees_label}", effective_committees.my_committees_path)
7
+ - else
8
+ %li.breadcrumb-item= link_to("Home", root_path)
9
+
4
10
  %li.breadcrumb-item= link_to(committee_folder.committee, effective_committees.committee_path(committee_folder.committee))
5
11
  %li.breadcrumb-item.active{'aria-current': 'page'}= committee_folder
6
12
 
@@ -19,7 +25,7 @@
19
25
  %tr
20
26
  %td
21
27
  - if file.file.attached?
22
- = link_to(icon('download') + file.to_s, url_for(file.file), target: '_blank')
28
+ = link_to(icon('download') + ' ' + file.to_s, url_for(file.file), target: '_blank')
23
29
  - else
24
30
  = file.to_s
25
31
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  - if f.object.new_record?
10
10
  - unless inline_datatable? && inline_datatable.attributes[:committee_id].present?
11
- = f.select :committee, { 'Committees' => Effective::Committee.sorted }, polymorphic: true
11
+ = f.select :committee, { committees_label => Effective::Committee.sorted }, polymorphic: true
12
12
 
13
13
  .row
14
14
  .col= f.date_field :start_on, hint: 'optional start date'
@@ -30,6 +30,8 @@
30
30
  - unless inline_datatable? && inline_datatable.attributes[:user_id].present?
31
31
  = f.static_field :user
32
32
 
33
+ = f.text_field :category
34
+
33
35
  .row
34
36
  .col= f.date_field :start_on, hint: 'optional start date'
35
37
  .col= f.date_field :end_on, hint: 'optional end date'
@@ -1,12 +1,31 @@
1
1
  %nav{'aria-label': 'breadcrumb'}
2
2
  %ol.breadcrumb
3
- %li.breadcrumb-item= link_to('All Committees', effective_committees.committees_path)
3
+ - if EffectiveResources.authorized?(self, :index, Effective::Committee)
4
+ %li.breadcrumb-item= link_to("All #{committees_label}", effective_committees.committees_path)
5
+ - elsif EffectiveResources.authorized?(self, :my_committees, Effective::Committee)
6
+ %li.breadcrumb-item= link_to("My #{committees_label}", effective_committees.my_committees_path)
7
+ - else
8
+ %li.breadcrumb-item= link_to("Home", root_path)
9
+
4
10
  %li.breadcrumb-item.active{'aria-current': 'page'}= committee
5
11
 
6
12
  .effective-committee
7
13
  - if committee.rich_text_body.present?
8
14
  .mb-4= committee.rich_text_body.to_s
9
15
 
16
+ .mb-4
17
+ = collapse("Show #{committee_members_label.downcase}") do
18
+ - members = committee.committee_members.select(&:active?).sort_by(&:to_s)
19
+
20
+ %p= pluralize(members.length, committee_member_label.downcase)
21
+
22
+ %ul
23
+ - members.each do |member|
24
+ %li
25
+ = member.user.to_s
26
+ - if member.category.present?
27
+ = badge(member.category)
28
+
10
29
  %table.table.table-striped
11
30
  %thead
12
31
  %tr
@@ -16,7 +35,7 @@
16
35
 
17
36
  - committee.committee_folders.each do |folder|
18
37
  %tr
19
- %td= link_to(icon('folder') + folder.to_s, effective_committees.committee_committee_folder_path(committee, folder))
38
+ %td= link_to(icon('folder') + ' ' + folder.to_s, effective_committees.committee_committee_folder_path(committee, folder))
20
39
  %td= pluralize(folder.committee_files.length, 'file')
21
40
  %td= folder.body.to_s
22
41
 
@@ -1,8 +1,20 @@
1
- %h2 Committees
1
+ %h2= committees_label
2
2
 
3
3
  - if current_user.committees.present?
4
+ %p
5
+ You have access to #{pluralize(current_user.committees.length, committee_label.downcase)}.
6
+
7
+ - if EffectiveResources.authorized?(self, :index, Effective::Committee)
8
+ Please
9
+ = link_to('click here', effective_committees.committees_path)
10
+ to view all #{committees_label.downcase}.
11
+ - elsif EffectiveResources.authorized?(self, :my_committees, Effective::Committee)
12
+ Please
13
+ = link_to('click here', effective_committees.my_committees_path)
14
+ to view your #{committees_label.downcase}.
15
+
4
16
  - datatable = EffectiveResources.best('EffectiveCommitteesDatatable').new(self, namespace: :effective)
5
17
  = render_datatable(datatable, simple: true)
6
18
 
7
19
  - else
8
- %p You aren't assigned to any committees. When you are, we'll show them here.
20
+ %p You aren't assigned to any #{committees_label.downcase}. When you are, we'll show them here.
@@ -1,5 +1,5 @@
1
1
  = tabs do
2
- = tab 'Committee' do
2
+ = tab(commitee_label) do
3
3
  = render 'effective/committees/form_committee', committee: committee
4
4
 
5
5
  - if committee.persisted?
@@ -6,6 +6,6 @@
6
6
  = f.submit
7
7
 
8
8
  - if committee.persisted?
9
- %h2 Committee Members
9
+ %h2= committee_members_label
10
10
  - datatable = EffectiveCommitteeMembersDatatable.new(committee: committee)
11
11
  = render_inline_datatable(datatable)
@@ -1,21 +1,36 @@
1
- - committees = @committees.where(id: current_user.committees)
2
-
3
- %p
4
- You have access to files for #{pluralize(committees.length, 'committee')}:
5
- = committees.to_sentence
1
+ - committees = @committees.sorted
6
2
 
7
3
  %nav{'aria-label': 'breadcrumb'}
8
4
  %ol.breadcrumb
9
- %li.breadcrumb-item.active{'aria-current': 'page'} All Committees
5
+ %li.breadcrumb-item= link_to("Home", root_path)
6
+ %li.breadcrumb-item.active{'aria-current': 'page'}= @page_title
7
+
8
+ %h1= @page_title
9
+
10
+ - if committees.blank?
11
+ %p There are no #{committees_label.downcase} to display.
12
+ - else
13
+ %p
14
+ = succeed('.') do
15
+ There are #{pluralize(committees.length, committee_label.downcase)} and
16
+ = pluralize(Effective::CommitteeMember.pluck(:user_id).uniq.length, committee_member_label.downcase)
10
17
 
11
18
  .effective-committees
12
19
  - committees.each do |committee|
13
- = card do
14
- = link_to(icon('folder') + committee.to_s, effective_committees.committee_path(committee))
15
-
16
- %table.table.table-striped.mt-3.ml-4
17
- - committee.committee_folders.each do |folder|
18
- %tr
19
- %td= link_to(icon('folder') + folder.to_s, effective_committees.committee_committee_folder_path(committee, folder))
20
- %td= pluralize(folder.committee_files.length, 'file')
21
- %td= folder.body
20
+ %h3= committee
21
+
22
+ - members = committee.committee_members.select(&:active?).sort_by(&:to_s)
23
+ %ul
24
+ - members.each do |member|
25
+ %li
26
+ = member.user.to_s
27
+ - if member.category.present?
28
+ = badge(member.category)
29
+
30
+ - if members.blank?
31
+ %li No #{committee_members_label.downcase}
32
+
33
+ .my-4
34
+
35
+ .form-actions
36
+ = link_to 'Continue', return_to_dashboard_path, class: 'btn btn-primary mb-4'
@@ -0,0 +1,46 @@
1
+ - committees = @committees.sorted.where(id: current_user.committees)
2
+
3
+ %nav{'aria-label': 'breadcrumb'}
4
+ %ol.breadcrumb
5
+ - if EffectiveResources.authorized?(self, :index, Effective::Committee)
6
+ %li.breadcrumb-item= link_to("All #{committees_label}", effective_committees.committees_path)
7
+ - else
8
+ %li.breadcrumb-item= link_to("Home", root_path)
9
+
10
+ %li.breadcrumb-item.active{'aria-current': 'page'} My #{committees_label}
11
+
12
+ - if committees.blank?
13
+ %p There are no #{committees_label.downcase} to display.
14
+
15
+ - if committees.present?
16
+ %p You have access to #{pluralize(committees.length, committee_label.downcase)}: #{committees.to_sentence}
17
+
18
+ .effective-committees
19
+ - committees.each do |committee|
20
+ .card
21
+ .card-body
22
+ = link_to(icon('folder') + ' ' + committee.to_s, effective_committees.committee_path(committee))
23
+
24
+ = collapse("Show #{committee_members_label.downcase}", card_class: 'card card-body mt-4 mx-4', link_class: 'btn btn-link float-right') do
25
+ - members = committee.committee_members.select(&:active?).sort_by(&:to_s)
26
+
27
+ %p= pluralize(members.length, committee_member_label.downcase)
28
+
29
+ %ul
30
+ - members.each do |member|
31
+ %li
32
+ = member.user.to_s
33
+ - if member.category.present?
34
+ = badge(member.category)
35
+
36
+ %table.table.table-striped.mt-3.ml-4
37
+ - committee.committee_folders.each do |folder|
38
+ %tr
39
+ %td= link_to(icon('folder') + ' ' + folder.to_s, effective_committees.committee_committee_folder_path(committee, folder))
40
+ %td= pluralize(folder.committee_files.length, 'file')
41
+ %td= folder.body
42
+
43
+ .my-4
44
+
45
+ .form-actions
46
+ = link_to 'Continue', return_to_dashboard_path, class: 'btn btn-primary mb-4'
data/config/routes.rb CHANGED
@@ -11,6 +11,8 @@ EffectiveCommittees::Engine.routes.draw do
11
11
  resources :committee_folders, only: [:show]
12
12
  end
13
13
 
14
+ get 'my-committees', to: 'committees#my_committees'
15
+
14
16
  resources :committee_members, except: [:show]
15
17
  end
16
18
 
@@ -9,6 +9,9 @@ class CreateEffectiveCommittees < ActiveRecord::Migration[6.0]
9
9
  t.integer :committee_folders_count, default: 0
10
10
  t.integer :committee_files_count, default: 0
11
11
 
12
+ t.boolean :display_on_index, default: true
13
+ t.boolean :display_on_dashboard, default: true
14
+
12
15
  t.datetime :updated_at
13
16
  t.datetime :created_at
14
17
  end
@@ -25,6 +28,7 @@ class CreateEffectiveCommittees < ActiveRecord::Migration[6.0]
25
28
  t.string :user_type
26
29
 
27
30
  t.integer :roles_mask
31
+ t.string :category
28
32
 
29
33
  t.date :start_on
30
34
  t.date :end_on
@@ -1,3 +1,3 @@
1
1
  module EffectiveCommittees
2
- VERSION = '0.3.13'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_committees
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.13
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-05-09 00:00:00.000000000 Z
11
+ date: 2025-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -214,6 +214,7 @@ files:
214
214
  - app/views/effective/committees/_form.html.haml
215
215
  - app/views/effective/committees/_form_committee.html.haml
216
216
  - app/views/effective/committees/index.html.haml
217
+ - app/views/effective/committees/my_committees.html.haml
217
218
  - config/effective_committees.rb
218
219
  - config/locales/effective_committees.en.yml
219
220
  - config/routes.rb