diff --git a/src/openklant/components/klantinteracties/admin/partijen.py b/src/openklant/components/klantinteracties/admin/partijen.py index 6bed1107..be795913 100644 --- a/src/openklant/components/klantinteracties/admin/partijen.py +++ b/src/openklant/components/klantinteracties/admin/partijen.py @@ -113,6 +113,7 @@ class PartijAdmin(admin.ModelAdmin): "fields": [ "uuid", "voorkeurs_digitaal_adres", + "voorkeurs_rekeningnummer", "nummer", "interne_notitie", "soort_partij", diff --git a/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py b/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py new file mode 100644 index 00000000..242391d2 --- /dev/null +++ b/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py @@ -0,0 +1,10 @@ +from django_filters.rest_framework import FilterSet + +from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( + DigitaalAdresSerializer, +) +from openklant.components.utils.filters import ExpandFilter + + +class DigitaalAdresExpandFilterSet(FilterSet): + expand = ExpandFilter(serializer_class=DigitaalAdresSerializer) diff --git a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py index ec138c0c..2918400a 100644 --- a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py @@ -3,6 +3,9 @@ from rest_framework import serializers +from openklant.components.klantinteracties.api.serializers.constants import ( + SERIALIZER_PATH, +) from openklant.components.klantinteracties.api.validators import digitaal_adres_exists from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres from openklant.components.klantinteracties.models.klantcontacten import Betrokkene @@ -53,6 +56,16 @@ class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer): source="betrokkene", ) + inclusion_serializers = { + # 1 level + "verstrekt_door_betrokkene": f"{SERIALIZER_PATH}.klantcontacten.BetrokkeneSerializer", + # 2 levels + "verstrekt_door_betrokkene.had_klantcontact": f"{SERIALIZER_PATH}.klantcontacten.KlantcontactSerializer", + # 3 levels + "verstrekt_door_betrokkene.had_klantcontact.leidde_tot_interne_taken": f"{SERIALIZER_PATH}" + ".internetaken.InterneTaakSerializer", + } + class Meta: model = DigitaalAdres fields = ( diff --git a/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py index 0a03303f..a1805c58 100644 --- a/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py @@ -2,12 +2,16 @@ from rest_framework import viewsets from rest_framework.pagination import PageNumberPagination +from openklant.components.klantinteracties.api.filterset.digitaal_adres import ( + DigitaalAdresExpandFilterSet, +) from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( DigitaalAdresSerializer, ) from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres from openklant.components.token.authentication import TokenAuthentication from openklant.components.token.permission import TokenPermissions +from openklant.components.utils.mixins import ExpandMixin @extend_schema(tags=["digitale adressen"]) @@ -37,7 +41,7 @@ description="Verwijder een digitaal adres.", ), ) -class DigitaalAdresViewSet(viewsets.ModelViewSet): +class DigitaalAdresViewSet(ExpandMixin, viewsets.ModelViewSet): """ Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij opvolging van een klantcontact. @@ -52,3 +56,10 @@ class DigitaalAdresViewSet(viewsets.ModelViewSet): pagination_class = PageNumberPagination authentication_classes = (TokenAuthentication,) permission_classes = (TokenPermissions,) + + @property + def filterset_class(self): + """ + support expand in the detail endpoint + """ + return DigitaalAdresExpandFilterSet diff --git a/src/openklant/components/klantinteracties/openapi.yaml b/src/openklant/components/klantinteracties/openapi.yaml index 64969d97..1879eaf5 100644 --- a/src/openklant/components/klantinteracties/openapi.yaml +++ b/src/openklant/components/klantinteracties/openapi.yaml @@ -1065,6 +1065,21 @@ paths: description: Alle digitale adressen opvragen. summary: Alle digitale adressen opvragen. parameters: + - in: query + name: expand + schema: + type: array + items: + type: string + enum: + - verstrektDoorBetrokkene + - verstrektDoorBetrokkene.hadKlantcontact + - verstrektDoorBetrokkene.hadKlantcontact.leiddeTotInterneTaken + description: |+ + Sluit de gespecifieerde gerelateerde resources in in het antwoord. + + explode: false + style: form - name: page required: false in: query @@ -1080,7 +1095,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/PaginatedDigitaalAdresList' + $ref: '#/components/schemas/PaginatedExpandDigitaalAdresList' description: '' post: operationId: digitaleadressenCreate @@ -1109,6 +1124,21 @@ paths: description: Een specifiek digitaal adres opvragen. summary: Een specifiek digitaal adres opvragen. parameters: + - in: query + name: expand + schema: + type: array + items: + type: string + enum: + - verstrektDoorBetrokkene + - verstrektDoorBetrokkene.hadKlantcontact + - verstrektDoorBetrokkene.hadKlantcontact.leiddeTotInterneTaken + description: |+ + Sluit de gespecifieerde gerelateerde resources in in het antwoord. + + explode: false + style: form - in: path name: uuid schema: @@ -1125,7 +1155,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DigitaalAdres' + $ref: '#/components/schemas/ExpandDigitaalAdres' description: '' put: operationId: digitaleadressenUpdate @@ -3206,6 +3236,22 @@ components: required: - url - uuid + ExpandDigitaalAdres: + allOf: + - $ref: '#/components/schemas/DigitaalAdres' + - type: object + properties: + _expand: + type: object + description: Display details of the linked resources requested in the + `expand` parameter + properties: + verstrekt_door_betrokkene: + allOf: + - $ref: '#/components/schemas/Betrokkene' + nullable: true + description: Digitaal adres dat een betrokkene bij klantcontact verstrekte + voor gebruik bij opvolging van een klantcontact. ExpandKlantcontact: allOf: - $ref: '#/components/schemas/Klantcontact' @@ -3709,6 +3755,29 @@ components: type: array items: $ref: '#/components/schemas/DigitaalAdres' + PaginatedExpandDigitaalAdresList: + type: object + required: + - count + - results + properties: + count: + type: integer + example: 123 + next: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?page=4 + previous: + type: string + nullable: true + format: uri + example: http://api.example.org/accounts/?page=2 + results: + type: array + items: + $ref: '#/components/schemas/ExpandDigitaalAdres' PaginatedExpandKlantcontactList: type: object required: diff --git a/src/openklant/conf/dev.py b/src/openklant/conf/dev.py index b2bdd7c8..228c5a3f 100644 --- a/src/openklant/conf/dev.py +++ b/src/openklant/conf/dev.py @@ -19,6 +19,7 @@ os.environ.setdefault("RELEASE", "dev") os.environ.setdefault("LOG_REQUESTS", "no") +os.environ.setdefault("DISABLE_2FA", "yes") from .base import * # noqa isort:skip