Skip to content

Commit

Permalink
Restore descriptions and display
Browse files Browse the repository at this point in the history
  • Loading branch information
Coperh committed Dec 4, 2023
1 parent c31dc82 commit a87b620
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 3 deletions.
44 changes: 44 additions & 0 deletions tests/test_choices.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from django.db.models import TextChoices

from vng_api_common.choices import (
TextChoicesWithDescriptions,
ensure_description_exists,
)
from vng_api_common.serializers import add_choice_values_help_text


class NormalChoices(TextChoices):
option1 = "option1", "option one name"
option2 = "option2", "option two name"


class ChoicesWithDescriptions(TextChoicesWithDescriptions):
option1 = "option1", "option one name"
option2 = "option2", "option two name"

@staticmethod
def get_descriptions():
return {
ChoicesWithDescriptions.option1: "Option one description",
ChoicesWithDescriptions.option2: "Description of option two",
}


def test_add_choice_values_help_text():
help_text = add_choice_values_help_text(NormalChoices)
expected_text = (
"Uitleg bij mogelijke waarden:\n\n"
"* `option1` - option one name\n"
"* `option2` - option two name"
)
assert help_text == expected_text


def test_add_choice_values_help_text_with_descriptions():
help_text = add_choice_values_help_text(ChoicesWithDescriptions)
expected_text = (
"Uitleg bij mogelijke waarden:\n\n"
"* `option1` - (option one name) Option one description\n"
"* `option2` - (option two name) Description of option two"
)
assert help_text == expected_text
16 changes: 16 additions & 0 deletions vng_api_common/choices.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django.db.models import TextChoices


def ensure_description_exists(cls):
descriptions = cls.get_descriptions()

for choice in cls.choices:
assert choice in descriptions

return cls


class TextChoicesWithDescriptions(TextChoices):
@classmethod
def get_descriptions(cls):
return {}
80 changes: 78 additions & 2 deletions vng_api_common/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
from django.db import models
from django.utils.translation import gettext_lazy as _

from .choices import TextChoicesWithDescriptions

BSN_LENGTH = 9
RSIN_LENGTH = 9

Expand Down Expand Up @@ -52,7 +54,7 @@ def get_choice_order(cls, value) -> Optional[int]:
return orders.get(value)


class RolOmschrijving(models.TextChoices):
class RolOmschrijving(TextChoicesWithDescriptions):
adviseur = "adviseur", _("Adviseur")
behandelaar = "behandelaar", _("Behandelaar")
belanghebbende = "belanghebbende", _("Belanghebbende")
Expand All @@ -62,6 +64,20 @@ class RolOmschrijving(models.TextChoices):
zaakcoordinator = "zaakcoordinator", _("Zaakcoördinator")
medeinitiator = "mede_initiator", _("Mede-initiator")

@classmethod
def get_descriptions(cls):
return {
cls.adviseur: "Kennis in dienst stellen van de behandeling van (een deel van) een zaak.",
cls.behandelaar: "De vakinhoudelijke behandeling doen van (een deel van) een zaak.",
cls.belanghebbende: "Vanuit eigen en objectief belang rechtstreeks betrokken "
"zijn bij de behandeling en/of de uitkomst van een zaak.",
cls.beslisser: "Nemen van besluiten die voor de uitkomst van een zaak noodzakelijk zijn.",
cls.initiator: "Aanleiding geven tot de start van een zaak ..",
cls.klantcontacter: "Het eerste aanspreekpunt zijn voor vragen van burgers en bedrijven ..",
cls.zaakcoordinator: "Er voor zorg dragen dat de behandeling van de zaak in samenhang uitgevoerd wordt conform de daarover gemaakte afspraken.",
cls.medeinitiator: "",
}


class RolTypes(models.TextChoices):
natuurlijk_persoon = "natuurlijk_persoon", _("Natuurlijk persoon")
Expand Down Expand Up @@ -97,7 +113,8 @@ class Archiefstatus(models.TextChoices):
)


