Skip to content

Commit

Permalink
Merge pull request #1511 from open-zaak/issue/1509-iotype-import
Browse files Browse the repository at this point in the history
fix importing iotypen with empty omschrijving_generiek_* fields
  • Loading branch information
annashamray committed Dec 4, 2023
2 parents 4d1ada2 + bfd34d8 commit 45dc308
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
# SPDX-License-Identifier: EUPL-1.2
# Copyright (C) 2019 - 2020 Dimpact
from django.db import transaction
from django.utils.translation import gettext_lazy as _

from rest_framework import serializers
from vng_api_common.constants import VertrouwelijkheidsAanduiding
from vng_api_common.serializers import (
GegevensGroepSerializer,
NestedGegevensGroepMixin,
add_choice_values_help_text,
)
from vng_api_common.serializers import add_choice_values_help_text

from ...models import InformatieObjectType
from ..validators import (
Expand All @@ -19,16 +16,42 @@
)


class OmschrijvingGeneriekSerializer(GegevensGroepSerializer):
class OmschrijvingGeneriekSerializer(serializers.ModelSerializer):
class Meta:
model = InformatieObjectType
gegevensgroep = "omschrijving_generiek"
fields = (
"informatieobjecttype_omschrijving_generiek",
"definitie_informatieobjecttype_omschrijving_generiek",
"herkomst_informatieobjecttype_omschrijving_generiek",
"hierarchie_informatieobjecttype_omschrijving_generiek",
"opmerking_informatieobjecttype_omschrijving_generiek",
)
extra_kwargs = {
"informatieobjecttype_omschrijving_generiek": {
"source": "omschrijving_generiek_informatieobjecttype",
"required": True,
},
"definitie_informatieobjecttype_omschrijving_generiek": {
"source": "omschrijving_generiek_definitie",
"required": True,
},
"herkomst_informatieobjecttype_omschrijving_generiek": {
"source": "omschrijving_generiek_herkomst",
"required": True,
},
"hierarchie_informatieobjecttype_omschrijving_generiek": {
"source": "omschrijving_generiek_hierarchie",
"required": True,
},
"opmerking_informatieobjecttype_omschrijving_generiek": {
"source": "omschrijving_generiek_opmerking"
},
}


class InformatieObjectTypeSerializer(
NestedGegevensGroepMixin, serializers.HyperlinkedModelSerializer
):
class InformatieObjectTypeSerializer(serializers.HyperlinkedModelSerializer):
omschrijving_generiek = OmschrijvingGeneriekSerializer(
source="*",
required=False,
help_text=_("Algemeen gehanteerde omschrijving van het informatieobjecttype."),
)
Expand Down Expand Up @@ -96,3 +119,22 @@ def get_fields(self):
].help_text += f"\n\n{value_display_mapping}"

return fields

@transaction.atomic()
def create(self, validated_data):
omschrijving_generiek_data = validated_data.pop("omschrijving_generiek", None)

iotype = super().create(validated_data)
if omschrijving_generiek_data:
OmschrijvingGeneriekSerializer().update(iotype, omschrijving_generiek_data)

return iotype

@transaction.atomic()
def update(self, instance, validated_data):
omschrijving_generiek_data = validated_data.pop("omschrijving_generiek", None)

iotype = super().update(instance, validated_data)
if omschrijving_generiek_data:
OmschrijvingGeneriekSerializer().update(iotype, omschrijving_generiek_data)
return iotype
12 changes: 0 additions & 12 deletions src/openzaak/components/catalogi/models/informatieobjecttype.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
from django.utils.translation import ugettext_lazy as _

from vng_api_common.caching import ETagMixin
from vng_api_common.descriptors import GegevensGroepType
from vng_api_common.fields import VertrouwelijkheidsAanduidingField

from openzaak.components.autorisaties.models import AutorisatieSpec
Expand Down Expand Up @@ -94,17 +93,6 @@ class InformatieObjectType(
blank=True,
help_text=_("Zinvolle toelichting bij het informatieobjecttype"),
)
omschrijving_generiek = GegevensGroepType(
{
"informatieobjecttype_omschrijving_generiek": omschrijving_generiek_informatieobjecttype,
"definitie_informatieobjecttype_omschrijving_generiek": omschrijving_generiek_definitie,
"herkomst_informatieobjecttype_omschrijving_generiek": omschrijving_generiek_herkomst,
"hierarchie_informatieobjecttype_omschrijving_generiek": omschrijving_generiek_hierarchie,
"opmerking_informatieobjecttype_omschrijving_generiek": omschrijving_generiek_opmerking,
},
optional=("opmerking_informatieobjecttype_omschrijving_generiek",),
required=False,
)

