diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index eb9e3641d..ae246705f 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -29,13 +29,6 @@ def show super end - def new - %w[DE EN FR].each do |language| - @person.language_skills.push(LanguageSkill.new({ language: language, level: 'A1' })) - end - super - end - def create set_nationality2 super diff --git a/app/domain/ptime/people_employees.rb b/app/domain/ptime/people_employees.rb index 125534e6d..4e3af2105 100644 --- a/app/domain/ptime/people_employees.rb +++ b/app/domain/ptime/people_employees.rb @@ -1,5 +1,8 @@ module Ptime class PeopleEmployees + ATTRIBUTES_MAPPING = { full_name: :name, shortname: :shortname, email: :email, marital_status: + :marital_status, graduation: :title, birthdate: :birthdate, + location: :location }.freeze def create_or_find(ptime_employee_id) raise 'No ptime_employee_id provided' unless ptime_employee_id @@ -7,38 +10,30 @@ def create_or_find(ptime_employee_id) return person unless person.nil? new_person = Person.new(ptime_employee_id: ptime_employee_id) - %w[DE EN FR].each do |language| - new_person.language_skills.push(LanguageSkill.new({ language: language, level: 'A1' })) - end + update_person_data(new_person) end # rubocop:disable Metrics def update_person_data(person) - attribute_mapping = { full_name: :name, shortname: :shortname, email: :email, marital_status: - :marital_status, graduation: :title, birthdate: :birthdate, - location: :location }.freeze - - begin - raise 'Person has no ptime_employee_id' unless person.ptime_employee_id + raise 'Person has no ptime_employee_id' unless person.ptime_employee_id - ptime_employee = Ptime::Client.new.request(:get, "employees/#{person.ptime_employee_id}") - rescue CustomExceptions::PTimeClientError - raise "Ptime_employee with ptime_employee_id #{person.ptime_employee_id} not found" - else - ptime_employee[:attributes].each do |key, value| - if key.to_sym.in?(attribute_mapping.keys) - person[attribute_mapping[key.to_sym]] = (value.presence || '-') - end + ptime_employee = Ptime::Client.new.request(:get, "employees/#{person.ptime_employee_id}") + rescue CustomExceptions::PTimeTemporarlyUnavailableError + nil + else + ptime_employee[:attributes].each do |key, value| + if key.to_sym.in?(ATTRIBUTES_MAPPING.keys) + person[ATTRIBUTES_MAPPING[key.to_sym]] = (value.presence || '-') end - ptime_employee_employed = ptime_employee[:attributes][:is_employeed] - person.company = Company.find_by(name: ptime_employee_employed ? 'Firma' : 'Ex-Mitarbeiter') - ptime_employee_nationalities = ptime_employee[:attributes][:nationalities] - person.nationality = ptime_employee_nationalities[0] - person.nationality2 = ptime_employee_nationalities[1] - person.save! - person end + ptime_employee_employed = ptime_employee[:attributes][:is_employeed] + person.company = Company.find_by(name: ptime_employee_employed ? 'Firma' : 'Ex-Mitarbeiter') + ptime_employee_nationalities = ptime_employee[:attributes][:nationalities] + person.nationality = ptime_employee_nationalities[0] + person.nationality2 = ptime_employee_nationalities[1] + person.save! + person end # rubocop:enable Metrics end diff --git a/app/models/person.rb b/app/models/person.rb index 09a88f47c..a8e2f5c3d 100644 --- a/app/models/person.rb +++ b/app/models/person.rb @@ -27,6 +27,8 @@ class Person < ApplicationRecord include PgSearch::Model + after_initialize :set_default_languages + belongs_to :company belongs_to :department, optional: true @@ -103,4 +105,10 @@ def picture_size errors.add(:picture, 'grösse kann maximal 10MB sein') end + + def set_default_languages + %w[DE EN FR].each do |language| + language_skills.push(LanguageSkill.new({ language: language, level: 'A1' })) + end + end end