Die verschiedenen Operationen zur Mutation von SAC Mitgliedschaften sollen in Domain Klassen gekapselt sein.
In diesem Ticket wird die Operation zum Austritt aus einer Zusatzsektion/Ortsgruppe implementiert.
Tech-Spec
Migration: neue Attribute auf Person
data_retention_consent: boolean, default: false
Auf Group::SacCas neues mounted attribute: mounted_attr :sac_fundraising_mailing_list_id, :integer
integrieren in Group::SacCas#assert_mounted_mailing_list_attrs
Memberships::TerminateSacMembership active model
include ActiveModel::Model
include ActiveModel::Validations
#initialize Parameter:
role:
error raisen
wenn role keine Group::SektionsMitglieder::Mitglied Rolle ist
wenn role bereits terminiert ist (role.terminated?)
wenn role gelöscht ist (role.deleted_at?)
wenn role.beitragskategorie == 'family' && !role.person.family_main_person
terminate_on
subscribe_newsletter: boolean
subscribe_fundraising_list: boolean
data_retention_consent: boolean
termination_reason_id
Validierungen
terminate_on: gestern oder der 31.12. des aktuellen Jahres sein
falls data_retention_consent == true, initialisiert für alle #affected_people eine FutureRole(convert_to: Group::AboBasicLogin::BasicLogin, convert_on: terminate_on + 1.day) in der Basislogin Gruppe
Die verschiedenen Operationen zur Mutation von SAC Mitgliedschaften sollen in Domain Klassen gekapselt sein.
In diesem Ticket wird die Operation zum Austritt aus einer Zusatzsektion/Ortsgruppe implementiert.
Tech-Spec
Migration: neue Attribute auf Person
data_retention_consent
: boolean, default:false
Auf
Group::SacCas
neues mounted attribute:mounted_attr :sac_fundraising_mailing_list_id, :integer
integrieren in
Group::SacCas#assert_mounted_mailing_list_attrs
Memberships::TerminateSacMembership
active model#initialize
Parameter:role
:role
keineGroup::SektionsMitglieder::Mitglied
Rolle istrole
bereits terminiert ist (role.terminated?
)role
gelöscht ist (role.deleted_at?
)role.beitragskategorie == 'family' && !role.person.family_main_person
terminate_on
subscribe_newsletter
: booleansubscribe_fundraising_list
: booleandata_retention_consent
: booleantermination_reason_id
Validierungen
terminate_on
: gestern oder der 31.12. des aktuellen Jahres seintermination_reason_id
: presence#roles
: gibt alle relevanten Rollen zurück mit aktualisierten Attributen:für alle
#affected_people
alle gültigen Rollen von diesen Typen sowie alleFutureRole
mit diesen Typen inconvert_to
:FutureRole
mit den aufgelisteten types auf#convert_to
Mitglied
Rollenterminated=true
termination_reason_id
terminate_on.future?
:delete_on = (delete_on, terminate_on).compact.min
deleted_at = terminate_on; delete_on = nil
falls
data_retention_consent == true
, initialisiert für alle#affected_people
eineFutureRole(convert_to: Group::AboBasicLogin::BasicLogin, convert_on: terminate_on + 1.day)
in der Basislogin Gruppe#save
,#save!
und#valid?
wie in Memberships::MemberJoinSectionBasealles in einer Transaktion
alle
#roles
speichernauf allen
#affected_people
das#data_retention_consent
setzenalle Abos der
#affected_people
löschenMailingList subscriptions erstellen für alle
#affected_people
, (ignorieren falls Liste nicht existiert)subscribe_newsletter
gesetzt ist, im "SAC/CAS Newsletter"(
Group::SacCas#sac_newsletter_mailing_list_id
)subscribe_newsletter
gesetzt ist, in der "Spenden Aufrufe" Mailing List (`Group::SacCas#sac_fundraising_mailing_list_id)Tests
ToDo
Group::SacCas