Skip to content

Commit

Permalink
Merge pull request #1138 from open-zaak/feature/include-parameter
Browse files Browse the repository at this point in the history
✨ [#1152] Expand parameter
  • Loading branch information
annashamray committed Dec 4, 2023
2 parents d24b67f + 4125262 commit 4d1ada2
Show file tree
Hide file tree
Showing 26 changed files with 1,432 additions and 145 deletions.
1 change: 1 addition & 0 deletions requirements/base.in
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ commonground-api-common
notifications-api-common
humanize
drc-cmis
djangorestframework-inclusions

# WSGI servers & monitoring - production oriented
uwsgi
Expand Down
4 changes: 4 additions & 0 deletions requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ django==3.2.23
# django-sniplates
# django-solo
# djangorestframework
# djangorestframework-inclusions
# drc-cmis
# drf-extra-fields
# drf-nested-routers
Expand Down Expand Up @@ -174,6 +175,7 @@ djangorestframework==3.12.4
# commonground-api-common
# django-loose-fk
# djangorestframework-gis
# djangorestframework-inclusions
# drf-extra-fields
# drf-nested-routers
# drf-yasg
Expand All @@ -185,6 +187,8 @@ djangorestframework-camel-case==1.2.0
# notifications-api-common
djangorestframework-gis==0.18
# via -r requirements/base.in
djangorestframework-inclusions==1.2.0
# via -r requirements/base.in
drc-cmis==1.8.0
# via -r requirements/base.in
drf-extra-fields==3.4.0
Expand Down
4 changes: 4 additions & 0 deletions requirements/ci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ django==3.2.23
# django-sniplates
# django-solo
# djangorestframework
# djangorestframework-inclusions
# drc-cmis
# drf-extra-fields
# drf-nested-routers
Expand Down Expand Up @@ -229,6 +230,7 @@ djangorestframework==3.12.4
# commonground-api-common
# django-loose-fk
# djangorestframework-gis
# djangorestframework-inclusions
# drf-extra-fields
# drf-nested-routers
# drf-yasg
Expand All @@ -240,6 +242,8 @@ djangorestframework-camel-case==1.2.0
# notifications-api-common
djangorestframework-gis==0.18
# via -r requirements/base.txt
djangorestframework-inclusions==1.2.0
# via -r requirements/base.txt
drc-cmis==1.8.0
# via -r requirements/base.txt
drf-extra-fields==3.4.0
Expand Down
4 changes: 4 additions & 0 deletions requirements/dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ django==3.2.23
# django-sniplates
# django-solo
# djangorestframework
# djangorestframework-inclusions
# drc-cmis
# drf-extra-fields
# drf-nested-routers
Expand Down Expand Up @@ -258,6 +259,7 @@ djangorestframework==3.12.4
# commonground-api-common
# django-loose-fk
# djangorestframework-gis
# djangorestframework-inclusions
# drf-extra-fields
# drf-nested-routers
# drf-yasg
Expand All @@ -269,6 +271,8 @@ djangorestframework-camel-case==1.2.0
# notifications-api-common
djangorestframework-gis==0.18
# via -r requirements/ci.txt
djangorestframework-inclusions==1.2.0
# via -r requirements/ci.txt
docutils==0.17.1
# via
# recommonmark
Expand Down
6 changes: 1 addition & 5 deletions src/openzaak/components/catalogi/models/besluittype.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
from django.utils.translation import ugettext_lazy as _

from vng_api_common.caching import ETagMixin
from vng_api_common.models import APIMixin

from openzaak.components.autorisaties.models import AutorisatieSpec
from openzaak.utils.fields import DurationField
from openzaak.utils.mixins import APIMixin

from ..managers import SyncAutorisatieManager
from ..query import GeldigheidQuerySet
Expand Down Expand Up @@ -148,7 +148,3 @@ def save(self, *args, **kwargs):
if not self.pk:
transaction.on_commit(AutorisatieSpec.sync)
super().save(*args, **kwargs)

def get_absolute_api_url(self, request=None, **kwargs) -> str:
kwargs["version"] = "1"
return super().get_absolute_api_url(request=request, **kwargs)
4 changes: 3 additions & 1 deletion src/openzaak/components/catalogi/models/catalogus.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@
from vng_api_common.caching import ETagMixin
from vng_api_common.fields import RSINField

from openzaak.utils.mixins import APIMixin

from .validators import validate_uppercase


class Catalogus(ETagMixin, models.Model):
class Catalogus(ETagMixin, APIMixin, models.Model):
"""
De verzameling van ZAAKTYPEn - incl. daarvoor relevante objecttypen - voor
een Domein die als één geheel beheerd wordt.
Expand Down
4 changes: 3 additions & 1 deletion src/openzaak/components/catalogi/models/eigenschap.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
from django_better_admin_arrayfield.models.fields import ArrayField
from vng_api_common.caching import ETagMixin

from openzaak.utils.mixins import APIMixin

from ..constants import FormaatChoices
from .mixins import OptionalGeldigheidMixin
from .validators import (
Expand Down Expand Up @@ -127,7 +129,7 @@ def clean(self):
)


class Eigenschap(ETagMixin, OptionalGeldigheidMixin, models.Model):
class Eigenschap(ETagMixin, APIMixin, OptionalGeldigheidMixin, models.Model):
"""
Een relevant inhoudelijk gegeven dat bij ZAAKen van dit ZAAKTYPE geregistreerd
moet kunnen worden en geen standaard kenmerk is van een zaak.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
from vng_api_common.caching import ETagMixin
from vng_api_common.descriptors import GegevensGroepType
from vng_api_common.fields import VertrouwelijkheidsAanduidingField
from vng_api_common.models import APIMixin

from openzaak.components.autorisaties.models import AutorisatieSpec
from openzaak.utils.mixins import APIMixin

from ..managers import SyncAutorisatieManager
from ..query import GeldigheidQuerySet
Expand Down Expand Up @@ -143,7 +143,3 @@ def save(self, *args, **kwargs):
if not self.pk:
transaction.on_commit(AutorisatieSpec.sync)
super().save(*args, **kwargs)

def get_absolute_api_url(self, request=None, **kwargs) -> str:
kwargs["version"] = "1"
return super().get_absolute_api_url(request=request, **kwargs)
35 changes: 34 additions & 1 deletion src/openzaak/components/catalogi/models/mixins.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# SPDX-License-Identifier: EUPL-1.2
# Copyright (C) 2019 - 2020 Dimpact
from datetime import timedelta
from datetime import date, timedelta
from typing import Optional

from django.core.exceptions import ValidationError
from django.db import models
Expand Down Expand Up @@ -101,6 +102,38 @@ def _clean_geldigheid(self, zaaktype):
)
)

