Skip to content
Snippets Groups Projects
Commit f48c8ef1 authored by Arnaud Levy's avatar Arnaud Levy
Browse files

Merge branch 'master' of github.com:noesya/osuny

parents 51cdf685 1c5beb9b
No related branches found
No related tags found
No related merge requests found
Showing
with 140 additions and 63 deletions
......@@ -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
......@@ -41,12 +40,11 @@ class Admin::University::People::AlumniController < Admin::University::Applicati
super
add_breadcrumb University::Person::Alumnus.model_name.human(count: 2),
admin_university_people_alumni_path
add_breadcrumb @alumnus, admin_university_person_alumnus_path(@alumnus) if @alumnus
add_breadcrumb @alumnus, admin_university_people_alumni_path(@alumnus) if @alumnus
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
class Communication::Block::Template::File < Communication::Block::Template
def build_git_dependencies
add_dependency active_storage_blobs
files.each do |file|
add_dependency file.blob
end
end
def files
......
......@@ -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'
......
......@@ -3,7 +3,9 @@ module Filters
def initialize(user)
super
add_search
add :for_about_type, ::Communication::Extranet::about_types.compact.map { |r| { to_s: I18n.t("activerecord.attributes.communication/extranet.about_#{r}"), id: r } }, I18n.t('filters.attributes.kind')
add :for_about_type,
::Communication::Extranet::about_types.compact.map { |r| { to_s: I18n.t("activerecord.attributes.communication/extranet.about_#{r}"), id: r } },
I18n.t('filters.attributes.kind')
end
end
end
......@@ -3,9 +3,26 @@ module Filters
def initialize(user, website)
super(user)
add_search
add :for_author, website.authors.ordered, I18n.t('filters.attributes.element', element: I18n.t('activerecord.attributes.communication/website/post.author').downcase)
add :for_category, website.categories, I18n.t('filters.attributes.element', element: I18n.t('activerecord.models.communication/website/category.one').downcase), false, true
add :for_pinned, [{ to_s: I18n.t('true'), id: 'true' }, { to_s: I18n.t('false'), id: 'false' }], I18n.t('filters.attributes.element', element: I18n.t('admin.communication.website.post.pinned_status').downcase)
add :for_author,
website.authors.ordered,
I18n.t(
'filters.attributes.element',
element: I18n.t('activerecord.attributes.communication/website/post.author').downcase
)
add :for_category,
website.categories,
I18n.t(
'filters.attributes.element',
element: Communication::Website::Category.model_name.human.downcase
),
false,
true
add :for_pinned,
[{ to_s: I18n.t('true'), id: 'true' }, { to_s: I18n.t('false'), id: 'false' }],
I18n.t(
'filters.attributes.element',
element: I18n.t('admin.communication.website.post.pinned_status').downcase
)
end
end
end
......@@ -3,7 +3,9 @@ module Filters
def initialize(user)
super
add_search
add :for_about_type, ::Communication::Website::about_types.compact.map { |r| { to_s: I18n.t("activerecord.attributes.communication/website.about_#{r}"), id: r } }, I18n.t('filters.attributes.kind')
add :for_about_type,
::Communication::Website::about_types.compact.map { |r| { to_s: I18n.t("activerecord.attributes.communication/website.about_#{r}"), id: r } },
I18n.t('filters.attributes.kind')
end
end
end
......@@ -7,10 +7,8 @@ module Filters
user.university.education_diplomas,
I18n.t(
'filters.attributes.element',
element: I18n.t('activerecord.models.education/diploma.one').downcase
),
false,
false
element: Education::Diploma.model_name.human.downcase
)
end
end
end
......@@ -7,7 +7,7 @@ module Filters
user.university.education_programs,
I18n.t(
'filters.attributes.element',
element: I18n.t('activerecord.models.education/program.one').downcase
element: Education::Program.model_name.human.downcase
),
false,
true
......
......@@ -7,7 +7,7 @@ module Filters
user.university.education_programs,
I18n.t(
'filters.attributes.element',
element: I18n.t('activerecord.models.education/program.one').downcase
element: Education::Program.model_name.human.downcase
),
false,
true
......
......@@ -3,7 +3,9 @@ module Filters
def initialize(user)
super
add_search
add :for_kind, ::University::Organization::kinds.keys.map { |r| { to_s: I18n.t("enums.university.organization.kind.#{r}"), id: r } }, I18n.t('filters.attributes.kind')
add :for_kind,
::University::Organization::kinds.keys.map { |r| { to_s: I18n.t("enums.university.organization.kind.#{r}"), id: r } },
I18n.t('filters.attributes.kind')
end
end
end
......@@ -3,7 +3,9 @@ module Filters
def initialize(user)
super
add_search
add :for_role, ::University::Person::LIST_OF_ROLES.map { |r| { to_s: I18n.t("activerecord.attributes.university/person.#{r}"), id: r } }, I18n.t('filters.attributes.role')
add :for_role,
::University::Person::LIST_OF_ROLES.map { |r| { to_s: I18n.t("activerecord.attributes.university/person.#{r}"), id: r } },
I18n.t('filters.attributes.role')
end
end
end
module Filters
class Admin::University::People::Alumni < Filters::Base
def initialize(user)
super
add_search
add :for_program,
user.university.education_programs,
I18n.t(
'filters.attributes.element',
element: Education::Program.model_name.human.downcase
),
false,
true
add :for_academic_year,
user.university.academic_years.ordered,
I18n.t(
'filters.attributes.element',
element: Education::AcademicYear.model_name.human.downcase
)
end
end
end
module Filters
class Admin::University::Person::Alumni < Filters::Base
def initialize(user)
super
add_search
end
end
end
......@@ -3,7 +3,9 @@ module Filters
def initialize(user)
super
add_search
add :for_role, ::User.roles.keys.map { |r| { to_s: I18n.t("activerecord.attributes.user.roles.#{r}"), id: r } }, I18n.t('filters.attributes.role')
add :for_role,
::User.roles.keys.map { |r| { to_s: I18n.t("activerecord.attributes.user.roles.#{r}"), id: r } },
I18n.t('filters.attributes.role')
end
end
end
<% content_for :title, @cohort %>
<p>
<strong>Program:</strong>
<%= link_to @cohort.program, [:admin, @cohort.program] %>
</p>
<p>
<strong>Academic year:</strong>
<%= link_to @cohort.academic_year, [:admin, @cohort.academic_year] %>
</p>
<div class="row">
<div class="col-md-8">
<div class="card flex-fill w-100">
<div class="card-body">
<h3 class="h5"><%= Education::Cohort.human_attribute_name('program') %></h3>
<p><%= link_to_if can?(:read, @cohort.program), @cohort.program, [:admin, @cohort.program] %></p>
<h3 class="h5"><%= Education::Cohort.human_attribute_name('year') %></h3>
<p><%= link_to_if can?(:read, @cohort.academic_year), @cohort.academic_year, [:admin, @cohort.academic_year] %></p>
</div>
</div>
</div>
</div>
<h2><%= University::Person::Alumnus.model_name.human(count: 2) %></h2>
......
......@@ -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_person_alumnus_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,8 +20,8 @@
<div class="col-md-10">
<div id="cohorts">
<%= f.simple_fields_for :cohorts, @alumnus.cohorts.ordered, include_id: false do |cohort_f| %>
<%= render 'admin/university/person/alumni/cohort_fields', f: cohort_f, include_id: true %>
<%= 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>
</div>
......
......@@ -2,19 +2,23 @@
<%= render 'admin/university/people/main_infos', person: @alumnus %>
<%= render 'admin/university/person/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 %>
<%= edit_link @alumnus %>
<%= link_to t('university.manage_cohorts'), edit_cohorts_admin_university_person_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %>
<%= link_to t('university.manage_cohorts'), edit_cohorts_admin_university_people_alumnus_path(@alumnus), class: button_classes if can?(:update, @alumnus) %>
<% end %>
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