Skip to content
Snippets Groups Projects
Commit 9bb08120 authored by pabois's avatar pabois
Browse files

wip alumni

parent 511165ac
No related branches found
No related tags found
No related merge requests found
......@@ -24,15 +24,14 @@ class Admin::University::People::AlumniController < Admin::University::Applicati
end
def update_cohorts
# TODO
# if @alumnus.update(alumnus_params)
# redirect_to [:admin, @alumnus],
# notice: t('admin.successfully_updated_html', model: @alumnus.to_s)
# else
# render :edit
# breadcrumb
# add_breadcrumb t('edit')
# end
if @alumnus.update(alumnus_params)
redirect_to admin_university_people_alumnus_path(@alumnus),
notice: t('admin.successfully_updated_html', model: @alumnus.to_s)
else
render :edit_cohorts
breadcrumb
add_breadcrumb t('edit')
end
end
protected
......@@ -45,8 +44,7 @@ class Admin::University::People::AlumniController < Admin::University::Applicati
end
def alumnus_params
# TODO: Permit nested attrs
params.require(:university_person_alumnus)
.permit()
params.require(:university_person)
.permit(cohorts_attributes: [:id, :program_id, :university_id, :year, :_destroy])
end
end
......@@ -33,6 +33,8 @@ class Education::AcademicYear < ApplicationRecord
class_name: 'University::Person',
through: :cohorts
validates :year, numericality: { only_integer: true, greater_than: 0 }
scope :ordered, -> { order(year: :desc) }
def cohorts_in_context(context)
......
......@@ -27,17 +27,21 @@ class Education::Cohort < ApplicationRecord
belongs_to :program,
class_name: 'Education::Program'
alias_attribute :education_program, :program
alias_attribute :education_program, :program
belongs_to :academic_year,
class_name: 'Education::AcademicYear'
alias_attribute :education_academic_year, :academic_year
alias_attribute :education_academic_year, :academic_year
has_and_belongs_to_many :people,
class_name: 'University::Person',
foreign_key: 'education_cohort_id',
association_foreign_key: 'university_person_id'
validates_associated :academic_year, :program
validates :year, presence: true
before_validation :set_university_id, on: :create
scope :ordered, -> {
includes(:academic_year).order('education_academic_years.year DESC')
}
......@@ -45,4 +49,18 @@ class Education::Cohort < ApplicationRecord
def to_s
"#{program} #{academic_year} #{name}"
end
def year
academic_year&.year
end
def year=(val)
self.academic_year = Education::AcademicYear.where(university_id: university_id, year: val).first_or_create
end
private
def set_university_id
self.university_id = self.program.university_id
end
end
......@@ -21,7 +21,7 @@ module University::Person::WithEducation
has_many :experiences
has_and_belongs_to_many :cohorts,
class_name: 'Education::Cohort',
class_name: '::Education::Cohort',
foreign_key: 'university_person_id',
association_foreign_key: 'education_cohort_id'
......
......@@ -4,6 +4,10 @@
<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 :program,
collection: collection_tree(current_university.education_programs),
label_method: ->(p) { sanitize p[:label] },
......@@ -14,10 +18,12 @@
wrapper: false %>
</div>
<div class="col-md-6">
<%#= f.input :description,
as: :string,
<%= f.input :year,
as: :select,
collection: ((Time.now.year + 5).downto(1950)),
label: false,
placeholder: University::Person::Involvement.human_attribute_name('description'),
include_blank: t('simple_form.include_blanks.defaults.year'),
required: true,
wrapper: false %>
</div>
<div class="col-md-1 text-end">
......
......@@ -2,7 +2,7 @@
<h2 class="h3"><%= Education::Program.model_name.human(count: 2) %></h2>
<%= simple_form_for [:admin, @alumnus], url: edit_cohorts_admin_university_people_alumni_path(@alumnus) do |f| %>
<%= simple_form_for [:admin, @alumnus], url: edit_cohorts_admin_university_people_alumnus_path(@alumnus) do |f| %>
<%= f.error_notification %>
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
......@@ -20,7 +20,7 @@
<div class="col-md-10">
<div id="cohorts">
<%= f.simple_fields_for :cohorts, @alumnus.cohorts.ordered, include_id: false do |cohort_f| %>
<%= f.simple_fields_for :cohorts, @alumnus.cohorts.sort_by { |c| [c.year ? 0 : 1, c.year] }.reverse, include_id: false do |cohort_f| %>
<%= render 'admin/university/people/alumni/cohort_fields', f: cohort_f, include_id: true %>
<% end %>
</div>
......
......@@ -2,16 +2,20 @@
<%= render 'admin/university/people/main_infos', person: @alumnus %>
<%= render 'admin/university/people/alumni/show/cohorts', cohorts: @cohorts, param_name: 'cohorts_page' %>
<%# TODO: remove %>
<% if @alumnus.cohorts.any? %>
<h2><%= Education::Cohort.model_name.human(count: @alumnus.cohorts.count) %></h2>
<% @alumnus.cohorts.each do |cohort| %>
<%= link_to cohort, [:admin, cohort] %>
<% end %>
<div class="card flex-fill w-100">
<div class="card-header">
<h2 class="card-title mb-0 h5"><%= Education::Cohort.model_name.human(count: @alumnus.cohorts.count) %></h2>
</div>
<div class="card-body">
<ul class="list-unstyled">
<% @alumnus.cohorts.ordered.each do |cohort| %>
<li><%= link_to cohort, [:admin, cohort] %></li>
<% end %>
</ul>
</div>
</div>
<% end %>
<%# end TODO %>
<% content_for :action_bar_right do %>
......
<% param_name ||= :page %>
<% if cohorts.total_count > 0 %>
<div class="card">
<div class="card-header">
<h2 class="card-title mb-0 h5"><%= "#{Education::Cohort.model_name.human(count: 2)} (#{cohorts.total_count})" %></h2>
</div>
<table class="table">
<thead>
<tr>
<th><%= Education::Cohort.human_attribute_name('program') %></th>
<th><%= Education::Cohort.human_attribute_name('academic_year') %></th>
<th></th>
</tr>
</thead>
<tbody>
<% cohorts.each do |cohort| %>
<% program = cohort.program %>
<tr>
<td><%= link_to_if can?(:read, program), program, [:admin, program] %></td>
<td><%= program.level_i18n %></td>
<td><%= cohort.academic_year %></td>
<td class="text-end">
<div class="btn-group" role="group">
<%= link_to t('edit'),
'#',
class: button_classes if can?(:update, cohort) %>
<%= link_to t('delete'),
'#',
method: :delete,
data: { confirm: t('please_confirm') },
class: button_classes_danger if can?(:destroy, cohort) %>
</div>
</td>
</tr>
<% end %>
</tbody>
</table>
<% if cohorts.total_pages > 1 %>
<div class="card-footer">
<%= paginate cohorts, theme: 'bootstrap-5', param_name: param_name %>
</div>
<% end %>
</div>
<% end %>
......@@ -129,6 +129,9 @@ en:
linkedin: "Example: https://www.linkedin.com/in/osuny"
tenure: "To differ from temporary lecturer."
twitter: "Example: osuny"
include_blanks:
defaults:
year: Select year
enums:
university:
organization:
......
......@@ -129,6 +129,9 @@ fr:
linkedin: "Exemple : https://www.linkedin.com/in/osuny"
tenure: "À différencier d'une personne vacataire."
twitter: "Exemple : osuny"
include_blanks:
defaults:
year: Sélectionnez une année
enums:
university:
organization:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment