Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PERSON: Abo-Filter nach Alter und Sprache #290

Merged
merged 12 commits into from
Dec 21, 2023
Merged

Conversation

diegosteiner
Copy link
Contributor

@diegosteiner diegosteiner commented Sep 15, 2023

Resolves hitobito#1919

@diegosteiner diegosteiner changed the title replace wagon specific correspondence_language with core language [WIP] #1919 PERSON: Abo-Filter nach Alter und Sprache Sep 15, 2023
def first_language_with_correspondence_language
lang = entry.correspondence_language.presence
lang ? lang.upcase : 'DE'
# TBD: move to youth wagon? https://github.com/hitobito/hitobito_youth/blob/3322054e2d64db19f8b049773e61f68e7f614546/app/domain/export/tabular/people/participation_nds_row.rb#L70
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja, finde ich auch, aber dann würde ich die Logik noch restriktiver schreiben. In der Spezifikation von J+S sind nur DE, FR, IT und Andere als Beispielwerte aufgeführt. Wenn wir das in den Youth Wagon verschieben gibt es potenziell noch mehr Sprachen (z.B. bei der Stiftung junger Auslandschweizer) die da in Zukunft mal zu ungültigen NDS-Exports führen könnten. Also wenn verschieben, dann lieber in einem Mapping nachschauen, und auf "Andere" zurückfallen wenns nicht de, fr oder it ist.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

config/settings.yml Outdated Show resolved Hide resolved
@@ -0,0 +1,7 @@
class ReplaceCorrespondanceLanguageWithCoreLanguage < ActiveRecord::Migration[6.1]
def change
Person.where(correspondence_language: nil).update_all(correspondence_language: :de)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@carlobeltrame hier liegt das für den Moment vermeitlich grösste Problem: das Feld correspondence_language kann null sein, während language not null ist. Damit wird dieses Feld neu ein Pflichtfeld, was ja jeweils auf pfadipolitischer Ebene nicht unumstritten ist. Ich nehme hier auch gleich @simfeld dazu.

Was meint ihr?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja gute Frage. Man könnte natürlich beginnen, den Kantonalverband der Haupt-Rolle jeder Person herauszusuchen, und anhand von dem die Sprache intelligent zu setzen... Kann man aber beliebig weit treiben weil es auch noch Kantone mit mehreren Sprachen gibt... Da hätte ich auch gerne einen Rat von @simfeld oder @Michael-Schaer wie weit wir hier gehen sollen.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was ist denn die Default-Korrespondenzsprache beim Versand von E-Mails wenn man keine gesetzt hat? Ich nehme an auch Deutsch? Insofern wäre für mich folgendes Vorgehen in Ordnung:

  • Migration setzt per Default language auf DE
  • PBS-Release-Notes kündigen dies an und man kann das somit verhindern indem man seine Korrespondenzsprache setzt vor dem Release

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich glaube die Mails achten bisher nicht auf die Korrespondenzsprache, könnte aber falsch liegen.
Deinen Vorschlag finde ich gut.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Swing, Cosinus und ich haben uns heute auch noch abgesprochen. Wenn möglich, wäre ein Matching nach Kanton gut. Da die KVs Kantone zugeordnet haben, sollte ein Matching gut möglich sein. Hier der Vorschlag für die Aufteilung:

DE
Aargau Appenzell Innerrhoden Appenzell Ausserrhoden Bern Basel-Land Basel-Stadt
Glarus Graubünden Luzern Nidwalden Obwalden St. Gallen Schaffhausen Solothurn Schwyz Thurgau Uri Zug Zürich

FR
Freiburg Genf Jura Waadt Wallis Neuenburg

IT
Tessin

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich habe das noch entsprechend in der Tech Spec ergänzt

@@ -0,0 +1,23 @@
class ReplaceCorrespondanceLanguageWithCoreLanguage < ActiveRecord::Migration[6.1]
CANTONS_LANGUAGE = {
# de: [:ag, :ai, :ar, :be, :bl, :bs, :gl, :gr, :lu, :nw, :ow, :sg, :sh, :so, :sz, :tg, :ur, :zg, :zh],
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das ist sowieso der default, kann ganz weggelassen werden

def infer_person_language(person)
return person.language if person.language.present?

canton = person.find_kantonalverband&.kantonalverband_cantons&.first&.to_sym
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@carlobeltrame Ich habe im pbs wagon die Methode Person#find_kantonalverband gefunden, aber ich glaube sie berücksichtigt die gelöschten Rollen nicht wie in der Tech Spec vorgegeben. Was denkst du? soll ich diese Logik trotzdem nochmal bauen?

def first_language_with_correspondence_language
lang = entry.correspondence_language.presence
lang ? lang.upcase : 'DE'
# TBD: move to youth wagon? https://github.com/hitobito/hitobito_youth/blob/3322054e2d64db19f8b049773e61f68e7f614546/app/domain/export/tabular/people/participation_nds_row.rb#L70
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines 8 to 15
def change
Person.update_all("language = correspondence_language")
remove_column :people, :correspondence_language, :string, limit: 5

Person.where(language: nil).find_each do |person|
person.update!(language: infer_person_language(person))
end
end
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Denke hier macht es Sinn die #change Methode in eine #up und #down Methode zu ändern.

Und eine Spec für die Migration fände ich auch noch nice.
Beispiel: https://github.com/hitobito/hitobito_pbs/blob/master/spec/migrations/prolong_j_s_qualifications_2021_spec.rb

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TheWalkingLeek finde ich beides gut. Beim schreiben der migration spec bin ich auf folgendes Problem gestossen. In dieser Migration entferne ich das correspondence_language Feld, was das Testen enorm erschwert (wenn die DB auf dem letzten Stand ist, gibt es das Feld dann nicht mehr). Ich habe schon versucht, die Migration Spec so zu schreiben, dass die Migrationen danach down'd werden und dann getestet wird, aber es tauchen immer wieder Probleme auf. Damit ich hier nicht noch mehr Zeit verschwende, schlage ich vor einfach die #infer_person_language zu refactoren und diese dann zu testen, nicht die ganze Migration. Was meinst du?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ja das klingt sinnvoll. Migrations-specs können dadurch manchmal etwas mühsam sein aber die meiste Logik passiert ja sowieso im #infer_person_language. Das wäre demnach meines Erachtens nach auch der wichtigste Teil für einen Test, sollte dann also passen :)

@diegosteiner diegosteiner changed the title [WIP] #1919 PERSON: Abo-Filter nach Alter und Sprache PERSON: Abo-Filter nach Alter und Sprache Dec 15, 2023
Comment on lines 10 to 12
def format_person_salutation(person)
person.salutation_value
end
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich glaube diese Methode dürfen wir nicht löschen, das wird noch gebraucht. Zwar nicht genau mit diesem Namen, aber im format_helper im Core irgendwo wird nach einer so benannten Methode gesucht, wenn ein salutation Feld auf einer Person gerendert wird.

Comment on lines 10 to 12

included do
alias_method_chain :first_language, :correspondence_language
Copy link
Member

@carlobeltrame carlobeltrame Dec 21, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wir müssen diese Methode weiterhin überschreiben, weil die Base-Implementation immer 'DE' zurückgibt (Jubla hat z.B. nur Gruppen in der Deutschschweiz).

@carlobeltrame carlobeltrame merged commit 7afcef4 into master Dec 21, 2023
5 checks passed
@kronn kronn deleted the #1919_abo-filter branch March 22, 2024 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

PERSON: Abo-Filter nach Alter und Sprache
5 participants