Skip to content

Commit 9bbcafd

Browse files
[#240] Make nullable fields non-required in creation endpoints
1 parent 1527762 commit 9bbcafd

File tree

5 files changed

+85
-37
lines changed

5 files changed

+85
-37
lines changed

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer):
4242
)
4343

4444
verstrekt_door_partij = PartijForeignKeySerializer(
45-
required=True,
45+
required=False,
4646
allow_null=True,
4747
help_text=_(
4848
"Digitaal adres dat een partij verstrekte voor gebruik bij "
@@ -51,7 +51,7 @@ class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer):
5151
source="partij",
5252
)
5353
verstrekt_door_betrokkene = BetrokkeneForeignKeySerializer(
54-
required=True,
54+
required=False,
5555
allow_null=True,
5656
help_text=_(
5757
"Digitaal adres dat een betrokkene bij klantcontact verstrekte voor gebruik bij "
@@ -70,6 +70,13 @@ class DigitaalAdresSerializer(serializers.HyperlinkedModelSerializer):
7070
".internetaken.InterneTaakSerializer",
7171
}
7272

73+
def __init__(self, *args, **kwargs):
74+
super().__init__(*args, **kwargs)
75+
request = self.context.get("request")
76+
if request and request.method in ["PUT", "PATCH"]:
77+
self.fields["verstrekt_door_partij"].required = True
78+
self.fields["verstrekt_door_betrokkene"].required = True
79+
7380
class Meta:
7481
model = DigitaalAdres
7582
fields = (

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

+23-4
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class BetrokkeneSerializer(
134134
)
135135

136136
was_partij = PartijForeignKeySerializer(
137-
required=True,
137+
required=False,
138138
allow_null=True,
139139
source="partij",
140140
help_text=_("Betrokkene bij klantcontact die een partij was."),
@@ -184,6 +184,12 @@ class BetrokkeneSerializer(
184184
help_text="De voledige naam van de betrokkene.",
185185
)
186186

187+
def __init__(self, *args, **kwargs):
188+
super().__init__(*args, **kwargs)
189+
request = self.context.get("request")
190+
if request and request.method in ["PUT", "PATCH"]:
191+
self.fields["was_partij"].required = True
192+
187193
class Meta:
188194
model = Betrokkene
189195
fields = (
@@ -336,12 +342,12 @@ class OnderwerpobjectSerializer(
336342
NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer
337343
):
338344
klantcontact = KlantcontactForeignKeySerializer(
339-
required=True,
345+
required=False,
340346
allow_null=True,
341347
help_text=_("'Klantcontact' ging over 'Onderwerpobject'"),
342348
)
343349
was_klantcontact = KlantcontactForeignKeySerializer(
344-
required=True,
350+
required=False,
345351
allow_null=True,
346352
help_text=_("'Onderwerpobject' was 'Klantcontact'"),
347353
)
@@ -354,6 +360,13 @@ class OnderwerpobjectSerializer(
354360
),
355361
)
356362

363+
def __init__(self, *args, **kwargs):
364+
super().__init__(*args, **kwargs)
365+
request = self.context.get("request")
366+
if request and request.method in ["PUT", "PATCH"]:
367+
self.fields["klantcontact"].required = True
368+
self.fields["was_klantcontact"].required = True
369+
357370
class Meta:
358371
model = Onderwerpobject
359372
fields = (
@@ -419,7 +432,7 @@ class BijlageSerializer(
419432
NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer
420433
):
421434
was_bijlage_van_klantcontact = KlantcontactForeignKeySerializer(
422-
required=True,
435+
required=False,
423436
allow_null=True,
424437
help_text=_("'Klantcontact' ging over 'Onderwerpobject'"),
425438
source="klantcontact",
@@ -433,6 +446,12 @@ class BijlageSerializer(
433446
),
434447
)
435448

449+
def __init__(self, *args, **kwargs):
450+
super().__init__(*args, **kwargs)
451+
request = self.context.get("request")
452+
if request and request.method in ["PUT", "PATCH"]:
453+
self.fields["was_bijlage_van_klantcontact"].required = True
454+
436455
class Meta:
437456
model = Bijlage
438457
fields = (

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

+45-10
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,12 @@ class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer):
198198
"""Let op: Dit endpoint is EXPERIMENTEEL."""
199199

200200
partij = PartijForeignkeyBaseSerializer(
201-
required=True,
201+
required=False,
202202
allow_null=True,
203203
help_text=_("De partij waar de categorie relatie aan gelinkt is."),
204204
)
205205
categorie = CategorieForeignKeySerializer(
206-
required=True,
206+
required=False,
207207
allow_null=True,
208208
help_text=_(
209209
"De categorie waar de categorie relatie aan gelinkt is: Let op: Dit attribuut is EXPERIMENTEEL."
@@ -218,6 +218,13 @@ class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer):
218218
),
219219
)
220220

221+
def __init__(self, *args, **kwargs):
222+
super().__init__(*args, **kwargs)
223+
request = self.context.get("request")
224+
if request and request.method in ["PUT", "PATCH"]:
225+
self.fields["partij"].required = True
226+
self.fields["categorie"].required = True
227+
221228
class Meta:
222229
model = CategorieRelatie
223230
fields = (
@@ -286,7 +293,7 @@ class Meta:
286293

287294
class PersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerializer):
288295
contactnaam = PersoonContactSerializer(
289-
required=True,
296+
required=False,
290297
allow_null=True,
291298
help_text=_(
292299
"Naam die een persoon wil gebruiken tijdens contact met de gemeente. "
@@ -298,6 +305,12 @@ class PersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerializer):
298305
help_text="De voledige naam van het persoon.",
299306
)
300307

308+
def __init__(self, *args, **kwargs):
309+
super().__init__(*args, **kwargs)
310+
request = self.context.get("request")
311+
if request and request.method in ["PUT", "PATCH"]:
312+
self.fields["contactnaam"].required = True
313+
301314
class Meta:
302315
model = Persoon
303316
fields = (
@@ -311,7 +324,7 @@ def get_volledige_naam(self, obj) -> str:
311324

312325
class ContactpersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerializer):
313326
werkte_voor_partij = PartijPolymorphicSerializer(
314-
required=True,
327+
required=False,
315328
allow_null=True,
316329
help_text=_("Organisatie waarvoor een contactpersoon werkte."),
317330
)
@@ -328,6 +341,12 @@ class ContactpersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerial
328341
help_text="De voledige naam van het constact persoon.",
329342
)
330343

344+
def __init__(self, *args, **kwargs):
345+
super().__init__(*args, **kwargs)
346+
request = self.context.get("request")
347+
if request and request.method in ["PUT", "PATCH"]:
348+
self.fields["werkte_voor_partij"].required = True
349+
331350
class Meta:
332351
model = Contactpersoon
333352
fields = (
@@ -370,20 +389,27 @@ class PartijIdentificatorSerializer(
370389
NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer
371390
):
372391
identificeerde_partij = PartijForeignKeySerializer(
373-
required=True,
392+
required=False,
374393
allow_null=True,
375394
help_text=_("Partij-identificator die hoorde bij een partij."),
376395
source="partij",
377396
)
378397
partij_identificator = PartijIdentificatorGroepTypeSerializer(
379-
required=True,
398+
required=False,
380399
allow_null=True,
381400
help_text=_(
382401
"Gegevens die een partij in een basisregistratie "
383402
"of ander extern register uniek identificeren."
384403
),
385404
)
386405

406+
def __init__(self, *args, **kwargs):
407+
super().__init__(*args, **kwargs)
408+
request = self.context.get("request")
409+
if request and request.method in ["PUT", "PATCH"]:
410+
self.fields["identificeerde_partij"].required = True
411+
self.fields["partij_identificator"].required = True
412+
387413
class Meta:
388414
model = PartijIdentificator
389415
fields = (
@@ -461,7 +487,7 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
461487
source="categorierelatie_set",
462488
)
463489
digitale_adressen = DigitaalAdresForeignKeySerializer(
464-
required=True,
490+
required=False,
465491
allow_null=True,
466492
help_text=_(
467493
"Digitaal adresen dat een partij verstrekte voor gebruik bij "
@@ -471,21 +497,21 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
471497
many=True,
472498
)
473499
voorkeurs_digitaal_adres = DigitaalAdresForeignKeySerializer(
474-
required=True,
500+
required=False,
475501
allow_null=True,
476502
help_text=_(
477503
"Digitaal adres waarop een partij bij voorkeur door de gemeente benaderd wordt."
478504
),
479505
)
480506
rekeningnummers = RekeningnummerForeignKeySerializer(
481-
required=True,
507+
required=False,
482508
allow_null=True,
483509
help_text=_("Rekeningnummers van een partij"),
484510
source="rekeningnummer_set",
485511
many=True,
486512
)
487513
voorkeurs_rekeningnummer = RekeningnummerForeignKeySerializer(
488-
required=True,
514+
required=False,
489515
allow_null=True,
490516
help_text=_("Rekeningsnummer die een partij bij voorkeur gebruikt."),
491517
)
@@ -526,6 +552,15 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
526552
"betrokkenen.had_klantcontact": f"{SERIALIZER_PATH}.klantcontacten.KlantcontactSerializer",
527553
}
528554

555+
def __init__(self, *args, **kwargs):
556+
super().__init__(*args, **kwargs)
557+
request = self.context.get("request")
558+
if request and request.method in ["PUT", "PATCH"]:
559+
self.fields["digitale_adressen"].required = True
560+
self.fields["voorkeurs_digitaal_adres"].required = True
561+
self.fields["rekeningnummers"].required = True
562+
self.fields["voorkeurs_rekeningnummer"].required = True
563+
529564
class Meta:
530565
model = Partij
531566
fields = (

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,17 @@ class RekeningnummerSerializer(serializers.HyperlinkedModelSerializer):
3333
)
3434

3535
partij = PartijForeignKeySerializer(
36-
required=True,
36+
required=False,
3737
allow_null=True,
3838
help_text=_("Rekeningnummer van een partij"),
3939
)
4040

41+
def __init__(self, *args, **kwargs):
42+
super().__init__(*args, **kwargs)
43+
request = self.context.get("request")
44+
if request and request.method in ["PUT", "PATCH"]:
45+
self.fields["partij"].required = True
46+
4147
class Meta:
4248
model = Rekeningnummer
4349
fields = ("uuid", "url", "partij", "iban", "bic")

src/openklant/components/klantinteracties/api/tests/test_partijen.py

+1-20
Original file line numberDiff line numberDiff line change
@@ -331,26 +331,6 @@ def test_create_partij_only_required(self):
331331
self.assertEqual(
332332
response_data["invalidParams"],
333333
[
334-
{
335-
"name": "digitaleAdressen",
336-
"code": "required",
337-
"reason": _("This field is required."),
338-
},
339-
{
340-
"name": "voorkeursDigitaalAdres",
341-
"code": "required",
342-
"reason": _("This field is required."),
343-
},
344-
{
345-
"name": "rekeningnummers",
346-
"code": "required",
347-
"reason": _("This field is required."),
348-
},
349-
{
350-
"name": "voorkeursRekeningnummer",
351-
"code": "required",
352-
"reason": _("This field is required."),
353-
},
354334
{
355335
"name": "soortPartij",
356336
"code": "required",
@@ -843,6 +823,7 @@ def test_update_partij(self):
843823
with self.subTest(
844824
"test_voorkeurs_digitaal_adres_must_be_part_of_digitale_adressen"
845825
):
826+
846827
data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres.uuid)}
847828
response = self.client.put(detail_url, data)
848829
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

0 commit comments

Comments
 (0)