diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py index 2fbf7354..6680d7ca 100644 --- a/src/openklant/components/klantinteracties/models/klantcontacten.py +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -1,14 +1,13 @@ import uuid -from django.core.validators import MinLengthValidator, validate_integer +from django.core.validators import validate_integer from django.db import models from django.utils.translation import gettext_lazy as _ -from vng_api_common.descriptors import GegevensGroepType - from .actoren import Actor from .constants import Initiator, Klantcontrol from .digitaal_adres import DigitaalAdres +from .mixins import BezoekAdresMixin, ContactNaamMixin, CorrespondentieAdresMixin class Klantcontact(models.Model): @@ -112,7 +111,7 @@ class Meta: verbose_name_plural = _("klantcontacten") -class Betrokkene(models.Model): +class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): id = models.UUIDField( primary_key=True, unique=True, @@ -154,164 +153,5 @@ class Betrokkene(models.Model): blank=True, ) - # Contactnaam model fields: - contactnaam_voorletters = models.CharField( - _("Voorletters"), - help_text=_( - "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen " - "de beginletter gecombineerd met de tweede letter van een voornaam." - ), - max_length=10, - ) - contactnaam_voornaam = models.CharField( - _("Voornaam"), - help_text=_( - "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - contactnaam_voorvoegsel_achternaam = models.CharField( - _("Voorvoegsel achternaam"), - help_text=_( - "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon " - "wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=10, - blank=True, - ) - contactnaam_achternaam = models.CharField( - _("Achternaam"), - help_text=_( - "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - - # Correspondentieadres model fields: - correspondentieadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), - help_text=_( - "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." - ), - unique=True, - blank=True, - null=True, - ) - correspondentieadres_adresregel1 = models.CharField( - _("Adresregel 1"), - help_text=_( - "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_adresregel2 = models.CharField( - _("Adresregel 2"), - help_text=_( - "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_adresregel3 = models.CharField( - _("Adresregel 3"), - help_text=_( - "Derde van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_land = models.CharField( - _("Land"), - help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " - "aangeeft alwaar de ingeschrevene verblijft." - ), - validators=[ - MinLengthValidator(limit_value=4), - validate_integer, - ], - max_length=4, - blank=True, - ) - - # Bezoekadres model fields: - bezoekadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), - help_text=_( - "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." - ), - unique=True, - blank=True, - null=True, - ) - bezoekadres_adresregel1 = models.CharField( - _("Adresregel 1"), - help_text=_( - "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_adresregel2 = models.CharField( - _("Adresregel 2"), - help_text=_( - "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_adresregel3 = models.CharField( - _("Adresregel 3"), - help_text=_( - "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_land = models.IntegerField( - _("Land"), - help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " - "aangeeft alwaar de ingeschrevene verblijft." - ), - validators=[ - MinLengthValidator(limit_value=4), - validate_integer, - ], - max_length=4, - blank=True, - ) - - # Group types: - Contactnaam = GegevensGroepType( - { - "voorletters": contactnaam_voorletters, - "voornaam": contactnaam_voornaam, - "voorvoegsel achternaam": contactnaam_voorvoegsel_achternaam, - "achternaam": contactnaam_achternaam, - } - ) - correspondentieadres = GegevensGroepType( - { - "nummeraanduiding id": correspondentieadres_nummeraanduiding_id, - "adresregel 1": correspondentieadres_adresregel1, - "adresregel 2": correspondentieadres_adresregel2, - "adresregel 3": correspondentieadres_adresregel3, - "land": correspondentieadres_land, - }, - ) - bezoekadres = GegevensGroepType( - { - "nummeraanduiding id": bezoekadres_nummeraanduiding_id, - "adresregel 1": bezoekadres_adresregel1, - "adresregel 2": bezoekadres_adresregel2, - "adresregel 3": bezoekadres_adresregel3, - "land": bezoekadres_land, - } - ) - class Meta: verbose_name = _("betrokkene bij klantcontact") diff --git a/src/openklant/components/klantinteracties/models/mixins.py b/src/openklant/components/klantinteracties/models/mixins.py index 91224800..d0408e45 100644 --- a/src/openklant/components/klantinteracties/models/mixins.py +++ b/src/openklant/components/klantinteracties/models/mixins.py @@ -1,9 +1,182 @@ +from django.core.validators import MinLengthValidator, validate_integer from django.db import models from django.utils.translation import gettext_lazy as _ from vng_api_common.descriptors import GegevensGroepType +class BezoekAdresMixin(models.Model): + bezoekadres_nummeraanduiding_id = models.UUIDField( + verbose_name=_("Nummeraanduiding ID"), + help_text=_( + "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." + ), + unique=True, + blank=True, + null=True, + ) + bezoekadres_adresregel1 = models.CharField( + _("Adresregel 1"), + help_text=_( + "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + bezoekadres_adresregel2 = models.CharField( + _("Adresregel 2"), + help_text=_( + "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + bezoekadres_adresregel3 = models.CharField( + _("Adresregel 3"), + help_text=_( + "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + bezoekadres_land = models.CharField( + _("Land"), + help_text=_( + "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " + "aangeeft alwaar de ingeschrevene verblijft." + ), + validators=[ + MinLengthValidator(limit_value=4), + validate_integer, + ], + max_length=4, + blank=True, + ) + + bezoekadres = GegevensGroepType( + { + "nummeraanduiding id": bezoekadres_nummeraanduiding_id, + "adresregel 1": bezoekadres_adresregel1, + "adresregel 2": bezoekadres_adresregel2, + "adresregel 3": bezoekadres_adresregel3, + "land": bezoekadres_land, + } + ) + + class Meta: + abstract = True + + +class CorrespondentieAdresMixin(models.Model): + correspondentieadres_nummeraanduiding_id = models.UUIDField( + verbose_name=_("Nummeraanduiding ID"), + help_text=_( + "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." + ), + unique=True, + blank=True, + null=True, + ) + correspondentieadres_adresregel1 = models.CharField( + _("Adresregel 1"), + help_text=_( + "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + correspondentieadres_adresregel2 = models.CharField( + _("Adresregel 2"), + help_text=_( + "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + correspondentieadres_adresregel3 = models.CharField( + _("Adresregel 3"), + help_text=_( + "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." + ), + max_length=80, + blank=True, + ) + correspondentieadres_land = models.CharField( + _("Land"), + help_text=_( + "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " + "aangeeft alwaar de ingeschrevene verblijft." + ), + validators=[ + MinLengthValidator(limit_value=4), + validate_integer, + ], + max_length=4, + blank=True, + ) + + correspondentieadres = GegevensGroepType( + { + "nummeraanduiding id": correspondentieadres_nummeraanduiding_id, + "adresregel 1": correspondentieadres_adresregel1, + "adresregel 2": correspondentieadres_adresregel2, + "adresregel 3": correspondentieadres_adresregel3, + "land": correspondentieadres_land, + }, + ) + + class Meta: + abstract = True + + +class ContactNaamMixin(models.Model): + contactnaam_voorletters = models.CharField( + _("Voorletters"), + help_text=_( + "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen " + "de beginletter gecombineerd met de tweede letter van een voornaam." + ), + max_length=10, + ) + contactnaam_voornaam = models.CharField( + _("Voornaam"), + help_text=_( + "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente." + ), + max_length=200, + blank=True, + ) + contactnaam_voorvoegsel_achternaam = models.CharField( + _("Voorvoegsel achternaam"), + help_text=_( + "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon " + "wil gebruiken tijdens communicatie met de gemeente." + ), + max_length=10, + blank=True, + ) + contactnaam_achternaam = models.CharField( + _("Achternaam"), + help_text=_( + "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente." + ), + max_length=200, + blank=True, + ) + + Contactnaam = GegevensGroepType( + { + "voorletters": contactnaam_voorletters, + "voornaam": contactnaam_voornaam, + "voorvoegsel achternaam": contactnaam_voorvoegsel_achternaam, + "achternaam": contactnaam_achternaam, + } + ) + + class Meta: + abstract = True + + class ActorIdentifcatorMixin(models.Model): actoridentifcator_objecttype = models.CharField( _("Objecttype"), diff --git a/src/openklant/components/klantinteracties/models/partijen.py b/src/openklant/components/klantinteracties/models/partijen.py index dce84a9d..41ba0735 100644 --- a/src/openklant/components/klantinteracties/models/partijen.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -1,17 +1,16 @@ import uuid -from django.core.validators import MinLengthValidator, validate_integer +from django.core.validators import validate_integer from django.db import models from django.utils.translation import gettext_lazy as _ -from vng_api_common.descriptors import GegevensGroepType - from .constants import SoortPartij from .digitaal_adres import DigitaalAdres from .klantcontacten import Betrokkene +from .mixins import BezoekAdresMixin, ContactNaamMixin, CorrespondentieAdresMixin -class Partij(models.Model): +class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): id = models.UUIDField( primary_key=True, unique=True, @@ -88,122 +87,6 @@ class Partij(models.Model): ), ) - # Correspondentieadres model fields: - correspondentieadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), - help_text=_( - "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." - ), - unique=True, - blank=True, - null=True, - ) - correspondentieadres_adresregel1 = models.CharField( - _("Adresregel 1"), - help_text=_( - "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_adresregel2 = models.CharField( - _("Adresregel 2"), - help_text=_( - "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_adresregel3 = models.CharField( - _("Adresregel 3"), - help_text=_( - "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - correspondentieadres_land = models.CharField( - _("Land"), - help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " - "aangeeft alwaar de ingeschrevene verblijft." - ), - validators=[ - MinLengthValidator(limit_value=4), - validate_integer, - ], - max_length=4, - blank=True, - ) - - # Bezoekadres model fields: - bezoekadres_nummeraanduiding_id = models.UUIDField( - verbose_name=_("Nummeraanduiding ID"), - help_text=_( - "Identificatie van het adres bij de Basisregistratie Adressen en Gebouwen." - ), - unique=True, - blank=True, - null=True, - ) - bezoekadres_adresregel1 = models.CharField( - _("Adresregel 1"), - help_text=_( - "Eerste deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_adresregel2 = models.CharField( - _("Adresregel 2"), - help_text=_( - "Tweede deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_adresregel3 = models.CharField( - _("Adresregel 3"), - help_text=_( - "Derde deel van het adres dat niet voorkomt in de Basisregistratie Adressen en Gebouwen." - ), - max_length=80, - blank=True, - ) - bezoekadres_land = models.CharField( - _("Land"), - help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) " - "aangeeft alwaar de ingeschrevene verblijft." - ), - validators=[ - MinLengthValidator(limit_value=4), - validate_integer, - ], - max_length=4, - blank=True, - ) - - # Group types: - correspondentieadres = GegevensGroepType( - { - "nummeraanduiding id": correspondentieadres_nummeraanduiding_id, - "adresregel 1": correspondentieadres_adresregel1, - "adresregel 2": correspondentieadres_adresregel2, - "adresregel 3": correspondentieadres_adresregel3, - "land": correspondentieadres_land, - }, - ) - bezoekadres = GegevensGroepType( - { - "nummeraanduiding id": bezoekadres_nummeraanduiding_id, - "adresregel 1": bezoekadres_adresregel1, - "adresregel 2": bezoekadres_adresregel2, - "adresregel 3": bezoekadres_adresregel3, - "land": bezoekadres_land, - } - ) - class Meta: verbose_name = _("partij") verbose_name_plural = _("partijen") @@ -232,7 +115,7 @@ def __str__(self) -> str: return self.naam -class Persoon(models.Model): +class Persoon(ContactNaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, @@ -241,51 +124,6 @@ class Persoon(models.Model): null=True, ) - # Contactnaam model fields: - contactnaam_voorletters = models.CharField( - _("Voorletters"), - help_text=_( - "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen " - "de beginletter gecombineerd met de tweede letter van een voornaam." - ), - max_length=10, - ) - contactnaam_voornaam = models.CharField( - _("Voornaam"), - help_text=_( - "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - contactnaam_voorvoegsel_achternaam = models.CharField( - _("Voorvoegsel achternaam"), - help_text=_( - "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon " - "wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=10, - blank=True, - ) - contactnaam_achternaam = models.CharField( - _("Achternaam"), - help_text=_( - "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - - # Group types: - Contactnaam = GegevensGroepType( - { - "voorletters": contactnaam_voorletters, - "voornaam": contactnaam_voornaam, - "voorvoegsel achternaam": contactnaam_voorvoegsel_achternaam, - "achternaam": contactnaam_achternaam, - } - ) - class Meta: verbose_name = _("persoon") verbose_name_plural = _("personen") @@ -294,7 +132,7 @@ def __str__(self) -> str: return self.contactnaam_voorletters -class Contactpersoon(models.Model): +class Contactpersoon(ContactNaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, @@ -311,51 +149,6 @@ class Contactpersoon(models.Model): null=True, ) - # Contactnaam model fields: - contactnaam_voorletters = models.CharField( - _("Voorletters"), - help_text=_( - "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen " - "de beginletter gecombineerd met de tweede letter van een voornaam." - ), - max_length=10, - ) - contactnaam_voornaam = models.CharField( - _("Voornaam"), - help_text=_( - "De voornaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - contactnaam_voorvoegsel_achternaam = models.CharField( - _("Voorvoegsel achternaam"), - help_text=_( - "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon " - "wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=10, - blank=True, - ) - contactnaam_achternaam = models.CharField( - _("Achternaam"), - help_text=_( - "Een achternaam die de persoon wil gebruiken tijdens communicatie met de gemeente." - ), - max_length=200, - blank=True, - ) - - # Group types: - Contactnaam = GegevensGroepType( - { - "voorletters": contactnaam_voorletters, - "voornaam": contactnaam_voornaam, - "voorvoegsel achternaam": contactnaam_voorvoegsel_achternaam, - "achternaam": contactnaam_achternaam, - } - ) - class Meta: verbose_name = _("contact persoon") verbose_name_plural = _("contact personen")