@property
def begin_object(self) -> date:
# annotated in the queryset
if hasattr(self, "datum_begin_object"):
return self.datum_begin_object

# for inclusions we don't have annotated queryset
return (
self._meta.default_manager.filter(
**{self.omschrijving_field: getattr(self, self.omschrijving_field)}
)
.order_by("datum_begin_geldigheid")
.first()
.datum_begin_geldigheid
)

@property
def einde_object(self) -> Optional[date]:
# annotated in the queryset
if hasattr(self, "datum_einde_object"):
return self.datum_einde_object

# for inclusions we don't have annotated queryset
return (
self._meta.default_manager.filter(
**{self.omschrijving_field: getattr(self, self.omschrijving_field)}
)
.order_by("-datum_begin_geldigheid")
.first()
.datum_einde_geldigheid
)


class OptionalGeldigheidMixin(models.Model):
"""
Expand Down
1 change: 0 additions & 1 deletion src/openzaak/components/catalogi/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6608,7 +6608,6 @@ components:
bij ZAAKen van dit ZAAKTYPE.
type: string
format: uri
nullable: true
uniqueItems: true
gerelateerdeZaaktypen:
description: De ZAAKTYPEn van zaken die relevant zijn voor zaken van dit
Expand Down
4 changes: 2 additions & 2 deletions src/openzaak/components/catalogi/query.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ def with_dates(self, id_field="omschrijving"):
**{id_field: models.OuterRef(id_field)}
)
return self.annotate(
begin_object=models.Subquery(
datum_begin_object=models.Subquery(
qs.order_by("datum_begin_geldigheid").values("datum_begin_geldigheid")[
:1
]
),
einde_object=models.Subquery(
datum_einde_object=models.Subquery(
qs.order_by("-datum_begin_geldigheid").values("datum_einde_geldigheid")[
:1
]
Expand Down
3 changes: 1 addition & 2 deletions src/openzaak/components/catalogi/swagger2.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -7990,8 +7990,7 @@
"items": {
"description": "De ZAAKTYPE(n) waaronder ZAAKen als deelzaak kunnen voorkomen bij ZAAKen van dit ZAAKTYPE.",
"type": "string",
"format": "uri",
"x-nullable": true
"format": "uri"
},
"uniqueItems": true
},
Expand Down
13 changes: 12 additions & 1 deletion src/openzaak/components/zaken/api/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
from vng_api_common.filtersets import FilterSet
from vng_api_common.utils import get_field_attribute, get_help_text

from openzaak.utils.filters import MaximaleVertrouwelijkheidaanduidingFilter
from openzaak.components.zaken.api.serializers.zaken import ZaakSerializer
from openzaak.utils.filters import (
ExpandFilter,
MaximaleVertrouwelijkheidaanduidingFilter,
)

from ..models import (
KlantContact,
Expand Down Expand Up @@ -98,6 +102,13 @@ class ZaakFilter(FilterSet):
help_text=_("Het veld waarop de resultaten geordend worden."),
)

expand = ExpandFilter(
serializer_class=ZaakSerializer,
help_text=_(
"Sluit de gespecifieerde gerelateerde resources in in het antwoord. "
),
)

class Meta:
model = Zaak
fields = {
Expand Down
41 changes: 39 additions & 2 deletions src/openzaak/components/zaken/api/serializers/zaken.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,11 +192,11 @@ class ZaakSerializer(
help_text=_("URL-referenties naar ROLLen."),
)
status = serializers.HyperlinkedRelatedField(
source="current_status_uuid",
source="current_status",
read_only=True,
allow_null=True,
view_name="status-detail",
lookup_url_kwarg="uuid",
lookup_field="uuid",
help_text=_("Indien geen status bekend is, dan is de waarde 'null'"),
)
zaakinformatieobjecten = NestedHyperlinkedRelatedField(
Expand Down Expand Up @@ -280,6 +280,43 @@ class ZaakSerializer(
),
)

inclusion_serializers = {
# 1 level
"zaaktype": "openzaak.components.catalogi.api.serializers.ZaakTypeSerializer",
"hoofdzaak": "openzaak.components.zaken.api.serializers.ZaakSerializer",
"deelzaken": "openzaak.components.zaken.api.serializers.ZaakSerializer",
"eigenschappen": "openzaak.components.zaken.api.serializers.ZaakEigenschapSerializer",
"status": "openzaak.components.zaken.api.serializers.StatusSerializer",
"resultaat": "openzaak.components.zaken.api.serializers.ResultaatSerializer",
"rollen": "openzaak.components.zaken.api.serializers.RolSerializer",
"zaakinformatieobjecten": "openzaak.components.zaken.api.serializers.ZaakInformatieObjectSerializer",
"zaakobjecten": "openzaak.components.zaken.api.serializers.ZaakObjectSerializer",
# 2 and 3 level
"hoofdzaak.zaaktype": "openzaak.components.catalogi.api.serializers.ZaakTypeSerializer",
"hoofdzaak.status": "openzaak.components.zaken.api.serializers.StatusSerializer",
"hoofdzaak.status.statustype": "openzaak.components.catalogi.api.serializers.StatusTypeSerializer",
"hoofdzaak.resultaat": "openzaak.components.zaken.api.serializers.ResultaatSerializer",
"hoofdzaak.resultaat.resultaattype": "openzaak.components.catalogi.api.serializers.ResultaatTypeSerializer",
"hoofdzaak.rollen": "openzaak.components.zaken.api.serializers.RolSerializer",
"hoofdzaak.rollen.roltype": "openzaak.components.catalogi.api.serializers.RolTypeSerializer",
"hoofdzaak.zaakinformatieobjecten": "openzaak.components.zaken.api.serializers.ZaakInformatieObjectSerializer",
"hoofdzaak.zaakobjecten": "openzaak.components.zaken.api.serializers.ZaakObjectSerializer",
"deelzaken.zaaktype": "openzaak.components.catalogi.api.serializers.ZaakTypeSerializer",
"deelzaken.status": "openzaak.components.zaken.api.serializers.StatusSerializer",
"deelzaken.status.statustype": "openzaak.components.catalogi.api.serializers.StatusTypeSerializer",
"deelzaken.resultaat": "openzaak.components.zaken.api.serializers.ResultaatSerializer",
"deelzaken.resultaat.resultaattype": "openzaak.components.catalogi.api.serializers.ResultaatTypeSerializer",
"deelzaken.rollen": "openzaak.components.zaken.api.serializers.RolSerializer",
"deelzaken.rollen.roltype": "openzaak.components.catalogi.api.serializers.RolTypeSerializer",
"deelzaken.zaakinformatieobjecten": "openzaak.components.zaken.api.serializers.ZaakInformatieObjectSerializer",
"deelzaken.zaakobjecten": "openzaak.components.zaken.api.serializers.ZaakObjectSerializer",
"eigenschappen.eigenschap": "openzaak.components.catalogi.api.serializers.EigenschapSerializer",
"status.statustype": "openzaak.components.catalogi.api.serializers.StatusTypeSerializer",
"resultaat.resultaattype": "openzaak.components.catalogi.api.serializers.ResultaatTypeSerializer",
"rollen.roltype": "openzaak.components.catalogi.api.serializers.RolTypeSerializer",
# we can't show 'zaakinformatieobjecten.informatieobject' because it's the resource from another API
}

class Meta:
model = Zaak
fields = (
Expand Down
2 changes: 2 additions & 0 deletions src/openzaak/components/zaken/api/viewsets.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
delete_remote_oio,
)
from openzaak.utils.data_filtering import ListFilterByAuthorizationsMixin
from openzaak.utils.mixins import ExpandMixin
from openzaak.utils.pagination import OptimizedPagination
from openzaak.utils.permissions import AuthRequired

Expand Down Expand Up @@ -102,6 +103,7 @@

@conditional_retrieve(extra_depends_on={"status"})
class ZaakViewSet(
ExpandMixin,
NotificationViewSetMixin,
AuditTrailViewsetMixin,
GeoMixin,
Expand Down

0 comments on commit 4d1ada2

Please sign in to comment.