# relation fields
catalogus = models.ForeignKey(
Expand Down
4 changes: 0 additions & 4 deletions src/openzaak/components/catalogi/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5216,26 +5216,22 @@ components:
description: Algemeen gehanteerde omschrijving van het type informatieobject.
type: string
maxLength: 80
minLength: 1
definitieInformatieobjecttypeOmschrijvingGeneriek:
title: Definitie
description: Nauwkeurige beschrijving van het generieke type informatieobject
type: string
maxLength: 255
minLength: 1
herkomstInformatieobjecttypeOmschrijvingGeneriek:
title: Herkomst
description: De naam van de waardenverzameling, of van de beherende organisatie
daarvan, waaruit de waarde is overgenomen.
type: string
maxLength: 12
minLength: 1
hierarchieInformatieobjecttypeOmschrijvingGeneriek:
title: Hierarchie
description: De plaats in de rangorde van het informatieobjecttype.
type: string
maxLength: 80
minLength: 1
opmerkingInformatieobjecttypeOmschrijvingGeneriek:
title: Opmerking
description: Zinvolle toelichting bij het informatieobjecttype
Expand Down
12 changes: 4 additions & 8 deletions src/openzaak/components/catalogi/swagger2.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -6674,29 +6674,25 @@
"title": "Informatieobjecttype omschrijving generiek",
"description": "Algemeen gehanteerde omschrijving van het type informatieobject.",
"type": "string",
"maxLength": 80,
"minLength": 1
"maxLength": 80
},
"definitieInformatieobjecttypeOmschrijvingGeneriek": {
"title": "Definitie",
"description": "Nauwkeurige beschrijving van het generieke type informatieobject",
"type": "string",
"maxLength": 255,
"minLength": 1
"maxLength": 255
},
"herkomstInformatieobjecttypeOmschrijvingGeneriek": {
"title": "Herkomst",
"description": "De naam van de waardenverzameling, of van de beherende organisatie daarvan, waaruit de waarde is overgenomen.",
"type": "string",
"maxLength": 12,
"minLength": 1
"maxLength": 12
},
"hierarchieInformatieobjecttypeOmschrijvingGeneriek": {
"title": "Hierarchie",
"description": "De plaats in de rangorde van het informatieobjecttype.",
"type": "string",
"maxLength": 80,
"minLength": 1
"maxLength": 80
},
"opmerkingInformatieobjecttypeOmschrijvingGeneriek": {
"title": "Opmerking",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1327,6 +1327,58 @@ def test_import_zaaktype_auto_match_latest_object(self, *mocks):
old_bt = new_zaaktype.besluittypen.all().get(omschrijving="Apple")
self.assertEqual(old_bt, besluittype2)

def test_import_iotype_without_omschrijving_generiek(self, *mocks):
"""
regression test for https://github.com/open-zaak/open-zaak/issues/1509
"""
catalogus_old = CatalogusFactory.create(rsin="000000000", domein="OLD")
zaaktype = ZaakTypeFactory.create(
catalogus=catalogus_old,
vertrouwelijkheidaanduiding="openbaar",
zaaktype_omschrijving="bla",
)
informatieobjecttype = InformatieObjectTypeFactory.create(
vertrouwelijkheidaanduiding="openbaar",
omschrijving_generiek_informatieobjecttype="",
omschrijving_generiek_definitie="",
omschrijving_generiek_herkomst="",
omschrijving_generiek_hierarchie="",
)
ZaakTypeInformatieObjectTypeFactory.create(
zaaktype=zaaktype, informatieobjecttype=informatieobjecttype
)
catalogus_new = CatalogusFactory.create(domein="NEW")

# export
zaaktype_url = reverse("admin:catalogi_zaaktype_change", args=(zaaktype.pk,))
response = self.app.get(zaaktype_url)
form = response.forms["zaaktype_form"]

response = form.submit("_export")

export_data = response.content

# import to the new catalogus
import_url = reverse(
"admin:catalogi_catalogus_import_zaaktype", args=(catalogus_new.pk,)
)

response = self.app.get(import_url)

form = response.form
f = io.BytesIO(export_data)
f.name = "test.zip"
f.seek(0)
form["file"] = (
"test.zip",
f.read(),
)

response = form.submit("_import_zaaktype").follow()
response = response.form.submit("_select")

self.assertEqual(response.status_code, 302)


@patch(
"openzaak.components.catalogi.models.zaaktype.Service.get_client",
Expand Down

0 comments on commit 45dc308

Please sign in to comment.