Skip to content

Commit

Permalink
🚧 changes to add separate adres for betrokkene
Browse files Browse the repository at this point in the history
  • Loading branch information
stevenbal committed Nov 8, 2024
1 parent 33ccbd7 commit 290ae07
Show file tree
Hide file tree
Showing 17 changed files with 628 additions and 61 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django.contrib import admin

from ..models.digitaal_adres import BetrokkeneAdres
from .digitaal_adres import BaseAdresAdminForm


class BetrokkeneAdresAdminForm(BaseAdresAdminForm):
class Meta:
model = BetrokkeneAdres
fields = "__all__"


@admin.register(BetrokkeneAdres)
class BetrokkeneAdresAdmin(admin.ModelAdmin):
readonly_fields = ("uuid",)
search_fields = ("adres",)
autocomplete_fields = ("betrokkene",)
form = BetrokkeneAdresAdminForm
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
from ..models.digitaal_adres import DigitaalAdres


class DigitaalAdresAdminForm(forms.ModelForm):
class BaseAdresAdminForm(forms.ModelForm):
class Meta:
model = DigitaalAdres
fields = "__all__"

def clean_adres(self):
Expand All @@ -16,6 +15,12 @@ def clean_adres(self):
return data["adres"]


class DigitaalAdresAdminForm(BaseAdresAdminForm):
class Meta:
model = DigitaalAdres
fields = "__all__"


@admin.register(DigitaalAdres)
class DigitaalAdresAdmin(admin.ModelAdmin):
readonly_fields = ("uuid",)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,8 @@
from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres
from openklant.components.utils.filters import ExpandFilter


class DigitaalAdresDetailFilterSet(FilterSet):
expand = ExpandFilter(serializer_class=DigitaalAdresSerializer)
# class DigitaalAdresDetailFilterSet(FilterSet):
# expand = ExpandFilter(serializer_class=DigitaalAdresSerializer)


class DigitaalAdresFilterSet(FilterSet):
Expand Down Expand Up @@ -74,7 +73,7 @@ class DigitaalAdresFilterSet(FilterSet):
),
)

expand = ExpandFilter(serializer_class=DigitaalAdresSerializer)
# expand = ExpandFilter(serializer_class=DigitaalAdresSerializer)

class Meta:
model = DigitaalAdres
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
from django.db import transaction
from django.utils.translation import gettext_lazy as _

from rest_framework import serializers

from openklant.components.klantinteracties.api.serializers.constants import (
SERIALIZER_PATH,
)
from openklant.components.klantinteracties.api.validators import (
OptionalEmailValidator,
betrokkene_adres_exists,
)
from openklant.components.klantinteracties.models.digitaal_adres import BetrokkeneAdres
from openklant.components.klantinteracties.models.klantcontacten import Betrokkene
from openklant.utils.serializers import get_field_value


class BetrokkeneAdresForeignKeySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = BetrokkeneAdres
fields = (
"uuid",
"url",
)
extra_kwargs = {
"uuid": {"required": True, "validators": [betrokkene_adres_exists]},
"url": {
"view_name": "klantinteracties:betrokkeneadres-detail",
"lookup_field": "uuid",
"help_text": _(
"De unieke URL van dit betrokkene adres binnen deze API."
),
},
}


class BetrokkeneAdresSerializer(serializers.HyperlinkedModelSerializer):
from openklant.components.klantinteracties.api.serializers.klantcontacten import (
BetrokkeneForeignKeySerializer,
)

