Skip to content

Commit

Permalink
✨ [#69] added CategorieRelatie model and api endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
bart-maykin committed Jan 26, 2024
1 parent ba0c9c7 commit d203145
Show file tree
Hide file tree
Showing 9 changed files with 653 additions and 94 deletions.
40 changes: 34 additions & 6 deletions src/openklant/components/klantinteracties/admin/partijen.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,37 @@
from ..models.constants import SoortPartij
from ..models.digitaal_adres import DigitaalAdres
from ..models.klantcontacten import Betrokkene
from ..models.partijen import Categorie, Contactpersoon, Organisatie, Partij, Persoon


class CategorieInlineAdmin(admin.StackedInline):
model = Categorie
from ..models.partijen import (
Categorie,
CategorieRelatie,
Contactpersoon,
Organisatie,
Partij,
Persoon,
)


class CategorieRelatieInlineAdmin(admin.StackedInline):
model = CategorieRelatie
readonly_fields = ("uuid",)
autocomplete_fields = ("categorie",)
fields = (
"uuid",
"categorie",
"begin_datum",
"eind_datum",
)
extra = 0


class BetrokkeneInlineAdmin(admin.StackedInline):
readonly_fields = ("uuid",)
model = Betrokkene
extra = 0


class DigitaalAdresInlineAdmin(admin.StackedInline):
readonly_fields = ("uuid",)
model = DigitaalAdres
extra = 0

Expand All @@ -28,6 +45,7 @@ class PersoonInlineAdmin(admin.StackedInline):


class ContactpersoonInlineAdmin(admin.StackedInline):
readonly_fields = ("uuid",)
model = Contactpersoon
fk_name = "partij"
raw_id_field = ["partij"]
Expand All @@ -53,7 +71,7 @@ class PartijAdmin(admin.ModelAdmin):
)
inlines = (
PersoonInlineAdmin,
CategorieInlineAdmin,
CategorieRelatieInlineAdmin,
ContactpersoonInlineAdmin,
OrganisatieInlineAdmin,
DigitaalAdresInlineAdmin,
Expand Down Expand Up @@ -135,3 +153,13 @@ def get_contactpersonen(self, obj):
def get_organisaties(self, obj):
if organisatie := obj.organisatie:
return organisatie.naam


@admin.register(Categorie)
class CategorieAdmin(admin.ModelAdmin):
readonly_fields = ("uuid",)
search_fields = ("naam",)
fields = (
"uuid",
"naam",
)
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres
from openklant.components.klantinteracties.models.partijen import (
Categorie,
CategorieRelatie,
Contactpersoon,
Organisatie,
Partij,
Expand Down Expand Up @@ -67,17 +68,50 @@ class CategorieForeignKeySerializer(serializers.HyperlinkedModelSerializer):

class Meta:
model = Categorie
fields = ("uuid", "url")
fields = (
"uuid",
"url",
"naam",
)
extra_kwargs = {
"uuid": {"required": True, "validators": [categorie_exists]},
"url": {
"view_name": "klantinteracties:categorie-detail",
"lookup_field": "uuid",
"help_text": _("De unieke URL van deze categorie binnen deze API."),
},
"naam": {"read_only": True},
}


class CategorieRelatieForeignKeySerializer(serializers.HyperlinkedModelSerializer):
"""Let op: Dit attribuut is EXPERIMENTEEL."""

categorie_naam = serializers.SerializerMethodField(
help_text=_("De naam van de gelinkte categorie.")
)

class Meta:
model = Categorie
fields = (
"uuid",
"url",
"categorie_naam",
)
extra_kwargs = {
"uuid": {"required": True, "validators": [categorie_exists]},
"url": {
"view_name": "klantinteracties:categorie-detail",
"lookup_field": "uuid",
"help_text": _("De unieke URL van deze categorie binnen deze API."),
},
}

def get_categorie_naam(self, obj):
if obj.categorie:
return obj.categorie.naam


class PartijIdentificatorForeignkeySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PartijIdentificator
Expand Down Expand Up @@ -131,10 +165,35 @@ class Meta:
class CategorieSerializer(serializers.HyperlinkedModelSerializer):
"""Let op: Dit endpoint is EXPERIMENTEEL."""

class Meta:
model = Categorie
fields = (
"uuid",
"url",
"naam",
)
extra_kwargs = {
"uuid": {"read_only": True},
"url": {
"view_name": "klantinteracties:categorie-detail",
"lookup_field": "uuid",
"help_text": _("De unieke URL van deze categorie binnen deze API."),
},
}


class CategorieRelatieSerializer(serializers.HyperlinkedModelSerializer):
"""Let op: Dit endpoint is EXPERIMENTEEL."""

partij = PartijForeignkeyBaseSerializer(
required=True,
allow_null=True,
help_text=_("De partij waar de categorie aan gelinkt is."),
help_text=_("De partij waar de categorie relatie aan gelinkt is."),
)
categorie = CategorieForeignKeySerializer(
required=True,
allow_null=True,
help_text=_("De categorie waar de categorie relatie aan gelinkt is."),
)
begin_datum = serializers.DateField(
allow_null=True,
Expand All @@ -146,12 +205,12 @@ class CategorieSerializer(serializers.HyperlinkedModelSerializer):
)

class Meta:
model = Categorie
model = CategorieRelatie
fields = (
"uuid",
"url",
"partij",
"naam",
"categorie",
"begin_datum",
"eind_datum",
)
Expand All @@ -172,6 +231,12 @@ def update(self, instance, validated_data):

validated_data["partij"] = partij

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

return super().update(instance, validated_data)

@transaction.atomic
Expand All @@ -184,7 +249,11 @@ def create(self, validated_data):
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")))

validated_data["partij"] = partij
validated_data["categorie"] = categorie

return super().create(validated_data)

Expand Down Expand Up @@ -355,13 +424,13 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
many=True,
source="betrokkene_set",
)
categorieen = CategorieForeignKeySerializer(
categorie_relaties = CategorieRelatieForeignKeySerializer(
read_only=True,
help_text=_(
"De Categorieën van een partij: Let op: Dit attribuut is EXPERIMENTEEL."
"De Categorie relaties van een partij: Let op: Dit attribuut is EXPERIMENTEEL."
),
many=True,
source="categorie_set",
source="categorierelatie_set",
)
digitale_adressen = DigitaalAdresForeignKeySerializer(
required=True,
Expand Down Expand Up @@ -415,7 +484,7 @@ class PartijSerializer(NestedGegevensGroepMixin, PolymorphicSerializer):
# 1 level
"digitale_adressen": f"{SERIALIZER_PATH}.digitaal_adres.DigitaalAdresSerializer",
"betrokkenen": f"{SERIALIZER_PATH}.klantcontacten.BetrokkeneSerializer",
"categorieen": f"{SERIALIZER_PATH}.partijen.CategorieSerializer",
"categorie_relaties": f"{SERIALIZER_PATH}.partijen.CategorieRelatieSerializer",
# 2 levels
"betrokkenen.had_klantcontact": f"{SERIALIZER_PATH}.klantcontacten.KlantcontactSerializer",
# 3 levels
Expand All @@ -430,7 +499,7 @@ class Meta:
"nummer",
"interne_notitie",
"betrokkenen",
"categorieen",
"categorie_relaties",
"digitale_adressen",
"voorkeurs_digitaal_adres",
"vertegenwoordigde",
Expand Down
Loading

0 comments on commit d203145

Please sign in to comment.