From 0a3b9400a602a8d15055d8eec2b7398ab5cbaab5 Mon Sep 17 00:00:00 2001 From: Arnaud Levy <contact@arnaudlevy.com> Date: Wed, 27 Jul 2022 16:05:46 +0200 Subject: [PATCH] Fix #490 --- .../alumni/experiences_controller.rb | 3 +- app/models/university/person/experience.rb | 1 + .../experiences/_experience_fields.html.erb | 75 ++++++++++--------- .../alumni/experiences/edit.html.erb | 32 ++++---- .../admin/university/alumni/show.html.erb | 39 ++++++---- config/locales/university/en.yml | 6 +- config/locales/university/fr.yml | 6 +- 7 files changed, 90 insertions(+), 72 deletions(-) diff --git a/app/controllers/admin/university/alumni/experiences_controller.rb b/app/controllers/admin/university/alumni/experiences_controller.rb index 29d1689b0..58c683bac 100644 --- a/app/controllers/admin/university/alumni/experiences_controller.rb +++ b/app/controllers/admin/university/alumni/experiences_controller.rb @@ -30,7 +30,8 @@ class Admin::University::Alumni::ExperiencesController < Admin::University::Appl def experiences_params params.require(:university_person) - .permit(experiences_attributes: [:id, :organization_id, :university_id, :from_year, :to_year, :_destroy]) + .permit(experiences_attributes: [:id, :organization_id, :university_id, :description, :from_year, :to_year, :_destroy]) + .merge(university_id: current_university.id) end end diff --git a/app/models/university/person/experience.rb b/app/models/university/person/experience.rb index 3cee8c334..4785cae2f 100644 --- a/app/models/university/person/experience.rb +++ b/app/models/university/person/experience.rb @@ -26,6 +26,7 @@ # class University::Person::Experience < ApplicationRecord include WithUniversity + belongs_to :person belongs_to :organization, class_name: "University::Organization" diff --git a/app/views/admin/university/alumni/experiences/_experience_fields.html.erb b/app/views/admin/university/alumni/experiences/_experience_fields.html.erb index eb6b7bd84..2b431acba 100644 --- a/app/views/admin/university/alumni/experiences/_experience_fields.html.erb +++ b/app/views/admin/university/alumni/experiences/_experience_fields.html.erb @@ -1,44 +1,47 @@ -<% include_id ||= false %> +<% +include_id ||= false +hint = can?(:create, University::Organization) ? t('university.person.experience.no_organization_hint_html', url: new_admin_university_organization_path) : + t('university.person.experience.no_organization_hint_no_access_html') +%> <div class="nested-fields"> <div class="card mb-3"> <div class="card-body"> - <div class="row"> - <div class="col-md-5"> - <%= f.input :university_id, - as: :hidden, - input_html: { value: current_university.id }, - wrapper: false %> - <%= f.association :organization, - collection: current_university.organizations.ordered, - label: false, - include_blank: t('simple_form.include_blanks.defaults.organization'), - hint: can?(:create, University::Organization) ? t('university.person.experience.no_organization_hint_html', url: new_admin_university_organization_path) : - t('university.person.experience.no_organization_hint_no_access_html'), - required: true, - wrapper: false %> + <div class="d-flex"> + <div class="row flex-fill"> + <div class="col-md-6 col-xxl-4"> + <%= f.input :university_id, + as: :hidden, + input_html: { value: current_university.id }, + wrapper: false %> + <%= f.association :organization, + collection: current_university.organizations.ordered, + include_blank: t('simple_form.include_blanks.defaults.organization'), + hint: hint, + required: true, + wrapper: false %> + </div> + <div class="col-md-6 col-xxl-4"> + <%= f.input :description, as: :string %> + </div> + <div class="col-md-6 col-xxl-2"> + <%= f.input :from_year, + as: :select, + collection: ((Time.now.year).downto(1950)), + include_blank: University::Person::Experience.human_attribute_name('from_year'), + wrapper: false %> + </div> + <div class="col-md-6 col-xxl-2"> + <%= f.input :to_year, + as: :select, + collection: ((Time.now.year).downto(1950)), + include_blank: University::Person::Experience.human_attribute_name('to_year'), + wrapper: false %> + </div> </div> - <div class="col-md-3"> - <%= f.input :from_year, - as: :select, - collection: ((Time.now.year).downto(1950)), - label: false, - include_blank: University::Person::Experience.human_attribute_name('from_year'), - required: true, - wrapper: false %> - </div> - <div class="col-md-3"> - <%= f.input :to_year, - as: :select, - collection: ((Time.now.year).downto(1950)), - label: false, - include_blank: University::Person::Experience.human_attribute_name('to_year'), - required: true, - wrapper: false %> - </div> - <div class="col-md-1 text-end"> + <div> <%= link_to_remove_association '<i class="fas fa-times"></i>'.html_safe, - f, - class: 'btn btn-sm btn-danger' %> + f, + class: 'btn btn-sm btn-danger' %> </div> </div> </div> diff --git a/app/views/admin/university/alumni/experiences/edit.html.erb b/app/views/admin/university/alumni/experiences/edit.html.erb index e21fe1ce8..6e203626c 100644 --- a/app/views/admin/university/alumni/experiences/edit.html.erb +++ b/app/views/admin/university/alumni/experiences/edit.html.erb @@ -6,25 +6,21 @@ <%= f.error_notification %> <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> - <div class="row"> - - <div class="col-md-2"> - <%= link_to_add_association t('add'), f, :experiences, - class: button_classes, - data: { - 'association-insertion-method': 'append', - 'association-insertion-node': '#experiences', - } %> - - </div> + <div class="mb-3"> + <%= link_to_add_association t('add'), + f, + :experiences, + class: button_classes, + data: { + 'association-insertion-method': 'append', + 'association-insertion-node': '#experiences', + } %> + </div> - <div class="col-md-10"> - <div id="experiences"> - <%= f.simple_fields_for :experiences, @alumnus.experiences.sort_by(&:from_year).reverse, include_id: false do |experience_f| %> - <%= render 'admin/university/alumni/experiences/experience_fields', f: experience_f, include_id: true %> - <% end %> - </div> - </div> + <div id="experiences"> + <%= f.simple_fields_for :experiences, @alumnus.experiences.ordered, include_id: false do |experience_f| %> + <%= render 'admin/university/alumni/experiences/experience_fields', f: experience_f, include_id: true %> + <% end %> </div> <% content_for :action_bar_right do %> diff --git a/app/views/admin/university/alumni/show.html.erb b/app/views/admin/university/alumni/show.html.erb index fe27cf2c6..b87024b41 100644 --- a/app/views/admin/university/alumni/show.html.erb +++ b/app/views/admin/university/alumni/show.html.erb @@ -22,23 +22,36 @@ <div class="card-header"> <h2 class="card-title mb-0 h5"><%= University::Person::Experience.model_name.human(count: @alumnus.experiences.count) %></h2> </div> - <div class="card-body"> - <ul class="list-unstyled"> - <% @alumnus.experiences.ordered.each do |experience| %> - <% organization = experience.organization %> - <li> - <%= link_to_if can?(:read, organization), organization, [:admin, organization] %> - <%= "(#{experience.from_year} - #{experience.to_year.present? ? experience.to_year : t('today')})" if experience.from_year %> - </li> - <% end %> - </ul> - </div> + <table class="table"> + <thead> + <tr> + <th><%= University::Person::Experience.human_attribute_name('description') %></th> + <th><%= University::Person::Experience.human_attribute_name('organization') %></th> + <th><%= University::Person::Experience.human_attribute_name('from_year') %></th> + <th><%= University::Person::Experience.human_attribute_name('to_year') %></th> + </tr> + </thead> + <tbody> + <% @alumnus.experiences.ordered.each do |experience| %> + <% organization = experience.organization %> + <tr> + <td><%= experience.description %></td> + <td><%= link_to_if can?(:read, organization), organization, [:admin, organization] %></td> + <td><%= experience.from_year %></td> + <td><%= experience.to_year %></td> + </tr> + <% end %> + </tbody> + </table> </div> <% end %> <% content_for :action_bar_right do %> <%= edit_link @alumnus %> - <%= link_to t('university.manage_cohorts'), cohorts_admin_university_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %> - <%= link_to t('university.manage_experiences'), experiences_admin_university_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %> + <%= link_to t('university.manage_cohorts'), + cohorts_admin_university_alumnus_path(@alumnus), + class: button_classes if can?(:update, @alumnus) %> + <%= link_to t('university.manage_experiences'), experiences_admin_university_alumnus_path(@alumnus), + class: button_classes if can?(:update, @alumnus) %> <% end %> diff --git a/config/locales/university/en.yml b/config/locales/university/en.yml index 9dd425381..5f5cfdffb 100644 --- a/config/locales/university/en.yml +++ b/config/locales/university/en.yml @@ -69,6 +69,8 @@ en: user: User zipcode: Zipcode university/person/experience: + description: Description + organization: Organization from_year: Start year to_year: End year university/person/involvement: @@ -170,8 +172,8 @@ en: person: administrator_roles: Administrator roles experience: - no_organization_hint_html: "If the organization is not in the list,<br>you can <a href=\"%{url}\">create it</a>" - no_organization_hint_no_access_html: "If the organization is not in the list,<br>you should ask to create it" + no_organization_hint_html: "If the organization is not in the list, you can <a href=\"%{url}\">create it</a>" + no_organization_hint_no_access_html: "If the organization is not in the list, you should ask to create it" period: Period taught_programs: Taught programs sso: SSO diff --git a/config/locales/university/fr.yml b/config/locales/university/fr.yml index 372231343..e02d65e3a 100644 --- a/config/locales/university/fr.yml +++ b/config/locales/university/fr.yml @@ -69,6 +69,8 @@ fr: user: Utilisateur zipcode: Code postal university/person/experience: + description: Description + organization: Organisation from_year: Année de début to_year: Année de fin university/person/involvement: @@ -170,8 +172,8 @@ fr: person: administrator_roles: Rôles administratifs experience: - no_organization_hint_html: "Si l'entreprise n'apparait pas dans la liste,<br>vous pouvez la <a href=\"%{url}\">créer</a>" - no_organization_hint_no_access_html: "Si l'entreprise n'apparait pas dans la liste,<br>il faut demander à la créer" + no_organization_hint_html: "Si l'entreprise n'apparait pas dans la liste, vous pouvez la <a href=\"%{url}\">créer</a>" + no_organization_hint_no_access_html: "Si l'entreprise n'apparait pas dans la liste, il faut demander à la créer" period: Période taught_programs: Formations enseignées sso: SSO -- GitLab