Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#240] Make fields nullable in enpoints #332

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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. "
Expand All @@ -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 = (
Expand All @@ -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)

Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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 = (
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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")
Expand Down Expand Up @@ -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)
Expand Down
Loading