From 5eacc788d5c27499e925ef0e006a4f89d37dfac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Thu, 11 Jun 2026 16:27:24 +0200 Subject: [PATCH 01/14] list cohorts in school --- .../admin/education/cohorts_controller.rb | 5 +++-- .../education/schools/cohorts_controller.rb | 21 +++++++++++++++++++ .../admin/education/schools_controller.rb | 2 ++ .../admin/education/cohorts/_list.html.erb | 11 ++++++---- .../education/schools/cohorts/index.html.erb | 9 ++++++++ .../admin/education/schools/show.html.erb | 16 ++++++++++++-- config/routes/admin/education.rb | 1 + 7 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 app/controllers/admin/education/schools/cohorts_controller.rb create mode 100644 app/views/admin/education/schools/cohorts/index.html.erb diff --git a/app/controllers/admin/education/cohorts_controller.rb b/app/controllers/admin/education/cohorts_controller.rb index ff866bff34..f2289754db 100644 --- a/app/controllers/admin/education/cohorts_controller.rb +++ b/app/controllers/admin/education/cohorts_controller.rb @@ -9,8 +9,9 @@ class Admin::Education::CohortsController < Admin::Education::ApplicationControl def index @filtered = @cohorts - @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) - .ordered + @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) + .ordered + .page(params[:page]) breadcrumb end diff --git a/app/controllers/admin/education/schools/cohorts_controller.rb b/app/controllers/admin/education/schools/cohorts_controller.rb new file mode 100644 index 0000000000..6889fb7242 --- /dev/null +++ b/app/controllers/admin/education/schools/cohorts_controller.rb @@ -0,0 +1,21 @@ +class Admin::Education::Schools::CohortsController < Admin::Education::Schools::ApplicationController + load_and_authorize_resource class: Education::Cohort, through: :school, through_association: :education_cohorts + + include Admin::Localizable + + def index + @filtered = @cohorts + @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) + .ordered + .page(params[:page]) + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb Education::Cohort.model_name.human(count: 2) + end + +end diff --git a/app/controllers/admin/education/schools_controller.rb b/app/controllers/admin/education/schools_controller.rb index c91e532b0d..015b5e6e42 100644 --- a/app/controllers/admin/education/schools_controller.rb +++ b/app/controllers/admin/education/schools_controller.rb @@ -20,6 +20,8 @@ def show @roles = @school.university_roles.ordered(current_language) @websites = @school.websites.ordered(current_language) @locations = @school.locations.ordered(current_language) + @cohorts = @school.cohorts.ordered(current_language) + .page(params[:cohorts_page]).per(5) breadcrumb end diff --git a/app/views/admin/education/cohorts/_list.html.erb b/app/views/admin/education/cohorts/_list.html.erb index fa6d1f766c..527e921765 100644 --- a/app/views/admin/education/cohorts/_list.html.erb +++ b/app/views/admin/education/cohorts/_list.html.erb @@ -1,4 +1,5 @@ -
+<% hide_school ||= false %> +
<% cohorts.ordered.each do |cohort| %>
@@ -24,9 +25,11 @@ <%= cohort.year %> <% end %>
-
- <%= cohort.school.to_s_in(current_language) %> -
+ <% unless hide_school %> +
+ <%= cohort.school.to_s_in(current_language) %> +
+ <% end %>
@@ -59,4 +71,4 @@ <% content_for :server_admin_only do %> <%= static_link static_admin_education_school_path(@school) %> <%= render 'admin/communication/websites/git_files/list', git_files: @l10n.git_files %> -<% end %> +<% end %> diff --git a/config/routes/admin/education.rb b/config/routes/admin/education.rb index f028ead5d7..e28818b53a 100644 --- a/config/routes/admin/education.rb +++ b/config/routes/admin/education.rb @@ -64,6 +64,7 @@ post :reorder end end + resources :cohorts, controller: 'schools/cohorts', only: :index member do get :static post :restore From 3e0ecb68f30e27d79c40175b97c28e641999984a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Thu, 11 Jun 2026 17:06:59 +0200 Subject: [PATCH 02/14] list cohorts in program --- .../admin/education/cohorts_controller.rb | 4 ++-- .../education/programs/cohorts_controller.rb | 21 +++++++++++++++++++ .../education/programs/parts_controller.rb | 6 ------ .../admin/education/cohorts/_list.html.erb | 2 +- .../education/programs/cohorts/index.html.erb | 9 ++++++++ .../education/programs/parts/alumni.html.erb | 3 --- .../admin/education/program_navigation.rb | 21 +++++++++++-------- config/routes/admin/education.rb | 2 +- 8 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 app/controllers/admin/education/programs/cohorts_controller.rb create mode 100644 app/views/admin/education/programs/cohorts/index.html.erb delete mode 100644 app/views/admin/education/programs/parts/alumni.html.erb diff --git a/app/controllers/admin/education/cohorts_controller.rb b/app/controllers/admin/education/cohorts_controller.rb index f2289754db..6f2108b9aa 100644 --- a/app/controllers/admin/education/cohorts_controller.rb +++ b/app/controllers/admin/education/cohorts_controller.rb @@ -23,8 +23,8 @@ def destroy program = @cohort.program label = @cohort.to_s_in(current_language) @cohort.destroy - redirect_to alumni_admin_education_program_path(program), - notice: t('admin.successfully_destroyed_html', model: label) + redirect_back fallback_location: admin_education_program_cohorts_path(program), + notice: t('admin.successfully_destroyed_html', model: label) end def restore diff --git a/app/controllers/admin/education/programs/cohorts_controller.rb b/app/controllers/admin/education/programs/cohorts_controller.rb new file mode 100644 index 0000000000..6876d82bee --- /dev/null +++ b/app/controllers/admin/education/programs/cohorts_controller.rb @@ -0,0 +1,21 @@ +class Admin::Education::Programs::CohortsController < Admin::Education::Programs::ApplicationController + load_and_authorize_resource class: Education::Cohort, through: :program, through_association: :education_cohorts + + include Admin::Localizable + + def index + @filtered = @cohorts + @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) + .ordered + .page(params[:page]) + breadcrumb + end + + protected + + def breadcrumb + super + add_breadcrumb Education::Cohort.model_name.human(count: 2) + end + +end diff --git a/app/controllers/admin/education/programs/parts_controller.rb b/app/controllers/admin/education/programs/parts_controller.rb index f61245b18b..408c4bfa4f 100644 --- a/app/controllers/admin/education/programs/parts_controller.rb +++ b/app/controllers/admin/education/programs/parts_controller.rb @@ -47,12 +47,6 @@ def certification_edit add_breadcrumb t('edit') end - def alumni - @cohorts = @program.cohorts.ordered - breadcrumb - add_breadcrumb University::Person::Alumnus.model_name.human(count: 2) - end - protected def authorize_resource diff --git a/app/views/admin/education/cohorts/_list.html.erb b/app/views/admin/education/cohorts/_list.html.erb index 527e921765..f731179ab0 100644 --- a/app/views/admin/education/cohorts/_list.html.erb +++ b/app/views/admin/education/cohorts/_list.html.erb @@ -20,7 +20,7 @@
- <%= link_to [:admin, cohort] do %> + <%= link_to [:admin, cohort, { school_id: nil, program_id: nil }] do %> <%= cohort.program.to_s_in(current_language) %> <%= cohort.year %> <% end %> diff --git a/app/views/admin/education/programs/cohorts/index.html.erb b/app/views/admin/education/programs/cohorts/index.html.erb new file mode 100644 index 0000000000..d116385863 --- /dev/null +++ b/app/views/admin/education/programs/cohorts/index.html.erb @@ -0,0 +1,9 @@ +<% content_for :title, Education::Cohort.model_name.human(count: 2) %> + +
+ <%= render 'admin/application/components/lifecycle/pills', + path_method: :admin_education_program_cohorts_path %> +
+<%= render 'admin/application/components/lifecycle/label' %> + +<%= render 'admin/education/cohorts/list', cohorts: @cohorts %> diff --git a/app/views/admin/education/programs/parts/alumni.html.erb b/app/views/admin/education/programs/parts/alumni.html.erb deleted file mode 100644 index 5d6ea6da47..0000000000 --- a/app/views/admin/education/programs/parts/alumni.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, @l10n %> - -<%= render 'admin/education/cohorts/list', cohorts: @cohorts %> diff --git a/config/navigation/admin/education/program_navigation.rb b/config/navigation/admin/education/program_navigation.rb index 3d0ee5f3d6..a2ee175f48 100644 --- a/config/navigation/admin/education/program_navigation.rb +++ b/config/navigation/admin/education/program_navigation.rb @@ -6,22 +6,25 @@ navigation.items do |primary| primary.item :subnav_summary, - t('admin.subnav.summary'), + t('admin.subnav.summary'), admin_education_program_path(id: @program, program_id: nil), - highlights_on: lambda { - controller_name == "programs" && action_name == "show" + highlights_on: lambda { + controller_name == "programs" && action_name == "show" } if can?(:read, @program) primary.item :subnav_pedagogy, - t('education.program.parts.pedagogy.label'), + t('education.program.parts.pedagogy.label'), pedagogy_admin_education_program_path(id: @program, program_id: nil) primary.item :subnav_admission, - t('education.program.parts.admission.label'), + t('education.program.parts.admission.label'), admission_admin_education_program_path(id: @program, program_id: nil) primary.item :subnav_certification, - t('education.program.parts.certification.label'), + t('education.program.parts.certification.label'), certification_admin_education_program_path(id: @program, program_id: nil) - primary.item :subnav_alumni, - University::Person::Alumnus.model_name.human(count: 2), - alumni_admin_education_program_path(id: @program, program_id: nil) if @program.cohorts.any? + primary.item :subnav_cohorts, + Education::Cohort.model_name.human(count: 2), + admin_education_program_cohorts_path(@program), + highlights_on: lambda { + controller_name == "cohorts" && action_name == "index" + } if @program.cohorts.any? end end diff --git a/config/routes/admin/education.rb b/config/routes/admin/education.rb index e28818b53a..87b1017050 100644 --- a/config/routes/admin/education.rb +++ b/config/routes/admin/education.rb @@ -29,6 +29,7 @@ end end resources :teachers, controller: 'programs/teachers', only: :destroy + resources :cohorts, controller: 'programs/cohorts', only: :index collection do resources :categories, controller: 'programs/categories', as: 'program_categories' do collection do @@ -48,7 +49,6 @@ get 'admission/edit' => 'programs/parts#admission_edit', as: :edit_admission get 'certification' => 'programs/parts#certification', as: :certification get 'certification/edit' => 'programs/parts#certification_edit', as: :edit_certification - get 'alumni' => 'programs/parts#alumni', as: :alumni get :children get :preview get :static From 6402c66d0fd432b715ac859fc897634b72a5c0df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Mon, 22 Jun 2026 12:14:31 +0200 Subject: [PATCH 03/14] add filters --- .../admin/education/cohorts_controller.rb | 2 +- .../education/programs/cohorts_controller.rb | 2 +- .../education/schools/cohorts_controller.rb | 2 +- app/models/education/cohort.rb | 3 +++ .../admin/education/cohorts/_filters.html.erb | 21 +++++++++++++++++++ .../admin/education/cohorts/index.html.erb | 2 ++ .../programs/cohorts/_filters.html.erb | 13 ++++++++++++ .../education/programs/cohorts/index.html.erb | 1 + .../schools/cohorts/_filters.html.erb | 13 ++++++++++++ .../education/schools/cohorts/index.html.erb | 1 + 10 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 app/views/admin/education/cohorts/_filters.html.erb create mode 100644 app/views/admin/education/programs/cohorts/_filters.html.erb create mode 100644 app/views/admin/education/schools/cohorts/_filters.html.erb diff --git a/app/controllers/admin/education/cohorts_controller.rb b/app/controllers/admin/education/cohorts_controller.rb index 6f2108b9aa..54170b1c2e 100644 --- a/app/controllers/admin/education/cohorts_controller.rb +++ b/app/controllers/admin/education/cohorts_controller.rb @@ -8,7 +8,7 @@ class Admin::Education::CohortsController < Admin::Education::ApplicationControl include Admin::Localizable def index - @filtered = @cohorts + @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered .page(params[:page]) diff --git a/app/controllers/admin/education/programs/cohorts_controller.rb b/app/controllers/admin/education/programs/cohorts_controller.rb index 6876d82bee..05482f41ef 100644 --- a/app/controllers/admin/education/programs/cohorts_controller.rb +++ b/app/controllers/admin/education/programs/cohorts_controller.rb @@ -4,7 +4,7 @@ class Admin::Education::Programs::CohortsController < Admin::Education::Programs include Admin::Localizable def index - @filtered = @cohorts + @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered .page(params[:page]) diff --git a/app/controllers/admin/education/schools/cohorts_controller.rb b/app/controllers/admin/education/schools/cohorts_controller.rb index 6889fb7242..931e5ac5e3 100644 --- a/app/controllers/admin/education/schools/cohorts_controller.rb +++ b/app/controllers/admin/education/schools/cohorts_controller.rb @@ -4,7 +4,7 @@ class Admin::Education::Schools::CohortsController < Admin::Education::Schools:: include Admin::Localizable def index - @filtered = @cohorts + @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered .page(params[:page]) diff --git a/app/models/education/cohort.rb b/app/models/education/cohort.rb index 2c5f36142f..642282f2b8 100644 --- a/app/models/education/cohort.rb +++ b/app/models/education/cohort.rb @@ -30,6 +30,7 @@ class Education::Cohort < ApplicationRecord acts_as_paranoid include AsIndirectObject + include Filterable include GeneratesGitFiles include Lifecyclable include Localizable @@ -60,6 +61,8 @@ class Education::Cohort < ApplicationRecord after_create_commit :create_localizations + scope :for_school, -> (school_id, language = nil) { where(school_id: school_id) } + scope :for_program, -> (program_id, language = nil) { where(program_id: program_id) } scope :ordered, -> (language = nil) { includes(:academic_year).order('education_academic_years.year DESC') } diff --git a/app/views/admin/education/cohorts/_filters.html.erb b/app/views/admin/education/cohorts/_filters.html.erb new file mode 100644 index 0000000000..ae20447076 --- /dev/null +++ b/app/views/admin/education/cohorts/_filters.html.erb @@ -0,0 +1,21 @@ +<%= simple_form_for :filters, url: current_path, method: :get do |f| %> + <%= filters_panel current_path: current_path, active_filters_count: active_filters_count do |form| %> + + <%= render_filter f, + :select, + :for_school, + label: t('filters.attributes.element', element: Education::School.model_name.human.downcase), + collection: osuny_collection(current_university.education_schools, localized: true), + multiple: true + %> + + <%= render_filter f, + :select, + :for_program, + label: t('filters.attributes.element', element: Education::Program.model_name.human.downcase), + collection: osuny_collection(current_university.education_programs, localized: true), + multiple: true + %> + + <% end %> +<% end %> diff --git a/app/views/admin/education/cohorts/index.html.erb b/app/views/admin/education/cohorts/index.html.erb index f9664fa5a0..4093d4fff2 100644 --- a/app/views/admin/education/cohorts/index.html.erb +++ b/app/views/admin/education/cohorts/index.html.erb @@ -3,6 +3,8 @@
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_cohorts_path %> + + <%= render 'filters', current_path: admin_education_cohorts_path %>
<%= render 'admin/application/components/lifecycle/label' %> diff --git a/app/views/admin/education/programs/cohorts/_filters.html.erb b/app/views/admin/education/programs/cohorts/_filters.html.erb new file mode 100644 index 0000000000..ce9f401097 --- /dev/null +++ b/app/views/admin/education/programs/cohorts/_filters.html.erb @@ -0,0 +1,13 @@ +<%= simple_form_for :filters, url: current_path, method: :get do |f| %> + <%= filters_panel current_path: current_path, active_filters_count: active_filters_count do |form| %> + + <%= render_filter f, + :select, + :for_school, + label: t('filters.attributes.element', element: Education::School.model_name.human.downcase), + collection: osuny_collection(@program.schools, localized: true), + multiple: true + %> + + <% end %> +<% end %> diff --git a/app/views/admin/education/programs/cohorts/index.html.erb b/app/views/admin/education/programs/cohorts/index.html.erb index d116385863..ac866dc389 100644 --- a/app/views/admin/education/programs/cohorts/index.html.erb +++ b/app/views/admin/education/programs/cohorts/index.html.erb @@ -3,6 +3,7 @@
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_program_cohorts_path %> + <%= render 'filters', current_path: admin_education_program_cohorts_path(program_id: @program.id) %>
<%= render 'admin/application/components/lifecycle/label' %> diff --git a/app/views/admin/education/schools/cohorts/_filters.html.erb b/app/views/admin/education/schools/cohorts/_filters.html.erb new file mode 100644 index 0000000000..76682989e7 --- /dev/null +++ b/app/views/admin/education/schools/cohorts/_filters.html.erb @@ -0,0 +1,13 @@ +<%= simple_form_for :filters, url: current_path, method: :get do |f| %> + <%= filters_panel current_path: current_path, active_filters_count: active_filters_count do |form| %> + + <%= render_filter f, + :select, + :for_program, + label: t('filters.attributes.element', element: Education::Program.model_name.human.downcase), + collection: osuny_collection(@school.programs, localized: true), + multiple: true + %> + + <% end %> +<% end %> diff --git a/app/views/admin/education/schools/cohorts/index.html.erb b/app/views/admin/education/schools/cohorts/index.html.erb index 15545ef28a..56ee744ee0 100644 --- a/app/views/admin/education/schools/cohorts/index.html.erb +++ b/app/views/admin/education/schools/cohorts/index.html.erb @@ -3,6 +3,7 @@
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_school_cohorts_path %> + <%= render 'filters', current_path: admin_education_school_cohorts_path(school_id: @school.id) %>
<%= render 'admin/application/components/lifecycle/label' %> From a13370d93f88034bcf0ade6bc10e3fc2d56bcd70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Mon, 22 Jun 2026 15:22:58 +0200 Subject: [PATCH 04/14] WIP export --- .../admin/administration/alumni_controller.rb | 14 ++- app/models/university/person.rb | 13 +++ .../administration/alumni/index.html.erb | 7 +- .../administration/alumni/index.xlsx.axlsx | 109 ++++++++++++++++++ config/locales/en.yml | 3 +- config/locales/fr.yml | 3 +- 6 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 app/views/admin/administration/alumni/index.xlsx.axlsx diff --git a/app/controllers/admin/administration/alumni_controller.rb b/app/controllers/admin/administration/alumni_controller.rb index 51701de5bb..0ffe171c8d 100644 --- a/app/controllers/admin/administration/alumni_controller.rb +++ b/app/controllers/admin/administration/alumni_controller.rb @@ -9,8 +9,18 @@ def index @alumni = @alumni.filter_by(params[:filters], current_language) .alumni .ordered(current_language) - .page(params[:page]) - breadcrumb + respond_to do |format| + format.html { + @alumni = @alumni.page(params[:page]) + breadcrumb + } + format.xlsx { + @alumni = @alumni.includes(:cohorts) + filename = "alumni-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" + response.headers['Content-Disposition'] = "attachment; filename=#{filename}" + } + format.csv + end end def show diff --git a/app/models/university/person.rb b/app/models/university/person.rb index b467a4b474..f46d3ec6bf 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -188,6 +188,19 @@ def to_s_alphabetical_in(language) best_localization_for(language).to_s_alphabetical end + def xlsx_gender + case gender + when 'male' + 'm' + when 'female' + 'f' + when 'non_binary' + 'n' + else + nil + end + end + protected def blocks_mentioning_self diff --git a/app/views/admin/administration/alumni/index.html.erb b/app/views/admin/administration/alumni/index.html.erb index da64bbaca6..e6441b46df 100644 --- a/app/views/admin/administration/alumni/index.html.erb +++ b/app/views/admin/administration/alumni/index.html.erb @@ -12,7 +12,12 @@ <%= paginate @alumni %> <% content_for :title_right do %> + <%= button_advanced do %> + <%= link_to t('export'), + request.params.merge(format: "xlsx"), + class: button_classes %> + <% end %> <%= link_to t('university.alumni.cohorts.import_btn'), new_admin_administration_alumni_cohorts_import_path, class: button_classes if can? :create, University::Person::Alumnus %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/administration/alumni/index.xlsx.axlsx b/app/views/admin/administration/alumni/index.xlsx.axlsx new file mode 100644 index 0000000000..38c6213ac5 --- /dev/null +++ b/app/views/admin/administration/alumni/index.xlsx.axlsx @@ -0,0 +1,109 @@ +wb = xlsx_package.workbook +wb.add_worksheet(name: "index") do |sheet| + columns = [ + University::Person::Localization.human_attribute_name(:first_name), + University::Person::Localization.human_attribute_name(:last_name), + University::Person.human_attribute_name(:gender), + + University::Person.human_attribute_name(:birthdate), + University::Person.human_attribute_name(:email), + University::Person.human_attribute_name(:picture), + University::Person::Localization.human_attribute_name(:url), + + University::Person.human_attribute_name(:phone_professional), + University::Person.human_attribute_name(:phone_personal), + University::Person.human_attribute_name(:phone_mobile), + + University::Person.human_attribute_name(:address), + University::Person.human_attribute_name(:zipcode), + University::Person.human_attribute_name(:city), + University::Person.human_attribute_name(:country), + + University::Person::Localization.human_attribute_name(:biography), + + University::Person::Localization.human_attribute_name(:twitter), + University::Person::Localization.human_attribute_name(:linkedin), + University::Person::Localization.human_attribute_name(:mastodon), + + University::Person.human_attribute_name(:categories), + + Education::School.model_name.human, + Education::Program.model_name.human, + Education::AcademicYear.model_name.human + ] + + types = [ + :string, + :string, + :string, + + nil, + :string, + :string, + :string, + + :string, + :string, + :string, + + :string, + :string, + :string, + :string, + + :string, + + :string, + :string, + :string, + + :string, + + :string, + :string, + :string + ] + + sheet.add_row columns, types: Array.new(types.length) { |_| :string } + + @alumni.each do |alumnus| + alumnus_l10n = alumnus.best_localization_for(current_language) + alumnus_infos = [ + alumnus_l10n.first_name, + alumnus_l10n.last_name, + alumnus.xlsx_gender, + + alumnus.birthdate, + alumnus.email, + alumnus.picture.url, + alumnus_l10n.url, + + alumnus.phone_professional, + alumnus.phone_personal, + alumnus.phone_mobile, + + alumnus.address, + alumnus.zipcode, + alumnus.city, + alumnus.country, + + alumnus_l10n.biography, + + alumnus_l10n.twitter, + alumnus_l10n.linkedin, + alumnus_l10n.mastodon, + + alumnus.categories.map { |category| category.to_s_in(current_language) }.join('|') + ] + alumnus.cohorts.each do |cohort| + infos = [ + *alumnus_infos, + cohort.school.to_s_in(current_language), + cohort.program.to_s_in(current_language), + cohort.academic_year.to_s_in(current_language) + ] + + sheet.add_row infos, types: types + end + end +end diff --git a/config/locales/en.yml b/config/locales/en.yml index 69f63efdd5..774217d2f1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -167,7 +167,7 @@ en: meta_description: hint: Plain text without HTML, dedicated to Search Engine Optimization (SEO). label: Meta description - move: + move: cta: Move description: "Move this item to another website you manage:" permission_denied: You cannot move this item. @@ -423,6 +423,7 @@ en: finished_with_errors: Finished with errors pending: Pending export: Export (xlsx) + export_csv: Exporter (csv) false: No featured_image: alt: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 5e3cec3226..b2b15fc45e 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -167,7 +167,7 @@ fr: meta_description: hint: Texte simple, dédié au à l'optimisation pour les moteurs de recherche (Search Engine Optimization, SEO). label: Description pour les moteurs de recherche (meta) - move: + move: cta: Déplacer description: "Déplacez cet élément vers un autre site web que vous gérez :" permission_denied: Vous ne pouvez pas déplacer cet élément. @@ -424,6 +424,7 @@ fr: finished_with_errors: Traité avec des erreurs pending: En cours de traitement export: Exporter (xlsx) + export_csv: Exporter (csv) false: Non featured_image: alt: From 66ef9bd552cb22d581397c2ee49b9cd021d9ec3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Thu, 25 Jun 2026 10:12:24 +0200 Subject: [PATCH 05/14] cohorts: excel exports --- .../admin/education/cohorts_controller.rb | 13 ++- .../education/programs/cohorts_controller.rb | 14 ++- .../education/schools/cohorts_controller.rb | 14 ++- .../administration/alumni/index.html.erb | 22 ++-- .../admin/education/cohorts/index.html.erb | 8 ++ .../admin/education/cohorts/index.xlsx.axlsx | 107 ++++++++++++++++++ .../education/programs/cohorts/index.html.erb | 8 ++ .../education/schools/cohorts/index.html.erb | 8 ++ 8 files changed, 177 insertions(+), 17 deletions(-) create mode 100644 app/views/admin/education/cohorts/index.xlsx.axlsx diff --git a/app/controllers/admin/education/cohorts_controller.rb b/app/controllers/admin/education/cohorts_controller.rb index 54170b1c2e..a8d22a62e8 100644 --- a/app/controllers/admin/education/cohorts_controller.rb +++ b/app/controllers/admin/education/cohorts_controller.rb @@ -11,8 +11,17 @@ def index @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered - .page(params[:page]) - breadcrumb + + respond_to do |format| + format.html { + @cohorts = @cohorts.page(params[:page]) + breadcrumb + } + format.xlsx { + filename = "cohorts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" + response.headers['Content-Disposition'] = "attachment; filename=#{filename}" + } + end end def show diff --git a/app/controllers/admin/education/programs/cohorts_controller.rb b/app/controllers/admin/education/programs/cohorts_controller.rb index 05482f41ef..5a5ea2ef06 100644 --- a/app/controllers/admin/education/programs/cohorts_controller.rb +++ b/app/controllers/admin/education/programs/cohorts_controller.rb @@ -7,8 +7,18 @@ def index @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered - .page(params[:page]) - breadcrumb + + respond_to do |format| + format.html { + @cohorts = @cohorts.page(params[:page]) + breadcrumb + } + format.xlsx { + filename = "cohorts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" + response.headers['Content-Disposition'] = "attachment; filename=#{filename}" + render "admin/education/cohorts/index" + } + end end protected diff --git a/app/controllers/admin/education/schools/cohorts_controller.rb b/app/controllers/admin/education/schools/cohorts_controller.rb index 931e5ac5e3..bd5607c7f8 100644 --- a/app/controllers/admin/education/schools/cohorts_controller.rb +++ b/app/controllers/admin/education/schools/cohorts_controller.rb @@ -7,8 +7,18 @@ def index @filtered = @cohorts.filter_by(params[:filters], current_language) @cohorts = @filtered.at_lifecycle(params[:lifecycle], current_language) .ordered - .page(params[:page]) - breadcrumb + + respond_to do |format| + format.html { + @cohorts = @cohorts.page(params[:page]) + breadcrumb + } + format.xlsx { + filename = "cohorts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" + response.headers['Content-Disposition'] = "attachment; filename=#{filename}" + render "admin/education/cohorts/index" + } + end end protected diff --git a/app/views/admin/administration/alumni/index.html.erb b/app/views/admin/administration/alumni/index.html.erb index e6441b46df..ecfd95f387 100644 --- a/app/views/admin/administration/alumni/index.html.erb +++ b/app/views/admin/administration/alumni/index.html.erb @@ -1,16 +1,5 @@ <% content_for :title, University::Person::Alumnus.model_name.human(count: 2) %> -
-

- <%= @alumni.total_count %> - <%= University::Person::Alumnus.model_name.human(count: @alumni.total_count).downcase %> -

- <%= render 'filters', current_path: admin_administration_alumni_path %> -
- -<%= render 'admin/administration/alumni/list', alumni: @alumni %> -<%= paginate @alumni %> - <% content_for :title_right do %> <%= button_advanced do %> <%= link_to t('export'), @@ -21,3 +10,14 @@ new_admin_administration_alumni_cohorts_import_path, class: button_classes if can? :create, University::Person::Alumnus %> <% end %> + +
+

+ <%= @alumni.total_count %> + <%= University::Person::Alumnus.model_name.human(count: @alumni.total_count).downcase %> +

+ <%= render 'filters', current_path: admin_administration_alumni_path %> +
+ +<%= render 'admin/administration/alumni/list', alumni: @alumni %> +<%= paginate @alumni %> diff --git a/app/views/admin/education/cohorts/index.html.erb b/app/views/admin/education/cohorts/index.html.erb index 4093d4fff2..7746ba7293 100644 --- a/app/views/admin/education/cohorts/index.html.erb +++ b/app/views/admin/education/cohorts/index.html.erb @@ -1,5 +1,13 @@ <% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title_right do %> + <%= button_advanced do %> + <%= link_to t('export'), + request.params.merge(format: "xlsx"), + class: button_classes %> + <% end %> +<% end %> +
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_cohorts_path %> diff --git a/app/views/admin/education/cohorts/index.xlsx.axlsx b/app/views/admin/education/cohorts/index.xlsx.axlsx new file mode 100644 index 0000000000..e2c076efdf --- /dev/null +++ b/app/views/admin/education/cohorts/index.xlsx.axlsx @@ -0,0 +1,107 @@ +wb = xlsx_package.workbook +wb.add_worksheet(name: "index") do |sheet| + columns = [ + University::Person::Localization.human_attribute_name(:first_name), + University::Person::Localization.human_attribute_name(:last_name), + University::Person.human_attribute_name(:gender), + + University::Person.human_attribute_name(:birthdate), + University::Person.human_attribute_name(:email), + University::Person.human_attribute_name(:picture), + University::Person::Localization.human_attribute_name(:url), + + University::Person.human_attribute_name(:phone_professional), + University::Person.human_attribute_name(:phone_personal), + University::Person.human_attribute_name(:phone_mobile), + + University::Person.human_attribute_name(:address), + University::Person.human_attribute_name(:zipcode), + University::Person.human_attribute_name(:city), + University::Person.human_attribute_name(:country), + + University::Person::Localization.human_attribute_name(:biography), + + University::Person::Localization.human_attribute_name(:twitter), + University::Person::Localization.human_attribute_name(:linkedin), + University::Person::Localization.human_attribute_name(:mastodon), + + University::Person.human_attribute_name(:categories), + + Education::School.model_name.human, + Education::Program.model_name.human, + Education::AcademicYear.model_name.human + ] + + types = [ + :string, + :string, + :string, + + nil, + :string, + :string, + :string, + + :string, + :string, + :string, + + :string, + :string, + :string, + :string, + + :string, + + :string, + :string, + :string, + + :string, + + :string, + :string, + :string + ] + + sheet.add_row columns, types: Array.new(types.length) { |_| :string } + + @cohorts.each do |cohort| + cohort.people.each do |alumnus| + alumnus_l10n = alumnus.best_localization_for(current_language) + infos = [ + alumnus_l10n.first_name, + alumnus_l10n.last_name, + alumnus.xlsx_gender, + + alumnus.birthdate, + alumnus.email, + alumnus.picture.url, + alumnus_l10n.url, + + alumnus.phone_professional, + alumnus.phone_personal, + alumnus.phone_mobile, + + alumnus.address, + alumnus.zipcode, + alumnus.city, + alumnus.country, + + alumnus_l10n.biography, + + alumnus_l10n.twitter, + alumnus_l10n.linkedin, + alumnus_l10n.mastodon, + + alumnus.categories.map { |category| category.to_s_in(current_language) }.join('|'), + + cohort.school.to_s_in(current_language), + cohort.program.to_s_in(current_language), + cohort.academic_year.to_s_in(current_language) + ] + + sheet.add_row infos, types: types + end + end +end diff --git a/app/views/admin/education/programs/cohorts/index.html.erb b/app/views/admin/education/programs/cohorts/index.html.erb index ac866dc389..aa5120f404 100644 --- a/app/views/admin/education/programs/cohorts/index.html.erb +++ b/app/views/admin/education/programs/cohorts/index.html.erb @@ -1,5 +1,13 @@ <% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title_right do %> + <%= button_advanced do %> + <%= link_to t('export'), + request.params.merge(format: "xlsx"), + class: button_classes %> + <% end %> +<% end %> +
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_program_cohorts_path %> diff --git a/app/views/admin/education/schools/cohorts/index.html.erb b/app/views/admin/education/schools/cohorts/index.html.erb index 56ee744ee0..d142e454b2 100644 --- a/app/views/admin/education/schools/cohorts/index.html.erb +++ b/app/views/admin/education/schools/cohorts/index.html.erb @@ -1,5 +1,13 @@ <% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title_right do %> + <%= button_advanced do %> + <%= link_to t('export'), + request.params.merge(format: "xlsx"), + class: button_classes %> + <% end %> +<% end %> +
<%= render 'admin/application/components/lifecycle/pills', path_method: :admin_education_school_cohorts_path %> From 83a0e5d26a2b54e9370b8b45b79ec40f1edb9496 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 10:30:35 +0200 Subject: [PATCH 06/14] Ajout de la navigation --- app/models/education.rb | 1 + config/locales/education/en.yml | 3 +++ config/locales/education/fr.yml | 3 +++ config/navigation/admin/education_navigation.rb | 3 +++ 4 files changed, 10 insertions(+) diff --git a/app/models/education.rb b/app/models/education.rb index 73af716ca4..769b2a7e09 100644 --- a/app/models/education.rb +++ b/app/models/education.rb @@ -12,6 +12,7 @@ def self.parts [Education::School, :admin_education_schools_path], [Education::Diploma, :admin_education_diplomas_path], [Education::Program, :admin_education_programs_path], + [Education::Cohort, :admin_education_cohorts_path], ] end end diff --git a/config/locales/education/en.yml b/config/locales/education/en.yml index 9fc37bd020..100f1e41d7 100644 --- a/config/locales/education/en.yml +++ b/config/locales/education/en.yml @@ -138,6 +138,9 @@ en: education: description: parts: + cohort: + description: Presentation of the cohorts of alumni + title: Cohorts diploma: description: Presentation of diplomas and their characteristics title: Diplomas diff --git a/config/locales/education/fr.yml b/config/locales/education/fr.yml index 0d9e8736d5..134b185f34 100644 --- a/config/locales/education/fr.yml +++ b/config/locales/education/fr.yml @@ -138,6 +138,9 @@ fr: education: description: parts: + cohort: + description: Présentation des promotions d'alumni + title: Promotions diploma: description: Présentation des diplômes et de leurs caractéristiques title: Diplômes diff --git a/config/navigation/admin/education_navigation.rb b/config/navigation/admin/education_navigation.rb index 7fecf68508..86f74815a1 100644 --- a/config/navigation/admin/education_navigation.rb +++ b/config/navigation/admin/education_navigation.rb @@ -23,5 +23,8 @@ primary.item :subnav_programs, t('education.description.parts.program.title'), admin_education_programs_path + primary.item :subnav_cohorts, + t('education.description.parts.cohort.title'), + admin_education_cohorts_path end end From acd2e8833c8521f0366711f97d7ab0595e829546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Gaya?= Date: Thu, 25 Jun 2026 14:06:23 +0200 Subject: [PATCH 07/14] Moved Cohorts & Academic Years in Administration realm --- .../academic_years_controller.rb | 10 +- .../alumni/cohorts_controller.rb | 2 +- .../cohorts_controller.rb | 16 +- .../education/programs/cohorts_controller.rb | 6 +- .../education/schools/cohorts_controller.rb | 6 +- .../alumni/academic_years_controller.rb | 6 +- .../extranet/alumni/cohorts_controller.rb | 8 +- app/controllers/extranet/home_controller.rb | 2 +- app/controllers/extranet/pages_controller.rb | 4 +- .../truly_destroy_soft_deleted_records_job.rb | 8 +- app/models/ability/admin.rb | 4 +- app/models/ability/alumni_manager.rb | 4 +- app/models/administration.rb | 1 + .../academic_year.rb | 20 +- .../academic_year/localization.rb | 18 +- .../{education => administration}/cohort.rb | 24 +- .../cohort/facets.rb | 4 +- .../cohort/localization.rb | 16 +- ...ear.rb => administration_academic_year.rb} | 2 +- .../website/page/with_special_page.rb | 4 +- .../website/permalink/academic_year.rb | 2 +- .../communication/website/permalink/cohort.rb | 2 +- .../website/permalink/with_mapping.rb | 4 +- .../website/with_feature_alumni.rb | 8 +- app/models/education.rb | 3 +- app/models/education/program/with_alumni.rb | 28 +- app/models/education/school/with_alumni.rb | 14 +- .../university/person/alumnus/facets.rb | 2 +- app/models/university/person/with_alumnus.rb | 18 +- app/models/university/with_administration.rb | 10 + app/models/university/with_education.rb | 10 - app/services/importers/hash_to_cohort.rb | 2 +- .../academic_years/_list.html.erb | 4 +- .../academic_years/index.html.erb | 3 + .../academic_years/show.html.erb | 8 +- .../academic_years/static.html.erb | 0 .../administration/alumni/_filters.html.erb | 4 +- .../administration/alumni/_list.html.erb | 4 +- .../administration/alumni/index.xlsx.axlsx | 2 +- .../cohorts/_filters.html.erb | 0 .../cohorts/_list.html.erb | 2 +- .../cohorts/index.html.erb | 8 +- .../cohorts/index.xlsx.axlsx | 2 +- .../cohorts/show.html.erb | 10 +- .../cohorts/static.html.erb | 0 .../extranets/alumni/index.html.erb | 6 +- ...=> _administration_academic_year.html.erb} | 4 +- ...=> _administration_academic_year.html.erb} | 0 .../education/academic_years/index.html.erb | 3 - .../education/programs/cohorts/index.html.erb | 4 +- .../education/schools/cohorts/index.html.erb | 4 +- .../admin/education/schools/show.html.erb | 4 +- .../alumni/academic_years/index.html.erb | 6 +- .../alumni/academic_years/show.html.erb | 2 +- .../extranet/alumni/cohorts/index.html.erb | 6 +- .../alumni/persons/show/_cohorts.html.erb | 2 +- config/locales/administration/en.yml | 18 +- config/locales/administration/fr.yml | 18 +- config/locales/communication/en.yml | 16 +- config/locales/communication/fr.yml | 16 +- config/locales/education/en.yml | 16 -- config/locales/education/fr.yml | 16 -- .../admin/administration_navigation.rb | 13 +- .../admin/education/program_navigation.rb | 2 +- .../navigation/admin/education_navigation.rb | 3 - config/navigation/extranet_navigation.rb | 10 +- config/routes/admin/administration.rb | 11 + config/routes/admin/education.rb | 11 - config/routes/extranet.rb | 8 +- ...ohorts_from_education_to_administration.rb | 65 +++++ ..._years_from_education_to_administration.rb | 71 +++++ db/schema.rb | 260 +++++++++--------- .../alumni/academic_years_controller_test.rb | 4 +- .../alumni/cohorts_controller_test.rb | 4 +- .../{education => administration}/cohorts.yml | 0 75 files changed, 527 insertions(+), 391 deletions(-) rename app/controllers/admin/{education => administration}/academic_years_controller.rb (78%) rename app/controllers/admin/{education => administration}/cohorts_controller.rb (67%) rename app/models/{education => administration}/academic_year.rb (76%) rename app/models/{education => administration}/academic_year/localization.rb (66%) rename app/models/{education => administration}/cohort.rb (71%) rename app/models/{education => administration}/cohort/facets.rb (79%) rename app/models/{education => administration}/cohort/localization.rb (73%) rename app/models/communication/website/page/{education_academic_year.rb => administration_academic_year.rb} (79%) rename app/views/admin/{education => administration}/academic_years/_list.html.erb (77%) create mode 100644 app/views/admin/administration/academic_years/index.html.erb rename app/views/admin/{education => administration}/academic_years/show.html.erb (63%) rename app/views/admin/{education => administration}/academic_years/static.html.erb (100%) rename app/views/admin/{education => administration}/cohorts/_filters.html.erb (100%) rename app/views/admin/{education => administration}/cohorts/_list.html.erb (95%) rename app/views/admin/{education => administration}/cohorts/index.html.erb (57%) rename app/views/admin/{education => administration}/cohorts/index.xlsx.axlsx (98%) rename app/views/admin/{education => administration}/cohorts/show.html.erb (76%) rename app/views/admin/{education => administration}/cohorts/static.html.erb (100%) rename app/views/admin/communication/websites/pages/show/special_pages/{_education_academic_year.html.erb => _administration_academic_year.html.erb} (72%) rename app/views/admin/communication/websites/pages/static/special_pages/{_education_academic_year.html.erb => _administration_academic_year.html.erb} (100%) delete mode 100644 app/views/admin/education/academic_years/index.html.erb create mode 100644 db/migrate/20260625085319_move_cohorts_from_education_to_administration.rb create mode 100644 db/migrate/20260625100524_move_academic_years_from_education_to_administration.rb rename test/fixtures/{education => administration}/cohorts.yml (100%) diff --git a/app/controllers/admin/education/academic_years_controller.rb b/app/controllers/admin/administration/academic_years_controller.rb similarity index 78% rename from app/controllers/admin/education/academic_years_controller.rb rename to app/controllers/admin/administration/academic_years_controller.rb index 0b86570ea7..0cc37a47dd 100644 --- a/app/controllers/admin/education/academic_years_controller.rb +++ b/app/controllers/admin/administration/academic_years_controller.rb @@ -1,5 +1,5 @@ -class Admin::Education::AcademicYearsController < Admin::Education::ApplicationController - load_and_authorize_resource class: Education::AcademicYear, +class Admin::Administration::AcademicYearsController < Admin::Education::ApplicationController + load_and_authorize_resource class: Administration::AcademicYear, through: :current_university, through_association: :academic_years include Admin::HasStaticAction @@ -44,7 +44,7 @@ def update def destroy @academic_year.destroy - redirect_to education_academic_years_url, + redirect_to administration_academic_years_url, notice: t('admin.successfully_destroyed_html', model: @academic_year.to_s) end @@ -52,12 +52,12 @@ def destroy def breadcrumb super - add_breadcrumb Education::AcademicYear.model_name.human(count: 2), admin_education_academic_years_path + add_breadcrumb Administration::AcademicYear.model_name.human(count: 2), admin_administration_academic_years_path breadcrumb_for @academic_year end def academic_year_params - params.require(:education_academic_year) + params.require(:administration_academic_year) .permit(:year) .merge( university_id: current_university.id diff --git a/app/controllers/admin/administration/alumni/cohorts_controller.rb b/app/controllers/admin/administration/alumni/cohorts_controller.rb index ac3e411343..1cd8b4d084 100644 --- a/app/controllers/admin/administration/alumni/cohorts_controller.rb +++ b/app/controllers/admin/administration/alumni/cohorts_controller.rb @@ -24,7 +24,7 @@ def breadcrumb super add_breadcrumb University::Person::Alumnus.model_name.human(count: 2), admin_administration_alumni_path add_breadcrumb @alumnus.to_s_in(current_language), admin_administration_alumnus_path(@alumnus) - add_breadcrumb Education::Cohort.model_name.human(count: 2) + add_breadcrumb Administration::Cohort.model_name.human(count: 2) end def cohorts_params diff --git a/app/controllers/admin/education/cohorts_controller.rb b/app/controllers/admin/administration/cohorts_controller.rb similarity index 67% rename from app/controllers/admin/education/cohorts_controller.rb rename to app/controllers/admin/administration/cohorts_controller.rb index a8d22a62e8..f5e902a0f5 100644 --- a/app/controllers/admin/education/cohorts_controller.rb +++ b/app/controllers/admin/administration/cohorts_controller.rb @@ -1,7 +1,7 @@ -class Admin::Education::CohortsController < Admin::Education::ApplicationController - load_and_authorize_resource class: Education::Cohort, +class Admin::Administration::CohortsController < Admin::Administration::ApplicationController + load_and_authorize_resource class: Administration::Cohort, through: :current_university, - through_association: :education_cohorts, + through_association: :administration_cohorts, except: :restore include Admin::HasStaticAction @@ -32,15 +32,15 @@ def destroy program = @cohort.program label = @cohort.to_s_in(current_language) @cohort.destroy - redirect_back fallback_location: admin_education_program_cohorts_path(program), + redirect_back fallback_location: admin_administration_program_cohorts_path(program), notice: t('admin.successfully_destroyed_html', model: label) end def restore - @cohort = current_university.education_cohorts.only_deleted.find(params[:id]) + @cohort = current_university.administration_cohorts.only_deleted.find(params[:id]) authorize!(:restore, @cohort) @cohort.restore(recursive: true) - redirect_to admin_education_cohort_path(@cohort), + redirect_to admin_administration_cohort_path(@cohort), notice: t('admin.successfully_restored_html', model: @cohort.to_s_in(current_language)) end @@ -48,12 +48,12 @@ def restore def breadcrumb super - add_breadcrumb Education::Cohort.model_name.human(count: 2), admin_education_cohorts_path + add_breadcrumb Administration::Cohort.model_name.human(count: 2), admin_administration_cohorts_path breadcrumb_for @cohort end def cohort_params - params.require(:education_cohort) + params.require(:administration_cohort) .permit(:program_id, :academic_year_id, :name) end end diff --git a/app/controllers/admin/education/programs/cohorts_controller.rb b/app/controllers/admin/education/programs/cohorts_controller.rb index 5a5ea2ef06..6ede24b6c2 100644 --- a/app/controllers/admin/education/programs/cohorts_controller.rb +++ b/app/controllers/admin/education/programs/cohorts_controller.rb @@ -1,5 +1,5 @@ class Admin::Education::Programs::CohortsController < Admin::Education::Programs::ApplicationController - load_and_authorize_resource class: Education::Cohort, through: :program, through_association: :education_cohorts + load_and_authorize_resource class: Administration::Cohort, through: :program, through_association: :administration_cohorts include Admin::Localizable @@ -16,7 +16,7 @@ def index format.xlsx { filename = "cohorts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" response.headers['Content-Disposition'] = "attachment; filename=#{filename}" - render "admin/education/cohorts/index" + render "admin/administration/cohorts/index" } end end @@ -25,7 +25,7 @@ def index def breadcrumb super - add_breadcrumb Education::Cohort.model_name.human(count: 2) + add_breadcrumb Administration::Cohort.model_name.human(count: 2) end end diff --git a/app/controllers/admin/education/schools/cohorts_controller.rb b/app/controllers/admin/education/schools/cohorts_controller.rb index bd5607c7f8..968d57aecb 100644 --- a/app/controllers/admin/education/schools/cohorts_controller.rb +++ b/app/controllers/admin/education/schools/cohorts_controller.rb @@ -1,5 +1,5 @@ class Admin::Education::Schools::CohortsController < Admin::Education::Schools::ApplicationController - load_and_authorize_resource class: Education::Cohort, through: :school, through_association: :education_cohorts + load_and_authorize_resource class: Administration::Cohort, through: :school, through_association: :administration_cohorts include Admin::Localizable @@ -16,7 +16,7 @@ def index format.xlsx { filename = "cohorts-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" response.headers['Content-Disposition'] = "attachment; filename=#{filename}" - render "admin/education/cohorts/index" + render "admin/administration/cohorts/index" } end end @@ -25,7 +25,7 @@ def index def breadcrumb super - add_breadcrumb Education::Cohort.model_name.human(count: 2) + add_breadcrumb Administration::Cohort.model_name.human(count: 2) end end diff --git a/app/controllers/extranet/alumni/academic_years_controller.rb b/app/controllers/extranet/alumni/academic_years_controller.rb index dfc6331077..b456bd212f 100644 --- a/app/controllers/extranet/alumni/academic_years_controller.rb +++ b/app/controllers/extranet/alumni/academic_years_controller.rb @@ -1,6 +1,6 @@ class Extranet::Alumni::AcademicYearsController < Extranet::Alumni::ApplicationController def index - @academic_years = current_extranet.about.education_academic_years + @academic_years = current_extranet.about.administration_academic_years .ordered(current_language) .page(params[:page]) @count = @academic_years.total_count @@ -8,7 +8,7 @@ def index end def show - @academic_year = current_extranet.about.education_academic_years + @academic_year = current_extranet.about.administration_academic_years .find(params[:id]) @cohorts = @academic_year.cohorts_in_context(current_extranet.about) .ordered(current_language) @@ -24,6 +24,6 @@ def show def breadcrumb super - add_breadcrumb Education::AcademicYear.model_name.human(count: 2), alumni_education_academic_years_path + add_breadcrumb Administration::AcademicYear.model_name.human(count: 2), alumni_administration_academic_years_path end end diff --git a/app/controllers/extranet/alumni/cohorts_controller.rb b/app/controllers/extranet/alumni/cohorts_controller.rb index ead5aec236..cfb2435708 100644 --- a/app/controllers/extranet/alumni/cohorts_controller.rb +++ b/app/controllers/extranet/alumni/cohorts_controller.rb @@ -1,7 +1,7 @@ class Extranet::Alumni::CohortsController < Extranet::Alumni::ApplicationController def index - @facets = Education::Cohort::Facets.new params[:facets], { - model: current_extranet.about.education_cohorts, + @facets = Administration::Cohort::Facets.new params[:facets], { + model: current_extranet.about.administration_cohorts, about: current_extranet.about, language: current_language } @@ -14,7 +14,7 @@ def index end def show - @cohort = current_extranet.about.education_cohorts + @cohort = current_extranet.about.administration_cohorts .find(params[:id]) @l10n = @cohort.best_localization_for(current_language) @people = @cohort.people @@ -29,6 +29,6 @@ def show def breadcrumb super - add_breadcrumb Education::Cohort.model_name.human(count: 2), alumni_education_cohorts_path + add_breadcrumb Administration::Cohort.model_name.human(count: 2), alumni_administration_cohorts_path end end diff --git a/app/controllers/extranet/home_controller.rb b/app/controllers/extranet/home_controller.rb index 0cbe6bdec5..0ce4e9222a 100644 --- a/app/controllers/extranet/home_controller.rb +++ b/app/controllers/extranet/home_controller.rb @@ -20,7 +20,7 @@ def load_posts_variables end def load_alumni_variables - @cohorts = current_extranet.about.education_cohorts + @cohorts = current_extranet.about.administration_cohorts .ordered(current_language) .limit(5) @experiences = current_extranet.about.university_person_experiences diff --git a/app/controllers/extranet/pages_controller.rb b/app/controllers/extranet/pages_controller.rb index 3f1f8bd043..e48426732a 100644 --- a/app/controllers/extranet/pages_controller.rb +++ b/app/controllers/extranet/pages_controller.rb @@ -22,8 +22,8 @@ def data if current_extranet.has_feature?(:alumni) @metrics.concat [ { value: current_extranet.alumni.count, name: University::Person::Alumnus.model_name.human(count: 2) }, - { value: current_extranet.academic_years.count, name: Education::AcademicYear.model_name.human(count: 2) }, - { value: current_extranet.cohorts.count, name: Education::Cohort.model_name.human(count: 2) }, + { value: current_extranet.academic_years.count, name: Administration::AcademicYear.model_name.human(count: 2) }, + { value: current_extranet.cohorts.count, name: Administration::Cohort.model_name.human(count: 2) }, { value: current_extranet.about.university_person_alumni_organizations.count, name: University::Organization.model_name.human(count: 2) } ] end diff --git a/app/jobs/truly_destroy_soft_deleted_records_job.rb b/app/jobs/truly_destroy_soft_deleted_records_job.rb index 5ac5cbf463..d1c0308c3f 100644 --- a/app/jobs/truly_destroy_soft_deleted_records_job.rb +++ b/app/jobs/truly_destroy_soft_deleted_records_job.rb @@ -22,13 +22,13 @@ class TrulyDestroySoftDeletedRecordsJob < ApplicationJob Communication::Website::Portfolio::Project, Communication::Website::Portfolio::Project::Localization, Communication::Website::Post::Localization, - Education::AcademicYear, - Education::Cohort, + Administration::AcademicYear, + Administration::Cohort, Education::Diploma, Education::Program, Education::School, - Education::AcademicYear::Localization, - Education::Cohort::Localization, + Administration::AcademicYear::Localization, + Administration::Cohort::Localization, Education::Diploma::Localization, Education::Program::Localization, Education::School::Localization, diff --git a/app/models/ability/admin.rb b/app/models/ability/admin.rb index 7873d3949a..09324cd1f4 100644 --- a/app/models/ability/admin.rb +++ b/app/models/ability/admin.rb @@ -30,8 +30,8 @@ def admin_education # Necessaire pour l'affichage des tableaux de bord # https://github.com/osunyorg/admin/pull/2491 can :manage, University::Person::Localization::Teacher - can :manage, Education::AcademicYear, university_id: @user.university_id - can :manage, Education::Cohort, university_id: @user.university_id + can :manage, Administration::AcademicYear, university_id: @user.university_id + can :manage, Administration::Cohort, university_id: @user.university_id can :manage, Education::Diploma, university_id: @user.university_id can :manage, Education::Program, university_id: @user.university_id can :manage, Education::Program::Category, university_id: @user.university_id diff --git a/app/models/ability/alumni_manager.rb b/app/models/ability/alumni_manager.rb index b318050c33..5b8639bb08 100644 --- a/app/models/ability/alumni_manager.rb +++ b/app/models/ability/alumni_manager.rb @@ -12,8 +12,8 @@ def initialize(user) can :manage, Education::Program, university_id: @user.university_id can :manage, Education::Program::Category, university_id: @user.university_id can :manage, Education::School, university_id: @user.university_id - can :manage, Education::AcademicYear, university_id: @user.university_id - can :manage, Education::Cohort, university_id: @user.university_id + can :manage, Administration::AcademicYear, university_id: @user.university_id + can :manage, Administration::Cohort, university_id: @user.university_id end protected diff --git a/app/models/administration.rb b/app/models/administration.rb index d8e3012dc8..c69cde4c52 100644 --- a/app/models/administration.rb +++ b/app/models/administration.rb @@ -9,6 +9,7 @@ def self.table_name_prefix def self.parts [ [University::Person::Alumnus, :admin_administration_alumni_path], + [Administration::Cohort, :admin_administration_cohorts_path], [Administration::Location, :admin_administration_locations_path], [Administration::Qualiopi, :admin_administration_qualiopi_criterions_path], ] diff --git a/app/models/education/academic_year.rb b/app/models/administration/academic_year.rb similarity index 76% rename from app/models/education/academic_year.rb rename to app/models/administration/academic_year.rb index 74838d5303..af285094f9 100644 --- a/app/models/education/academic_year.rb +++ b/app/models/administration/academic_year.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: education_academic_years +# Table name: administration_academic_years # # id :uuid not null, primary key # deleted_at :datetime @@ -11,15 +11,15 @@ # # Indexes # -# index_education_academic_years_on_university_id (university_id) +# index_administration_academic_years_on_university_id (university_id) # # Foreign Keys # # fk_rails_7d376afe35 (university_id => universities.id) # -class Education::AcademicYear < ApplicationRecord +class Administration::AcademicYear < ApplicationRecord acts_as_paranoid - + include AsIndirectObject include GeneratesGitFiles include Localizable @@ -28,18 +28,18 @@ class Education::AcademicYear < ApplicationRecord include Searchable include WithUniversity - has_many :education_cohorts, - class_name: 'Education::Cohort' - alias_method :cohorts, :education_cohorts + has_many :administration_cohorts, + class_name: 'Administration::Cohort' + alias_method :cohorts, :administration_cohorts # Dénormalisation des alumni pour le faceted search has_and_belongs_to_many :university_people, class_name: 'University::Person', - foreign_key: :education_academic_year_id, + foreign_key: :administration_academic_year_id, association_foreign_key: :university_person_id has_many :people, class_name: 'University::Person', - through: :education_cohorts + through: :administration_cohorts validates :year, numericality: { only_integer: true, greater_than: 0 } @@ -48,7 +48,7 @@ class Education::AcademicYear < ApplicationRecord scope :ordered, -> (language = nil) { order(year: :desc) } def cohorts_in_context(context) - return Education::Cohort.none unless context.respond_to?(:cohorts) + return Administration::Cohort.none unless context.respond_to?(:cohorts) cohorts.where(id: context.cohorts.pluck(:id)) end diff --git a/app/models/education/academic_year/localization.rb b/app/models/administration/academic_year/localization.rb similarity index 66% rename from app/models/education/academic_year/localization.rb rename to app/models/administration/academic_year/localization.rb index c041eb103d..cda67e726c 100644 --- a/app/models/education/academic_year/localization.rb +++ b/app/models/administration/academic_year/localization.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: education_academic_year_localizations +# Table name: administration_academic_year_localizations # # id :uuid not null, primary key # deleted_at :datetime @@ -13,20 +13,20 @@ # # Indexes # -# idx_on_about_id_language_id_eb13d82b8d (about_id,language_id) UNIQUE -# index_education_academic_year_localizations_on_about_id (about_id) -# index_education_academic_year_localizations_on_language_id (language_id) -# index_education_academic_year_localizations_on_university_id (university_id) +# idx_on_about_id_language_id_7962406d05 (about_id,language_id) UNIQUE +# idx_on_language_id_a52fb1a1c1 (language_id) +# idx_on_university_id_31eabbc7a7 (university_id) +# index_administration_academic_year_localizations_on_about_id (about_id) # # Foreign Keys # -# fk_rails_7f53226466 (about_id => education_academic_years.id) +# fk_rails_7f53226466 (about_id => administration_academic_years.id) # fk_rails_8eb490c1ee (language_id => languages.id) # fk_rails_9de9d01008 (university_id => universities.id) # -class Education::AcademicYear::Localization < ApplicationRecord +class Administration::AcademicYear::Localization < ApplicationRecord acts_as_paranoid - + include AsLocalization include HasGitFiles include Initials @@ -42,7 +42,7 @@ def git_path_relative end def template_static - "admin/education/academic_years/static" + "admin/administration/academic_years/static" end def to_s diff --git a/app/models/education/cohort.rb b/app/models/administration/cohort.rb similarity index 71% rename from app/models/education/cohort.rb rename to app/models/administration/cohort.rb index 642282f2b8..844f9eebed 100644 --- a/app/models/education/cohort.rb +++ b/app/models/administration/cohort.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: education_cohorts +# Table name: administration_cohorts # # id :uuid not null, primary key # deleted_at :datetime @@ -14,19 +14,19 @@ # # Indexes # -# index_education_cohorts_on_academic_year_id (academic_year_id) -# index_education_cohorts_on_program_id (program_id) -# index_education_cohorts_on_school_id (school_id) -# index_education_cohorts_on_university_id (university_id) +# index_administration_cohorts_on_academic_year_id (academic_year_id) +# index_administration_cohorts_on_program_id (program_id) +# index_administration_cohorts_on_school_id (school_id) +# index_administration_cohorts_on_university_id (university_id) # # Foreign Keys # # fk_rails_0f4a4f43d9 (university_id => universities.id) # fk_rails_72528c3d76 (program_id => education_programs.id) # fk_rails_8545767e2d (school_id => education_schools.id) -# fk_rails_c2d725cabd (academic_year_id => education_academic_years.id) +# fk_rails_c2d725cabd (academic_year_id => administration_academic_years.id) # -class Education::Cohort < ApplicationRecord +class Administration::Cohort < ApplicationRecord acts_as_paranoid include AsIndirectObject @@ -48,12 +48,12 @@ class Education::Cohort < ApplicationRecord alias_method :education_program, :program belongs_to :academic_year, - class_name: 'Education::AcademicYear' - alias_method :education_academic_year, :academic_year + class_name: 'Administration::AcademicYear' + alias_method :administration_academic_year, :academic_year has_and_belongs_to_many :people, class_name: 'University::Person', - foreign_key: :education_cohort_id, + foreign_key: :administration_cohort_id, association_foreign_key: :university_person_id validates_associated :school, :academic_year, :program @@ -64,7 +64,7 @@ class Education::Cohort < ApplicationRecord scope :for_school, -> (school_id, language = nil) { where(school_id: school_id) } scope :for_program, -> (program_id, language = nil) { where(program_id: program_id) } scope :ordered, -> (language = nil) { - includes(:academic_year).order('education_academic_years.year DESC') + includes(:academic_year).order('administration_academic_years.year DESC') } def year @@ -72,7 +72,7 @@ def year end def year=(value) - self.academic_year = Education::AcademicYear.where(university_id: university_id, year: value).first_or_create + self.academic_year = Administration::AcademicYear.where(university_id: university_id, year: value).first_or_create end def dependencies diff --git a/app/models/education/cohort/facets.rb b/app/models/administration/cohort/facets.rb similarity index 79% rename from app/models/education/cohort/facets.rb rename to app/models/administration/cohort/facets.rb index 02896e87b6..6e4c6f37d5 100644 --- a/app/models/education/cohort/facets.rb +++ b/app/models/administration/cohort/facets.rb @@ -1,4 +1,4 @@ -class Education::Cohort::Facets < FacetedSearch::Facets +class Administration::Cohort::Facets < FacetedSearch::Facets def initialize(params, options) super params @@ -8,7 +8,7 @@ def initialize(params, options) filter_with_list :academic_year_id, { source: @about.academic_years.ordered, - title: Education::AcademicYear.model_name.human(count: 2) + title: Administration::AcademicYear.model_name.human(count: 2) } filter_with_checkboxes :program_id, { diff --git a/app/models/education/cohort/localization.rb b/app/models/administration/cohort/localization.rb similarity index 73% rename from app/models/education/cohort/localization.rb rename to app/models/administration/cohort/localization.rb index cfe4ecd71f..1ecc39232c 100644 --- a/app/models/education/cohort/localization.rb +++ b/app/models/administration/cohort/localization.rb @@ -1,6 +1,6 @@ # == Schema Information # -# Table name: education_cohort_localizations +# Table name: administration_cohort_localizations # # id :uuid not null, primary key # deleted_at :datetime @@ -13,18 +13,18 @@ # # Indexes # -# idx_on_about_id_language_id_a0a453655b (about_id,language_id) UNIQUE -# index_education_cohort_localizations_on_about_id (about_id) -# index_education_cohort_localizations_on_language_id (language_id) -# index_education_cohort_localizations_on_university_id (university_id) +# idx_on_about_id_language_id_ae60ea28b0 (about_id,language_id) UNIQUE +# index_administration_cohort_localizations_on_about_id (about_id) +# index_administration_cohort_localizations_on_language_id (language_id) +# index_administration_cohort_localizations_on_university_id (university_id) # # Foreign Keys # # fk_rails_2e862cbf91 (university_id => universities.id) -# fk_rails_57e968eb32 (about_id => education_cohorts.id) +# fk_rails_57e968eb32 (about_id => administration_cohorts.id) # fk_rails_5dc9fc7693 (language_id => languages.id) # -class Education::Cohort::Localization < ApplicationRecord +class Administration::Cohort::Localization < ApplicationRecord acts_as_paranoid include AsLocalization @@ -53,7 +53,7 @@ def git_path_relative end def template_static - "admin/education/cohorts/static" + "admin/administration/cohorts/static" end # Example: IUT de Bordeaux > Formations > BUT > Génie biologique > Agronomie > 2024 diff --git a/app/models/communication/website/page/education_academic_year.rb b/app/models/communication/website/page/administration_academic_year.rb similarity index 79% rename from app/models/communication/website/page/education_academic_year.rb rename to app/models/communication/website/page/administration_academic_year.rb index 8edd350f80..49cfb18608 100644 --- a/app/models/communication/website/page/education_academic_year.rb +++ b/app/models/communication/website/page/administration_academic_year.rb @@ -1,4 +1,4 @@ -class Communication::Website::Page::EducationAcademicYear < Communication::Website::Page +class Communication::Website::Page::AdministrationAcademicYear < Communication::Website::Page def is_hugo_index? true diff --git a/app/models/communication/website/page/with_special_page.rb b/app/models/communication/website/page/with_special_page.rb index 7bfdb13e6e..236b89ce00 100644 --- a/app/models/communication/website/page/with_special_page.rb +++ b/app/models/communication/website/page/with_special_page.rb @@ -20,7 +20,6 @@ module Communication::Website::Page::WithSpecialPage Communication::Website::Page::EducationSchool, Communication::Website::Page::EducationDiploma, Communication::Website::Page::EducationProgram, - Communication::Website::Page::EducationAcademicYear, # Research Communication::Website::Page::ResearchJournal, Communication::Website::Page::ResearchLaboratory, @@ -28,6 +27,7 @@ module Communication::Website::Page::WithSpecialPage Communication::Website::Page::ResearchPaper, Communication::Website::Page::ResearchPublication, # Administration + Communication::Website::Page::AdministrationAcademicYear, Communication::Website::Page::AdministrationLocation, # People facets Communication::Website::Page::Administrator, @@ -126,7 +126,7 @@ def create_missing_localizations! def default_parent website.special_page(Communication::Website::Page::Home) end - + protected diff --git a/app/models/communication/website/permalink/academic_year.rb b/app/models/communication/website/permalink/academic_year.rb index 6455e1aadb..7f9d59aae0 100644 --- a/app/models/communication/website/permalink/academic_year.rb +++ b/app/models/communication/website/permalink/academic_year.rb @@ -39,7 +39,7 @@ def self.pattern_in_website(website, language, about = nil) end def self.special_page_type - Communication::Website::Page::EducationAcademicYear + Communication::Website::Page::AdministrationAcademicYear end protected diff --git a/app/models/communication/website/permalink/cohort.rb b/app/models/communication/website/permalink/cohort.rb index b5783d11fe..e85fc5a51c 100644 --- a/app/models/communication/website/permalink/cohort.rb +++ b/app/models/communication/website/permalink/cohort.rb @@ -39,7 +39,7 @@ def self.pattern_in_website(website, language, about = nil) end def self.special_page_type - Communication::Website::Page::EducationAcademicYear + Communication::Website::Page::AdministrationAcademicYear end protected diff --git a/app/models/communication/website/permalink/with_mapping.rb b/app/models/communication/website/permalink/with_mapping.rb index d4d4c2944e..1c621c76fa 100644 --- a/app/models/communication/website/permalink/with_mapping.rb +++ b/app/models/communication/website/permalink/with_mapping.rb @@ -3,6 +3,8 @@ module Communication::Website::Permalink::WithMapping included do MAPPING = { + "Administration::AcademicYear::Localization" => Communication::Website::Permalink::AcademicYear, + "Administration::Cohort::Localization" => Communication::Website::Permalink::Cohort, "Administration::Location::Localization" => Communication::Website::Permalink::Location, "Communication::Website::Agenda::Event::Day" => Communication::Website::Permalink::Agenda::Event::Day, "Communication::Website::Agenda::Event::Localization" => Communication::Website::Permalink::Agenda::Event, @@ -19,8 +21,6 @@ module Communication::Website::Permalink::WithMapping "Communication::Website::Portfolio::Category::Localization" => Communication::Website::Permalink::Portfolio::Category, "Communication::Website::Post::Localization" => Communication::Website::Permalink::Post, "Communication::Website::Post::Category::Localization" => Communication::Website::Permalink::Category, - "Education::AcademicYear::Localization" => Communication::Website::Permalink::AcademicYear, - "Education::Cohort::Localization" => Communication::Website::Permalink::Cohort, "Education::Diploma::Localization" => Communication::Website::Permalink::Diploma, "Education::Program::Category::Localization" => Communication::Website::Permalink::Program::Category, "Education::Program::Localization" => Communication::Website::Permalink::Program, diff --git a/app/models/communication/website/with_feature_alumni.rb b/app/models/communication/website/with_feature_alumni.rb index da34a3832d..5057038807 100644 --- a/app/models/communication/website/with_feature_alumni.rb +++ b/app/models/communication/website/with_feature_alumni.rb @@ -10,21 +10,21 @@ def alumni end def cohorts - has_alumni? ? about.cohorts : Education::Cohort.none + has_alumni? ? about.cohorts : Administration::Cohort.none end def alumni_programs return Education::Program.none unless has_alumni? program_ids = education_programs - .joins(:education_cohorts) - .where(education_cohorts: { id: cohorts.pluck(:id) }) + .joins(:administration_cohorts) + .where(administration_cohorts: { id: cohorts.pluck(:id) }) .distinct .pluck(:id) education_programs.where(id: program_ids) end def academic_years - has_alumni? ? about.academic_years : Education::AcademicYear.none + has_alumni? ? about.academic_years : Administration::AcademicYear.none end def has_alumni? diff --git a/app/models/education.rb b/app/models/education.rb index 769b2a7e09..b15483d002 100644 --- a/app/models/education.rb +++ b/app/models/education.rb @@ -11,8 +11,7 @@ def self.parts [University::Person::Localization::Teacher, :admin_education_teachers_path], [Education::School, :admin_education_schools_path], [Education::Diploma, :admin_education_diplomas_path], - [Education::Program, :admin_education_programs_path], - [Education::Cohort, :admin_education_cohorts_path], + [Education::Program, :admin_education_programs_path] ] end end diff --git a/app/models/education/program/with_alumni.rb b/app/models/education/program/with_alumni.rb index fda5372e42..8bb5bef259 100644 --- a/app/models/education/program/with_alumni.rb +++ b/app/models/education/program/with_alumni.rb @@ -2,12 +2,12 @@ module Education::Program::WithAlumni extend ActiveSupport::Concern included do - has_many :education_cohorts, - class_name: 'Education::Cohort' - alias_method :cohorts, :education_cohorts + has_many :administration_cohorts, + class_name: 'Administration::Cohort' + alias_method :cohorts, :administration_cohorts has_many :alumni, - through: :education_cohorts, + through: :administration_cohorts, source: :people alias_method :university_person_alumni, :alumni @@ -29,21 +29,21 @@ module Education::Program::WithAlumni association_foreign_key: :university_person_id # NOTE: Find a fix for wrong table name on WHERE clause - # SELECT "education_academic_years".* - # FROM "education_academic_years" - # INNER JOIN "education_cohorts" - # ON "education_academic_years"."id" = "education_cohorts"."academic_year_id" + # SELECT "administration_academic_years".* + # FROM "administration_academic_years" + # INNER JOIN "administration_cohorts" + # ON "administration_academic_years"."id" = "administration_cohorts"."academic_year_id" # WHERE "cohorts"."program_id" = '' # # has_many :academic_years, - # class_name: 'Education::AcademicYear', - # through: :education_cohorts, - # source: :education_academic_year - # alias_method :education_academic_years, :academic_years + # class_name: 'Administration::AcademicYear', + # through: :administration_cohorts, + # source: :administration_academic_year + # alias_method :administration_academic_years, :academic_years def academic_years - Education::AcademicYear.where(id: education_cohorts.pluck(:academic_year_id)) + Administration::AcademicYear.where(id: administration_cohorts.pluck(:academic_year_id)) end - alias :education_academic_years :academic_years + alias :administration_academic_years :academic_years end end diff --git a/app/models/education/school/with_alumni.rb b/app/models/education/school/with_alumni.rb index ceca3e2ffc..c854fa9fb4 100644 --- a/app/models/education/school/with_alumni.rb +++ b/app/models/education/school/with_alumni.rb @@ -3,13 +3,13 @@ module Education::School::WithAlumni included do - has_many :education_cohorts, - class_name: 'Education::Cohort', + has_many :administration_cohorts, + class_name: 'Administration::Cohort', dependent: :destroy - alias_method :cohorts, :education_cohorts + alias_method :cohorts, :administration_cohorts has_many :alumni, -> { distinct }, - through: :education_cohorts, + through: :administration_cohorts, source: :people alias_method :university_person_alumni, :alumni @@ -26,10 +26,10 @@ module Education::School::WithAlumni alias_method :university_person_alumni_organizations, :alumni_organizations has_many :academic_years, -> { distinct }, - class_name: 'Education::AcademicYear', - through: :education_cohorts, + class_name: 'Administration::AcademicYear', + through: :administration_cohorts, source: :academic_year - alias_method :education_academic_years, :academic_years + alias_method :administration_academic_years, :academic_years end end diff --git a/app/models/university/person/alumnus/facets.rb b/app/models/university/person/alumnus/facets.rb index e05072f478..749f78f789 100644 --- a/app/models/university/person/alumnus/facets.rb +++ b/app/models/university/person/alumnus/facets.rb @@ -24,7 +24,7 @@ def add_name def add_years filter_with_list :diploma_years, { source: @about.academic_years.ordered, - title: Education::AcademicYear.model_name.human(count: 2), + title: Administration::AcademicYear.model_name.human(count: 2), habtm: true } end diff --git a/app/models/university/person/with_alumnus.rb b/app/models/university/person/with_alumnus.rb index 512de3d0bb..f73ff4e40c 100644 --- a/app/models/university/person/with_alumnus.rb +++ b/app/models/university/person/with_alumnus.rb @@ -3,9 +3,9 @@ module University::Person::WithAlumnus included do has_and_belongs_to_many :cohorts, - class_name: '::Education::Cohort', + class_name: '::Administration::Cohort', foreign_key: :university_person_id, - association_foreign_key: :education_cohort_id + association_foreign_key: :administration_cohort_id accepts_nested_attributes_for :cohorts, reject_if: :all_blank, allow_destroy: true @@ -14,9 +14,9 @@ module University::Person::WithAlumnus # Dénormalisation des liens via cohorts, pour la recherche par facettes has_and_belongs_to_many :diploma_years, - class_name: 'Education::AcademicYear', + class_name: 'Administration::AcademicYear', foreign_key: :university_person_id, - association_foreign_key: :education_academic_year_id + association_foreign_key: :administration_academic_year_id has_and_belongs_to_many :diploma_programs, class_name: 'Education::Program', @@ -42,13 +42,13 @@ module University::Person::WithAlumnus scope :for_alumni_program, -> (program_ids, language = nil) { left_joins(:cohorts) - .where(education_cohorts: { program_id: program_ids }) + .where(administration_cohorts: { program_id: program_ids }) .select("university_people.*") .distinct } scope :for_alumni_year, -> (academic_year_ids, language = nil) { left_joins(:cohorts) - .where(education_cohorts: { academic_year_id: academic_year_ids }) + .where(administration_cohorts: { academic_year_id: academic_year_ids }) .select("university_people.*") .distinct } @@ -71,10 +71,10 @@ def find_cohorts private def find_cohort_for_nested(object) - academic_year = Education::AcademicYear.where(university_id: university_id, year: object.year).first_or_create - cohort = Education::Cohort.where(university_id: university_id, school_id: object.school_id, program_id: object.program_id, academic_year_id: academic_year.id).first_or_initialize + academic_year = Administration::AcademicYear.where(university_id: university_id, year: object.year).first_or_create + cohort = Administration::Cohort.where(university_id: university_id, school_id: object.school_id, program_id: object.program_id, academic_year_id: academic_year.id).first_or_initialize return unless cohort.valid? cohort.save if cohort.new_record? cohort.reload end -end \ No newline at end of file +end diff --git a/app/models/university/with_administration.rb b/app/models/university/with_administration.rb index c19afd3608..97bab6fd2f 100644 --- a/app/models/university/with_administration.rb +++ b/app/models/university/with_administration.rb @@ -6,5 +6,15 @@ module University::WithAdministration class_name: 'Administration::Location', dependent: :destroy alias_method :locations, :administration_locations + + has_many :administration_academic_years, + class_name: 'Administration::AcademicYear', + dependent: :destroy + alias_method :academic_years, :administration_academic_years + + has_many :administration_cohorts, + class_name: 'Administration::Cohort', + dependent: :destroy + alias_method :cohorts, :administration_cohorts end end diff --git a/app/models/university/with_education.rb b/app/models/university/with_education.rb index 6725a8b548..7d6e83c43b 100644 --- a/app/models/university/with_education.rb +++ b/app/models/university/with_education.rb @@ -2,11 +2,6 @@ module University::WithEducation extend ActiveSupport::Concern included do - has_many :education_cohorts, - class_name: 'Education::Cohort', - dependent: :destroy - alias_method :cohorts, :education_cohorts - has_many :education_diplomas, class_name: 'Education::Diploma', dependent: :destroy @@ -26,10 +21,5 @@ module University::WithEducation class_name: 'Education::School', dependent: :destroy alias_method :schools, :education_schools - - has_many :education_academic_years, - class_name: 'Education::AcademicYear', - dependent: :destroy - alias_method :academic_years, :education_academic_years end end diff --git a/app/services/importers/hash_to_cohort.rb b/app/services/importers/hash_to_cohort.rb index ac11709297..7e428bee53 100644 --- a/app/services/importers/hash_to_cohort.rb +++ b/app/services/importers/hash_to_cohort.rb @@ -64,7 +64,7 @@ def academic_year end def cohort - @cohort ||= @university.education_cohorts + @cohort ||= @university.administration_cohorts .where(school: school, program: program, academic_year: academic_year) .first_or_create end diff --git a/app/views/admin/education/academic_years/_list.html.erb b/app/views/admin/administration/academic_years/_list.html.erb similarity index 77% rename from app/views/admin/education/academic_years/_list.html.erb rename to app/views/admin/administration/academic_years/_list.html.erb index 87a40625c2..1428a90543 100644 --- a/app/views/admin/education/academic_years/_list.html.erb +++ b/app/views/admin/administration/academic_years/_list.html.erb @@ -2,8 +2,8 @@ - - + + diff --git a/app/views/admin/administration/academic_years/index.html.erb b/app/views/admin/administration/academic_years/index.html.erb new file mode 100644 index 0000000000..5f33eda108 --- /dev/null +++ b/app/views/admin/administration/academic_years/index.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, Administration::AcademicYear.model_name.human(count: 2) %> + +<%= render 'admin/administration/academic_years/list', academic_years: @academic_years %> diff --git a/app/views/admin/education/academic_years/show.html.erb b/app/views/admin/administration/academic_years/show.html.erb similarity index 63% rename from app/views/admin/education/academic_years/show.html.erb rename to app/views/admin/administration/academic_years/show.html.erb index 2b7a3e4dce..b97ed99344 100644 --- a/app/views/admin/education/academic_years/show.html.erb +++ b/app/views/admin/administration/academic_years/show.html.erb @@ -1,8 +1,8 @@ <% content_for :title, @l10n %> <% if @academic_year.cohorts.any? %> -

