From 686e202138dffd14bdbf54eb71f8536c3c1d4a35 Mon Sep 17 00:00:00 2001 From: Jannik Pulfer Date: Wed, 23 Jul 2025 15:39:58 +0200 Subject: [PATCH 1/5] Updated ptime sync to match ptime api changes --- app/domain/ptime/assign_employee_ids.rb | 2 +- app/domain/ptime/people_employees.rb | 4 ++-- spec/domain/ptime/people_employees_spec.rb | 2 +- spec/fixtures/files/json/all_ptime_employees_company.json | 6 +++--- spec/fixtures/files/json/all_ptime_employees_partner.json | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/domain/ptime/assign_employee_ids.rb b/app/domain/ptime/assign_employee_ids.rb index 889942f9d..782932ba8 100644 --- a/app/domain/ptime/assign_employee_ids.rb +++ b/app/domain/ptime/assign_employee_ids.rb @@ -44,7 +44,7 @@ def map_employees(should_map) matched_person = Person.where(ptime_employee_id: nil, ptime_data_provider: nil) .find_by(email:) - is_employed = ptime_employee[:attributes][:is_employed] + is_employed = ptime_employee[:attributes][:has_relevant_employment] next record_unmatched_entry(ptime_employee) unless matched_person && is_employed @mapped_people_count += 1 diff --git a/app/domain/ptime/people_employees.rb b/app/domain/ptime/people_employees.rb index fe4a7fe40..1b1921623 100644 --- a/app/domain/ptime/people_employees.rb +++ b/app/domain/ptime/people_employees.rb @@ -30,7 +30,7 @@ def update_people_data(is_manual_sync: false) def update_all_people fetch_data_of_ptime_employees_by_provider.each do |provider, provider_employees| active_employees, inactive_employees = provider_employees.partition do |ptime_employee| - ptime_employee.dig(:attributes, :is_employed) + ptime_employee.dig(:attributes, :has_relevant_employment) end @provider = provider @update_failed_names[provider] = [] @@ -82,7 +82,7 @@ def update_directly_mappable_attributes end def update_indirectly_mappable_attributes - is_employed = @ptime_employee_attributes[:is_employed] + is_employed = @ptime_employee_attributes[:has_relevant_employment] @person.company = is_employed ? @employed_company : @unemployed_company @person.department = Department.find_or_create_by!( name: @ptime_employee_attributes[:department_name] diff --git a/spec/domain/ptime/people_employees_spec.rb b/spec/domain/ptime/people_employees_spec.rb index b72a44a8a..678b35b51 100644 --- a/spec/domain/ptime/people_employees_spec.rb +++ b/spec/domain/ptime/people_employees_spec.rb @@ -69,7 +69,7 @@ end def check_person_data_updated(person, employee_data) - is_employed = employee_data[:is_employed] + is_employed = employee_data[:has_relevant_employment] expect(person.name.eql?(employee_full_name(employee_data))).to eql(is_employed) expect(person.email.eql?(employee_data[:email])).to eql(is_employed) diff --git a/spec/fixtures/files/json/all_ptime_employees_company.json b/spec/fixtures/files/json/all_ptime_employees_company.json index 0a33c715f..8792d11fd 100644 --- a/spec/fixtures/files/json/all_ptime_employees_company.json +++ b/spec/fixtures/files/json/all_ptime_employees_company.json @@ -13,7 +13,7 @@ "graduation" : "Flashing lights", "city" : "Bern", "birthday" : "1990-03-10", - "is_employed" : true, + "has_relevant_employment" : true, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ @@ -43,7 +43,7 @@ "graduation" : "MSc in writing", "city" : "Genf", "birthday" : "2001-01-05", - "is_employed" : true, + "has_relevant_employment" : true, "department_shortname" : "D3", "department_name" : "/dev/tre", "employment_roles" : [ @@ -73,7 +73,7 @@ "graduation" : "Can't tell me nothing", "city" : "Thun", "birthday" : "1980-10-25", - "is_employed" : false, + "has_relevant_employment" : false, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ diff --git a/spec/fixtures/files/json/all_ptime_employees_partner.json b/spec/fixtures/files/json/all_ptime_employees_partner.json index 3fc222c4a..f4c4e66df 100644 --- a/spec/fixtures/files/json/all_ptime_employees_partner.json +++ b/spec/fixtures/files/json/all_ptime_employees_partner.json @@ -13,7 +13,7 @@ "graduation" : "Very interesting graduation", "city" : "Zürich", "birthday" : "1990-03-10", - "is_employed" : true, + "has_relevant_employment" : true, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ From 2b2eaea8b821de9329c41f86a6605653dcbc8c1c Mon Sep 17 00:00:00 2001 From: Jannik Pulfer Date: Thu, 24 Jul 2025 13:28:59 +0200 Subject: [PATCH 2/5] Update ptime sync to match new api changes, where there is an attr for current and future employments --- app/domain/ptime/assign_employee_ids.rb | 5 +++-- app/domain/ptime/people_employees.rb | 4 ++-- app/helpers/ptime_helper.rb | 5 +++++ spec/domain/ptime/people_employees_spec.rb | 2 +- .../fixtures/files/json/all_ptime_employees_company.json | 9 ++++++--- .../fixtures/files/json/all_ptime_employees_partner.json | 3 ++- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/domain/ptime/assign_employee_ids.rb b/app/domain/ptime/assign_employee_ids.rb index 782932ba8..649ec084a 100644 --- a/app/domain/ptime/assign_employee_ids.rb +++ b/app/domain/ptime/assign_employee_ids.rb @@ -40,11 +40,12 @@ def map_employees(should_map) @mapped_people_count = 0 @provider_employees.each do |ptime_employee| - email = ptime_employee[:attributes][:email] + employee_attributes = ptime_employee[:attributes] + email = employee_attributes[:email] matched_person = Person.where(ptime_employee_id: nil, ptime_data_provider: nil) .find_by(email:) - is_employed = ptime_employee[:attributes][:has_relevant_employment] + is_employed = employee_is_or_will_be_employed?(employee_attributes) next record_unmatched_entry(ptime_employee) unless matched_person && is_employed @mapped_people_count += 1 diff --git a/app/domain/ptime/people_employees.rb b/app/domain/ptime/people_employees.rb index 1b1921623..3eca84e6f 100644 --- a/app/domain/ptime/people_employees.rb +++ b/app/domain/ptime/people_employees.rb @@ -30,7 +30,7 @@ def update_people_data(is_manual_sync: false) def update_all_people fetch_data_of_ptime_employees_by_provider.each do |provider, provider_employees| active_employees, inactive_employees = provider_employees.partition do |ptime_employee| - ptime_employee.dig(:attributes, :has_relevant_employment) + employee_is_or_will_be_employed?(ptime_employee[:attributes]) end @provider = provider @update_failed_names[provider] = [] @@ -82,7 +82,7 @@ def update_directly_mappable_attributes end def update_indirectly_mappable_attributes - is_employed = @ptime_employee_attributes[:has_relevant_employment] + is_employed = employee_is_or_will_be_employed?(@ptime_employee_attributes) @person.company = is_employed ? @employed_company : @unemployed_company @person.department = Department.find_or_create_by!( name: @ptime_employee_attributes[:department_name] diff --git a/app/helpers/ptime_helper.rb b/app/helpers/ptime_helper.rb index 2c21da132..0330d2f0f 100644 --- a/app/helpers/ptime_helper.rb +++ b/app/helpers/ptime_helper.rb @@ -3,6 +3,11 @@ def employee_full_name(ptime_employee) "#{ptime_employee[:firstname]} #{ptime_employee[:lastname]}" end + def employee_is_or_will_be_employed?(ptime_employee_attributes) + ptime_employee_attributes[:is_employed] || + ptime_employee_attributes[:employed_within_three_months] + end + def ptime_providers @provider_configs = ENV.filter { |env_var| env_var.start_with?('PTIME_PROVIDER') } .sort diff --git a/spec/domain/ptime/people_employees_spec.rb b/spec/domain/ptime/people_employees_spec.rb index 678b35b51..4dbfddd18 100644 --- a/spec/domain/ptime/people_employees_spec.rb +++ b/spec/domain/ptime/people_employees_spec.rb @@ -69,7 +69,7 @@ end def check_person_data_updated(person, employee_data) - is_employed = employee_data[:has_relevant_employment] + is_employed = employee_is_or_will_be_employed?(employee_data) expect(person.name.eql?(employee_full_name(employee_data))).to eql(is_employed) expect(person.email.eql?(employee_data[:email])).to eql(is_employed) diff --git a/spec/fixtures/files/json/all_ptime_employees_company.json b/spec/fixtures/files/json/all_ptime_employees_company.json index 8792d11fd..fd4d13935 100644 --- a/spec/fixtures/files/json/all_ptime_employees_company.json +++ b/spec/fixtures/files/json/all_ptime_employees_company.json @@ -13,7 +13,8 @@ "graduation" : "Flashing lights", "city" : "Bern", "birthday" : "1990-03-10", - "has_relevant_employment" : true, + "is_employed" : true, + "employed_within_three_months" : false, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ @@ -43,7 +44,8 @@ "graduation" : "MSc in writing", "city" : "Genf", "birthday" : "2001-01-05", - "has_relevant_employment" : true, + "is_employed" : false, + "employed_within_three_months" : true, "department_shortname" : "D3", "department_name" : "/dev/tre", "employment_roles" : [ @@ -73,7 +75,8 @@ "graduation" : "Can't tell me nothing", "city" : "Thun", "birthday" : "1980-10-25", - "has_relevant_employment" : false, + "is_employed" : false, + "employed_within_three_months" : false, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ diff --git a/spec/fixtures/files/json/all_ptime_employees_partner.json b/spec/fixtures/files/json/all_ptime_employees_partner.json index f4c4e66df..852e95803 100644 --- a/spec/fixtures/files/json/all_ptime_employees_partner.json +++ b/spec/fixtures/files/json/all_ptime_employees_partner.json @@ -13,7 +13,8 @@ "graduation" : "Very interesting graduation", "city" : "Zürich", "birthday" : "1990-03-10", - "has_relevant_employment" : true, + "is_employed" : true, + "employed_within_three_months" : false, "department_shortname" : "UX", "department_name" : "/ux", "employment_roles" : [ From 1bad314f7ffa4d4c82f12919059316e62f416a8b Mon Sep 17 00:00:00 2001 From: Jannik Pulfer Date: Thu, 24 Jul 2025 14:25:57 +0200 Subject: [PATCH 3/5] Update manual sync translations to use the word members instead of people --- config/locales/de-CH.yml | 6 +++--- config/locales/de.yml | 6 +++--- config/locales/fr.yml | 6 +++--- config/locales/it.yml | 6 +++--- config/locales/ja.yml | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/config/locales/de-CH.yml b/config/locales/de-CH.yml index 56f664511..f8e3481bc 100644 --- a/config/locales/de-CH.yml +++ b/config/locales/de-CH.yml @@ -150,20 +150,20 @@ de-CH: index: delete_inactive_profiles: Inaktivi Profiu löschä unify_skills: Skills vereinä - update_people_manually: Persone manuell aktualisiere + update_people_manually: Members manuell aktualisiere reminder_mail: Aktivier Erinnerigs E-Mails für d Firma. manual_ptime_sync: manual_sync: failed_people_updates: Bi dr Aktualisierig vo %{names} isch öppis schiefgloffe. Versuechs nomau und überprüef auefaus d Date im PuzzleTime. fetching_data_failed: Öppis ische bim fetche vo de Date usem PuzzleTime schief gloffe. Bitte probiers nomau und kontaktier auefaus dr Support. names_by_provider: "%{names} vom Provider %{provider}" - people_updated: D Datä vo aunä Personä si erfolgriich aktualisiert wordä + people_updated: D Datä vo aunä Members si erfolgriich aktualisiert wordä unified_skills: create: success: Skill %{skill1} isch erfolgriich mit Skill %{skill2} zum neuä Skill %{new_skill} vereint wordä admin/manual_ptime_sync: index: - description: We dä wunderschön Chnopf drückt wird, de wärde d Date vo aune Persone mit de Date usem PuzzleTime aktualisiert. Ds cha einigi Sekunde duure. + description: We dä wunderschön Chnopf drückt wird, de wärde d Date vo aune Members mit de Date usem PuzzleTime aktualisiert. Ds cha einigi Sekunde duure. admin/people_management: index: ex_members_title: Di folgendä Profiu si aus 'Ex-Mitarbeiter' markiert diff --git a/config/locales/de.yml b/config/locales/de.yml index b09c8b66d..25c9bc3a0 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -150,20 +150,20 @@ de: index: delete_inactive_profiles: Inaktive Profile löschen unify_skills: Skills vereinen - update_people_manually: Personen manuell aktualisieren + update_people_manually: Members manuell aktualisieren reminder_mail: Aktiviere Erinnerungs E-Mails für die Firma. manual_ptime_sync: manual_sync: failed_people_updates: Bei der Aktualisierung von %{names} ist etwas schiefgelaufen. Versuche es erneut und überprüfe allenfalls die Daten im PuzzleTime. fetching_data_failed: Etwas ist schiefgelaufen, als versucht wurde die Daten aus dem PuzzleTime zu fetchen. Bitte versuche es erneut und kontaktiere allenfalls den Support. names_by_provider: "%{names} vom Provider %{provider}" - people_updated: Die Daten aller Personen wurden erfolgreich aktualisiert + people_updated: Die Daten aller Members wurden erfolgreich aktualisiert unified_skills: create: success: Skill %{skill1} wurde erfolgreich mit Skill %{skill2} zum neuen Skill %{new_skill} vereint admin/manual_ptime_sync: index: - description: Wenn dieser wunderschöne Knopf gedrückt wird, dann werden die Daten aller Personen mit den Daten aus dem PuzzleTime aktualisiert. Dies kann einige Sekunden dauern. + description: Wenn dieser wunderschöne Knopf gedrückt wird, dann werden die Daten aller Members mit den Daten aus dem PuzzleTime aktualisiert. Dies kann einige Sekunden dauern. admin/people_management: index: ex_members_title: Die folgenden Profile sind als Ex-Mitarbeiter markiert diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 0b0234895..cba0d9ef2 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -146,20 +146,20 @@ fr: index: delete_inactive_profiles: Supprimer les profils inactifs unify_skills: Unifier les compétences - update_people_manually: Mise à jour manuelle des personnes + update_people_manually: Mettre à jour les membres manuellement reminder_mail: Activez les e-mails de rappel pour votre entreprise. manual_ptime_sync: manual_sync: failed_people_updates: Une erreur s'est produite lors de la mise à jour de %{names}. Veuillez réessayer et, si nécessaire, vérifier les données dans PuzzleTime. fetching_data_failed: Une erreur s'est produite lors de la récupération des données de PuzzleTime. Veuillez réessayer et contacter le support si nécessaire. names_by_provider: "%{names} du fournisseur %{provider}" - people_updated: Les données de toutes les personnes ont été mises à jour avec succès + people_updated: Les données de tous les membres ont été mises à jour avec succès unified_skills: create: success: La compétence %{skill1} a été unifiée avec succès avec la compétence %{skill2} en la nouvelle compétence %{new_skill} admin/manual_ptime_sync: index: - description: Lorsque vous appuyez sur ce magnifique bouton, les données de toutes les personnes sont mises à jour avec celles de PuzzleTime. Ceci peut prendre quelques secondes. + description:Lorsque vous appuyez sur ce magnifique bouton, les données de tous les membres sont mises à jour avec les données provenant de PuzzleTime. Cela peut prendre quelques secondes. admin/people_management: index: ex_members_title: Les profils suivants sont marqués comme anciens employés diff --git a/config/locales/it.yml b/config/locales/it.yml index 6867d3c11..737203fc6 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -146,20 +146,20 @@ it: index: delete_inactive_profiles: Elimina profili inattivi unify_skills: Unire le competenze - update_people_manually: Aggiornare le persone manualmente + update_people_manually: Aggiornare manualmente i membri reminder_mail: Attiva le email di promemoria per la tua azienda. manual_ptime_sync: manual_sync: failed_people_updates: Si è verificato un errore durante l'aggiornamento di %{names}. Si prega di riprovare e, se necessario, controllare i dati in PuzzleTime. fetching_data_failed: Si è verificato un errore durante il recupero dei dati da PuzzleTime. Si prega di riprovare e contattare il supporto se necessario. names_by_provider: "%{names} del fornitore %{provider}" - people_updated: I dati di tutte le persone sono stati aggiornati con successo + people_updated: I dati di tutti i membri sono stati aggiornati con successo unified_skills: create: success: La competenza %{skill1} è stata unificata con successo con la competenza %{skill2} nella nuova competenza %{new_skill} admin/manual_ptime_sync: index: - description: Quando questo bellissimo pulsante viene premuto, i dati di tutte le persone verranno aggiornati con i dati di PuzzleTime. Questo potrebbe richiedere alcuni secondi. + description: Quando questo bellissimo pulsante viene premuto, i dati di tutti i membri verranno aggiornati con i dati di PuzzleTime. Questo potrebbe richiedere alcuni secondi. admin/people_management: index: ex_members_title: I seguenti profili sono contrassegnati come ex dipendenti diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 2809ddfd9..d3df0fa8d 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -146,20 +146,20 @@ ja: index: delete_inactive_profiles: 無効なプロファイルを削除 unify_skills: スキル統合 - update_people_manually: ユーザーを手動で更新 + update_people_manually: メンバーを手動で更新 reminder_mail: 会社のリマインダーメールを有効にする manual_ptime_sync: manual_sync: failed_people_updates: "%{names}の更新に失敗しました。再度お試しください。また、念のためPuzzleTime内のデータもご確認ください。" fetching_data_failed: PuzzleTimeからデータを取得しようとした際に問題が発生しました。お手数ですが再度お試しいただき、それでも解決しない場合はサポートにご連絡ください。 names_by_provider: "%{provider}の%{names}" - people_updated: すべてのユーザーのデータの更新に成功しました。 + people_updated: すべてのメンバーのデータが正常に更新されました。 unified_skills: create: success: スキル %{skill1} はスキル %{skill2} と統合され、新しいスキル %{new_skill} が作成されました admin/manual_ptime_sync: index: - description: この素敵なボタンが押されると、すべてのユーザーのデータがPuzzleTimeのデータをもとに更新されます。この処理には数秒かかる場合があります。 + description: このボタンを押すと、すべてのメンバーのデータが「PuzzleTime」のデータで更新されます。処理には数秒かかる場合があります。 admin/people_management: index: ex_members_title: 以下のプロファイルは元従業員としてマークされています From 6c379567d17dac2340f82089f97c058eddb60622 Mon Sep 17 00:00:00 2001 From: Jannik Pulfer Date: Thu, 24 Jul 2025 14:33:56 +0200 Subject: [PATCH 4/5] Fix formatting of fr translation file --- config/locales/fr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/fr.yml b/config/locales/fr.yml index cba0d9ef2..a49fb8313 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -159,7 +159,7 @@ fr: success: La compétence %{skill1} a été unifiée avec succès avec la compétence %{skill2} en la nouvelle compétence %{new_skill} admin/manual_ptime_sync: index: - description:Lorsque vous appuyez sur ce magnifique bouton, les données de tous les membres sont mises à jour avec les données provenant de PuzzleTime. Cela peut prendre quelques secondes. + description: Lorsque vous appuyez sur ce magnifique bouton, les données de tous les membres sont mises à jour avec les données provenant de PuzzleTime. Cela peut prendre quelques secondes. admin/people_management: index: ex_members_title: Les profils suivants sont marqués comme anciens employés From 607b2dfbf5e144d5906a8b9646ee140b319b8aa6 Mon Sep 17 00:00:00 2001 From: Jannik Pulfer Date: Thu, 24 Jul 2025 15:40:33 +0200 Subject: [PATCH 5/5] Fix specs --- spec/domain/ptime/people_employees_spec.rb | 2 +- spec/features/manual_ptime_sync_spec.rb | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/domain/ptime/people_employees_spec.rb b/spec/domain/ptime/people_employees_spec.rb index 4dbfddd18..c7ecb52ab 100644 --- a/spec/domain/ptime/people_employees_spec.rb +++ b/spec/domain/ptime/people_employees_spec.rb @@ -69,7 +69,7 @@ end def check_person_data_updated(person, employee_data) - is_employed = employee_is_or_will_be_employed?(employee_data) + is_employed = employee_data[:is_employed] || employee_data[:employed_within_three_months] expect(person.name.eql?(employee_full_name(employee_data))).to eql(is_employed) expect(person.email.eql?(employee_data[:email])).to eql(is_employed) diff --git a/spec/features/manual_ptime_sync_spec.rb b/spec/features/manual_ptime_sync_spec.rb index 4c5a07192..742b42af5 100644 --- a/spec/features/manual_ptime_sync_spec.rb +++ b/spec/features/manual_ptime_sync_spec.rb @@ -14,8 +14,8 @@ end it 'should successfully run manual ptime sync method and show flash' do - click_button('Personen manuell aktualisieren') - expect(page).to have_content('Die Daten aller Personen wurden erfolgreich aktualisiert') + click_button('Members manuell aktualisieren') + expect(page).to have_content('Die Daten aller Members wurden erfolgreich aktualisiert') longmax_attributes = ptime_company_employee_data.first[:attributes] bob_attributes = ptime_partner_employee_data.first[:attributes] @@ -27,7 +27,7 @@ it 'should show flash when employees have unexpected values' do longmax_attributes, bob_attributes = stub_invalid_ptime_response - click_button('Personen manuell aktualisieren') + click_button('Members manuell aktualisieren') expect(page).to have_content("Bei der Aktualisierung von #{employee_full_name(longmax_attributes)} vom Provider Firma und #{employee_full_name(bob_attributes)} vom Provider Partner ist etwas schiefgelaufen. Versuche es erneut und überprüfe allenfalls die Daten im PuzzleTime.".squish) @@ -37,7 +37,7 @@ it 'should show flash when something goes wrong while fetching data in client' do stub_ptime_request(*ptime_company_request_data.values, ptime_company_employee_data.to_json, "employees?per_page=1000", 404) - click_button('Personen manuell aktualisieren') + click_button('Members manuell aktualisieren') expect(page).to have_content('Etwas ist schiefgelaufen, als versucht wurde die Daten aus dem PuzzleTime zu fetchen. Bitte versuche es erneut und kontaktiere allenfalls den Support.') end end \ No newline at end of file