Skip to content

Commit

Permalink
Merge pull request #260 from maykinmedia/feature/147-convenience-endp…
Browse files Browse the repository at this point in the history
…oint

✨ [#147] Convenience endpoint for Klantcontact/Betrokkene/Onderwerpobject
  • Loading branch information
stevenbal authored Oct 24, 2024
2 parents 8edfb3e + 88f23a4 commit 61d8c5e
Show file tree
Hide file tree
Showing 7 changed files with 850 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class Meta:
},
}

def get_volledige_naam(self, obj):
def get_volledige_naam(self, obj) -> str:
return obj.get_full_name()

@transaction.atomic
Expand Down Expand Up @@ -367,7 +367,7 @@ class Meta:
extra_kwargs = {
"uuid": {"read_only": True},
"url": {
"view_name": "klantinteracties:klantcontact-detail",
"view_name": "klantinteracties:onderwerpobject-detail",
"lookup_field": "uuid",
"help_text": _("De unieke URL van dit klantcontact binnen deze API."),
},
Expand Down Expand Up @@ -537,3 +537,58 @@ def create(self, validated_data):
)

return super().create(validated_data)


class BetrokkeneKlantcontactReadOnlySerializer(BetrokkeneSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

self.fields["had_klantcontact"].read_only = True


class OnderwerpobjectKlantcontactReadOnlySerializer(OnderwerpobjectSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

self.fields["klantcontact"].read_only = True


class MaakKlantcontactSerializer(serializers.Serializer):
klantcontact = KlantcontactSerializer()
betrokkene = BetrokkeneKlantcontactReadOnlySerializer(required=False)
onderwerpobject = OnderwerpobjectKlantcontactReadOnlySerializer(required=False)

@transaction.atomic
def create(self, validated_data):
"""
Create the objects and use the original serializers to ensure all the correct
fields show up in the response
"""
klantcontact_data = validated_data["klantcontact"]
klantcontact = Klantcontact.objects.create(**klantcontact_data)

betrokkene = None
if betrokkene_data := validated_data.pop("betrokkene", None):
betrokkene_data["had_klantcontact"] = {"uuid": str(klantcontact.uuid)}
betrokkene_data.setdefault(
"was_partij", betrokkene_data.get("partij", None)
)
betrokkene_serializer = BetrokkeneSerializer(data=betrokkene_data)
betrokkene_serializer.is_valid()
betrokkene = betrokkene_serializer.save()

onderwerpobject = None
if onderwerpobject_data := validated_data.pop("onderwerpobject", None):
onderwerpobject_data["klantcontact"] = {"uuid": str(klantcontact.uuid)}
onderwerpobject_data.setdefault("was_klantcontact", None)
onderwerpobject_serializer = OnderwerpobjectSerializer(
data=onderwerpobject_data
)
onderwerpobject_serializer.is_valid()
onderwerpobject = onderwerpobject_serializer.save()

return {
"klantcontact": klantcontact,
"betrokkene": betrokkene,
"onderwerpobject": onderwerpobject,
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ class Meta:
},
}

def get_categorie_naam(self, obj):
def get_categorie_naam(self, obj) -> str | None:
if obj.categorie:
return obj.categorie.naam

Expand Down Expand Up @@ -301,7 +301,7 @@ class Meta:
"volledige_naam",
)

def get_volledige_naam(self, obj):
def get_volledige_naam(self, obj) -> str:
return obj.get_full_name()


Expand Down Expand Up @@ -333,7 +333,7 @@ class Meta:
"volledige_naam",
)

def get_volledige_naam(self, obj):
def get_volledige_naam(self, obj) -> str:
return obj.get_full_name()

@transaction.atomic
Expand Down
59 changes: 59 additions & 0 deletions src/openklant/components/klantinteracties/api/tests/factories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import factory


class KlantContactDataFactory(factory.DictFactory):
nummer = "7948723947"
kanaal = "changed"
onderwerp = "changed"
inhoud = "changed"
indicatieContactGelukt = False
taal = "de"
vertrouwelijk = False
plaatsgevondenOp = "2020-08-24T14:15:22Z"


class BezoekAdresDataFactory(factory.DictFactory):
nummeraanduidingId = "4a282b5c-16d7-401d-9737-28e98c865ab2"
adresregel1 = "adres1"
adresregel2 = "adres2"
adresregel3 = "adres3"
land = "6030"


class CorrespondentieAdresDataFactory(factory.DictFactory):
nummeraanduidingId = "c06918d9-899b-4d98-a10d-08436ebc6c20"
adresregel1 = "adres1"
adresregel2 = "adres2"
adresregel3 = "adres3"
land = "6030"


class ContactNaamDataFactory(factory.DictFactory):
voorletters = "P"
voornaam = "Phil"
voorvoegselAchternaam = ""
achternaam = "Bozeman"


class BetrokkeneDataFactory(factory.DictFactory):
wasPartij = None
bezoekadres = factory.SubFactory(BezoekAdresDataFactory)
correspondentieadres = factory.SubFactory(CorrespondentieAdresDataFactory)
contactnaam = factory.SubFactory(ContactNaamDataFactory)
rol = "vertegenwoordiger"
organisatienaam = "Whitechapel"
initiator = True


class OnderwerpObjectIdentificatorDataFactory(factory.DictFactory):
codeObjecttype = "codeObjecttype"
codeSoortObjectId = "codeSoortObjectId"
objectId = "objectId"
codeRegister = "codeRegister"


class OnderwerpObjectDataFactory(factory.DictFactory):
wasKlantcontact = None
onderwerpobjectidentificator = factory.SubFactory(
OnderwerpObjectIdentificatorDataFactory
)
Loading

0 comments on commit 61d8c5e

Please sign in to comment.