<%= Education::Cohort.model_name.human(count: 2) %>

- <%= render 'admin/education/cohorts/list', cohorts: @cohorts %> +

<%= Administration::Cohort.model_name.human(count: 2) %>

+ <%= render 'admin/administration/cohorts/list', cohorts: @cohorts %> <% end %> <% if @academic_year.people.any? %> @@ -11,6 +11,6 @@ <% end %> <% content_for :server_admin_only do %> - <%= static_link static_admin_education_academic_year_path(@academic_year) %> + <%= static_link static_admin_administration_academic_year_path(@academic_year) %> <%= render 'admin/communication/websites/git_files/list', git_files: @l10n.git_files %> -<% end %> +<% end %> diff --git a/app/views/admin/education/academic_years/static.html.erb b/app/views/admin/administration/academic_years/static.html.erb similarity index 100% rename from app/views/admin/education/academic_years/static.html.erb rename to app/views/admin/administration/academic_years/static.html.erb diff --git a/app/views/admin/administration/alumni/_filters.html.erb b/app/views/admin/administration/alumni/_filters.html.erb index de06204c04..c79501eb8d 100644 --- a/app/views/admin/administration/alumni/_filters.html.erb +++ b/app/views/admin/administration/alumni/_filters.html.erb @@ -26,10 +26,10 @@ <%= render_filter f, :select, :for_alumni_year, - label: t('filters.attributes.element', element: Education::AcademicYear.model_name.human.downcase), + label: t('filters.attributes.element', element: Administration::AcademicYear.model_name.human.downcase), collection: current_university.academic_years.ordered(current_language), multiple: true %> <% end %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/administration/alumni/_list.html.erb b/app/views/admin/administration/alumni/_list.html.erb index 42301ad0a0..4bd8fe2001 100644 --- a/app/views/admin/administration/alumni/_list.html.erb +++ b/app/views/admin/administration/alumni/_list.html.erb @@ -12,11 +12,11 @@ <% if person.cohorts.any? %>

