diff --git a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py index 1fc7a3cd..1c2c131d 100644 --- a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py @@ -103,6 +103,10 @@ class Meta: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["verstrekt_door_partij"].required = False + self.fields["verstrekt_door_betrokkene"].required = False if "soort_digitaal_adres" in self.fields: # Avoid validating the UniqueConstraint for `soort_digitaal_adres` with diff --git a/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py b/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py index 5605fba0..929ded0b 100644 --- a/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py +++ b/src/openklant/components/klantinteracties/api/serializers/klantcontacten.py @@ -184,6 +184,12 @@ class BetrokkeneSerializer( help_text="De voledige naam van de betrokkene.", ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["was_partij"].required = False + class Meta: model = Betrokkene fields = ( @@ -354,6 +360,13 @@ class OnderwerpobjectSerializer( ), ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["klantcontact"].required = False + self.fields["was_klantcontact"].required = False + class Meta: model = Onderwerpobject fields = ( @@ -433,6 +446,12 @@ class BijlageSerializer( ), ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["was_bijlage_van_klantcontact"].required = False + class Meta: model = Bijlage fields = ( diff --git a/src/openklant/components/klantinteracties/api/serializers/partijen.py b/src/openklant/components/klantinteracties/api/serializers/partijen.py index 5894696b..93eab953 100644 --- a/src/openklant/components/klantinteracties/api/serializers/partijen.py +++ b/src/openklant/components/klantinteracties/api/serializers/partijen.py @@ -210,6 +210,7 @@ class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer): ), ) begin_datum = serializers.DateField( + required=True, allow_null=True, help_text=_( "Aanduiding van datum volgens de NEN-ISO 8601:2019-standaard. " @@ -218,6 +219,14 @@ class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer): ), ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["begin_datum"].required = False + self.fields["partij"].required = False + self.fields["categorie"].required = False + class Meta: model = CategorieRelatie fields = ( @@ -239,35 +248,38 @@ class Meta: @transaction.atomic def update(self, instance, validated_data): - if "partij" in validated_data: - if partij := validated_data.pop("partij", None): - partij = Partij.objects.get(uuid=str(partij.get("uuid"))) - validated_data["partij"] = partij + if "partij" in validated_data: + validated_data["partij"] = Partij.objects.get( + uuid=str(validated_data["partij"].get("uuid")) + ) if "categorie" in validated_data: - if categorie := validated_data.pop("categorie", None): - categorie = Categorie.objects.get(uuid=str(categorie.get("uuid"))) - - validated_data["categorie"] = categorie + validated_data["categorie"] = Categorie.objects.get( + uuid=str(validated_data["categorie"].get("uuid")) + ) return super().update(instance, validated_data) @transaction.atomic def create(self, validated_data): - if not validated_data.get("begin_datum"): - validated_data["begin_datum"] = datetime.datetime.today().strftime( - "%Y-%m-%d" + if "begin_datum" in validated_data: + begin_datum = validated_data["begin_datum"] + validated_data["begin_datum"] = ( + begin_datum + if begin_datum + else datetime.datetime.today().strftime("%Y-%m-%d") ) - if partij := validated_data.pop("partij"): - partij = Partij.objects.get(uuid=str(partij.get("uuid"))) - - if categorie := validated_data.pop("categorie"): - categorie = Categorie.objects.get(uuid=str(categorie.get("uuid"))) + if "partij" in validated_data: + validated_data["partij"] = Partij.objects.get( + uuid=str(validated_data["partij"].get("uuid")) + ) - validated_data["partij"] = partij - validated_data["categorie"] = categorie + if "categorie" in validated_data: + validated_data["categorie"] = Categorie.objects.get( + uuid=str(validated_data["categorie"].get("uuid")) + ) return super().create(validated_data) @@ -298,6 +310,12 @@ class PersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerializer): help_text="De voledige naam van het persoon.", ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["contactnaam"].required = False + class Meta: model = Persoon fields = ( @@ -328,6 +346,12 @@ class ContactpersoonSerializer(NestedGegevensGroepMixin, serializers.ModelSerial help_text="De voledige naam van het constact persoon.", ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["werkte_voor_partij"].required = False + class Meta: model = Contactpersoon fields = ( @@ -384,6 +408,13 @@ class PartijIdentificatorSerializer( ), ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["identificeerde_partij"].required = False + self.fields["partij_identificator"].required = False + class Meta: model = PartijIdentificator fields = ( @@ -526,6 +557,15 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer): "betrokkenen.had_klantcontact": f"{SERIALIZER_PATH}.klantcontacten.KlantcontactSerializer", } + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["digitale_adressen"].required = False + self.fields["voorkeurs_digitaal_adres"].required = False + self.fields["rekeningnummers"].required = False + self.fields["voorkeurs_rekeningnummer"].required = False + class Meta: model = Partij fields = ( @@ -735,8 +775,8 @@ def update(self, instance, validated_data): @transaction.atomic def create(self, validated_data): partij_identificatie = validated_data.pop("partij_identificatie", None) - digitale_adressen = validated_data.pop("digitaaladres_set") - rekeningnummers = validated_data.pop("rekeningnummer_set") + digitale_adressen = validated_data.pop("digitaaladres_set", []) + rekeningnummers = validated_data.pop("rekeningnummer_set", []) if voorkeurs_digitaal_adres := validated_data.pop( "voorkeurs_digitaal_adres", None diff --git a/src/openklant/components/klantinteracties/api/serializers/rekeningnummers.py b/src/openklant/components/klantinteracties/api/serializers/rekeningnummers.py index 43d4b500..a2b507d5 100644 --- a/src/openklant/components/klantinteracties/api/serializers/rekeningnummers.py +++ b/src/openklant/components/klantinteracties/api/serializers/rekeningnummers.py @@ -38,6 +38,12 @@ class RekeningnummerSerializer(serializers.HyperlinkedModelSerializer): help_text=_("Rekeningnummer van een partij"), ) + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + request = self.context.get("request", None) + if request and request.method == "POST": + self.fields["partij"].required = False + class Meta: model = Rekeningnummer fields = ("uuid", "url", "partij", "iban", "bic") diff --git a/src/openklant/components/klantinteracties/api/tests/test_partijen.py b/src/openklant/components/klantinteracties/api/tests/test_partijen.py index 5f36e120..7beb5f89 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_partijen.py +++ b/src/openklant/components/klantinteracties/api/tests/test_partijen.py @@ -331,26 +331,6 @@ def test_create_partij_only_required(self): self.assertEqual( response_data["invalidParams"], [ - { - "name": "digitaleAdressen", - "code": "required", - "reason": _("This field is required."), - }, - { - "name": "voorkeursDigitaalAdres", - "code": "required", - "reason": _("This field is required."), - }, - { - "name": "rekeningnummers", - "code": "required", - "reason": _("This field is required."), - }, - { - "name": "voorkeursRekeningnummer", - "code": "required", - "reason": _("This field is required."), - }, { "name": "soortPartij", "code": "required", @@ -364,19 +344,28 @@ def test_create_partij_only_required(self): ], ) - digitaal_adres = DigitaalAdresFactory() - data = { - "digitaleAdressen": [{"uuid": str(digitaal_adres.uuid)}], - "voorkeursDigitaalAdres": {"uuid": str(digitaal_adres.uuid)}, - "rekeningnummers": [], - "voorkeursRekeningnummer": None, "soortPartij": "persoon", "indicatieActief": True, } response = self.client.post(list_url, data) self.assertEqual(response.status_code, status.HTTP_201_CREATED) + response_data = response.json() + + self.assertEqual(response_data["betrokkenen"], []) + self.assertEqual(response_data["categorieRelaties"], []) + self.assertEqual(response_data["digitaleAdressen"], []) + self.assertEqual(response_data["voorkeursDigitaalAdres"], None) + self.assertEqual(response_data["vertegenwoordigden"], []) + self.assertEqual(response_data["rekeningnummers"], []) + self.assertEqual(response_data["voorkeursRekeningnummer"], None) + self.assertEqual(response_data["partijIdentificatoren"], []) + self.assertEqual(response_data["soortPartij"], "persoon") + self.assertEqual(response_data["indicatieGeheimhouding"], None) + self.assertEqual(response_data["voorkeurstaal"], "") + self.assertEqual(response_data["indicatieActief"], True) + self.assertEqual(response_data["partijIdentificatie"], None) def test_create_persoon(self): list_url = reverse("klantinteracties:partij-list") @@ -843,6 +832,7 @@ def test_update_partij(self): with self.subTest( "test_voorkeurs_digitaal_adres_must_be_part_of_digitale_adressen" ): + data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres.uuid)} response = self.client.put(detail_url, data) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)