From 2cacbccddfda4a2581abe100374d7e7f1804ddec Mon Sep 17 00:00:00 2001 From: Elia Giacobazzi Date: Sun, 15 Oct 2023 02:04:25 +0200 Subject: [PATCH 1/2] Make social id valid inside demo member data --- asso/member/fixtures/member/demo.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/asso/member/fixtures/member/demo.yaml b/asso/member/fixtures/member/demo.yaml index 710d8a0..65a5497 100644 --- a/asso/member/fixtures/member/demo.yaml +++ b/asso/member/fixtures/member/demo.yaml @@ -15,10 +15,10 @@ user: 2 first_name: "John" last_name: "Doe" - social_card: AAAAAAAAAAAAAAAA + social_card: DOEJHN70A01Z114S gender: M birth_date: 1970-01-01 - birth_city: "London" + birth_city: "United Kingdom" birth_province: 1 phone: +44 000 0000000 document_type: "carta-identita" @@ -33,10 +33,10 @@ user: 3 first_name: "Johanna" last_name: "Doe" - social_card: AAAAAAAAAAAAAAAA + social_card: DOEJNN70A41Z114Z gender: F birth_date: 1970-01-01 - birth_city: "London" + birth_city: "United Kingdom" birth_province: 1 phone: +44 000 0000000 document_type: "carta-identita" @@ -53,10 +53,10 @@ updated_at: 2023-01-02T00:00:00Z first_name: "John" last_name: "Doe" - social_card: AAAAAAAAAAAAAAAA + social_card: DOEJHN70A01Z114S gender: M birth_date: 1970-01-01 - birth_city: "London" + birth_city: "United Kingdom" birth_province: 1 - model: member.MemberPermanentAddress pk: 1 From adc007cd2a8a9c0281e2665f64adfd368ff669d5 Mon Sep 17 00:00:00 2001 From: Elia Giacobazzi Date: Sun, 15 Oct 2023 02:04:41 +0200 Subject: [PATCH 2/2] Add checks for personal data models --- asso/member/models.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/asso/member/models.py b/asso/member/models.py index 526667d..abdc747 100644 --- a/asso/member/models.py +++ b/asso/member/models.py @@ -63,6 +63,34 @@ class MemberPersonalData(models.Model): def full_name(self) -> str: return f"{self.first_name} {self.last_name}" + def check_social_card(self): + return codicefiscale.is_valid(self.social_card) + + def check_first_name(self): + decoded = codicefiscale.decode_raw(self.social_card) + return codicefiscale.encode_firstname(self.first_name) == decoded["firstname"] + + def check_last_name(self): + decoded = codicefiscale.decode_raw(self.social_card) + return codicefiscale.encode_lastname(self.last_name) == decoded["lastname"] + + def check_birth_date(self): + bd = codicefiscale.decode_raw(self.social_card)["birthdate"] + res = False + if self.gender != Gender.FEMALE: + res |= codicefiscale.encode_birthdate(str(self.birth_date), "M") == bd + if self.gender != Gender.MALE: + res |= codicefiscale.encode_birthdate(str(self.birth_date), "F") == bd + return res + + def check_personal_data(self): + return ( + self.check_social_card() + and self.check_first_name() + and self.check_last_name() + and self.check_birth_date() + ) + class Meta: abstract = True