diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb index f4de3cad85950389462247e0008c08badc0bb63c..7dd4201622409c85aed1ef46a1dfea5d035422b2 100644 --- a/app/models/university/organization.rb +++ b/app/models/university/organization.rb @@ -37,6 +37,9 @@ class University::Organization < ApplicationRecord include WithUniversity include WithSlug + has_many :experiences, + class_name: 'University::Person::Experience' + has_summernote :text has_one_attached_deletable :logo diff --git a/app/models/university/person.rb b/app/models/university/person.rb index d04e0786ade5d10e984926dd602aec4f4497771d..247d6682e6acd12b9f58e4366de786c7a027c121 100644 --- a/app/models/university/person.rb +++ b/app/models/university/person.rb @@ -87,6 +87,8 @@ class University::Person < ApplicationRecord through: :education_programs, source: :websites + has_many :experiences + accepts_nested_attributes_for :involvements validates_presence_of :first_name, :last_name diff --git a/app/models/university/person/alumnus/import.rb b/app/models/university/person/alumnus/import.rb index 7bfc413b4a29796ca14e68396bdaacc161e96002..9f76a1cbbab70cb52f55a595ce8214e8c14c3b32 100644 --- a/app/models/university/person/alumnus/import.rb +++ b/app/models/university/person/alumnus/import.rb @@ -29,10 +29,15 @@ class University::Person::Alumnus::Import < ApplicationRecord protected def parse + # substitute local data for testing + substitutes = { + 'c6b78fac-0a5f-4c44-ad22-4ee68ed382bb' => '23279cab-8bc1-4c75-bcd8-1fccaa03ad55' + } csv.each do |row| - # row['program'] = '23279cab-8bc1-4c75-bcd8-1fccaa03ad55' #TMP local fix + program_id = row['program'] + program_id = substitutes[program_id] if substitutes.has_key? program_id program = university.education_programs - .find_by(id: row['program']) + .find_by(id: program_id) next if program.nil? academic_year = university.academic_years .where(year: row['year']) @@ -44,6 +49,7 @@ class University::Person::Alumnus::Import < ApplicationRecord first_name = clean_encoding row['first_name'] last_name = clean_encoding row['last_name'] email = clean_encoding(row['mail']).to_s.downcase + next if first_name.blank? && last_name.blank? && email.blank? url = clean_encoding row['url'] if email.present? person = university.people @@ -59,8 +65,6 @@ class University::Person::Alumnus::Import < ApplicationRecord # TODO all fields # gender # birth - # phone_professional - # phone_personal # address # zipcode # city @@ -72,10 +76,46 @@ class University::Person::Alumnus::Import < ApplicationRecord person.linkedin ||= row['social_linkedin'] person.biography ||= row['biography'] person.phone ||= row['mobile'] + person.phone ||= row['phone_personal'] + person.phone ||= row['phone_professional'] byebug unless person.valid? person.save cohort.people << person unless person.in?(cohort.people) add_picture person, row['photo'] + + company_name = clean_encoding row['company_name'] + company_siren = clean_encoding row['company_siren'] + company_nic = clean_encoding row['company_nic'] + if company_name.present? + if !row['company_siren'].blank? && !row['company_nic'].blank? + organization = university.organizations + .find_by siren: company_siren, + nic: company_nic + elsif !row['company_siren'].blank? + organization ||= university.organizations + .find_by siren: company_siren + end + if !company_name.blank? + organization ||= university.organizations + .find_by name: company_name + end + organization ||= university.organizations + .where( name: company_name, + siren: company_siren, + nic: company_nic) + .first_or_create + experience_job = row['experience_job'] + experience_from = row['experience_from'] + experience_to = row['experience_to'] + experience = person.experiences + .where(university: university, + organization: organization, + description: experience_job) + .first_or_create + experience.from_year = experience_from + experience.to_year = experience_to + experience.save + end end end diff --git a/app/models/university/person/experience.rb b/app/models/university/person/experience.rb new file mode 100644 index 0000000000000000000000000000000000000000..d4b2dbb112f48ca84c38004278f68e798eec4d32 --- /dev/null +++ b/app/models/university/person/experience.rb @@ -0,0 +1,33 @@ +# == Schema Information +# +# Table name: university_person_experiences +# +# id :uuid not null, primary key +# description :text +# from_year :integer +# to_year :integer +# created_at :datetime not null +# updated_at :datetime not null +# organization_id :uuid not null, indexed +# person_id :uuid not null, indexed +# university_id :uuid not null, indexed +# +# Indexes +# +# index_university_person_experiences_on_organization_id (organization_id) +# index_university_person_experiences_on_person_id (person_id) +# index_university_person_experiences_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_18125d90df (person_id => university_people.id) +# fk_rails_38aaa18a3b (organization_id => university_organizations.id) +# fk_rails_923d0b71fd (university_id => universities.id) +# +class University::Person::Experience < ApplicationRecord + include WithUniversity + belongs_to :person + belongs_to :organization + + scope :ordered, -> { order(from_year: :desc)} +end diff --git a/app/views/admin/university/person/alumnus/imports/new.html.erb b/app/views/admin/university/person/alumnus/imports/new.html.erb index 054e172030d79c0935f3844fd04518ef8363b213..95f80f95249f7127eca0549d61230dd6577237e0 100644 --- a/app/views/admin/university/person/alumnus/imports/new.html.erb +++ b/app/views/admin/university/person/alumnus/imports/new.html.erb @@ -97,6 +97,30 @@ <th>social_linkedin</th> <td>https://www.linkedin.com/in/stephanedupond</td> </tr> + <tr> + <th>company_name</th> + <td>Le Monde</td> + </tr> + <tr> + <th>company_siren</th> + <td>433891850</td> + </tr> + <tr> + <th>company_nic</th> + <td>00052</td> + </tr> + <tr> + <th>experience_job</th> + <td>Journaliste</td> + </tr> + <tr> + <th>experience_from</th> + <td>2018</td> + </tr> + <tr> + <th>experience_to</th> + <td>2021</td> + </tr> </tbody> </table> </div> diff --git a/app/views/extranet/organizations/show.html.erb b/app/views/extranet/organizations/show.html.erb index 0794ba8fd7b373246a382b9e2001f33240b492fe..b2137522e47431d90ad31d42c1ebb9889c3a9023 100644 --- a/app/views/extranet/organizations/show.html.erb +++ b/app/views/extranet/organizations/show.html.erb @@ -3,3 +3,14 @@ <header class="mb-5"> <h1><%= @organization %></h1> </header> + +<ul> + <% @organization.experiences.ordered.each do |experience| %> + <li> + <%= link_to experience.person, experience.person %> + <%= experience.description %> + <%= experience.from_year %> + <%= experience.to_year %> + </li> + <% end %> +</ul> diff --git a/app/views/extranet/persons/show.html.erb b/app/views/extranet/persons/show.html.erb index 9cedca1d9e3674e7d8de6f21188620fabfdf2f15..93deb12bd5f73983ed6eb7bf00c0b5aa12e7acc6 100644 --- a/app/views/extranet/persons/show.html.erb +++ b/app/views/extranet/persons/show.html.erb @@ -18,6 +18,16 @@ <div class="row"> <div class="col-md-6"> <p><%= @person.biography %></p> + <ul> + <% @person.experiences.ordered.each do |experience| %> + <li> + <%= experience.description %> + <%= experience.from_year %> + <%= experience.to_year %> + <%= link_to experience.organization, experience.organization %> + </li> + <% end %> + </ul> </div> <div class="offset-md-3 col-md-3"> <dl> diff --git a/db/migrate/20220413203256_create_university_person_experiences.rb b/db/migrate/20220413203256_create_university_person_experiences.rb new file mode 100644 index 0000000000000000000000000000000000000000..45b366a82628eca25e420324081f1c1dd3dc33f7 --- /dev/null +++ b/db/migrate/20220413203256_create_university_person_experiences.rb @@ -0,0 +1,14 @@ +class CreateUniversityPersonExperiences < ActiveRecord::Migration[6.1] + def change + create_table :university_person_experiences, id: :uuid do |t| + t.references :university, null: false, foreign_key: true, type: :uuid + t.references :person, null: false, foreign_key: {to_table: :university_people}, type: :uuid + t.references :organization, null: false, foreign_key: {to_table: :university_organizations}, type: :uuid + t.text :description + t.integer :from_year + t.integer :to_year + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 319a9edd7885e533b6d3c52d2f871c378708ba44..66fe4a4cea285e11a5f21094a0e732ac9954773d 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.define(version: 2022_04_13_071151) do +ActiveRecord::Schema.define(version: 2022_04_13_203256) do # These are extensions that must be enabled in order to support this database enable_extension "pgcrypto" @@ -687,6 +687,20 @@ ActiveRecord::Schema.define(version: 2022_04_13_071151) do t.index ["user_id"], name: "index_university_person_alumnus_imports_on_user_id" end + create_table "university_person_experiences", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| + t.uuid "university_id", null: false + t.uuid "person_id", null: false + t.uuid "organization_id", null: false + t.text "description" + t.integer "from_year" + t.integer "to_year" + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["organization_id"], name: "index_university_person_experiences_on_organization_id" + t.index ["person_id"], name: "index_university_person_experiences_on_person_id" + t.index ["university_id"], name: "index_university_person_experiences_on_university_id" + end + create_table "university_person_involvements", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t| t.uuid "university_id", null: false t.uuid "person_id", null: false @@ -831,6 +845,9 @@ ActiveRecord::Schema.define(version: 2022_04_13_071151) do add_foreign_key "university_people", "users" add_foreign_key "university_person_alumnus_imports", "universities" add_foreign_key "university_person_alumnus_imports", "users" + add_foreign_key "university_person_experiences", "universities" + add_foreign_key "university_person_experiences", "university_organizations", column: "organization_id" + add_foreign_key "university_person_experiences", "university_people", column: "person_id" add_foreign_key "university_person_involvements", "universities" add_foreign_key "university_person_involvements", "university_people", column: "person_id" add_foreign_key "university_roles", "universities" diff --git a/test/fixtures/university/person/experiences.yml b/test/fixtures/university/person/experiences.yml new file mode 100644 index 0000000000000000000000000000000000000000..8dfb3071efd1885e4c0c59362875956a0b417cf4 --- /dev/null +++ b/test/fixtures/university/person/experiences.yml @@ -0,0 +1,43 @@ +# == Schema Information +# +# Table name: university_person_experiences +# +# id :uuid not null, primary key +# description :text +# from_year :integer +# to_year :integer +# created_at :datetime not null +# updated_at :datetime not null +# organization_id :uuid not null, indexed +# person_id :uuid not null, indexed +# university_id :uuid not null, indexed +# +# Indexes +# +# index_university_person_experiences_on_organization_id (organization_id) +# index_university_person_experiences_on_person_id (person_id) +# index_university_person_experiences_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_18125d90df (person_id => university_people.id) +# fk_rails_38aaa18a3b (organization_id => university_organizations.id) +# fk_rails_923d0b71fd (university_id => universities.id) +# +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + university: one + person: one + organization: one + description: MyText + from_year: 1 + to_year: + +two: + university: two + person: two + organization: two + description: MyText + from_year: 1 + to_year: diff --git a/test/models/university/person/experience_test.rb b/test/models/university/person/experience_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..9d00530004d28af415fa92b8362997695c90670e --- /dev/null +++ b/test/models/university/person/experience_test.rb @@ -0,0 +1,33 @@ +# == Schema Information +# +# Table name: university_person_experiences +# +# id :uuid not null, primary key +# description :text +# from_year :integer +# to_year :integer +# created_at :datetime not null +# updated_at :datetime not null +# organization_id :uuid not null, indexed +# person_id :uuid not null, indexed +# university_id :uuid not null, indexed +# +# Indexes +# +# index_university_person_experiences_on_organization_id (organization_id) +# index_university_person_experiences_on_person_id (person_id) +# index_university_person_experiences_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_18125d90df (person_id => university_people.id) +# fk_rails_38aaa18a3b (organization_id => university_organizations.id) +# fk_rails_923d0b71fd (university_id => universities.id) +# +require "test_helper" + +class University::Person::ExperienceTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end