diff --git a/app/controllers/extranet/experiences_controller.rb b/app/controllers/extranet/experiences_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..72a2538afb050929412c0096de3896edf84c9227 --- /dev/null +++ b/app/controllers/extranet/experiences_controller.rb @@ -0,0 +1,44 @@ +class Extranet::ExperiencesController < Extranet::ApplicationController + load_and_authorize_resource class: University::Person::Experience, + through: :current_user, + through_association: :experiences + def new + breadcrumb + end + + def edit + breadcrumb + end + + def create + @experience.university = current_university + if @experience.save + redirect_to account_path, notice: 'Ok' + else + breadcrumb + render :new + end + end + + def update + if @experience.update experience_params + redirect_to account_path, notice: 'Ok' + else + breadcrumb + render :edit + end + end + + protected + + def experience_params + params.require(:university_person_experience) + .permit(:description, :from_year, :to_year, :organization_id) + end + + def breadcrumb + super + add_breadcrumb t('extranet.account.my'), account_path + add_breadcrumb @experience + end +end \ No newline at end of file diff --git a/app/models/university/person/experience.rb b/app/models/university/person/experience.rb index 4785cae2f7fb248eadc7a51fd914ffbe5cd7bb09..10e5976298194425240406c6d8a9d2f893e28c0b 100644 --- a/app/models/university/person/experience.rb +++ b/app/models/university/person/experience.rb @@ -31,4 +31,9 @@ class University::Person::Experience < ApplicationRecord belongs_to :organization, class_name: "University::Organization" scope :ordered, -> { order(from_year: :desc)} + + def to_s + persisted? ? "#{description}" + : self.class.human_attribute_name('new') + end end diff --git a/app/models/user/with_person.rb b/app/models/user/with_person.rb index 15057f8b558824e136cf876180b4a8c9762393aa..4e095ff6333a8abea03d42c34970be3d13b1266b 100644 --- a/app/models/user/with_person.rb +++ b/app/models/user/with_person.rb @@ -4,6 +4,8 @@ module User::WithPerson included do has_one :person, class_name: 'University::Person', dependent: :nullify + delegate :experiences, to: :person + after_create_commit :find_or_create_person, unless: :server_admin? end diff --git a/app/views/extranet/account/show.html.erb b/app/views/extranet/account/show.html.erb index b0e49e8328d81b159d03e21fdff77db17fb3f638..f0cee236908e924aa597d514185435ebfe62767f 100644 --- a/app/views/extranet/account/show.html.erb +++ b/app/views/extranet/account/show.html.erb @@ -12,11 +12,13 @@ </div> <div class="experiences"> <p class="mb-4">Parcours professionel</p> - <%= link_to 'Ajouter une expérience', '', class: 'btn btn-sm btn-primary mb-4' %> + <%= link_to University::Person::Experience.human_attribute_name('new'), + new_experience_path, + class: 'btn btn-sm btn-primary mb-4' %> <% if @person.experiences.any? %> <ul> <% @person.experiences.ordered.each do |experience| %> - <%= render 'extranet/persons/experience', experience: experience, edit: true %> + <%= render 'extranet/experiences/experience', experience: experience, edit: true %> <% end %> </ul> <% end %> diff --git a/app/views/extranet/persons/_experience.html.erb b/app/views/extranet/experiences/_experience.html.erb similarity index 82% rename from app/views/extranet/persons/_experience.html.erb rename to app/views/extranet/experiences/_experience.html.erb index f5c49059a6c155cbd1e4705ad9708d08a8bddd98..73a8f1e6795519b88e5c62b67ce6ba6e11862a84 100644 --- a/app/views/extranet/persons/_experience.html.erb +++ b/app/views/extranet/experiences/_experience.html.erb @@ -8,7 +8,9 @@ edit ||= false <%= "#{experience.from_year} —" if experience.from_year %> <%= experience.to_year || t('today') %> </p> - <%= link_to 'Modifier cette expérience', '', class: 'btn btn-sm btn-primary mt-2' if edit %> + <%= link_to University::Person::Experience.human_attribute_name('edit'), + edit_experience_path(experience), + class: 'btn btn-sm btn-primary mt-2' if edit %> </div> <div> <% if experience.organization.present? %> diff --git a/app/views/extranet/experiences/_form.html.erb b/app/views/extranet/experiences/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..32e17ddcb92b0ec4841f2ed9f7debabb56b422c7 --- /dev/null +++ b/app/views/extranet/experiences/_form.html.erb @@ -0,0 +1,7 @@ +<%= simple_form_for experience, url: experience.persisted? ? experience_path(experience) : experiences_path do |f| %> + <%= f.association :organization %> + <%= f.input :description %> + <%= f.input :from_year %> + <%= f.input :to_year %> + <%= submit f %> +<% end %> \ No newline at end of file diff --git a/app/views/extranet/experiences/edit.html.erb b/app/views/extranet/experiences/edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..acfba4993cd514add045f930bcb215301e21d5d6 --- /dev/null +++ b/app/views/extranet/experiences/edit.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, @experience %> + +<%= render 'form', experience: @experience %> \ No newline at end of file diff --git a/app/views/extranet/experiences/new.html.erb b/app/views/extranet/experiences/new.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..acfba4993cd514add045f930bcb215301e21d5d6 --- /dev/null +++ b/app/views/extranet/experiences/new.html.erb @@ -0,0 +1,3 @@ +<% content_for :title, @experience %> + +<%= render 'form', experience: @experience %> \ No newline at end of file diff --git a/app/views/extranet/persons/show.html.erb b/app/views/extranet/persons/show.html.erb index 426038b11b108c706b71f4c17c5253a7b706c0f7..ad3730db9f88516722aaf8f7cc3eef93837b44d1 100644 --- a/app/views/extranet/persons/show.html.erb +++ b/app/views/extranet/persons/show.html.erb @@ -12,7 +12,7 @@ <p class="mb-4">Parcours professionel</p> <ul> <% @person.experiences.ordered.each do |experience| %> - <%= render 'extranet/persons/experience', experience: experience %> + <%= render 'extranet/experiences/experience', experience: experience %> <% end %> </ul> </div> diff --git a/config/locales/en.yml b/config/locales/en.yml index 1fc6eabd7c9d169ccfdd07526f22a76ae02e2d44..81d8721d041f8b765046598b0036baaf8552c619 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -159,12 +159,6 @@ en: finished: Finished finished_with_errors: Finished with errors pending: Pending - extranet: - account: - my: My account - edit: Edit - updated: Updated - logout: Log out false: No featured_image: title: Image diff --git a/config/locales/extranet/en.yml b/config/locales/extranet/en.yml new file mode 100644 index 0000000000000000000000000000000000000000..a71ded4f915ebe3cccbcaac513083f5d4b7fc47c --- /dev/null +++ b/config/locales/extranet/en.yml @@ -0,0 +1,7 @@ +en: + extranet: + account: + my: My account + edit: Edit + updated: Updated + logout: Log out diff --git a/config/locales/extranet/fr.yml b/config/locales/extranet/fr.yml new file mode 100644 index 0000000000000000000000000000000000000000..4c4347226ba279c169357b181e615faf20f443f7 --- /dev/null +++ b/config/locales/extranet/fr.yml @@ -0,0 +1,9 @@ +fr: + extranet: + experiences: + new: Ajouter une expérience + account: + my: Mon compte + edit: Modifier + updated: Mise à jour effectuée + logout: Déconnexion diff --git a/config/locales/fr.yml b/config/locales/fr.yml index f4512be94a0f35af994e7123bce880290b867876..50fb3b6871d3b6ce0bb66b5c6b686cbb5ac089d3 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -162,12 +162,6 @@ fr: finished: Traité finished_with_errors: Traité avec des erreurs pending: En cours de traitement - extranet: - account: - my: Mon compte - edit: Modifier - updated: Mise à jour effectuée - logout: Déconnexion false: Non featured_image: title: Image diff --git a/config/locales/university/en.yml b/config/locales/university/en.yml index 9c88adb86e694f7c2cae6831686beb76b0db290e..9baf021dc21cc4c260d8cce2f59bf39dd50a52d9 100644 --- a/config/locales/university/en.yml +++ b/config/locales/university/en.yml @@ -73,6 +73,7 @@ en: organization: Organization from_year: Start year to_year: End year + new: Add experience university/person/involvement: description: Mission (in this context) person: Person diff --git a/config/locales/university/fr.yml b/config/locales/university/fr.yml index b80dd0997d5afe2ef10799f1fe1ad8319e0c020b..6ce31cfefe91ca626136e7b49e30fab0e00a4096 100644 --- a/config/locales/university/fr.yml +++ b/config/locales/university/fr.yml @@ -70,8 +70,10 @@ fr: zipcode: Code postal university/person/experience: description: Description - organization: Organisation + edit: Modifier l'expérience from_year: Année de début + new: Ajouter une expérience + organization: Organisation to_year: Année de fin university/person/involvement: description: Mission (dans ce contexte) diff --git a/config/routes/extranet.rb b/config/routes/extranet.rb index 6870b88c5115cfe69cdb37b37634771fee245d39..905cf1b2eef45cb2310f08f964e68e03a71fe12b 100644 --- a/config/routes/extranet.rb +++ b/config/routes/extranet.rb @@ -1,12 +1,15 @@ -get 'cohorts' => 'extranet/cohorts#index', as: :education_cohorts -get 'cohorts/:id' => 'extranet/cohorts#show', as: :education_cohort -get 'organizations' => 'extranet/organizations#index', as: :university_organizations +get 'cohorts' => 'extranet/cohorts#index', as: :education_cohorts +get 'cohorts/:id' => 'extranet/cohorts#show', as: :education_cohort +get 'organizations' => 'extranet/organizations#index', as: :university_organizations get 'organizations/:id' => 'extranet/organizations#show', as: :university_organization -get 'persons' => 'extranet/persons#index', as: :university_persons -get 'persons/:id' => 'extranet/persons#show', as: :university_person -get 'years' => 'extranet/academic_years#index', as: :education_academic_years -get 'years/:id' => 'extranet/academic_years#show', as: :education_academic_year -get 'account' => 'extranet/account#show', as: :account -get 'account/edit' => 'extranet/account#edit', as: :edit_account -patch 'account' => 'extranet/account#update' +get 'persons' => 'extranet/persons#index', as: :university_persons +get 'persons/:id' => 'extranet/persons#show', as: :university_person +get 'years' => 'extranet/academic_years#index', as: :education_academic_years +get 'years/:id' => 'extranet/academic_years#show', as: :education_academic_year +get 'account' => 'extranet/account#show', as: :account +get 'account/edit' => 'extranet/account#edit', as: :edit_account +patch 'account' => 'extranet/account#update' +scope :account do + resources :experiences, controller: 'extranet/experiences', except: [:index, :show] +end root to: 'extranet/home#index'