diff --git a/src/openklant/components/klantinteracties/admin.py b/src/openklant/components/klantinteracties/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/src/openklant/components/klantinteracties/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/src/openklant/components/klantinteracties/migrations/0001_initial.py b/src/openklant/components/klantinteracties/migrations/0001_initial.py index 28d034f1..73e24470 100644 --- a/src/openklant/components/klantinteracties/migrations/0001_initial.py +++ b/src/openklant/components/klantinteracties/migrations/0001_initial.py @@ -7,7 +7,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [] diff --git a/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py b/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py new file mode 100644 index 00000000..a9b7499b --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py @@ -0,0 +1,111 @@ +# Generated by Django 3.2.18 on 2023-10-10 17:54 + +import django.core.validators +from django.db import migrations, models +import uuid + + +class Migration(migrations.Migration): + dependencies = [ + ("klantinteracties", "0001_initial"), + ] + + operations = [ + migrations.CreateModel( + name="Klantcontact", + fields=[ + ( + "id", + models.UUIDField( + default=uuid.uuid4, + help_text="Unieke (technische) identificatiecode van de betrokkene bij klantcontact.", + primary_key=True, + serialize=False, + unique=True, + ), + ), + ( + "nummer", + models.PositiveIntegerField( + help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensenkan worden gebruikt om de specifieke partij aan te duiden.", + validators=[ + django.core.validators.MaxValueValidator(9999999999) + ], + verbose_name="Nummer", + ), + ), + ( + "kanaal", + models.CharField( + help_text="Communicatiekanaal dat bij het klantcontact werd gebruikt.", + max_length=50, + verbose_name="Kanaal", + ), + ), + ( + "onderwerp", + models.CharField( + help_text="Datgene waarover het klantcontact ging.", + max_length=200, + verbose_name="Onderwerp", + ), + ), + ( + "inhoud", + models.CharField( + blank=True, + help_text="Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld,voor zover die voor betrokkenen of actoren relevant is.", + max_length=1000, + verbose_name="Inhoud", + ), + ), + ( + "initiator", + models.CharField( + choices=[ + ("gemeente", "Gemeente"), + ("klant", "Klant"), + ("vertegenwoordiger", "Vertegenwoordiger"), + ], + help_text="Degene die het klantcontact initieerde.", + max_length=17, + verbose_name="Initiator", + ), + ), + ( + "indicatie_contact_gelukt", + models.BooleanField( + help_text="Geeft, indien bekend, aan of de poging contact tussen de gemeenteen inwoner(s) of organisatie(s) tot stand te brengen succesvol was.", + null=True, + verbose_name="Indicatie contact gelukt", + ), + ), + ( + "taal", + models.CharField( + help_text="Taal die bij het klantcontact werd gesproken of geschreven.", + max_length=3, + verbose_name="Taal", + ), + ), + ( + "vertrouwelijk", + models.BooleanField( + help_text="Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld.", + verbose_name="Vertrouwelijk", + ), + ), + ( + "plaatsgevonden_op", + models.DateTimeField( + help_text="Datum en tijdstip waarop het klantontact plaatsvond. Als het klantcontacteen gesprek betrof, is dit het moment waarop het gesprek begon.Als het klantcontact verzending of ontvangst van informatie betrof,is dit bij benadering het moment waarop informatie door gemeente verzonden of ontvangen werd.", + verbose_name="Plaatsgevonden op", + ), + ), + ], + options={ + "verbose_name": "klantcontact", + "verbose_name_plural": "klantcontacten", + }, + ), + ] diff --git a/src/openklant/components/klantinteracties/models/__init__.py b/src/openklant/components/klantinteracties/models/__init__.py new file mode 100644 index 00000000..e87e3b09 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/__init__.py @@ -0,0 +1,2 @@ +from .klantcontacten import * # noqa +from .partijen import * # noqa diff --git a/src/openklant/components/klantinteracties/constants.py b/src/openklant/components/klantinteracties/models/constants.py similarity index 92% rename from src/openklant/components/klantinteracties/constants.py rename to src/openklant/components/klantinteracties/models/constants.py index b66b66e8..88a2ba0b 100644 --- a/src/openklant/components/klantinteracties/constants.py +++ b/src/openklant/components/klantinteracties/models/constants.py @@ -3,7 +3,8 @@ from djchoices import ChoiceItem, DjangoChoices -# TODO: change value when document gets updated: https://vng-realisatie.github.io/klantinteracties/informatiemodel/gegevenswoordenboek#detail_class_Model_Initiator +# TODO: change value when document gets updated: +# https://vng-realisatie.github.io/klantinteracties/informatiemodel/gegevenswoordenboek#detail_class_Model_Initiator class Initiator(DjangoChoices): gemeente = ChoiceItem("gemeente", _("Gemeente")) klant = ChoiceItem("klant", _("Klant")) diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py new file mode 100644 index 00000000..c1b0be44 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -0,0 +1,96 @@ +import uuid + +from django.core.validators import MaxValueValidator +from django.db import models +from django.utils.translation import gettext_lazy as _ + +from .constants import Initiator + + +class Klantcontact(models.Model): + id = models.UUIDField( + primary_key=True, + unique=True, + default=uuid.uuid4, + max_length=40, + help_text=_( + "Unieke (technische) identificatiecode van de betrokkene bij klantcontact." + ), + ) + nummer = models.PositiveIntegerField( + _("Nummer"), + help_text=_( + "Uniek identificerend nummer dat tijdens communicatie tussen mensen" + "kan worden gebruikt om de specifieke partij aan te duiden." + ), + validators=[MaxValueValidator(9999999999)], + blank=False, + ) + kanaal = models.CharField( + _("Kanaal"), + help_text=_("Communicatiekanaal dat bij het klantcontact werd gebruikt."), + max_length=50, + blank=False, + ) + onderwerp = models.CharField( + _("Onderwerp"), + help_text=_("Datgene waarover het klantcontact ging."), + max_length=200, + blank=False, + ) + inhoud = models.CharField( + _("Inhoud"), + help_text=_( + "Informatie die tijdens het klantcontact werd overgebracht of uitgewisseld," + "voor zover die voor betrokkenen of actoren relevant is." + ), + max_length=1000, + blank=True, + ) + initiator = models.CharField( + _("Initiator"), + help_text=_("Degene die het klantcontact initieerde."), + choices=Initiator.choices, + max_length=17, + blank=False, + ) + indicatie_contact_gelukt = models.BooleanField( + _("Indicatie contact gelukt"), + help_text=( + "Geeft, indien bekend, aan of de poging contact tussen de gemeente" + "en inwoner(s) of organisatie(s) tot stand te brengen succesvol was." + ), + blank=False, + null=True, + ) + taal = models.CharField( + _("Taal"), + help_text=_("Taal die bij het klantcontact werd gesproken of geschreven."), + max_length=3, + blank=False, + ) + vertrouwelijk = models.BooleanField( + _("Vertrouwelijk"), + help_text=_( + "Geeft aan of onderwerp, inhoud en kenmerken van het klantcontact vertrouwelijk moeten worden behandeld." + ), + blank=False, + ) + # TODO: does this field require auto_now? + plaatsgevonden_op = models.DateTimeField( + _("Plaatsgevonden op"), + help_text=_( + "Datum en tijdstip waarop het klantontact plaatsvond. Als het klantcontact" + "een gesprek betrof, is dit het moment waarop het gesprek begon." + "Als het klantcontact verzending of ontvangst van informatie betrof," + "is dit bij benadering het moment waarop informatie door gemeente verzonden of ontvangen werd." + ), + blank=False, + ) + + class Meta: + verbose_name = "klantcontact" + verbose_name_plural = "klantcontacten" + + def __str__(self) -> str: + return self.nummer diff --git a/src/openklant/components/klantinteracties/models.py b/src/openklant/components/klantinteracties/models/partijen.py similarity index 91% rename from src/openklant/components/klantinteracties/models.py rename to src/openklant/components/klantinteracties/models/partijen.py index 93fc438d..5a8aca22 100644 --- a/src/openklant/components/klantinteracties/models.py +++ b/src/openklant/components/klantinteracties/models/partijen.py @@ -1,12 +1,12 @@ import uuid +from django.core.validators import MaxValueValidator from django.db import models from django.utils.translation import gettext_lazy as _ -from django.core.validators import MaxValueValidator from vng_api_common.descriptors import GegevensGroepType -from openklant.components.klantinteracties.constants import SoortPartij +from .constants import SoortPartij class Partij(models.Model): @@ -22,7 +22,8 @@ class Partij(models.Model): nummer = models.PositiveIntegerField( _("Nummer"), help_text=_( - "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om de specifieke partij aan te duiden." + "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan" + "worden gebruikt om de specifieke partij aan te duiden." ), validators=[MaxValueValidator(9999999999)], blank=False, @@ -45,7 +46,8 @@ class Partij(models.Model): indicatie_geheimhouding = models.BooleanField( _("Indicatie geheimhouding"), help_text=_( - "Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat deze gegevens als geheim beschouwd moeten worden." + "Geeft aan of de verstrekker van partijgegevens heeft aangegeven dat" + "deze gegevens als geheim beschouwd moeten worden." ), blank=False, ) @@ -68,7 +70,8 @@ class Partij(models.Model): indicatie_actief = models.BooleanField( _("Indicatie actief"), help_text=_( - "Geeft aan of de contactgegevens van de partij nog gebruikt morgen worden om contact op te nemen. Gegevens van niet-actieve partijen mogen hiervoor niet worden gebruikt." + "Geeft aan of de contactgegevens van de partij nog gebruikt morgen worden om contact op te nemen." + "Gegevens van niet-actieve partijen mogen hiervoor niet worden gebruikt." ), blank=False, ) @@ -109,7 +112,8 @@ class Partij(models.Model): correspondentieadres_land = models.CharField( _("Land"), help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft. " + "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland)" + "aangeeft alwaar de ingeschrevene verblijft. " ), max_length=50, blank=True, @@ -151,7 +155,8 @@ class Partij(models.Model): bezoekadres_land = models.CharField( _("Land"), help_text=_( - "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland) aangeeft alwaar de ingeschrevene verblijft." + "Een code, opgenomen in Tabel 34, Landentabel, die het land (buiten Nederland)" + "aangeeft alwaar de ingeschrevene verblijft." ), max_length=50, blank=True, @@ -195,7 +200,8 @@ class Persoon(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." + "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen" + "de beginletter gecombineerd met de tweede letter van een voornaam." ), max_length=6, blank=False, @@ -211,7 +217,8 @@ class Persoon(models.Model): 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." + "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon" + "wil gebruiken tijdens communicatie met de gemeente." ), max_length=10, blank=True, @@ -252,7 +259,8 @@ class Contactpersoon(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." + "Een afkorting van de voornamen. Meestal de beginletter, maar in sommige gevallen" + "de beginletter gecombineerd met de tweede letter van een voornaam." ), max_length=6, blank=False, @@ -268,7 +276,8 @@ class Contactpersoon(models.Model): 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." + "Een eventueel voorvoegsel dat hoort bij de achternaam die de persoon" + "wil gebruiken tijdens communicatie met de gemeente." ), max_length=10, blank=True, diff --git a/src/openklant/components/klantinteracties/tests.py b/src/openklant/components/klantinteracties/tests.py deleted file mode 100644 index 7ce503c2..00000000 --- a/src/openklant/components/klantinteracties/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/src/openklant/components/klantinteracties/views.py b/src/openklant/components/klantinteracties/views.py deleted file mode 100644 index 91ea44a2..00000000 --- a/src/openklant/components/klantinteracties/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here.