class BrondatumArchiefprocedureAfleidingswijze(models.TextChoices):
# @ensure_description_exists
class BrondatumArchiefprocedureAfleidingswijze(TextChoicesWithDescriptions):
afgehandeld = "afgehandeld", _("Afgehandeld")
ander_datumkenmerk = "ander_datumkenmerk", _("Ander datumkenmerk")
eigenschap = "eigenschap", _("Eigenschap")
Expand All @@ -108,6 +125,65 @@ class BrondatumArchiefprocedureAfleidingswijze(models.TextChoices):
vervaldatum_besluit = "vervaldatum_besluit", _("Vervaldatum besluit")
zaakobject = "zaakobject", _("Zaakobject")

@classmethod
def get_descriptions(cls):
return {
cls.afgehandeld: _(
"De termijn start op de datum waarop de zaak is "
"afgehandeld (ZAAK.Einddatum in het RGBZ)."
),
cls.ander_datumkenmerk: _(
"De termijn start op de datum die is vastgelegd in een "
"ander datumveld dan de datumvelden waarop de overige "
"waarden (van deze attribuutsoort) betrekking hebben. "
"`Objecttype`, `Registratie` en `Datumkenmerk` zijn niet "
"leeg."
),
cls.eigenschap: _(
"De termijn start op de datum die is vastgelegd in een "
"ander datumveld dan de datumvelden waarop de overige "
"waarden (van deze attribuutsoort) betrekking hebben. "
"`Objecttype`, `Registratie` en `Datumkenmerk` zijn niet "
"leeg."
),
cls.gerelateerde_zaak: _(
"De termijn start op de datum waarop de gerelateerde "
"zaak is afgehandeld (`ZAAK.Einddatum` of "
"`ZAAK.Gerelateerde_zaak.Einddatum` in het RGBZ). "
"`ResultaatType.ZaakType` heeft gerelateerd `ZaakType`"
),
cls.hoofdzaak: _(
"De termijn start op de datum waarop de gerelateerde "
"zaak is afgehandeld, waarvan de zaak een deelzaak is "
"(`ZAAK.Einddatum` van de hoofdzaak in het RGBZ). "
"ResultaatType.ZaakType is deelzaaktype van ZaakType."
),
cls.ingangsdatum_besluit: _(
"De termijn start op de datum waarop het besluit van "
"kracht wordt (`BESLUIT.Ingangsdatum` in het RGBZ). "
"ResultaatType.ZaakType heeft relevant BesluitType"
),
cls.termijn: _(
"De termijn start een vast aantal jaren na de datum "
"waarop de zaak is afgehandeld (`ZAAK.Einddatum` in het "
"RGBZ)."
),
cls.vervaldatum_besluit: _(
"De termijn start op de dag na de datum waarop het "
"besluit vervalt (`BESLUIT.Vervaldatum` in het RGBZ). "
"ResultaatType.ZaakType heeft relevant BesluitType"
),
cls.zaakobject: _(
"De termijn start op de einddatum geldigheid van het "
"zaakobject waarop de zaak betrekking heeft "
"(bijvoorbeeld de overlijdendatum van een Persoon). "
"M.b.v. de attribuutsoort `Objecttype` wordt vastgelegd "
"om welke zaakobjecttype het gaat; m.b.v. de "
"attribuutsoort `Datumkenmerk` wordt vastgelegd welke "
"datum-attribuutsoort van het zaakobjecttype het betreft."
),
}


class ZaakobjectTypes(models.TextChoices):
adres = "adres", _("Adres")
Expand Down
9 changes: 8 additions & 1 deletion vng_api_common/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import isodate
from rest_framework import fields, serializers

from .choices import TextChoicesWithDescriptions
from .descriptors import GegevensGroepType

try:
Expand Down Expand Up @@ -93,7 +94,13 @@ def add_choice_values_help_text(choices: Union[models.Choices, Tuple[str, str]])
is_dj_choices = inspect.isclass(choices) and issubclass(choices, models.Choices)
_choices = choices.choices if is_dj_choices else choices

items = [f"* `{key}` - {value}" for key, value in _choices]
if issubclass(choices, TextChoicesWithDescriptions):
descriptions = choices.get_descriptions()
items = [
f"* `{key}` - ({value}) {descriptions[key]}" for key, value in _choices
]
else:
items = [f"* `{key}` - {value}" for key, value in _choices]

return "Uitleg bij mogelijke waarden:\n\n" + "\n".join(items)

Expand Down

0 comments on commit a87b620

Please sign in to comment.