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..2d61aa75 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0002_klantcontact.py @@ -0,0 +1,110 @@ +# 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.CharField( + help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", + max_length=10, + validators=[django.core.validators.validate_integer], + 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 gemeente en 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=255, + 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 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.", + 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 100% rename from src/openklant/components/klantinteracties/constants.py rename to src/openklant/components/klantinteracties/models/constants.py diff --git a/src/openklant/components/klantinteracties/models/klantcontacten.py b/src/openklant/components/klantinteracties/models/klantcontacten.py new file mode 100644 index 00000000..c6e5a904 --- /dev/null +++ b/src/openklant/components/klantinteracties/models/klantcontacten.py @@ -0,0 +1,89 @@ +import uuid + +from django.core.validators import validate_integer +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, + help_text=_( + "Unieke (technische) identificatiecode van de betrokkene bij klantcontact." + ), + ) + # TODO: add fk to Actor + # TODO: add fk to Onderwerpobject + # TODO: add fk to Inhoudsobject + nummer = models.CharField( + _("Nummer"), + help_text=_( + "Uniek identificerend nummer dat tijdens communicatie tussen mensen kan " + "worden gebruikt om het specifieke klantcontact aan te duiden." + ), + validators=[validate_integer], + max_length=10, + ) + kanaal = models.CharField( + _("Kanaal"), + help_text=_("Communicatiekanaal dat bij het klantcontact werd gebruikt."), + max_length=50, + ) + onderwerp = models.CharField( + _("Onderwerp"), + help_text=_("Datgene waarover het klantcontact ging."), + max_length=200, + ) + 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, + ) + 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." + ), + null=True, + ) + taal = models.CharField( + _("Taal"), + help_text=_("Taal die bij het klantcontact werd gesproken of geschreven."), + max_length=255, + ) + vertrouwelijk = models.BooleanField( + _("Vertrouwelijk"), + help_text=_( + "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=_( + "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") diff --git a/src/openklant/components/klantinteracties/models.py b/src/openklant/components/klantinteracties/models/partijen.py similarity index 100% rename from src/openklant/components/klantinteracties/models.py rename to src/openklant/components/klantinteracties/models/partijen.py