verstrekt_door_betrokkene = BetrokkeneForeignKeySerializer(
required=True,
allow_null=True,
help_text=_(
"Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij "
"opvolging van een klantcontact."
),
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 = BetrokkeneAdres
fields = (
"uuid",
"url",
"verstrekt_door_betrokkene",
"adres",
"soort_digitaal_adres",
"omschrijving",
)
extra_kwargs = {
"uuid": {"read_only": True},
"url": {
"view_name": "klantinteracties:betrokkeneadres-detail",
"lookup_field": "uuid",
"help_text": _(
"De unieke URL van dit betrokkene adres binnen deze API."
),
},
}

def validate_adres(self, adres):
"""
Define the validator here, to avoid DRF spectacular marking the format for
`adres` as `email`
"""
soort_digitaal_adres = get_field_value(
self, self.initial_data, "soort_digitaal_adres"
)
OptionalEmailValidator()(adres, soort_digitaal_adres)
return adres

@transaction.atomic
def update(self, instance, validated_data):
if "betrokkene" in validated_data:
if betrokkene := validated_data.pop("betrokkene", None):
betrokkene = Betrokkene.objects.get(uuid=str(betrokkene.get("uuid")))

validated_data["betrokkene"] = betrokkene

return super().update(instance, validated_data)

@transaction.atomic
def create(self, validated_data):
if betrokkene := validated_data.pop("betrokkene", None):
validated_data["betrokkene"] = Betrokkene.objects.get(
uuid=str(betrokkene.get("uuid"))
)

return super().create(validated_data)
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@

from rest_framework import serializers, validators

from openklant.components.klantinteracties.api.serializers.constants import (
SERIALIZER_PATH,
)
from openklant.components.klantinteracties.api.validators import (
OptionalEmailValidator,
digitaal_adres_exists,
Expand Down Expand Up @@ -34,9 +31,6 @@ class Meta:


class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer):
from openklant.components.klantinteracties.api.serializers.klantcontacten import (
BetrokkeneForeignKeySerializer,
)
from openklant.components.klantinteracties.api.serializers.partijen import (
PartijForeignKeySerializer,
)
Expand All @@ -50,32 +44,12 @@ class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer):
),
source="partij",
)
verstrekt_door_betrokkene = BetrokkeneForeignKeySerializer(
required=True,
allow_null=True,
help_text=_(
"Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij "
"opvolging van een klantcontact."
),
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 = (
"uuid",
"url",
"verstrekt_door_betrokkene",
"verstrekt_door_partij",
"adres",
"soort_digitaal_adres",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@
from openklant.components.klantinteracties.api.serializers.constants import (
SERIALIZER_PATH,
)
from openklant.components.klantinteracties.api.serializers.digitaal_adres import (
DigitaalAdresForeignKeySerializer,
)
from openklant.components.klantinteracties.api.validators import (
FKUniqueTogetherValidator,
betrokkene_exists,
Expand Down Expand Up @@ -129,6 +126,9 @@ class Meta:
class BetrokkeneSerializer(
NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer
):
from openklant.components.klantinteracties.api.serializers.betrokkene_adres import (
BetrokkeneAdresForeignKeySerializer,
)
from openklant.components.klantinteracties.api.serializers.partijen import (
PartijForeignKeySerializer,
)
Expand All @@ -147,7 +147,7 @@ class BetrokkeneSerializer(
),
source="klantcontact",
)
digitale_adressen = DigitaalAdresForeignKeySerializer(
digitale_adressen = BetrokkeneAdresForeignKeySerializer(
read_only=True,
help_text=_("Digitale adressen van de betrokkene bij klantcontact."),
source="digitaaladres_set",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,10 @@
from openklant.components.klantinteracties.api.serializers.digitaal_adres import (
DigitaalAdresForeignKeySerializer,
)
from openklant.components.klantinteracties.api.serializers.klantcontacten import (
BetrokkeneForeignKeySerializer,
)

# from openklant.components.klantinteracties.api.serializers.klantcontacten import (
# BetrokkeneForeignKeySerializer,
# )
from openklant.components.klantinteracties.api.validators import (
FKUniqueTogetherValidator,
categorie_exists,
Expand Down Expand Up @@ -418,6 +419,9 @@ def create(self, validated_data):


class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
from openklant.components.klantinteracties.api.serializers.klantcontacten import (
BetrokkeneForeignKeySerializer,
)
from openklant.components.klantinteracties.api.serializers.rekeningnummers import (
RekeningnummerForeignKeySerializer,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ def test_create_digitaal_adres_is_standaard_adres(self):
"verstrektDoorBetrokkene": None,
"verstrektDoorPartij": {"uuid": str(partij2.uuid)},
"soortDigitaalAdres": "email",
"adres": "adres",
"adres": "[email protected]",
"omschrijving": "omschrijving",
"isStandaardAdres": True,
}
Expand Down Expand Up @@ -300,7 +300,7 @@ def test_update_digitaal_adres_is_standaard_adres(self):
"verstrektDoorPartij": {"uuid": str(partij2.uuid)},
"soortDigitaalAdres": "email",
"isStandaardAdres": True,
"adres": "changed",
"adres": "[email protected]",
"omschrijving": "changed",
}

Expand Down
12 changes: 11 additions & 1 deletion src/openklant/components/klantinteracties/api/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
from openklant.components.klantinteracties.constants import SoortDigitaalAdres
from openklant.components.klantinteracties.models.actoren import Actor
from openklant.components.klantinteracties.models.constants import SoortPartij
from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres
from openklant.components.klantinteracties.models.digitaal_adres import (
BetrokkeneAdres,
DigitaalAdres,
)
from openklant.components.klantinteracties.models.internetaken import InterneTaak
from openklant.components.klantinteracties.models.klantcontacten import (
Betrokkene,
Expand Down Expand Up @@ -105,6 +108,13 @@ def digitaal_adres_exists(value):
raise serializers.ValidationError(_("DigitaalAdres object bestaat niet."))


def betrokkene_adres_exists(value):
try:
BetrokkeneAdres.objects.get(uuid=str(value))
except BetrokkeneAdres.DoesNotExist:
raise serializers.ValidationError(_("BetrokkeneAdres object bestaat niet."))


def internetaak_exists(value):
try:
InterneTaak.objects.get(uuid=str(value))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
from rest_framework import viewsets
from vng_api_common.pagination import DynamicPageSizePagination

from openklant.components.klantinteracties.api.filterset.digitaal_adres import (
DigitaalAdresDetailFilterSet,
from openklant.components.klantinteracties.api.filterset.digitaal_adres import ( # DigitaalAdresDetailFilterSet,
DigitaalAdresFilterSet,
)
from openklant.components.klantinteracties.api.serializers.digitaal_adres import (
Expand Down Expand Up @@ -57,12 +56,13 @@ class DigitaalAdresViewSet(ExpandMixin, viewsets.ModelViewSet):
pagination_class = DynamicPageSizePagination
authentication_classes = (TokenAuthentication,)
permission_classes = (TokenPermissions,)
filterset_class = DigitaalAdresFilterSet

@property
def filterset_class(self):
"""
support expand in the detail endpoint
"""
if self.detail:
return DigitaalAdresDetailFilterSet
return DigitaalAdresFilterSet
# @property
# def filterset_class(self):
# """
# support expand in the detail endpoint
# """
# if self.detail:
# return DigitaalAdresDetailFilterSet
# return DigitaalAdresFilterSet
Loading

0 comments on commit 290ae07

Please sign in to comment.