Skip to content

Commit

Permalink
[#239] Updated creation cases
Browse files Browse the repository at this point in the history
  • Loading branch information
danielmursa-dev committed Mar 5, 2025
1 parent 37962bd commit 3e151a4
Show file tree
Hide file tree
Showing 3 changed files with 254 additions and 47 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import datetime
from collections import Counter

from django.db import transaction
from django.utils.translation import gettext_lazy as _
Expand Down Expand Up @@ -412,7 +413,7 @@ class Meta:
"sub_identificator_van",
)
extra_kwargs = {
"uuid": {"read_only": True},
"uuid": {"required": False, "validators": [partij_identificator_exists]},
"url": {
"view_name": "klantinteracties:partijidentificator-detail",
"lookup_field": "uuid",
Expand Down Expand Up @@ -443,7 +444,7 @@ def validate(self, attrs):

return super().validate(attrs)

def check_partij(self, partij):
def assert_partij(self, partij):
if not partij:
raise serializers.ValidationError(
{"identificeerdePartij": _("Dit veld is vereist.")},
Expand All @@ -453,13 +454,13 @@ def check_partij(self, partij):
@handle_db_exceptions
@transaction.atomic
def update(self, instance, validated_data):
self.check_partij(validated_data["partij"])
self.assert_partij(validated_data["partij"])
return super().update(instance, validated_data)

@handle_db_exceptions
@transaction.atomic
def create(self, validated_data):
self.check_partij(validated_data["partij"])
self.assert_partij(validated_data["partij"])
return super().create(validated_data)


Expand Down Expand Up @@ -600,11 +601,60 @@ def get_vertegenwoordigden(self, obj):
if vertegenwoordigende
]

def validate_partij_identificatoren(self, attrs):
if attrs:
if (
len(
Counter(
item["partij"] for item in attrs if item["partij"] is not None
)
)
> 0
):
raise serializers.ValidationError(
{
"identificeerdePartij": _(
"Het veld `identificeerde_partij` wordt automatisch ingesteld en"
" hoeft niet te worden opgegeven."
)
},
code="invalid",
)

uuid_list = [item["uuid"] for item in attrs if "uuid" in attrs]
if uuid_list and max(Counter(uuid_list).values()) > 1:
raise serializers.ValidationError(
{
"identificeerdePartij": _(
"Duplicaat uuid kan niet worden ingevoerd voor `partij_identificatoren`."
)
},
code="duplicated",
)
return attrs

def update_or_create_partij_identificator(self, partij_identificator):
partij_identificator_serializer = PartijIdentificatorSerializer(
data=partij_identificator
)
partij_identificator_serializer.is_valid(raise_exception=True)
if "uuid" in partij_identificator:
instance = PartijIdentificator.objects.get(
uuid=partij_identificator["uuid"]
)
partij_identificator_serializer.update(
instance, partij_identificator_serializer.validated_data
)
else:
partij_identificator_serializer.create(
partij_identificator_serializer.validated_data
)

@transaction.atomic
def update(self, instance, validated_data):
method = self.context.get("request").method
partij_identificatie = validated_data.pop("partij_identificatie", None)

partij_identificatoren = validated_data.pop("partijidentificator_set", None)
if "digitaaladres_set" in validated_data:
existing_digitale_adressen = instance.digitaaladres_set.all()
digitaal_adres_uuids = [
Expand Down Expand Up @@ -763,6 +813,17 @@ def update(self, instance, validated_data):
partij_identificatie["partij"] = partij
serializer.create(partij_identificatie)

if partij_identificatoren is not None:
partij.partijidentificator_set.exclude(
uuid__in=[pi["uuid"] for pi in partij_identificatoren if "uuid" in pi]
).delete()

for partij_identificator in partij_identificatoren:
partij_identificator["identificeerde_partij"] = {
"uuid": str(partij.uuid)
}
self.update_or_create_partij_identificator(partij_identificator)

return partij

@transaction.atomic
Expand Down Expand Up @@ -850,25 +911,11 @@ def create(self, validated_data):

if partij_identificatoren:
for partij_identificator in partij_identificatoren:
if partij_identificator.get("partij", ""):
raise serializers.ValidationError(
{
"partijIdentificatoren.identificeerdePartij": _(
"Het veld `identificeerde_partij` wordt automatisch ingesteld en hoeft niet te worden opgegeven."
)
},
code="invalid",
)
partij_identificator["identificeerde_partij"] = {
"uuid": str(partij.uuid)
}
partij_identificator_serializer = PartijIdentificatorSerializer(
data=partij_identificator
)
partij_identificator_serializer.is_valid(raise_exception=True)
partij_identificator_serializer.create(
partij_identificator_serializer.validated_data
)
self.update_or_create_partij_identificator(partij_identificator)

return partij


Expand Down
Loading

0 comments on commit 3e151a4

Please sign in to comment.