From 359440514a9bc71f3350dace7358ee6cfef1e950 Mon Sep 17 00:00:00 2001 From: bart-maykin Date: Thu, 19 Oct 2023 16:45:25 +0200 Subject: [PATCH 1/2] :card_file_box: [#67] added onderwerpobject and bijlage models --- .../migrations/0002_auto_20231019_1441.py | 181 ++++++++++++++++++ .../klantinteracties/models/actoren.py | 4 +- .../klantinteracties/models/klantcontacten.py | 58 +++++- .../klantinteracties/models/mixins.py | 26 +-- .../klantinteracties/models/partijen.py | 8 +- 5 files changed, 253 insertions(+), 24 deletions(-) create mode 100644 src/openklant/components/klantinteracties/migrations/0002_auto_20231019_1441.py diff --git a/src/openklant/components/klantinteracties/migrations/0002_auto_20231019_1441.py b/src/openklant/components/klantinteracties/migrations/0002_auto_20231019_1441.py new file mode 100644 index 00000000..f79cfb72 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0002_auto_20231019_1441.py @@ -0,0 +1,181 @@ +# Generated by Django 3.2.18 on 2023-10-19 14:41 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + ("klantinteracties", "0001_initial"), + ] + + operations = [ + migrations.RenameField( + model_name="actor", + old_name="identificator_object_id", + new_name="objectidentificator_object_id", + ), + migrations.RenameField( + model_name="actor", + old_name="identificator_objecttype", + new_name="objectidentificator_objecttype", + ), + migrations.RenameField( + model_name="actor", + old_name="identificator_register", + new_name="objectidentificator_register", + ), + migrations.RenameField( + model_name="actor", + old_name="identificator_soort_object_id", + new_name="objectidentificator_soort_object_id", + ), + migrations.CreateModel( + name="Onderwerpobject", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "objectidentificator_objecttype", + models.CharField( + help_text="Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + max_length=200, + verbose_name="objecttype", + ), + ), + ( + "objectidentificator_soort_object_id", + models.CharField( + help_text="Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + max_length=200, + verbose_name="soort object id", + ), + ), + ( + "objectidentificator_object_id", + models.CharField( + help_text="Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + max_length=200, + verbose_name="object id", + ), + ), + ( + "objectidentificator_register", + models.CharField( + help_text="Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + max_length=200, + verbose_name="register", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van het onderwerpdeel.", + unique=True, + ), + ), + ( + "klantcontact", + models.ForeignKey( + help_text="'Klantcontact' ging over 'Onderwerpobject'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.klantcontact", + verbose_name="klantcontact", + ), + ), + ( + "was_klantcontact", + models.ForeignKey( + help_text="'Onderwerpobject' was 'Klantcontact'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="was_onderwerpobject", + to="klantinteracties.klantcontact", + verbose_name="was klantcontact", + ), + ), + ], + options={ + "verbose_name": "onderwerpobject", + "verbose_name_plural": "onderwerpobjecten", + }, + ), + migrations.CreateModel( + name="Bijlage", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "objectidentificator_objecttype", + models.CharField( + help_text="Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + max_length=200, + verbose_name="objecttype", + ), + ), + ( + "objectidentificator_soort_object_id", + models.CharField( + help_text="Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + max_length=200, + verbose_name="soort object id", + ), + ), + ( + "objectidentificator_object_id", + models.CharField( + help_text="Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + max_length=200, + verbose_name="object id", + ), + ), + ( + "objectidentificator_register", + models.CharField( + help_text="Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + max_length=200, + verbose_name="register", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van het inhoudsdeel.", + unique=True, + ), + ), + ( + "klantcontact", + models.ForeignKey( + help_text="'Klantcontact' omvatte 'Bijlage'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.klantcontact", + verbose_name="klantcontact", + ), + ), + ], + options={ + "verbose_name": "bijlage", + "verbose_name_plural": "bijlagen", + }, + ), + ] diff --git a/src/openklant/components/klantinteracties/models/actoren.py b/src/openklant/components/klantinteracties/models/actoren.py index 2c7858af..2252c889 100644 --- a/src/openklant/components/klantinteracties/models/actoren.py +++ b/src/openklant/components/klantinteracties/models/actoren.py @@ -4,10 +4,10 @@ from django.utils.translation import gettext_lazy as _ from .constants import SoortActor -from .mixins import IdentificatorMixin +from .mixins import ObjectidentificatorMixin -class Actor(IdentificatorMixin): +class Actor(ObjectidentificatorMixin): uuid = models.UUIDField( unique=True, default=uuid.uuid4, diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py index 9867cbf6..e54c8c16 100644 --- a/src/openklant/components/klantinteracties/models/klantcontacten.py +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -8,7 +8,12 @@ from .actoren import Actor from .constants import Klantcontrol from .digitaal_adres import DigitaalAdres -from .mixins import BezoekAdresMixin, ContactNaamMixin, CorrespondentieAdresMixin +from .mixins import ( + BezoekadresMixin, + ContactnaamMixin, + CorrespondentieadresMixin, + ObjectidentificatorMixin, +) class Klantcontact(models.Model): @@ -28,8 +33,6 @@ class Klantcontact(models.Model): ), blank=False, ) - # TODO: add fk to Onderwerpobject - # TODO: add fk to Inhoudsobject nummer = models.CharField( _("nummer"), help_text=_( @@ -77,7 +80,6 @@ class Klantcontact(models.Model): "Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld." ), ) - # TODO: does this field require auto_now? plaatsgevonden_op = models.DateTimeField( _("plaatsgevonden op"), help_text=_( @@ -95,7 +97,7 @@ class Meta: verbose_name_plural = _("klantcontacten") -class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): +class Betrokkene(BezoekadresMixin, CorrespondentieadresMixin, ContactnaamMixin): uuid = models.UUIDField( unique=True, default=uuid.uuid4, @@ -139,3 +141,49 @@ class Betrokkene(BezoekAdresMixin, CorrespondentieAdresMixin, ContactNaamMixin): class Meta: verbose_name = _("betrokkene bij klantcontact") + + +class Onderwerpobject(ObjectidentificatorMixin): + uuid = models.UUIDField( + unique=True, + default=uuid.uuid4, + help_text=_("Unieke (technische) identificatiecode van het onderwerpdeel."), + ) + klantcontact = models.ForeignKey( + Klantcontact, + on_delete=models.CASCADE, + verbose_name=_("klantcontact"), + help_text=_("'Klantcontact' ging over 'Onderwerpobject'"), + null=True, + ) + was_klantcontact = models.ForeignKey( + Klantcontact, + on_delete=models.CASCADE, + verbose_name=_("was klantcontact"), + related_name="was_onderwerpobject", + help_text=_("'Onderwerpobject' was 'Klantcontact'"), + null=True, + ) + + class Meta: + verbose_name = _("onderwerpobject") + verbose_name_plural = _("onderwerpobjecten") + + +class Bijlage(ObjectidentificatorMixin): + uuid = models.UUIDField( + unique=True, + default=uuid.uuid4, + help_text=_("Unieke (technische) identificatiecode van het inhoudsdeel."), + ) + klantcontact = models.ForeignKey( + Klantcontact, + on_delete=models.CASCADE, + verbose_name=_("klantcontact"), + help_text=_("'Klantcontact' omvatte 'Bijlage'"), + null=True, + ) + + class Meta: + verbose_name = _("bijlage") + verbose_name_plural = _("bijlagen") diff --git a/src/openklant/components/klantinteracties/models/mixins.py b/src/openklant/components/klantinteracties/models/mixins.py index b75ab273..73030925 100644 --- a/src/openklant/components/klantinteracties/models/mixins.py +++ b/src/openklant/components/klantinteracties/models/mixins.py @@ -5,7 +5,7 @@ from vng_api_common.descriptors import GegevensGroepType -class BezoekAdresMixin(models.Model): +class BezoekadresMixin(models.Model): # TODO: Check if this is correct. bezoekadres_nummeraanduiding_id = models.CharField( _("nummeraanduiding id"), @@ -67,7 +67,7 @@ class Meta: abstract = True -class CorrespondentieAdresMixin(models.Model): +class CorrespondentieadresMixin(models.Model): # TODO: Check if this is correct. correspondentieadres_nummeraanduiding_id = models.CharField( _("nummeraanduiding ID"), @@ -129,7 +129,7 @@ class Meta: abstract = True -class ContactNaamMixin(models.Model): +class ContactnaamMixin(models.Model): contactnaam_voorletters = models.CharField( _("voorletters"), help_text=_( @@ -177,8 +177,8 @@ class Meta: abstract = True -class IdentificatorMixin(models.Model): - identificator_objecttype = models.CharField( +class ObjectidentificatorMixin(models.Model): + objectidentificator_objecttype = models.CharField( _("objecttype"), help_text=_( "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'." @@ -186,7 +186,7 @@ class IdentificatorMixin(models.Model): max_length=200, blank=False, ) - identificator_soort_object_id = models.CharField( + objectidentificator_soort_object_id = models.CharField( _("soort object id"), help_text=_( "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'." @@ -194,7 +194,7 @@ class IdentificatorMixin(models.Model): max_length=200, blank=False, ) - identificator_object_id = models.CharField( + objectidentificator_object_id = models.CharField( _("object id"), help_text=_( "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'." @@ -202,7 +202,7 @@ class IdentificatorMixin(models.Model): max_length=200, blank=False, ) - identificator_register = models.CharField( + objectidentificator_register = models.CharField( _("register"), help_text=_( "Binnen het landschap van registers unieke omschrijving van het register waarin " @@ -212,12 +212,12 @@ class IdentificatorMixin(models.Model): blank=False, ) - identificator = GegevensGroepType( + objectidentificator = GegevensGroepType( { - "objecttype": identificator_objecttype, - "soort_object_id": identificator_soort_object_id, - "object_id": identificator_object_id, - "register": identificator_register, + "objecttype": objectidentificator_objecttype, + "soort_object_id": objectidentificator_soort_object_id, + "object_id": objectidentificator_object_id, + "register": objectidentificator_register, } ) diff --git a/src/openklant/components/klantinteracties/models/partijen.py b/src/openklant/components/klantinteracties/models/partijen.py index 016c05a2..80e99399 100644 --- a/src/openklant/components/klantinteracties/models/partijen.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -7,10 +7,10 @@ from .constants import SoortPartij from .digitaal_adres import DigitaalAdres from .klantcontacten import Betrokkene -from .mixins import BezoekAdresMixin, ContactNaamMixin, CorrespondentieAdresMixin +from .mixins import BezoekadresMixin, ContactnaamMixin, CorrespondentieadresMixin -class Partij(BezoekAdresMixin, CorrespondentieAdresMixin): +class Partij(BezoekadresMixin, CorrespondentieadresMixin): uuid = models.UUIDField( unique=True, default=uuid.uuid4, @@ -119,7 +119,7 @@ def __str__(self) -> str: return self.naam -class Persoon(ContactNaamMixin): +class Persoon(ContactnaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, @@ -135,7 +135,7 @@ def __str__(self) -> str: return self.contactnaam_voorletters -class Contactpersoon(ContactNaamMixin): +class Contactpersoon(ContactnaamMixin): partij = models.ForeignKey( Partij, on_delete=models.CASCADE, From 153b25de94313d94f7aca95612527d26b1b6c6fe Mon Sep 17 00:00:00 2001 From: bart-maykin Date: Thu, 19 Oct 2023 17:30:11 +0200 Subject: [PATCH 2/2] :card_file_box: [#91] added PartijIdentificator model --- .../migrations/0003_partijidentificator.py | 91 +++++++++++++++++++ .../klantinteracties/models/partijen.py | 76 ++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 src/openklant/components/klantinteracties/migrations/0003_partijidentificator.py diff --git a/src/openklant/components/klantinteracties/migrations/0003_partijidentificator.py b/src/openklant/components/klantinteracties/migrations/0003_partijidentificator.py new file mode 100644 index 00000000..db5a5977 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0003_partijidentificator.py @@ -0,0 +1,91 @@ +# Generated by Django 3.2.18 on 2023-10-19 15:29 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + ("klantinteracties", "0002_auto_20231019_1441"), + ] + + operations = [ + migrations.CreateModel( + name="PartijIdentificator", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "uuid", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de partij-identificator.", + unique=True, + ), + ), + ( + "andere_partij_identificator", + models.CharField( + blank=True, + help_text="Vrij tekstveld om de verwijzing naar een niet-voorgedefinieerd objecttype, soort objectID of Register vast te leggen. ", + max_length=200, + verbose_name="andere partij indetificator", + ), + ), + ( + "partij_identificator_objecttype", + models.CharField( + help_text="Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'.", + max_length=200, + verbose_name="objecttype", + ), + ), + ( + "partij_identificator_soort_object_id", + models.CharField( + help_text="Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'.", + max_length=200, + verbose_name="soort object id", + ), + ), + ( + "partij_identificator_object_id", + models.CharField( + help_text="Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'.", + max_length=200, + verbose_name="object id", + ), + ), + ( + "partij_identificator_register", + models.CharField( + help_text="Binnen het landschap van registers unieke omschrijving van het register waarin het object is geregistreerd, bijvoorbeeld: 'BRP'.", + max_length=200, + verbose_name="register", + ), + ), + ( + "partij", + models.ForeignKey( + help_text="'Partij' had 'PartijIdentificator'", + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="klantinteracties.partij", + verbose_name="partij", + ), + ), + ], + options={ + "verbose_name": "partij identificator", + "verbose_name_plural": "partij identificatoren", + }, + ), + ] diff --git a/src/openklant/components/klantinteracties/models/partijen.py b/src/openklant/components/klantinteracties/models/partijen.py index 80e99399..c03c855d 100644 --- a/src/openklant/components/klantinteracties/models/partijen.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -4,6 +4,8 @@ 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 @@ -156,3 +158,77 @@ class Meta: def __str__(self) -> str: return self.contactnaam_voorletters + + +class PartijIdentificator(models.Model): + uuid = models.UUIDField( + unique=True, + default=uuid.uuid4, + help_text=_( + "Unieke (technische) identificatiecode van de partij-identificator." + ), + ) + partij = models.ForeignKey( + Partij, + on_delete=models.CASCADE, + verbose_name=_("partij"), + help_text=_("'Partij' had 'PartijIdentificator'"), + null=True, + ) + andere_partij_identificator = models.CharField( + _("andere partij indetificator"), + help_text=_( + "Vrij tekstveld om de verwijzing naar een niet-voorgedefinieerd objecttype, " + "soort objectID of Register vast te leggen. " + ), + max_length=200, + blank=True, + ) + + # Partij-identificator fields + partij_identificator_objecttype = models.CharField( + _("objecttype"), + help_text=_( + "Type van het object, bijvoorbeeld: 'INGESCHREVEN NATUURLIJK PERSOON'." + ), + max_length=200, + blank=False, + ) + partij_identificator_soort_object_id = models.CharField( + _("soort object id"), + help_text=_( + "Naam van de eigenschap die het object identificeert, bijvoorbeeld: 'Burgerservicenummer'." + ), + max_length=200, + blank=False, + ) + partij_identificator_object_id = models.CharField( + _("object id"), + help_text=_( + "Waarde van de eigenschap die het object identificeert, bijvoorbeeld: '123456788'." + ), + max_length=200, + blank=False, + ) + partij_identificator_register = models.CharField( + _("register"), + help_text=_( + "Binnen het landschap van registers unieke omschrijving van het register waarin " + "het object is geregistreerd, bijvoorbeeld: 'BRP'." + ), + max_length=200, + blank=False, + ) + + partij_identificator = GegevensGroepType( + { + "objecttype": partij_identificator_objecttype, + "soort_object_id": partij_identificator_soort_object_id, + "object_id": partij_identificator_object_id, + "register": partij_identificator_register, + } + ) + + class Meta: + verbose_name = _("partij identificator") + verbose_name_plural = _("partij identificatoren")