Skip to content

Commit e4f6a46

Browse files
committed
✨ [#69] added CategorieRelatie model and api endpoint
1 parent de53c79 commit e4f6a46

File tree

11 files changed

+1326
-108
lines changed

11 files changed

+1326
-108
lines changed

src/openklant/components/klantinteracties/admin/partijen.py

+34-6
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,37 @@
44
from ..models.constants import SoortPartij
55
from ..models.digitaal_adres import DigitaalAdres
66
from ..models.klantcontacten import Betrokkene
7-
from ..models.partijen import Categorie, Contactpersoon, Organisatie, Partij, Persoon
8-
9-
10-
class CategorieInlineAdmin(admin.StackedInline):
11-
model = Categorie
7+
from ..models.partijen import (
8+
Categorie,
9+
CategorieRelatie,
10+
Contactpersoon,
11+
Organisatie,
12+
Partij,
13+
Persoon,
14+
)
15+
16+
17+
class CategorieRelatieInlineAdmin(admin.StackedInline):
18+
model = CategorieRelatie
19+
readonly_fields = ("uuid",)
20+
autocomplete_fields = ("categorie",)
21+
fields = (
22+
"uuid",
23+
"categorie",
24+
"begin_datum",
25+
"eind_datum",
26+
)
1227
extra = 0
1328

1429

1530
class BetrokkeneInlineAdmin(admin.StackedInline):
31+
readonly_fields = ("uuid",)
1632
model = Betrokkene
1733
extra = 0
1834

1935

2036
class DigitaalAdresInlineAdmin(admin.StackedInline):
37+
readonly_fields = ("uuid",)
2138
model = DigitaalAdres
2239
extra = 0
2340

@@ -28,6 +45,7 @@ class PersoonInlineAdmin(admin.StackedInline):
2845

2946

3047
class ContactpersoonInlineAdmin(admin.StackedInline):
48+
readonly_fields = ("uuid",)
3149
model = Contactpersoon
3250
fk_name = "partij"
3351
raw_id_field = ["partij"]
@@ -53,7 +71,7 @@ class PartijAdmin(admin.ModelAdmin):
5371
)
5472
inlines = (
5573
PersoonInlineAdmin,
56-
CategorieInlineAdmin,
74+
CategorieRelatieInlineAdmin,
5775
ContactpersoonInlineAdmin,
5876
OrganisatieInlineAdmin,
5977
DigitaalAdresInlineAdmin,
@@ -135,3 +153,13 @@ def get_contactpersonen(self, obj):
135153
def get_organisaties(self, obj):
136154
if organisatie := obj.organisatie:
137155
return organisatie.naam
156+
157+
158+
@admin.register(Categorie)
159+
class CategorieAdmin(admin.ModelAdmin):
160+
readonly_fields = ("uuid",)
161+
search_fields = ("naam",)
162+
fields = (
163+
"uuid",
164+
"naam",
165+
)

src/openklant/components/klantinteracties/api/serializers/partijen.py

+78-9
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres
3030
from openklant.components.klantinteracties.models.partijen import (
3131
Categorie,
32+
CategorieRelatie,
3233
Contactpersoon,
3334
Organisatie,
3435
Partij,
@@ -67,17 +68,50 @@ class CategorieForeignKeySerializer(serializers.HyperlinkedModelSerializer):
6768

6869
class Meta:
6970
model = Categorie
70-
fields = ("uuid", "url")
71+
fields = (
72+
"uuid",
73+
"url",
74+
"naam",
75+
)
7176
extra_kwargs = {
7277
"uuid": {"required": True, "validators": [categorie_exists]},
7378
"url": {
7479
"view_name": "klantinteracties:categorie-detail",
7580
"lookup_field": "uuid",
7681
"help_text": _("De unieke URL van deze categorie binnen deze API."),
7782
},
83+
"naam": {"read_only": True},
7884
}
7985

8086

87+
class CategorieRelatieForeignKeySerializer(serializers.HyperlinkedModelSerializer):
88+
"""Let op: Dit attribuut is EXPERIMENTEEL."""
89+
90+
categorie_naam = serializers.SerializerMethodField(
91+
help_text=_("De naam van de gelinkte categorie.")
92+
)
93+
94+
class Meta:
95+
model = Categorie
96+
fields = (
97+
"uuid",
98+
"url",
99+
"categorie_naam",
100+
)
101+
extra_kwargs = {
102+
"uuid": {"required": True, "validators": [categorie_exists]},
103+
"url": {
104+
"view_name": "klantinteracties:categorie-detail",
105+
"lookup_field": "uuid",
106+
"help_text": _("De unieke URL van deze categorie binnen deze API."),
107+
},
108+
}
109+
110+
def get_categorie_naam(self, obj):
111+
if obj.categorie:
112+
return obj.categorie.naam
113+
114+
81115
class PartijIdentificatorForeignkeySerializer(serializers.HyperlinkedModelSerializer):
82116
class Meta:
83117
model = PartijIdentificator
@@ -131,10 +165,35 @@ class Meta:
131165
class CategorieSerializer(serializers.HyperlinkedModelSerializer):
132166
"""Let op: Dit endpoint is EXPERIMENTEEL."""
133167

168+
class Meta:
169+
model = Categorie
170+
fields = (
171+
"uuid",
172+
"url",
173+
"naam",
174+
)
175+
extra_kwargs = {
176+
"uuid": {"read_only": True},
177+
"url": {
178+
"view_name": "klantinteracties:categorie-detail",
179+
"lookup_field": "uuid",
180+
"help_text": _("De unieke URL van deze categorie binnen deze API."),
181+
},
182+
}
183+
184+
185+
class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer):
186+
"""Let op: Dit endpoint is EXPERIMENTEEL."""
187+
134188
partij = PartijForeignkeyBaseSerializer(
135189
required=True,
136190
allow_null=True,
137-
help_text=_("De partij waar de categorie aan gelinkt is."),
191+
help_text=_("De partij waar de categorie relatie aan gelinkt is."),
192+
)
193+
categorie = CategorieForeignKeySerializer(
194+
required=True,
195+
allow_null=True,
196+
help_text=_("De categorie waar de categorie relatie aan gelinkt is."),
138197
)
139198
begin_datum = serializers.DateField(
140199
allow_null=True,
@@ -146,12 +205,12 @@ class CategorieSerializer(serializers.HyperlinkedModelSerializer):
146205
)
147206

148207
class Meta:
149-
model = Categorie
208+
model = CategorieRelatie
150209
fields = (
151210
"uuid",
152211
"url",
153212
"partij",
154-
"naam",
213+
"categorie",
155214
"begin_datum",
156215
"eind_datum",
157216
)
@@ -172,6 +231,12 @@ def update(self, instance, validated_data):
172231

173232
validated_data["partij"] = partij
174233

234+
if "categorie" in validated_data:
235+
if categorie := validated_data.pop("categorie", None):
236+
categorie = Categorie.objects.get(uuid=str(categorie.get("uuid")))
237+
238+
validated_data["categorie"] = categorie
239+
175240
return super().update(instance, validated_data)
176241

177242
@transaction.atomic
@@ -184,7 +249,11 @@ def create(self, validated_data):
184249
if partij := validated_data.pop("partij"):
185250
partij = Partij.objects.get(uuid=str(partij.get("uuid")))
186251

252+
if categorie := validated_data.pop("categorie"):
253+
categorie = Categorie.objects.get(uuid=str(categorie.get("uuid")))
254+
187255
validated_data["partij"] = partij
256+
validated_data["categorie"] = categorie
188257

189258
return super().create(validated_data)
190259

@@ -355,13 +424,13 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
355424
many=True,
356425
source="betrokkene_set",
357426
)
358-
categorieen = CategorieForeignKeySerializer(
427+
categorie_relaties = CategorieRelatieForeignKeySerializer(
359428
read_only=True,
360429
help_text=_(
361-
"De Categorieën van een partij: Let op: Dit attribuut is EXPERIMENTEEL."
430+
"De Categorie relaties van een partij: Let op: Dit attribuut is EXPERIMENTEEL."
362431
),
363432
many=True,
364-
source="categorie_set",
433+
source="categorierelatie_set",
365434
)
366435
digitale_adressen = DigitaalAdresForeignKeySerializer(
367436
required=True,
@@ -415,7 +484,7 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
415484
# 1 level
416485
"digitale_adressen": f"{SERIALIZER_PATH}.digitaal_adres.DigitaalAdresSerializer",
417486
"betrokkenen": f"{SERIALIZER_PATH}.klantcontacten.BetrokkeneSerializer",
418-
"categorieen": f"{SERIALIZER_PATH}.partijen.CategorieSerializer",
487+
"categorie_relaties": f"{SERIALIZER_PATH}.partijen.CategorieRelatieSerializer",
419488
# 2 levels
420489
"betrokkenen.had_klantcontact": f"{SERIALIZER_PATH}.klantcontacten.KlantcontactSerializer",
421490
# 3 levels
@@ -430,7 +499,7 @@ class Meta:
430499
"nummer",
431500
"interne_notitie",
432501
"betrokkenen",
433-
"categorieen",
502+
"categorie_relaties",
434503
"digitale_adressen",
435504
"voorkeurs_digitaal_adres",
436505
"vertegenwoordigde",

0 commit comments

Comments
 (0)