diff --git a/app/controllers/admin/university/people/alumni/imports_controller.rb b/app/controllers/admin/university/alumni/imports_controller.rb similarity index 79% rename from app/controllers/admin/university/people/alumni/imports_controller.rb rename to app/controllers/admin/university/alumni/imports_controller.rb index 66b44d7499842bcae400aa6f4585e915e3d05d46..6de670ed80e5bf1553e35da571b3d1bea1f5a2e1 100644 --- a/app/controllers/admin/university/people/alumni/imports_controller.rb +++ b/app/controllers/admin/university/alumni/imports_controller.rb @@ -1,4 +1,4 @@ -class Admin::University::People::Alumni::ImportsController < Admin::University::ApplicationController +class Admin::University::Alumni::ImportsController < Admin::University::ApplicationController load_and_authorize_resource class: University::Person::Alumnus::Import, through: :current_university, through_association: :person_alumnus_imports @@ -30,11 +30,11 @@ class Admin::University::People::Alumni::ImportsController < Admin::University:: def breadcrumb super add_breadcrumb University::Person::Alumnus.model_name.human(count: 2), - admin_university_people_alumni_path + admin_university_alumni_path add_breadcrumb University::Person::Alumnus::Import.model_name.human(count: 2), - admin_university_people_alumni_imports_path + admin_university_alumni_imports_path return unless @import - @import.persisted? ? add_breadcrumb(@import, admin_university_people_alumni_import_path(@import)) + @import.persisted? ? add_breadcrumb(@import, admin_university_alumni_import_path(@import)) : add_breadcrumb(t('create')) end diff --git a/app/controllers/admin/university/people/alumni_controller.rb b/app/controllers/admin/university/alumni_controller.rb similarity index 76% rename from app/controllers/admin/university/people/alumni_controller.rb rename to app/controllers/admin/university/alumni_controller.rb index 5a06332f2ab3fa85af886510d8f49a8e73e4b861..ae1f4a38b11069de87c3ec4130ef6deb57147fd9 100644 --- a/app/controllers/admin/university/people/alumni_controller.rb +++ b/app/controllers/admin/university/alumni_controller.rb @@ -1,9 +1,11 @@ -class Admin::University::People::AlumniController < Admin::University::ApplicationController +class Admin::University::AlumniController < Admin::University::ApplicationController load_and_authorize_resource class: University::Person::Alumnus, through: :current_university, through_association: :people has_scope :for_search_term + has_scope :for_alumni_program + has_scope :for_alumni_year def index @alumni = apply_scopes(@alumni).alumni @@ -25,7 +27,7 @@ class Admin::University::People::AlumniController < Admin::University::Applicati def update_cohorts if @alumnus.update(alumnus_params) - redirect_to admin_university_people_alumnus_path(@alumnus), + redirect_to admin_university_alumnus_path(@alumnus), notice: t('admin.successfully_updated_html', model: @alumnus.to_s) else render :edit_cohorts @@ -39,8 +41,8 @@ class Admin::University::People::AlumniController < Admin::University::Applicati def breadcrumb super add_breadcrumb University::Person::Alumnus.model_name.human(count: 2), - admin_university_people_alumni_path - add_breadcrumb @alumnus, admin_university_people_alumni_path(@alumnus) if @alumnus + admin_university_alumni_path + add_breadcrumb @alumnus, admin_university_alumni_path(@alumnus) if @alumnus end def alumnus_params diff --git a/app/models/university/person/with_education.rb b/app/models/university/person/with_education.rb index 3c36e95e988f1114e4ac641a6da2d52d09ae4fe8..978a9ed23be1e834177beeb87e09d174299c40ce 100644 --- a/app/models/university/person/with_education.rb +++ b/app/models/university/person/with_education.rb @@ -38,6 +38,19 @@ module University::Person::WithEducation class_name: 'Education::Program', foreign_key: 'university_person_id', association_foreign_key: 'education_program_id' + + scope :for_alumni_program, -> (program_id) { + left_joins(:cohorts) + .where(education_cohorts: { program_id: program_id }) + .select("university_people.*") + .distinct + } + scope :for_alumni_year, -> (academic_year_id) { + left_joins(:cohorts) + .where(education_cohorts: { academic_year_id: academic_year_id }) + .select("university_people.*") + .distinct + } end def add_to_cohort(cohort) diff --git a/app/services/filters/admin/university/people/alumni.rb b/app/services/filters/admin/university/alumni.rb similarity index 81% rename from app/services/filters/admin/university/people/alumni.rb rename to app/services/filters/admin/university/alumni.rb index 6495bda457a85b54e3f3116110bc572342204e09..ad0f53c253ed0112cf31160e47c89b0a43518019 100644 --- a/app/services/filters/admin/university/people/alumni.rb +++ b/app/services/filters/admin/university/alumni.rb @@ -1,9 +1,9 @@ module Filters - class Admin::University::People::Alumni < Filters::Base + class Admin::University::Alumni < Filters::Base def initialize(user) super add_search - add :for_program, + add :for_alumni_program, user.university.education_programs, I18n.t( 'filters.attributes.element', @@ -11,7 +11,7 @@ module Filters ), false, true - add :for_academic_year, + add :for_alumni_year, user.university.academic_years.ordered, I18n.t( 'filters.attributes.element', diff --git a/app/views/admin/university/people/alumni/_cohort_fields.html.erb b/app/views/admin/university/alumni/_cohort_fields.html.erb similarity index 100% rename from app/views/admin/university/people/alumni/_cohort_fields.html.erb rename to app/views/admin/university/alumni/_cohort_fields.html.erb diff --git a/app/views/admin/university/people/alumni/_list.html.erb b/app/views/admin/university/alumni/_list.html.erb similarity index 87% rename from app/views/admin/university/people/alumni/_list.html.erb rename to app/views/admin/university/alumni/_list.html.erb index 00f837195a83c7a68cbd084a275fdb91b6cc116f..e8676343406419cacc52936259be44191a1fc8ca 100644 --- a/app/views/admin/university/people/alumni/_list.html.erb +++ b/app/views/admin/university/alumni/_list.html.erb @@ -7,7 +7,7 @@ </thead> <tbody> <% alumni.each do |alumnus| %> - <% path = admin_university_people_alumnus_path(alumnus) %> + <% path = admin_university_alumnus_path(alumnus) %> <tr> <td><%= link_to alumnus.last_name, path %></td> <td><%= link_to alumnus.first_name, path %></td> diff --git a/app/views/admin/university/people/alumni/edit_cohorts.html.erb b/app/views/admin/university/alumni/edit_cohorts.html.erb similarity index 87% rename from app/views/admin/university/people/alumni/edit_cohorts.html.erb rename to app/views/admin/university/alumni/edit_cohorts.html.erb index 2bc79d96d2f87afb3619c6506ab3e328bbe74777..ea332608a5f07d98cbd8af1d4797073b4af5b2fb 100644 --- a/app/views/admin/university/people/alumni/edit_cohorts.html.erb +++ b/app/views/admin/university/alumni/edit_cohorts.html.erb @@ -2,7 +2,7 @@ <h2 class="h3"><%= Education::Program.model_name.human(count: 2) %></h2> -<%= simple_form_for [:admin, @alumnus], url: edit_cohorts_admin_university_people_alumnus_path(@alumnus) do |f| %> +<%= simple_form_for [:admin, @alumnus], url: edit_cohorts_admin_university_alumnus_path(@alumnus) do |f| %> <%= f.error_notification %> <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> @@ -21,7 +21,7 @@ <div class="col-md-10"> <div id="cohorts"> <%= f.simple_fields_for :cohorts, @alumnus.cohorts.sort_by { |c| [c.year ? 0 : 1, c.year] }.reverse, include_id: false do |cohort_f| %> - <%= render 'admin/university/people/alumni/cohort_fields', f: cohort_f, include_id: true %> + <%= render 'admin/university/alumni/cohort_fields', f: cohort_f, include_id: true %> <% end %> </div> </div> diff --git a/app/views/admin/university/people/alumni/imports/index.html.erb b/app/views/admin/university/alumni/imports/index.html.erb similarity index 77% rename from app/views/admin/university/people/alumni/imports/index.html.erb rename to app/views/admin/university/alumni/imports/index.html.erb index a376df884a90ed95082a50df1e2f79464414da1d..e48aa45f47054e8801ebd5f80b4619903487e9c9 100644 --- a/app/views/admin/university/people/alumni/imports/index.html.erb +++ b/app/views/admin/university/alumni/imports/index.html.erb @@ -9,7 +9,7 @@ <tbody> <% @imports.each do |import| %> <tr> - <td><%= link_to import, admin_university_people_alumni_import_path(import) %></td> + <td><%= link_to import, admin_university_alumni_import_path(import) %></td> </tr> <% end %> </tbody> @@ -18,6 +18,6 @@ <% content_for :action_bar_right do %> <%= link_to_if can?(:create, University::Person::Alumnus::Import), t('create'), - new_admin_university_people_alumni_import_path, + new_admin_university_alumni_import_path, class: button_classes %> <% end %> diff --git a/app/views/admin/university/people/alumni/imports/new.html.erb b/app/views/admin/university/alumni/imports/new.html.erb similarity index 97% rename from app/views/admin/university/people/alumni/imports/new.html.erb rename to app/views/admin/university/alumni/imports/new.html.erb index 0749b75c5c3696a0b5d5dcf89b0d934cde8826b9..84e9abb84c5048841d2a70a1f553647f45a12ad0 100644 --- a/app/views/admin/university/people/alumni/imports/new.html.erb +++ b/app/views/admin/university/alumni/imports/new.html.erb @@ -11,7 +11,7 @@ Les valeurs pour gender peuvent être m (masculin), f (féminin) et n (non binaire). </p> <%= simple_form_for @import, - url: admin_university_people_alumni_imports_path do |f| %> + url: admin_university_alumni_imports_path do |f| %> <%= f.error_notification %> <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> diff --git a/app/views/admin/university/people/alumni/imports/show.html.erb b/app/views/admin/university/alumni/imports/show.html.erb similarity index 100% rename from app/views/admin/university/people/alumni/imports/show.html.erb rename to app/views/admin/university/alumni/imports/show.html.erb diff --git a/app/views/admin/university/people/alumni/index.html.erb b/app/views/admin/university/alumni/index.html.erb similarity index 67% rename from app/views/admin/university/people/alumni/index.html.erb rename to app/views/admin/university/alumni/index.html.erb index dc53377d88626440dd47ff45d7e1de84e81eb234..6db0169c7ec860444e7629410ef2484f7cbfb63e 100644 --- a/app/views/admin/university/people/alumni/index.html.erb +++ b/app/views/admin/university/alumni/index.html.erb @@ -1,14 +1,14 @@ <% content_for :title, "#{University::Person::Alumnus.model_name.human(count: 2)} (#{@alumni.total_count})" %> -<%= render 'filters', current_path: admin_university_people_alumni_path, filters: @filters if @filters.any? %> +<%= render 'filters', current_path: admin_university_alumni_path, filters: @filters if @filters.any? %> -<%= render 'admin/university/people/alumni/list', alumni: @alumni %> +<%= render 'admin/university/alumni/list', alumni: @alumni %> <%= paginate @alumni, theme: 'bootstrap-5' %> <% content_for :action_bar_left do %> <%= link_to t('import'), - new_admin_university_people_alumni_import_path, + new_admin_university_alumni_import_path, class: button_classes if can? :manage, University::Person::Alumnus::Import %> <% end %> diff --git a/app/views/admin/university/people/alumni/new.html.erb b/app/views/admin/university/alumni/new.html.erb similarity index 100% rename from app/views/admin/university/people/alumni/new.html.erb rename to app/views/admin/university/alumni/new.html.erb diff --git a/app/views/admin/university/people/alumni/show.html.erb b/app/views/admin/university/alumni/show.html.erb similarity index 88% rename from app/views/admin/university/people/alumni/show.html.erb rename to app/views/admin/university/alumni/show.html.erb index ca7335644c78d9925ae4c87e2adfd727f7ad2141..c122295e9ef3ad42c37457d47f6a4a3f50faeb2c 100644 --- a/app/views/admin/university/people/alumni/show.html.erb +++ b/app/views/admin/university/alumni/show.html.erb @@ -20,5 +20,5 @@ <% content_for :action_bar_right do %> <%= edit_link @alumnus %> - <%= link_to t('university.manage_cohorts'), edit_cohorts_admin_university_people_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %> + <%= link_to t('university.manage_cohorts'), edit_cohorts_admin_university_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %> <% end %> diff --git a/config/admin_navigation.rb b/config/admin_navigation.rb index f0f93fb026a2c084af78360b79efb881c601975a..a319d52b18a4f3a237653cba2131d994e6fe39d7 100644 --- a/config/admin_navigation.rb +++ b/config/admin_navigation.rb @@ -6,11 +6,11 @@ SimpleNavigation::Configuration.run do |navigation| navigation.items do |primary| primary.item :dashboard, t('admin.dashboard'), admin_root_path, { icon: 'tachometer-alt', highlights_on: /admin$/ } - if can?(:read, User) || can?(:read, University::Person) || can?(:read, University::Organization) + if can?(:read, University::Person) || can?(:read, University::Organization) primary.item :university, University.model_name.human, nil, { kind: :header } - primary.item :university, University::Person.model_name.human(count: 2), admin_university_people_path, { icon: 'users-cog' } - primary.item :university, University::Organization.model_name.human(count: 2), admin_university_organizations_path, { icon: 'building' } - primary.item :communication_alumni, University::Person::Alumnus.model_name.human(count: 2), admin_university_people_alumni_path, { icon: 'users' } + primary.item :university, University::Person.model_name.human(count: 2), admin_university_people_path, { icon: 'users-cog' } if can?(:read, University::Person) + primary.item :university, University::Organization.model_name.human(count: 2), admin_university_organizations_path, { icon: 'building' } if can?(:read, University::Organization) + primary.item :communication_alumni, University::Person::Alumnus.model_name.human(count: 2), admin_university_alumni_path, { icon: 'users' } if can?(:read, University::Person) end if can?(:read, Education::Program) diff --git a/config/routes/admin/university.rb b/config/routes/admin/university.rb index 5106085dc6cb64aa953317c748c99e827750b6a1..8b8d2a3b5dafb9064928c2b76d84d7e06d98013a 100644 --- a/config/routes/admin/university.rb +++ b/config/routes/admin/university.rb @@ -3,17 +3,15 @@ namespace :university do namespace :organizations do resources :imports, only: [:index, :show, :new, :create] end - namespace :people do - namespace :alumni do - resources :imports, only: [:index, :show, :new, :create] - end - resources :alumni, only: [:index, :show] do - member do - get 'edit_cohorts' => 'alumni#edit_cohorts' - patch 'edit_cohorts' => 'alumni#update_cohorts' - get 'edit_experience' => 'alumni#edit_experiences' - patch 'edit_experiences' => 'alumni#update_experiences' - end + namespace :alumni do + resources :imports, only: [:index, :show, :new, :create] + end + resources :alumni, only: [:index, :show] do + member do + get 'edit_cohorts' => 'alumni#edit_cohorts' + patch 'edit_cohorts' => 'alumni#update_cohorts' + get 'edit_experience' => 'alumni#edit_experiences' + patch 'edit_experiences' => 'alumni#update_experiences' end end resources :people, :organizations