<%= person.cohorts.size %> - <%= Education::Cohort.model_name.human(count: person.cohorts.size).downcase %> + <%= Administration::Cohort.model_name.human(count: person.cohorts.size).downcase %>

<% end %> <% end %> - \ No newline at end of file + diff --git a/app/views/admin/administration/alumni/index.xlsx.axlsx b/app/views/admin/administration/alumni/index.xlsx.axlsx index 38c6213ac5..f51d045683 100644 --- a/app/views/admin/administration/alumni/index.xlsx.axlsx +++ b/app/views/admin/administration/alumni/index.xlsx.axlsx @@ -29,7 +29,7 @@ wb.add_worksheet(name: "index") do |sheet| Education::School.model_name.human, Education::Program.model_name.human, - Education::AcademicYear.model_name.human + Administration::AcademicYear.model_name.human ] types = [ diff --git a/app/views/admin/education/cohorts/_filters.html.erb b/app/views/admin/administration/cohorts/_filters.html.erb similarity index 100% rename from app/views/admin/education/cohorts/_filters.html.erb rename to app/views/admin/administration/cohorts/_filters.html.erb diff --git a/app/views/admin/education/cohorts/_list.html.erb b/app/views/admin/administration/cohorts/_list.html.erb similarity index 95% rename from app/views/admin/education/cohorts/_list.html.erb rename to app/views/admin/administration/cohorts/_list.html.erb index f731179ab0..fd0cac7040 100644 --- a/app/views/admin/education/cohorts/_list.html.erb +++ b/app/views/admin/administration/cohorts/_list.html.erb @@ -11,7 +11,7 @@ <% if can?(:restore, cohort) %> diff --git a/app/views/admin/education/cohorts/index.html.erb b/app/views/admin/administration/cohorts/index.html.erb similarity index 57% rename from app/views/admin/education/cohorts/index.html.erb rename to app/views/admin/administration/cohorts/index.html.erb index 7746ba7293..0c7d2c2ae8 100644 --- a/app/views/admin/education/cohorts/index.html.erb +++ b/app/views/admin/administration/cohorts/index.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title, Administration::Cohort.model_name.human(count: 2) %> <% content_for :title_right do %> <%= button_advanced do %> @@ -10,10 +10,10 @@
<%= render 'admin/application/components/lifecycle/pills', - path_method: :admin_education_cohorts_path %> + path_method: :admin_administration_cohorts_path %> - <%= render 'filters', current_path: admin_education_cohorts_path %> + <%= render 'filters', current_path: admin_administration_cohorts_path %>
<%= render 'admin/application/components/lifecycle/label' %> -<%= render 'admin/education/cohorts/list', cohorts: @cohorts %> +<%= render 'admin/administration/cohorts/list', cohorts: @cohorts %> diff --git a/app/views/admin/education/cohorts/index.xlsx.axlsx b/app/views/admin/administration/cohorts/index.xlsx.axlsx similarity index 98% rename from app/views/admin/education/cohorts/index.xlsx.axlsx rename to app/views/admin/administration/cohorts/index.xlsx.axlsx index e2c076efdf..99879c8a7e 100644 --- a/app/views/admin/education/cohorts/index.xlsx.axlsx +++ b/app/views/admin/administration/cohorts/index.xlsx.axlsx @@ -29,7 +29,7 @@ wb.add_worksheet(name: "index") do |sheet| Education::School.model_name.human, Education::Program.model_name.human, - Education::AcademicYear.model_name.human + Administration::AcademicYear.model_name.human ] types = [ diff --git a/app/views/admin/education/cohorts/show.html.erb b/app/views/admin/administration/cohorts/show.html.erb similarity index 76% rename from app/views/admin/education/cohorts/show.html.erb rename to app/views/admin/administration/cohorts/show.html.erb index 67eb19f548..0d49971483 100644 --- a/app/views/admin/education/cohorts/show.html.erb +++ b/app/views/admin/administration/cohorts/show.html.erb @@ -8,15 +8,15 @@
- <%= osuny_label Education::Cohort.human_attribute_name('school') %> + <%= osuny_label Administration::Cohort.human_attribute_name('school') %>

<%= osuny_link_localized @cohort.school, [:admin, @cohort.school] %>

- <%= osuny_label Education::Cohort.human_attribute_name('program') %> + <%= osuny_label Administration::Cohort.human_attribute_name('program') %>

<%= osuny_link_localized @cohort.program, [:admin, @cohort.program] %>

- <%= osuny_label Education::Cohort.human_attribute_name('year') %> + <%= osuny_label Administration::Cohort.human_attribute_name('year') %>

<%= link_to @cohort.academic_year, [:admin, @cohort.academic_year] %>

@@ -30,6 +30,6 @@ <% end %> <% content_for :server_admin_only do %> - <%= static_link static_admin_education_cohort_path(@cohort) %> + <%= static_link static_admin_administration_cohort_path(@cohort) %> <%= render 'admin/communication/websites/git_files/list', git_files: @l10n.git_files %> -<% end %> +<% end %> diff --git a/app/views/admin/education/cohorts/static.html.erb b/app/views/admin/administration/cohorts/static.html.erb similarity index 100% rename from app/views/admin/education/cohorts/static.html.erb rename to app/views/admin/administration/cohorts/static.html.erb diff --git a/app/views/admin/communication/extranets/alumni/index.html.erb b/app/views/admin/communication/extranets/alumni/index.html.erb index 935249470c..31d2997ba8 100644 --- a/app/views/admin/communication/extranets/alumni/index.html.erb +++ b/app/views/admin/communication/extranets/alumni/index.html.erb @@ -9,13 +9,13 @@ <% if @cohorts %>

<%= @cohorts.count %> - <%= Education::Cohort.model_name.human(count: @cohorts.count).downcase %> + <%= Administration::Cohort.model_name.human(count: @cohorts.count).downcase %>

<% end %> <% if @years %>

<%= @years.count %> - <%= Education::AcademicYear.model_name.human(count: @years.count).downcase %> + <%= Administration::AcademicYear.model_name.human(count: @years.count).downcase %>

<% end %> <% if @organizations %> @@ -23,4 +23,4 @@ <%= @organizations.count %> <%= University::Organization.model_name.human(count: @organizations.count).downcase %>

-<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/communication/websites/pages/show/special_pages/_education_academic_year.html.erb b/app/views/admin/communication/websites/pages/show/special_pages/_administration_academic_year.html.erb similarity index 72% rename from app/views/admin/communication/websites/pages/show/special_pages/_education_academic_year.html.erb rename to app/views/admin/communication/websites/pages/show/special_pages/_administration_academic_year.html.erb index 386ef22e76..2e3cef9759 100644 --- a/app/views/admin/communication/websites/pages/show/special_pages/_education_academic_year.html.erb +++ b/app/views/admin/communication/websites/pages/show/special_pages/_administration_academic_year.html.erb @@ -5,7 +5,7 @@ .page(params[:alumni_page]) %> <%= osuny_panel t('admin.communication.website.pages.special_page') do %> -

<%= t('admin.communication.website.pages.special_pages.education_academic_year.native', count: @alumni.total_count) %>

+

<%= t('admin.communication.website.pages.special_pages.administration_academic_year.native', count: @alumni.total_count) %>

<%= render 'admin/administration/alumni/list', alumni: @alumni %> <%= paginate @alumni, param_name: :alumni_page %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/admin/communication/websites/pages/static/special_pages/_education_academic_year.html.erb b/app/views/admin/communication/websites/pages/static/special_pages/_administration_academic_year.html.erb similarity index 100% rename from app/views/admin/communication/websites/pages/static/special_pages/_education_academic_year.html.erb rename to app/views/admin/communication/websites/pages/static/special_pages/_administration_academic_year.html.erb diff --git a/app/views/admin/education/academic_years/index.html.erb b/app/views/admin/education/academic_years/index.html.erb deleted file mode 100644 index 9a8d599090..0000000000 --- a/app/views/admin/education/academic_years/index.html.erb +++ /dev/null @@ -1,3 +0,0 @@ -<% content_for :title, Education::AcademicYear.model_name.human(count: 2) %> - -<%= render 'admin/education/academic_years/list', academic_years: @academic_years %> diff --git a/app/views/admin/education/programs/cohorts/index.html.erb b/app/views/admin/education/programs/cohorts/index.html.erb index aa5120f404..8ba233c146 100644 --- a/app/views/admin/education/programs/cohorts/index.html.erb +++ b/app/views/admin/education/programs/cohorts/index.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title, Administration::Cohort.model_name.human(count: 2) %> <% content_for :title_right do %> <%= button_advanced do %> @@ -15,4 +15,4 @@
<%= render 'admin/application/components/lifecycle/label' %> -<%= render 'admin/education/cohorts/list', cohorts: @cohorts %> +<%= render 'admin/administration/cohorts/list', cohorts: @cohorts %> diff --git a/app/views/admin/education/schools/cohorts/index.html.erb b/app/views/admin/education/schools/cohorts/index.html.erb index d142e454b2..1e18ad216a 100644 --- a/app/views/admin/education/schools/cohorts/index.html.erb +++ b/app/views/admin/education/schools/cohorts/index.html.erb @@ -1,4 +1,4 @@ -<% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title, Administration::Cohort.model_name.human(count: 2) %> <% content_for :title_right do %> <%= button_advanced do %> @@ -15,4 +15,4 @@
<%= render 'admin/application/components/lifecycle/label' %> -<%= render 'admin/education/cohorts/list', cohorts: @cohorts, hide_school: true %> +<%= render 'admin/administration/cohorts/list', cohorts: @cohorts, hide_school: true %> diff --git a/app/views/admin/education/schools/show.html.erb b/app/views/admin/education/schools/show.html.erb index 6d54754e17..5f11565df4 100644 --- a/app/views/admin/education/schools/show.html.erb +++ b/app/views/admin/education/schools/show.html.erb @@ -56,8 +56,8 @@ class: button_classes unless @cohorts.last_page? %> - <%= osuny_panel Education::Cohort.model_name.human(count: 2), action: cohort_action do %> - <%= render 'admin/education/cohorts/list', cohorts: @cohorts %> + <%= osuny_panel Administration::Cohort.model_name.human(count: 2), action: cohort_action do %> + <%= render 'admin/administration/cohorts/list', cohorts: @cohorts %>
<%= @school.alumni.count %> <%= University::Person::Alumnus.model_name.human(count: 2).downcase %> diff --git a/app/views/extranet/alumni/academic_years/index.html.erb b/app/views/extranet/alumni/academic_years/index.html.erb index ffc7a4e121..9c1824efd4 100644 --- a/app/views/extranet/alumni/academic_years/index.html.erb +++ b/app/views/extranet/alumni/academic_years/index.html.erb @@ -1,8 +1,8 @@ -<% content_for :title, Education::AcademicYear.model_name.human(count: 2) %> +<% content_for :title, Administration::AcademicYear.model_name.human(count: 2) %> <% content_for :header_right do %>

<%= @count %> - <%= Education::AcademicYear.model_name.human(count: @count).downcase %> + <%= Administration::AcademicYear.model_name.human(count: @count).downcase %>

<% end %> @@ -24,7 +24,7 @@
<%= cohorts.count %> - <%= Education::Cohort.model_name.human(count: cohorts.count).downcase %> + <%= Administration::Cohort.model_name.human(count: cohorts.count).downcase %>
<% end %> diff --git a/app/views/extranet/alumni/academic_years/show.html.erb b/app/views/extranet/alumni/academic_years/show.html.erb index ebd28386f3..c5519e7b45 100644 --- a/app/views/extranet/alumni/academic_years/show.html.erb +++ b/app/views/extranet/alumni/academic_years/show.html.erb @@ -10,7 +10,7 @@

<%= @cohorts.total_count %> - <%= Education::Cohort.model_name.human(count: @cohorts.total_count).downcase %> + <%= Administration::Cohort.model_name.human(count: @cohorts.total_count).downcase %>

diff --git a/app/views/extranet/alumni/cohorts/index.html.erb b/app/views/extranet/alumni/cohorts/index.html.erb index 0c2b3c9816..dd0ca2db5a 100644 --- a/app/views/extranet/alumni/cohorts/index.html.erb +++ b/app/views/extranet/alumni/cohorts/index.html.erb @@ -1,8 +1,8 @@ -<% content_for :title, Education::Cohort.model_name.human(count: 2) %> +<% content_for :title, Administration::Cohort.model_name.human(count: 2) %> <% content_for :header_right do %>

<%= @count %> - <%= Education::Cohort.model_name.human(count: @count).downcase %> + <%= Administration::Cohort.model_name.human(count: @count).downcase %>

<% end %> @@ -10,4 +10,4 @@ <%= render 'extranet/alumni/cohorts/index/facets', cohorts: @cohorts, facets: @facets %> <% else %> <%= render 'extranet/alumni/cohorts/index/cards', cohorts: @cohorts %> -<% end %> \ No newline at end of file +<% end %> diff --git a/app/views/extranet/alumni/persons/show/_cohorts.html.erb b/app/views/extranet/alumni/persons/show/_cohorts.html.erb index bd38ba7442..b419fbe40b 100644 --- a/app/views/extranet/alumni/persons/show/_cohorts.html.erb +++ b/app/views/extranet/alumni/persons/show/_cohorts.html.erb @@ -1,5 +1,5 @@
-

<%= Education::Cohort.model_name.human(count: 2) %>

+

<%= Administration::Cohort.model_name.human(count: 2) %>

    <% cohorts.each do |cohort| %> <% diff --git a/config/locales/administration/en.yml b/config/locales/administration/en.yml index af1994cdeb..f73cb2f260 100644 --- a/config/locales/administration/en.yml +++ b/config/locales/administration/en.yml @@ -4,6 +4,13 @@ en: administration/qualiopi: Qualiopi activerecord: attributes: + administration/academic_year: + year: Year + administration/cohort: + alumni: Alumni + program: Program + school: School + year: Year administration/location: address: Address city: City @@ -34,6 +41,12 @@ en: proof: Proof requirement: Requirement models: + administration/academic_year: + one: Year + other: Years + administration/cohort: + one: Cohort + other: Cohorts administration/location: one: Location other: Locations @@ -54,6 +67,9 @@ en: alumnus: description: Presentation of the students who have studied in the various courses. title: Alumni + cohort: + description: Presentation of the cohorts of alumni + title: Cohorts location: description: Management of the various (physical) education and research sites title: Locations @@ -62,4 +78,4 @@ en: title: Qualiopi source: Code des relations entre le public et l'administration text_html: Administration, in its many forms, is defined primarily by its activities in the service of the general interest. It acts in the general interest and respects the principle of legality. It is bound by the obligation of neutrality and respect for the principle of secularism. It complies with the principle of equality and guarantees everyone impartial treatment. - title: Administration \ No newline at end of file + title: Administration diff --git a/config/locales/administration/fr.yml b/config/locales/administration/fr.yml index f136df84b3..5394f3d840 100644 --- a/config/locales/administration/fr.yml +++ b/config/locales/administration/fr.yml @@ -4,6 +4,13 @@ fr: administration/qualiopi: Qualiopi activerecord: attributes: + administration/academic_year: + year: Année + administration/cohort: + alumni: Alumni + program: Formation + school: École + year: Année administration/location: address: Adresse city: Ville @@ -34,6 +41,12 @@ fr: proof: Éléments de preuve requirement: Obligations spécifiques models: + administration/academic_year: + one: Année + other: Années + administration/cohort: + one: Promotion + other: Promotions administration/location: one: Lieu other: Lieux @@ -54,6 +67,9 @@ fr: alumnus: description: Présentation des étudiants et étudiantes ayant étudié dans les différentes formations title: Alumni + cohort: + description: Présentation des promotions d'alumni + title: Promotions location: description: Gestion des différents lieux de formation et de recherche title: Lieux @@ -62,4 +78,4 @@ fr: title: Qualiopi source: Code des relations entre le public et l'administration text_html: L'administration, sous ses multiples formes, se définit principalement par ses activités au service de l'intérêt général. L'administration agit dans l'intérêt général et respecte le principe de légalité. Elle est tenue à l'obligation de neutralité et au respect du principe de laïcité. Elle se conforme au principe d'égalité et garantit à chacun un traitement impartial. - title: Administration \ No newline at end of file + title: Administration diff --git a/config/locales/communication/en.yml b/config/locales/communication/en.yml index bc192d6646..968089ec34 100644 --- a/config/locales/communication/en.yml +++ b/config/locales/communication/en.yml @@ -553,6 +553,11 @@ en: show: Show page special_page: Special page special_pages: + administration_academic_year: + native: + zero: This page is a special page that natively displays the site's alumni, sorted by year. Currently, there are no alumni on the site. + one: This page is a special page that natively displays the site's alumni, sorted by year. Currently, there is one alumnus. + other: This page is a special page that natively displays the site's %{count} alumni, sorted by year. administration_location: native: zero: This page is a special page, which natively presents the campus locations. For now, there is no location. @@ -583,11 +588,6 @@ en: zero: This page is a special page that natively displays the site's news. one: This page is a special page that natively displays the site's news . Currently, there's a single post. other: This page is a special page that natively displays the %{count} published news. - education_academic_year: - native: - zero: This page is a special page that natively displays the site's alumni, sorted by year. Currently, there are no alumni on the site. - one: This page is a special page that natively displays the site's alumni, sorted by year. Currently, there is one alumnus. - other: This page is a special page that natively displays the site's %{count} alumni, sorted by year. education_diploma: native: zero: This page is a special page that natively displays the diplomas associated with the site. Currently, there are no diplomas on the site. @@ -731,6 +731,9 @@ en: accessibility: slug: accessibility title: Accessibility + administration_academic_year: + slug: alumni + title: Alumni administration_location: slug: campus title: Campus @@ -761,9 +764,6 @@ en: communication_post: slug: posts title: Posts - education_academic_year: - slug: alumni - title: Alumni education_diploma: slug: diplomas title: Diplomas diff --git a/config/locales/communication/fr.yml b/config/locales/communication/fr.yml index 8c77ad8737..c78c0eae21 100644 --- a/config/locales/communication/fr.yml +++ b/config/locales/communication/fr.yml @@ -553,6 +553,11 @@ fr: show: Voir la page special_page: Page spéciale special_pages: + administration_academic_year: + native: + zero: Cette page est une page spéciale, qui présente nativement les alumni du site, classés par années. Pour l'instant, il n'y a aucun alumnus dans le site. + one: Cette page est une page spéciale, qui présente nativement les alumni du site, classés par années. Pour l'instant, il y a 1 alumnus. + other: Cette page est une page spéciale, qui présente nativement les %{count} alumni du site, classés par années. administration_location: native: zero: Cette page est une page spéciale, qui présente nativement les lieux du campus. Pour l'instant, il n'y a aucun lieu. @@ -583,11 +588,6 @@ fr: zero: Cette page est une page spéciale, qui présente nativement les actualités du site. one: Cette page est une page spéciale, qui présente nativement les actualités du site. Pour l'instant, il y a 1 actualité publiée. other: Cette page est une page spéciale, qui présente nativement les %{count} actualités publiées. - education_academic_year: - native: - zero: Cette page est une page spéciale, qui présente nativement les alumni du site, classés par années. Pour l'instant, il n'y a aucun alumnus dans le site. - one: Cette page est une page spéciale, qui présente nativement les alumni du site, classés par années. Pour l'instant, il y a 1 alumnus. - other: Cette page est une page spéciale, qui présente nativement les %{count} alumni du site, classés par années. education_diploma: native: zero: Cette page est une page spéciale, qui présente nativement les diplômes liés au site. Pour l'instant, il n'y a aucun diplôme dans le site. @@ -731,6 +731,9 @@ fr: accessibility: slug: accessibilite title: Accessibilité + administration_academic_year: + slug: alumni + title: Alumni administration_location: slug: campus title: Campus @@ -761,9 +764,6 @@ fr: communication_post: slug: actualites title: Actualités - education_academic_year: - slug: alumni - title: Alumni education_diploma: slug: diplomes title: "Diplômes" diff --git a/config/locales/education/en.yml b/config/locales/education/en.yml index 100f1e41d7..e524f419ea 100644 --- a/config/locales/education/en.yml +++ b/config/locales/education/en.yml @@ -4,13 +4,6 @@ en: education: Education activerecord: attributes: - education/academic_year: - year: Year - education/cohort: - alumni: Alumni - program: Program - school: School - year: Year education/diploma: certification: Certification ects: ECTS @@ -93,12 +86,6 @@ en: name: Name websites: Linked websites models: - education/academic_year: - one: Year - other: Years - education/cohort: - one: Cohort - other: Cohorts education/diploma: one: Diploma other: Diplomas @@ -138,9 +125,6 @@ en: education: description: parts: - cohort: - description: Presentation of the cohorts of alumni - title: Cohorts diploma: description: Presentation of diplomas and their characteristics title: Diplomas diff --git a/config/locales/education/fr.yml b/config/locales/education/fr.yml index 134b185f34..87272df005 100644 --- a/config/locales/education/fr.yml +++ b/config/locales/education/fr.yml @@ -4,13 +4,6 @@ fr: education: Enseignement activerecord: attributes: - education/academic_year: - year: Année - education/cohort: - alumni: Alumni - program: Formation - school: École - year: Année education/diploma: certification: Contrôle par l'État ects: Crédits ECTS @@ -93,12 +86,6 @@ fr: name: Nom url: Site Web models: - education/academic_year: - one: Année - other: Années - education/cohort: - one: Promotion - other: Promotions education/diploma: one: Diplôme other: Diplômes @@ -138,9 +125,6 @@ fr: education: description: parts: - cohort: - description: Présentation des promotions d'alumni - title: Promotions diploma: description: Présentation des diplômes et de leurs caractéristiques title: Diplômes diff --git a/config/navigation/admin/administration_navigation.rb b/config/navigation/admin/administration_navigation.rb index d72d7a1e9c..c3cf7c0c30 100644 --- a/config/navigation/admin/administration_navigation.rb +++ b/config/navigation/admin/administration_navigation.rb @@ -6,21 +6,24 @@ navigation.items do |primary| primary.item :subnav_summary, - t('admin.subnav.summary'), - admin_administration_root_path, - highlights_on: lambda { - controller_name == "dashboard" && action_name == "index" + t('admin.subnav.summary'), + admin_administration_root_path, + highlights_on: lambda { + controller_name == "dashboard" && action_name == "index" } primary.item :subnav_alumni, t('administration.description.parts.alumnus.title'), admin_administration_alumni_path if can?(:read, University::Person::Alumnus) + primary.item :subnav_cohorts, + t('administration.description.parts.cohort.title'), + admin_administration_cohorts_path if can?(:read, Administration::Cohort) primary.item :subnav_locations, t('administration.description.parts.location.title'), admin_administration_locations_path if can?(:read, Administration::Location) primary.item :subnav_qualiopi, t('administration.description.parts.qualiopi.title'), admin_administration_qualiopi_criterions_path, - highlights_on: lambda { + highlights_on: lambda { controller_name.in?(["indicators", "criterions"]) } if can?(:read, Administration::Qualiopi) end diff --git a/config/navigation/admin/education/program_navigation.rb b/config/navigation/admin/education/program_navigation.rb index a2ee175f48..d9485d16f3 100644 --- a/config/navigation/admin/education/program_navigation.rb +++ b/config/navigation/admin/education/program_navigation.rb @@ -21,7 +21,7 @@ t('education.program.parts.certification.label'), certification_admin_education_program_path(id: @program, program_id: nil) primary.item :subnav_cohorts, - Education::Cohort.model_name.human(count: 2), + Administration::Cohort.model_name.human(count: 2), admin_education_program_cohorts_path(@program), highlights_on: lambda { controller_name == "cohorts" && action_name == "index" diff --git a/config/navigation/admin/education_navigation.rb b/config/navigation/admin/education_navigation.rb index 86f74815a1..7fecf68508 100644 --- a/config/navigation/admin/education_navigation.rb +++ b/config/navigation/admin/education_navigation.rb @@ -23,8 +23,5 @@ primary.item :subnav_programs, t('education.description.parts.program.title'), admin_education_programs_path - primary.item :subnav_cohorts, - t('education.description.parts.cohort.title'), - admin_education_cohorts_path end end diff --git a/config/navigation/extranet_navigation.rb b/config/navigation/extranet_navigation.rb index 5fd09ccf7c..23b2636410 100644 --- a/config/navigation/extranet_navigation.rb +++ b/config/navigation/extranet_navigation.rb @@ -28,14 +28,14 @@ University::Person.model_name.human(count: 2), alumni_university_persons_path secondary.item :years, - Education::AcademicYear.model_name.human(count: 2), - alumni_education_academic_years_path if current_extranet.should_show_academic_years? + Administration::AcademicYear.model_name.human(count: 2), + alumni_administration_academic_years_path if current_extranet.should_show_academic_years? secondary.item :cohorts, - Education::Cohort.model_name.human(count: 2), - alumni_education_cohorts_path + Administration::Cohort.model_name.human(count: 2), + alumni_administration_cohorts_path secondary.item :organizations, University::Organization.model_name.human(count: 2), alumni_university_organizations_path end if current_extranet.feature_alumni? end -end \ No newline at end of file +end diff --git a/config/routes/admin/administration.rb b/config/routes/admin/administration.rb index ef7a181c6d..c4818289dc 100644 --- a/config/routes/admin/administration.rb +++ b/config/routes/admin/administration.rb @@ -10,6 +10,17 @@ patch 'cohorts' => 'alumni/cohorts#update' end end + resources :academic_years do + member do + get :static + end + end + resources :cohorts, only: [:index, :show, :destroy] do + member do + get :static + post :restore + end + end resources :locations do member do get :static diff --git a/config/routes/admin/education.rb b/config/routes/admin/education.rb index 87b1017050..f47d7dcd07 100644 --- a/config/routes/admin/education.rb +++ b/config/routes/admin/education.rb @@ -1,15 +1,4 @@ namespace :education do - resources :academic_years do - member do - get :static - end - end - resources :cohorts, only: [:index, :show, :destroy] do - member do - get :static - post :restore - end - end resources :diplomas do collection do post :reorder diff --git a/config/routes/extranet.rb b/config/routes/extranet.rb index d651b30c3f..fdc2e568d3 100644 --- a/config/routes/extranet.rb +++ b/config/routes/extranet.rb @@ -12,14 +12,14 @@ # Feature Alumni namespace :alumni do - get 'cohorts' => 'cohorts#index', as: :education_cohorts - get 'cohorts/:id' => 'cohorts#show', as: :education_cohort + get 'cohorts' => 'cohorts#index', as: :administration_cohorts + get 'cohorts/:id' => 'cohorts#show', as: :administration_cohort get 'organizations' => 'organizations#index', as: :university_organizations get 'organization/:id' => 'organizations#show', as: :university_organization get 'persons' => 'persons#index', as: :university_persons get 'persons/:id' => 'persons#show', as: :university_person - get 'years' => 'academic_years#index', as: :education_academic_years - get 'years/:id' => 'academic_years#show', as: :education_academic_year + get 'years' => 'academic_years#index', as: :administration_academic_years + get 'years/:id' => 'academic_years#show', as: :administration_academic_year root to: 'persons#index' end diff --git a/db/migrate/20260625085319_move_cohorts_from_education_to_administration.rb b/db/migrate/20260625085319_move_cohorts_from_education_to_administration.rb new file mode 100644 index 0000000000..b1a9c765bb --- /dev/null +++ b/db/migrate/20260625085319_move_cohorts_from_education_to_administration.rb @@ -0,0 +1,65 @@ +class MoveCohortsFromEducationToAdministration < ActiveRecord::Migration[8.1] + def up + rename_table :education_cohort_localizations, + :administration_cohort_localizations + rename_table :education_cohorts, + :administration_cohorts + + rename_table :education_cohorts_university_people, + :administration_cohorts_university_people + rename_column :administration_cohorts_university_people, + :education_cohort_id, + :administration_cohort_id + + Communication::Website::Permalink + .where(about_type: "Education::Cohort::Localization") + .update_all(about_type: "Administration::Cohort::Localization") + Communication::Website::GitFile + .where(about_type: "Education::Cohort::Localization") + .update_all(about_type: "Administration::Cohort::Localization") + Communication::Website::Connection + .where(indirect_object_type: "Education::Cohort") + .update_all(indirect_object_type: "Administration::Cohort") + Communication::Website::Connection + .where(indirect_object_type: "Education::Cohort::Localization") + .update_all(indirect_object_type: "Administration::Cohort::Localization") + Search + .where(about_object_type: "Education::Cohort") + .update_all( + about_object_type: "Administration::Cohort", + about_localization_type: "Administration::Cohort::Localization" + ) + end + + def down + rename_column :administration_cohorts_university_people, + :administration_cohort_id, + :education_cohort_id + rename_table :administration_cohorts_university_people, + :education_cohorts_university_people + + rename_table :administration_cohorts, + :education_cohorts + rename_table :administration_cohort_localizations, + :education_cohort_localizations + + Communication::Website::Permalink + .where(about_type: "Administration::Cohort::Localization") + .update_all(about_type: "Education::Cohort::Localization") + Communication::Website::GitFile + .where(about_type: "Administration::Cohort::Localization") + .update_all(about_type: "Education::Cohort::Localization") + Communication::Website::Connection + .where(indirect_object_type: "Administration::Cohort") + .update_all(indirect_object_type: "Education::Cohort") + Communication::Website::Connection + .where(indirect_object_type: "Administration::Cohort::Localization") + .update_all(indirect_object_type: "Education::Cohort::Localization") + Search + .where(about_object_type: "Administration::Cohort") + .update_all( + about_object_type: "Education::Cohort", + about_localization_type: "Education::Cohort::Localization" + ) + end +end diff --git a/db/migrate/20260625100524_move_academic_years_from_education_to_administration.rb b/db/migrate/20260625100524_move_academic_years_from_education_to_administration.rb new file mode 100644 index 0000000000..1c64ba2455 --- /dev/null +++ b/db/migrate/20260625100524_move_academic_years_from_education_to_administration.rb @@ -0,0 +1,71 @@ +class MoveAcademicYearsFromEducationToAdministration < ActiveRecord::Migration[8.1] + def up + rename_table :education_academic_year_localizations, + :administration_academic_year_localizations + rename_table :education_academic_years, + :administration_academic_years + + rename_table :education_academic_years_university_people, + :administration_academic_years_university_people + rename_column :administration_academic_years_university_people, + :education_academic_year_id, + :administration_academic_year_id + + Communication::Website::Permalink + .where(about_type: "Education::AcademicYear::Localization") + .update_all(about_type: "Administration::AcademicYear::Localization") + Communication::Website::GitFile + .where(about_type: "Education::AcademicYear::Localization") + .update_all(about_type: "Administration::AcademicYear::Localization") + Communication::Website::Connection + .where(indirect_object_type: "Education::AcademicYear") + .update_all(indirect_object_type: "Administration::AcademicYear") + Communication::Website::Connection + .where(indirect_object_type: "Education::AcademicYear::Localization") + .update_all(indirect_object_type: "Administration::AcademicYear::Localization") + Search + .where(about_object_type: "Education::AcademicYear") + .update_all( + about_object_type: "Administration::AcademicYear", + about_localization_type: "Administration::AcademicYear::Localization" + ) + Communication::Website::Page + .where(type: "Communication::Website::Page::EducationAcademicYear") + .update_all(type: "Communication::Website::Page::AdministrationAcademicYear") + end + + def down + rename_column :administration_academic_years_university_people, + :administration_academic_year_id, + :education_academic_year_id + rename_table :administration_academic_years_university_people, + :education_academic_years_university_people + + rename_table :administration_academic_years, + :education_academic_years + rename_table :administration_academic_year_localizations, + :education_academic_year_localizations + + Communication::Website::Permalink + .where(about_type: "Administration::AcademicYear::Localization") + .update_all(about_type: "Education::AcademicYear::Localization") + Communication::Website::GitFile + .where(about_type: "Administration::AcademicYear::Localization") + .update_all(about_type: "Education::AcademicYear::Localization") + Communication::Website::Connection + .where(indirect_object_type: "Administration::AcademicYear") + .update_all(indirect_object_type: "Education::AcademicYear") + Communication::Website::Connection + .where(indirect_object_type: "Administration::AcademicYear::Localization") + .update_all(indirect_object_type: "Education::AcademicYear::Localization") + Search + .where(about_object_type: "Administration::AcademicYear") + .update_all( + about_object_type: "Education::AcademicYear", + about_localization_type: "Education::AcademicYear::Localization" + ) + Communication::Website::Page + .where(type: "Communication::Website::Page::AdministrationAcademicYear") + .update_all(type: "Communication::Website::Page::EducationAcademicYear") + end +end diff --git a/db/schema.rb b/db/schema.rb index f001e380f4..b82b34f883 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_06_18_144210) do +ActiveRecord::Schema[8.1].define(version: 2026_06_25_100524) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" enable_extension "pg_stat_statements" @@ -18,7 +18,7 @@ enable_extension "pgcrypto" enable_extension "unaccent" - create_table "action_text_rich_texts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "action_text_rich_texts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.text "body" t.datetime "created_at", null: false t.string "name", null: false @@ -45,7 +45,7 @@ t.index ["ip_address", "created_at"], name: "index_active_hashcash_stamps_on_ip_address_and_created_at", where: "(ip_address IS NOT NULL)" end - create_table "active_storage_attachments", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_attachments", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "blob_id", null: false t.datetime "created_at", precision: nil, null: false t.datetime "deleted_at" @@ -56,7 +56,7 @@ t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true end - create_table "active_storage_blobs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_blobs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.bigint "byte_size", null: false t.string "checksum" t.string "content_type" @@ -70,12 +70,78 @@ t.index ["university_id"], name: "index_active_storage_blobs_on_university_id" end - create_table "active_storage_variant_records", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "active_storage_variant_records", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "blob_id", null: false t.string "variation_digest", null: false t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true end + create_table "administration_academic_year_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "about_id", null: false + t.datetime "created_at", null: false + t.datetime "deleted_at" + t.uuid "language_id", null: false + t.string "slug" + t.uuid "university_id", null: false + t.datetime "updated_at", null: false + t.index ["about_id", "language_id"], name: "idx_on_about_id_language_id_7962406d05", unique: true + t.index ["about_id"], name: "index_administration_academic_year_localizations_on_about_id" + t.index ["language_id"], name: "idx_on_language_id_a52fb1a1c1" + t.index ["university_id"], name: "idx_on_university_id_31eabbc7a7" + end + + create_table "administration_academic_years", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "deleted_at" + t.uuid "university_id", null: false + t.datetime "updated_at", null: false + t.integer "year" + t.index ["university_id"], name: "index_administration_academic_years_on_university_id" + end + + create_table "administration_academic_years_university_people", id: false, force: :cascade do |t| + t.uuid "administration_academic_year_id", null: false + t.uuid "university_person_id", null: false + t.index ["administration_academic_year_id", "university_person_id"], name: "index_academic_year_person" + t.index ["university_person_id", "administration_academic_year_id"], name: "index_person_academic_year" + end + + create_table "administration_cohort_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "about_id", null: false + t.datetime "created_at", null: false + t.datetime "deleted_at" + t.uuid "language_id", null: false + t.string "slug" + t.uuid "university_id", null: false + t.datetime "updated_at", null: false + t.index ["about_id", "language_id"], name: "idx_on_about_id_language_id_ae60ea28b0", unique: true + t.index ["about_id"], name: "index_administration_cohort_localizations_on_about_id" + t.index ["language_id"], name: "index_administration_cohort_localizations_on_language_id" + t.index ["university_id"], name: "index_administration_cohort_localizations_on_university_id" + end + + create_table "administration_cohorts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "academic_year_id", null: false + t.datetime "created_at", null: false + t.datetime "deleted_at" + t.string "name" + t.uuid "program_id", null: false + t.uuid "school_id", null: false + t.uuid "university_id", null: false + t.datetime "updated_at", null: false + t.index ["academic_year_id"], name: "index_administration_cohorts_on_academic_year_id" + t.index ["program_id"], name: "index_administration_cohorts_on_program_id" + t.index ["school_id"], name: "index_administration_cohorts_on_school_id" + t.index ["university_id"], name: "index_administration_cohorts_on_university_id" + end + + create_table "administration_cohorts_university_people", id: false, force: :cascade do |t| + t.uuid "administration_cohort_id", null: false + t.uuid "university_person_id", null: false + t.index ["administration_cohort_id", "university_person_id"], name: "index_cohort_person" + t.index ["university_person_id", "administration_cohort_id"], name: "index_person_cohort" + end + create_table "administration_location_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "address_additional" @@ -127,7 +193,7 @@ t.index ["education_school_id", "administration_location_id"], name: "index_location_school" end - create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "administration_qualiopi_criterions", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.text "description" t.text "name" @@ -135,7 +201,7 @@ t.datetime "updated_at", null: false end - create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "administration_qualiopi_indicators", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.uuid "criterion_id", null: false t.text "glossary" @@ -149,7 +215,7 @@ t.index ["criterion_id"], name: "index_administration_qualiopi_indicators_on_criterion_id" end - create_table "communication_blocks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_blocks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.uuid "communication_website_id" @@ -170,7 +236,7 @@ t.index ["university_id", "template_kind"], name: "index_communication_blocks_on_university_id_and_template_kind" end - create_table "communication_extranet_connections", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_connections", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.datetime "created_at", null: false @@ -182,7 +248,7 @@ t.index ["university_id"], name: "index_communication_extranet_connections_on_university_id" end - create_table "communication_extranet_document_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_document_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.uuid "extranet_id", null: false t.uuid "university_id", null: false @@ -223,7 +289,7 @@ t.index ["university_id"], name: "idx_on_university_id_0dc1259072" end - create_table "communication_extranet_document_kinds", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_document_kinds", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.uuid "extranet_id", null: false t.uuid "university_id", null: false @@ -249,7 +315,7 @@ t.index ["university_id"], name: "idx_on_university_id_95419f1df4" end - create_table "communication_extranet_documents", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_documents", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "category_id" t.datetime "created_at", null: false t.uuid "extranet_id", null: false @@ -285,7 +351,7 @@ t.index ["university_id"], name: "index_communication_extranet_localizations_on_university_id" end - create_table "communication_extranet_post_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_post_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.uuid "extranet_id", null: false t.uuid "university_id", null: false @@ -332,7 +398,7 @@ t.index ["university_id"], name: "idx_on_university_id_28188e2217" end - create_table "communication_extranet_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranet_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "author_id" t.uuid "category_id" t.datetime "created_at", null: false @@ -345,7 +411,7 @@ t.index ["university_id"], name: "index_communication_extranet_posts_on_university_id" end - create_table "communication_extranets", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_extranets", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.string "color" @@ -620,7 +686,7 @@ t.index ["university_id"], name: "idx_on_university_id_bca328e63c" end - create_table "communication_website_agenda_events", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_agenda_events", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.uuid "communication_website_id", null: false t.datetime "created_at", null: false @@ -811,7 +877,7 @@ t.index ["university_id"], name: "index_communication_website_alerts_on_university_id" end - create_table "communication_website_connections", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_connections", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.uuid "direct_source_id" t.string "direct_source_type" @@ -867,7 +933,7 @@ t.index ["university_id"], name: "index_communication_website_git_file_orphans_on_university_id" end - create_table "communication_website_git_files", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_git_files", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.datetime "created_at", null: false @@ -1013,7 +1079,7 @@ t.index ["university_id"], name: "index_communication_website_localizations_on_university_id" end - create_table "communication_website_menu_items", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_menu_items", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.datetime "created_at", null: false @@ -1036,7 +1102,7 @@ t.index ["website_id"], name: "index_communication_website_menu_items_on_website_id" end - create_table "communication_website_menus", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_menus", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.boolean "automatic", default: true t.uuid "communication_website_id", null: false t.datetime "created_at", null: false @@ -1135,7 +1201,7 @@ t.index ["university_id"], name: "idx_on_university_id_e62b2aba53" end - create_table "communication_website_pages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_pages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.uuid "communication_website_id", null: false t.datetime "created_at", null: false @@ -1156,7 +1222,7 @@ t.index ["university_id"], name: "index_communication_website_pages_on_university_id" end - create_table "communication_website_permalinks", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_permalinks", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.datetime "created_at", null: false @@ -1269,7 +1335,7 @@ t.index ["university_id"], name: "idx_on_university_id_ac2f4a0bfc" end - create_table "communication_website_post_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_post_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.uuid "communication_website_id", null: false t.datetime "created_at", null: false @@ -1357,7 +1423,7 @@ t.index ["unpublication_job_id"], name: "idx_on_unpublication_job_id" end - create_table "communication_website_posts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_website_posts", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.uuid "communication_website_id", null: false t.datetime "created_at", null: false @@ -1392,7 +1458,7 @@ t.index ["communication_website_showcase_tag_id", "communication_website_id"], name: "index_showcase_tag_website" end - create_table "communication_websites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "communication_websites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.string "about_type" t.string "access_token" @@ -1454,72 +1520,6 @@ t.index ["user_id", "communication_website_id"], name: "user_website" end - create_table "education_academic_year_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| - t.uuid "about_id", null: false - t.datetime "created_at", null: false - t.datetime "deleted_at" - t.uuid "language_id", null: false - t.string "slug" - t.uuid "university_id", null: false - t.datetime "updated_at", null: false - t.index ["about_id", "language_id"], name: "idx_on_about_id_language_id_eb13d82b8d", unique: true - t.index ["about_id"], name: "index_education_academic_year_localizations_on_about_id" - t.index ["language_id"], name: "index_education_academic_year_localizations_on_language_id" - t.index ["university_id"], name: "index_education_academic_year_localizations_on_university_id" - end - - create_table "education_academic_years", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| - t.datetime "created_at", null: false - t.datetime "deleted_at" - t.uuid "university_id", null: false - t.datetime "updated_at", null: false - t.integer "year" - t.index ["university_id"], name: "index_education_academic_years_on_university_id" - end - - create_table "education_academic_years_university_people", id: false, force: :cascade do |t| - t.uuid "education_academic_year_id", null: false - t.uuid "university_person_id", null: false - t.index ["education_academic_year_id", "university_person_id"], name: "index_academic_year_person" - t.index ["university_person_id", "education_academic_year_id"], name: "index_person_academic_year" - end - - create_table "education_cohort_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| - t.uuid "about_id", null: false - t.datetime "created_at", null: false - t.datetime "deleted_at" - t.uuid "language_id", null: false - t.string "slug" - t.uuid "university_id", null: false - t.datetime "updated_at", null: false - t.index ["about_id", "language_id"], name: "idx_on_about_id_language_id_a0a453655b", unique: true - t.index ["about_id"], name: "index_education_cohort_localizations_on_about_id" - t.index ["language_id"], name: "index_education_cohort_localizations_on_language_id" - t.index ["university_id"], name: "index_education_cohort_localizations_on_university_id" - end - - create_table "education_cohorts", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| - t.uuid "academic_year_id", null: false - t.datetime "created_at", null: false - t.datetime "deleted_at" - t.string "name" - t.uuid "program_id", null: false - t.uuid "school_id", null: false - t.uuid "university_id", null: false - t.datetime "updated_at", null: false - t.index ["academic_year_id"], name: "index_education_cohorts_on_academic_year_id" - t.index ["program_id"], name: "index_education_cohorts_on_program_id" - t.index ["school_id"], name: "index_education_cohorts_on_school_id" - t.index ["university_id"], name: "index_education_cohorts_on_university_id" - end - - create_table "education_cohorts_university_people", id: false, force: :cascade do |t| - t.uuid "education_cohort_id", null: false - t.uuid "university_person_id", null: false - t.index ["education_cohort_id", "university_person_id"], name: "index_cohort_person" - t.index ["university_person_id", "education_cohort_id"], name: "index_person_cohort" - end - create_table "education_diploma_localizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id" t.text "accessibility" @@ -1549,7 +1549,7 @@ t.index ["university_id"], name: "index_education_diploma_localizations_on_university_id" end - create_table "education_diplomas", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "education_diplomas", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "certification" t.datetime "created_at", null: false t.datetime "deleted_at" @@ -1648,7 +1648,7 @@ t.index ["university_id"], name: "index_education_program_localizations_on_university_id" end - create_table "education_programs", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "education_programs", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.boolean "apprenticeship" t.string "bodyclass" t.integer "capacity" @@ -1702,7 +1702,7 @@ t.index ["university_id"], name: "index_education_school_localizations_on_university_id" end - create_table "education_schools", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "education_schools", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "address" t.string "city" t.string "country" @@ -1717,7 +1717,7 @@ t.index ["university_id"], name: "index_education_schools_on_university_id" end - create_table "emergency_messages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "emergency_messages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.text "content_en" t.text "content_fr" t.datetime "created_at", null: false @@ -1823,7 +1823,7 @@ t.index ["scheduled_at"], name: "index_good_jobs_on_scheduled_at", where: "(finished_at IS NULL)" end - create_table "imports", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "imports", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.integer "kind" t.uuid "language_id", null: false @@ -1838,7 +1838,7 @@ t.index ["user_id"], name: "index_imports_on_user_id" end - create_table "languages", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "languages", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.string "iso_code" t.string "name" @@ -1852,7 +1852,7 @@ t.index ["university_id", "language_id"], name: "index_languages_universities_on_university_id_and_language_id" end - create_table "research_hal_authors", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_hal_authors", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.string "docid" t.string "first_name" @@ -1911,7 +1911,7 @@ t.index ["university_id"], name: "idx_on_university_id_dc9f1267b7" end - create_table "research_journal_paper_kinds", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journal_paper_kinds", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.uuid "journal_id", null: false @@ -1943,7 +1943,7 @@ t.index ["university_id"], name: "index_research_journal_paper_localizations_on_university_id" end - create_table "research_journal_papers", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journal_papers", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.date "accepted_at" t.text "bibliography" t.datetime "created_at", null: false @@ -1995,7 +1995,7 @@ t.index ["university_id"], name: "index_research_journal_volume_localizations_on_university_id" end - create_table "research_journal_volumes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journal_volumes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.integer "number" @@ -2006,7 +2006,7 @@ t.index ["university_id"], name: "index_research_journal_volumes_on_university_id" end - create_table "research_journals", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_journals", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.uuid "university_id", null: false @@ -2014,7 +2014,7 @@ t.index ["university_id"], name: "index_research_journals_on_university_id" end - create_table "research_laboratories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_laboratories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "address" t.string "city" t.string "country" @@ -2033,7 +2033,7 @@ t.index ["university_person_id", "research_laboratory_id"], name: "laboratory_person" end - create_table "research_laboratory_axes", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_laboratory_axes", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.integer "position", null: false @@ -2078,7 +2078,7 @@ t.index ["university_id"], name: "index_research_laboratory_localizations_on_university_id" end - create_table "research_publications", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_publications", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.text "abstract" t.text "anr_project_references", default: [], array: true t.json "authors_citeproc" @@ -2112,7 +2112,7 @@ t.index ["university_person_id", "research_publication_id"], name: "index_publication_person" end - create_table "research_theses", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "research_theses", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "author_id", null: false t.boolean "completed", default: false t.date "completed_at" @@ -2171,7 +2171,7 @@ t.datetime "updated_at", null: false end - create_table "universities", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "universities", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "address" t.boolean "admin_already_auto_promoted", default: false t.string "city" @@ -2202,7 +2202,7 @@ t.index ["name"], name: "index_universities_on_name", opclass: :gin_trgm_ops, using: :gin end - create_table "university_apps", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_apps", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.string "name" t.string "token" @@ -2213,7 +2213,7 @@ t.index ["university_id"], name: "index_university_apps_on_university_id" end - create_table "university_organization_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_organization_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.datetime "created_at", null: false t.boolean "is_taxonomy", default: false @@ -2227,7 +2227,7 @@ t.index ["university_id"], name: "index_university_organization_categories_on_university_id" end - create_table "university_organization_categories_organizations", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_organization_categories_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "category_id", null: false t.uuid "organization_id", null: false t.index ["category_id"], name: "idx_on_category_id_7494b991ff" @@ -2290,7 +2290,7 @@ t.index ["university_id"], name: "index_university_organization_localizations_on_university_id" end - create_table "university_organizations", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_organizations", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "address" t.string "bodyclass" t.string "city" @@ -2313,7 +2313,7 @@ t.index ["university_id"], name: "index_university_organizations_on_university_id" end - create_table "university_people", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_people", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "address" t.integer "address_visibility", default: 0 t.date "birthdate" @@ -2351,14 +2351,14 @@ t.index ["user_id"], name: "index_university_people_on_user_id" end - create_table "university_people_person_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_people_person_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "category_id", null: false t.uuid "person_id", null: false t.index ["category_id"], name: "index_university_people_person_categories_on_category_id" t.index ["person_id"], name: "index_university_people_person_categories_on_person_id" end - create_table "university_person_categories", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_person_categories", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.string "bodyclass" t.datetime "created_at", null: false t.boolean "is_taxonomy", default: false @@ -2410,7 +2410,7 @@ t.index ["university_id"], name: "idx_on_university_id_1be9c668d5" end - create_table "university_person_experiences", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_person_experiences", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.integer "from_year" @@ -2438,7 +2438,7 @@ t.index ["university_id"], name: "idx_on_university_id_0b815cf13a" end - create_table "university_person_involvements", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.integer "kind" @@ -2497,7 +2497,7 @@ t.index ["university_id"], name: "index_university_role_localizations_on_university_id" end - create_table "university_roles", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "university_roles", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.datetime "created_at", null: false t.datetime "deleted_at" t.integer "position", null: false @@ -2509,7 +2509,7 @@ t.index ["university_id"], name: "index_university_roles_on_university_id" end - create_table "user_favorites", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "user_favorites", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "about_id", null: false t.string "about_type", null: false t.datetime "created_at", null: false @@ -2519,7 +2519,7 @@ t.index ["user_id"], name: "index_user_favorites_on_user_id" end - create_table "users", id: :uuid, default: -> { "public.gen_random_uuid()" }, force: :cascade do |t| + create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.integer "brevo_contact_id" t.datetime "confirmation_sent_at", precision: nil t.string "confirmation_token" @@ -2568,6 +2568,17 @@ add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id" add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" + add_foreign_key "administration_academic_year_localizations", "administration_academic_years", column: "about_id" + add_foreign_key "administration_academic_year_localizations", "languages" + add_foreign_key "administration_academic_year_localizations", "universities" + add_foreign_key "administration_academic_years", "universities" + add_foreign_key "administration_cohort_localizations", "administration_cohorts", column: "about_id" + add_foreign_key "administration_cohort_localizations", "languages" + add_foreign_key "administration_cohort_localizations", "universities" + add_foreign_key "administration_cohorts", "administration_academic_years", column: "academic_year_id" + add_foreign_key "administration_cohorts", "education_programs", column: "program_id" + add_foreign_key "administration_cohorts", "education_schools", column: "school_id" + add_foreign_key "administration_cohorts", "universities" add_foreign_key "administration_location_localizations", "administration_locations", column: "about_id" add_foreign_key "administration_location_localizations", "languages" add_foreign_key "administration_location_localizations", "universities" @@ -2783,17 +2794,6 @@ add_foreign_key "communication_website_posts", "universities" add_foreign_key "communication_websites", "languages", column: "default_language_id" add_foreign_key "communication_websites", "universities" - add_foreign_key "education_academic_year_localizations", "education_academic_years", column: "about_id" - add_foreign_key "education_academic_year_localizations", "languages" - add_foreign_key "education_academic_year_localizations", "universities" - add_foreign_key "education_academic_years", "universities" - add_foreign_key "education_cohort_localizations", "education_cohorts", column: "about_id" - add_foreign_key "education_cohort_localizations", "languages" - add_foreign_key "education_cohort_localizations", "universities" - add_foreign_key "education_cohorts", "education_academic_years", column: "academic_year_id" - add_foreign_key "education_cohorts", "education_programs", column: "program_id" - add_foreign_key "education_cohorts", "education_schools", column: "school_id" - add_foreign_key "education_cohorts", "universities" add_foreign_key "education_diploma_localizations", "education_diplomas", column: "about_id" add_foreign_key "education_diploma_localizations", "languages" add_foreign_key "education_diploma_localizations", "universities" diff --git a/test/controllers/extranet/alumni/academic_years_controller_test.rb b/test/controllers/extranet/alumni/academic_years_controller_test.rb index 6cd2f6a94b..b9201c1284 100644 --- a/test/controllers/extranet/alumni/academic_years_controller_test.rb +++ b/test/controllers/extranet/alumni/academic_years_controller_test.rb @@ -4,12 +4,12 @@ class Extranet::Alumni::AcademicYearsControllerTest < ActionDispatch::Integratio include ExtranetSetup def test_index - get alumni_education_academic_years_path(lang: french) + get alumni_administration_academic_years_path(lang: french) assert_response(:success) end def test_show - get alumni_education_academic_year_path(education_academic_years(:twenty_two), lang: french) + get alumni_administration_academic_year_path(administration_academic_years(:twenty_two), lang: french) assert_response(:success) end end diff --git a/test/controllers/extranet/alumni/cohorts_controller_test.rb b/test/controllers/extranet/alumni/cohorts_controller_test.rb index 010aae9a94..228f0929ab 100644 --- a/test/controllers/extranet/alumni/cohorts_controller_test.rb +++ b/test/controllers/extranet/alumni/cohorts_controller_test.rb @@ -4,12 +4,12 @@ class Extranet::Alumni::CohortsControllerTest < ActionDispatch::IntegrationTest include ExtranetSetup def test_index - get alumni_education_cohorts_path(lang: french) + get alumni_administration_cohorts_path(lang: french) assert_response(:success) end def test_show - get alumni_education_cohort_path(education_cohorts(:default_cohort), lang: french) + get alumni_administration_cohort_path(administration_cohorts(:default_cohort), lang: french) assert_response(:success) end end diff --git a/test/fixtures/education/cohorts.yml b/test/fixtures/administration/cohorts.yml similarity index 100% rename from test/fixtures/education/cohorts.yml rename to test/fixtures/administration/cohorts.yml From 76d9fcd5cac2e5caa030ef7b8d30311c9d8fd1be Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:05:14 +0200 Subject: [PATCH 08/14] fix --- .../admin/administration/academic_years_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/administration/academic_years_controller.rb b/app/controllers/admin/administration/academic_years_controller.rb index 0cc37a47dd..a52e90899e 100644 --- a/app/controllers/admin/administration/academic_years_controller.rb +++ b/app/controllers/admin/administration/academic_years_controller.rb @@ -1,4 +1,4 @@ -class Admin::Administration::AcademicYearsController < Admin::Education::ApplicationController +class Admin::Administration::AcademicYearsController < Admin::Administration::ApplicationController load_and_authorize_resource class: Administration::AcademicYear, through: :current_university, through_association: :academic_years From 7499e5e3fb8fdb7f61379318b2204a5e38412f6d Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:14:28 +0200 Subject: [PATCH 09/14] nav --- app/models/administration.rb | 1 + app/views/admin/dashboard/namespace.html.erb | 2 +- config/locales/administration/en.yml | 5 ++++- config/locales/administration/fr.yml | 3 +++ config/navigation/admin/administration_navigation.rb | 3 +++ 5 files changed, 12 insertions(+), 2 deletions(-) diff --git a/app/models/administration.rb b/app/models/administration.rb index c69cde4c52..592a63ae79 100644 --- a/app/models/administration.rb +++ b/app/models/administration.rb @@ -11,6 +11,7 @@ def self.parts [University::Person::Alumnus, :admin_administration_alumni_path], [Administration::Cohort, :admin_administration_cohorts_path], [Administration::Location, :admin_administration_locations_path], + [Administration::AcademicYear, :admin_administration_academic_years_path], [Administration::Qualiopi, :admin_administration_qualiopi_criterions_path], ] end diff --git a/app/views/admin/dashboard/namespace.html.erb b/app/views/admin/dashboard/namespace.html.erb index ba8337b8f4..ab66aee72a 100644 --- a/app/views/admin/dashboard/namespace.html.erb +++ b/app/views/admin/dashboard/namespace.html.erb @@ -32,7 +32,7 @@ # administration.description.parts.qualiopi # research.description.parts.researcher # research.hal.description.parts.publication - key = "#{@namespace.to_s.underscore.gsub('/', '.')}.description.parts.#{class_name.to_s.demodulize.downcase}" + key = "#{@namespace.to_s.underscore.gsub('/', '.')}.description.parts.#{class_name.to_s.demodulize.underscore}" title = t "#{key}.title" description = t "#{key}.description" %> diff --git a/config/locales/administration/en.yml b/config/locales/administration/en.yml index f73cb2f260..36b96887e3 100644 --- a/config/locales/administration/en.yml +++ b/config/locales/administration/en.yml @@ -64,8 +64,11 @@ en: administration: description: parts: + academic_year: + description: Presentation of the academic years + title: Years alumnus: - description: Presentation of the students who have studied in the various courses. + description: Presentation of the students who have studied in the various courses title: Alumni cohort: description: Presentation of the cohorts of alumni diff --git a/config/locales/administration/fr.yml b/config/locales/administration/fr.yml index 5394f3d840..ec14ab7189 100644 --- a/config/locales/administration/fr.yml +++ b/config/locales/administration/fr.yml @@ -64,6 +64,9 @@ fr: administration: description: parts: + academic_year: + description: Présentation des années universitaires + title: Années alumnus: description: Présentation des étudiants et étudiantes ayant étudié dans les différentes formations title: Alumni diff --git a/config/navigation/admin/administration_navigation.rb b/config/navigation/admin/administration_navigation.rb index c3cf7c0c30..060bef23ca 100644 --- a/config/navigation/admin/administration_navigation.rb +++ b/config/navigation/admin/administration_navigation.rb @@ -20,6 +20,9 @@ primary.item :subnav_locations, t('administration.description.parts.location.title'), admin_administration_locations_path if can?(:read, Administration::Location) + primary.item :subnav_academic_years, + t('administration.description.parts.academic_year.title'), + admin_administration_academic_years_path if can?(:read, Administration::AcademicYear) primary.item :subnav_qualiopi, t('administration.description.parts.qualiopi.title'), admin_administration_qualiopi_criterions_path, From db954e1c5d2c5c4cb740437144e7cb31ed93aaa5 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:18:58 +0200 Subject: [PATCH 10/14] move fixture --- test/fixtures/{education => administration}/academic_years.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/fixtures/{education => administration}/academic_years.yml (100%) diff --git a/test/fixtures/education/academic_years.yml b/test/fixtures/administration/academic_years.yml similarity index 100% rename from test/fixtures/education/academic_years.yml rename to test/fixtures/administration/academic_years.yml From 8213c45ae88f657bc8b5fb1d2756d38d01560409 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:28:02 +0200 Subject: [PATCH 11/14] fix --- app/models/ability/admin.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/ability/admin.rb b/app/models/ability/admin.rb index 09324cd1f4..35c551dc83 100644 --- a/app/models/ability/admin.rb +++ b/app/models/ability/admin.rb @@ -30,8 +30,6 @@ def admin_education # Necessaire pour l'affichage des tableaux de bord # https://github.com/osunyorg/admin/pull/2491 can :manage, University::Person::Localization::Teacher - can :manage, Administration::AcademicYear, university_id: @user.university_id - can :manage, Administration::Cohort, university_id: @user.university_id can :manage, Education::Diploma, university_id: @user.university_id can :manage, Education::Program, university_id: @user.university_id can :manage, Education::Program::Category, university_id: @user.university_id @@ -99,8 +97,10 @@ def admin_communication_extranet def admin_administration # Necessaire pour l'affichage des tableaux de bord # https://github.com/osunyorg/admin/pull/2491 - can :manage, University::Person::Alumnus - can :manage, Administration::Location + can :manage, University::Person::Alumnus, university_id: @user.university_id + can :manage, Administration::Location, university_id: @user.university_id + can :manage, Administration::AcademicYear, university_id: @user.university_id + can :manage, Administration::Cohort, university_id: @user.university_id can :read, Administration::Qualiopi can :read, Administration::Qualiopi::Criterion can :read, Administration::Qualiopi::Indicator From a16562be3f74bb8727ba0dff99eb00fa76c1e6bd Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:53:09 +0200 Subject: [PATCH 12/14] remove export_csv --- config/locales/en.yml | 1 - config/locales/fr.yml | 1 - 2 files changed, 2 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 774217d2f1..9b89adae69 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -423,7 +423,6 @@ en: finished_with_errors: Finished with errors pending: Pending export: Export (xlsx) - export_csv: Exporter (csv) false: No featured_image: alt: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b2b15fc45e..5d6d02f4aa 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -424,7 +424,6 @@ fr: finished_with_errors: Traité avec des erreurs pending: En cours de traitement export: Exporter (xlsx) - export_csv: Exporter (csv) false: Non featured_image: alt: From efe4fb8094eebeca9c2ef70f72419d2078130406 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 15:53:48 +0200 Subject: [PATCH 13/14] remove --- app/controllers/admin/administration/alumni_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/admin/administration/alumni_controller.rb b/app/controllers/admin/administration/alumni_controller.rb index 0ffe171c8d..e52bfbe993 100644 --- a/app/controllers/admin/administration/alumni_controller.rb +++ b/app/controllers/admin/administration/alumni_controller.rb @@ -19,7 +19,6 @@ def index filename = "alumni-#{Time.now.strftime("%Y%m%d%H%M%S")}.xlsx" response.headers['Content-Disposition'] = "attachment; filename=#{filename}" } - format.csv end end From bee258c1ff03b2c2ac01b14af66eb957947e3688 Mon Sep 17 00:00:00 2001 From: Arnaud Levy Date: Thu, 25 Jun 2026 16:51:04 +0200 Subject: [PATCH 14/14] fix --- config/navigation/admin_university_navigation.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/navigation/admin_university_navigation.rb b/config/navigation/admin_university_navigation.rb index f8a9216239..03b29d6d8b 100644 --- a/config/navigation/admin_university_navigation.rb +++ b/config/navigation/admin_university_navigation.rb @@ -7,7 +7,7 @@ def load_realm(realm, menu) realm.parts.each do |part| name = part.first identifier = name.to_s.to_sym - key = "#{realm.to_s.downcase}.description.parts.#{name.to_s.demodulize.downcase}.title" + key = "#{realm.to_s.downcase}.description.parts.#{name.to_s.demodulize.underscore}.title" label = I18n.t(key) path = send part.last, lang: current_language.iso_code menu.item identifier, label, path if can?(:read, name)
<%= Education::AcademicYear.human_attribute_name('year') %><%= Education::Cohort.model_name.human(count: 2) %><%= Administration::AcademicYear.human_attribute_name('year') %><%= Administration::Cohort.model_name.human(count: 2) %> <%= University::Person::Alumnus.model_name.human(count: 2) %>