Skip to content

Commit

Permalink
Merge pull request #139 from GeneriekPublicatiePlatformWoo/feature/76…
Browse files Browse the repository at this point in the history
…-document-actions

Documenthandeling
  • Loading branch information
sergei-maertens authored Nov 14, 2024
2 parents 8d0a380 + e90091b commit c6673aa
Show file tree
Hide file tree
Showing 13 changed files with 497 additions and 100 deletions.
20 changes: 18 additions & 2 deletions docs/admin/publicaties/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ Hierop zien we:

Op een *document*-registratie zijn de volgende metadata beschikbaar. Op het scherm wordt verplichte velden **dikgedrukt** weergegeven.

**Algemene velden**

* ``Publicatie``. Het *document* moet hier gekoppeld worden aan een bestaande of nieuwe *publicatie*
* ``Identificatie``. Het unieke kenmerk dat intern aan het *document* is toegekend, bijvoorbeeld door het zaaksysteem of het DMS. (DiWoo : ``identifier``)
* ``Officiële titel``. De (mogelijk uitgebreide) officiële titel van het document. (DiWoo : ``officieleTitel``)
Expand All @@ -48,10 +50,24 @@ Op een *document*-registratie zijn de volgende metadata beschikbaar. Op het sche
* ``Bestandsnaam``. Naam van het bestand zoals deze op de harde schijf opgeslagen wordt.
* ``Bestandsomvang`` Bestandsgrootte, in aantal bytes.
* ``Status``. De publicatiestatus van het document (DiWoo : ``publicatiestatus``)
* ``Documents API Service``. Systeemveld, bevat de verwijzing naar het bestand in de Documenten API.
* ``Document UUID``. Systeemveld, bevat de verwijzing naar het bestand in de Documenten API.
* ``Geregistreerd op``. De niet-wijzigbare datum en tijd waarop het document nieuw is toegevoegd.
* ``Laatst gewijzigd op``. De niet-wijzigbare datum en tijd waarop het document voor het laatst gewijzigd was.
* ``UUID``. Een niet-wijzigbaar, automatisch toegekend identificatiekenmerk. (DiWoo : ``identifier``)

**Documenthandelingen**

Documenthandelingen zijn verplichte gegevens in de DiWoo-standaard.

* ``Soort handeling``. De soort documenthandeling die op dit document plaatsgevonden heeft. Dit wordt nu automatisch gezet.
* ``Vanaf``. Het gerapporteerde moment van de documenthandeling, deze is gelijk aan de documentregistratiedatum.
* ``Was geassocieerd met``. De organisatie die deze handeling heeft uitgevoerd, afgeleid uit de verantwoordelijke
organisatie van de gerelateerde publicatie.

**Documenten-API-koppeling**

* ``Documents API Service``. Systeemveld, bevat de verwijzing naar het bestand in de Documenten API.
* ``Document UUID``. Systeemveld, bevat de verwijzing naar het bestand in de Documenten API.
* ``Documentvergrendelingscode``. systeemveld, bevat de vergrendelingscode van een bestand in de Documenten API.

Publicaties
------------
Expand Down
35 changes: 35 additions & 0 deletions src/woo_publications/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1375,6 +1375,12 @@ components:
description: The expected file parts/chunks to upload the file contents.
These are derived from the specified total file size (`bestandsomvang`)
in the document create body.
documenthandelingen:
type: array
items:
$ref: '#/components/schemas/DocumentAction'
description: The document actions of this document, currently only one action
will be used per document.
required:
- bestandsdelen
- creatiedatum
Expand All @@ -1383,6 +1389,25 @@ components:
- publicatie
- registratiedatum
- uuid
DocumentAction:
type: object
properties:
soortHandeling:
allOf:
- $ref: '#/components/schemas/SoortHandelingEnum'
default: vaststelling
atTime:
type: string
format: date-time
readOnly: true
wasAssciatedWith:
type: string
format: uuid
readOnly: true
description: The unique identifier of the organisation.
required:
- atTime
- wasAssciatedWith
DocumentStatus:
type: object
properties:
Expand Down Expand Up @@ -1859,6 +1884,16 @@ components:
- publisher
- registratiedatum
- uuid
SoortHandelingEnum:
enum:
- ondertekening
- ontvangst
- vaststelling
type: string
description: |-
* `ondertekening` - Signed
* `ontvangst` - Received
* `vaststelling` - Declared
Theme:
type: object
properties:
Expand Down
55 changes: 55 additions & 0 deletions src/woo_publications/publications/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from datetime import datetime

from django.contrib import admin
from django.template.defaultfilters import filesizeformat
from django.urls import reverse
Expand All @@ -11,6 +13,7 @@
AuditLogInlineformset,
get_logs_link,
)
from woo_publications.metadata.models import Organisation

from .constants import PublicationStatusOptions
from .models import Document, Publication
Expand Down Expand Up @@ -99,10 +102,54 @@ class DocumentAdmin(AdminAuditLogMixin, admin.ModelAdmin):
"registratiedatum",
"show_actions",
)
fieldsets = [
(
None,
{
"fields": (
"publicatie",
"identifier",
"officiele_titel",
"verkorte_titel",
"omschrijving",
"creatiedatum",
"bestandsformaat",
"bestandsnaam",
"bestandsomvang",
"publicatiestatus",
"registratiedatum",
"laatst_gewijzigd_datum",
"uuid",
)
},
),
(
_("Document actions"),
{
"fields": (
"soort_handeling",
"at_time",
"was_assciated_with",
)
},
),
(
_("Documents API integration"),
{
"fields": (
"document_service",
"document_uuid",
"lock",
)
},
),
]
readonly_fields = (
"uuid",
"registratiedatum",
"laatst_gewijzigd_datum",
"at_time",
"was_assciated_with",
)
search_fields = (
"identifier",
Expand Down Expand Up @@ -132,3 +179,11 @@ def show_actions(self, obj: Document) -> str:
'<a href="{}">{}</a>',
actions,
)

@admin.display(description=_("at time"))
def at_time(self, obj: Document) -> datetime:
return obj.registratiedatum

@admin.display(description=_("was associated with"))
def was_assciated_with(self, obj: Document) -> Organisation | None:
return obj.publicatie.verantwoordelijke
26 changes: 25 additions & 1 deletion src/woo_publications/publications/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from woo_publications.logging.service import extract_audit_parameters
from woo_publications.metadata.models import InformationCategory, Organisation

from ..constants import PublicationStatusOptions
from ..constants import DocumentActionTypeOptions, PublicationStatusOptions
from ..models import Document, Publication


Expand Down Expand Up @@ -50,6 +50,20 @@ class FilePartSerializer(serializers.Serializer[FilePart]):
)


class DocumentActionSerializer(serializers.Serializer):
soort_handeling = serializers.ChoiceField(
choices=DocumentActionTypeOptions.choices,
default=DocumentActionTypeOptions.declared,
)
at_time = serializers.DateTimeField(
read_only=True,
)
was_assciated_with = serializers.UUIDField(
help_text=_("The unique identifier of the organisation."),
read_only=True,
)


class DocumentStatusSerializer(serializers.Serializer):
document_upload_voltooid = serializers.BooleanField(
label=_("document upload completed"),
Expand Down Expand Up @@ -78,6 +92,15 @@ class DocumentSerializer(serializers.ModelSerializer):
read_only=True,
allow_null=True,
)
documenthandelingen = DocumentActionSerializer(
help_text=_(
"The document actions of this document, currently only one action will be used per document."
),
required=False,
many=True,
min_length=1, # pyright: ignore[reportCallIssue]
max_length=1, # pyright: ignore[reportCallIssue]
)

class Meta: # pyright: ignore
model = Document
Expand All @@ -96,6 +119,7 @@ class Meta: # pyright: ignore
"registratiedatum",
"laatst_gewijzigd_datum",
"bestandsdelen",
"documenthandelingen",
)
extra_kwargs = {
"uuid": {
Expand Down
6 changes: 6 additions & 0 deletions src/woo_publications/publications/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,9 @@ class PublicationStatusOptions(models.TextChoices):
published = "gepubliceerd", _("Published")
concept = "concept", _("Concept")
revoked = "ingetrokken", _("Revoked")


class DocumentActionTypeOptions(models.TextChoices):
signed = "ondertekening", _("Signed")
received = "ontvangst", _("Received")
declared = "vaststelling", _("Declared")
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Generated by Django 4.2.16 on 2024-11-14 11:00

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("publications", "0010_alter_document_identifier"),
]

operations = [
migrations.AddField(
model_name="document",
name="soort_handeling",
field=models.CharField(
choices=[
("ondertekening", "Signed"),
("ontvangst", "Received"),
("vaststelling", "Declared"),
],
default="vaststelling",
verbose_name="action type",
),
),
]
38 changes: 37 additions & 1 deletion src/woo_publications/publications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@
from woo_publications.logging.typing import ActingUser
from woo_publications.metadata.models import InformationCategory

from .constants import PublicationStatusOptions
from .constants import DocumentActionTypeOptions, PublicationStatusOptions
from .typing import DocumentActions

# when the document isn't specified both the service and uuid needs to be unset
_DOCUMENT_NOT_SET = models.Q(document_service=None, document_uuid=None)
Expand Down Expand Up @@ -266,6 +267,13 @@ class Document(models.Model):
),
)

# documenthandeling fields
soort_handeling = models.CharField(
verbose_name=_("action type"),
choices=DocumentActionTypeOptions.choices,
default=DocumentActionTypeOptions.declared,
)

# Documents API integration
document_service = models.ForeignKey(
"zgw_consumers.Service",
Expand Down Expand Up @@ -323,6 +331,34 @@ def clean(self):
)
)

@property
def documenthandelingen(self) -> DocumentActions:
"""
Fake documenthandeling field to populate the `DocumentActionSerializer`.
"""
return [
{
"soort_handeling": self.soort_handeling,
"at_time": self.registratiedatum,
"was_assciated_with": (
self.publicatie.verantwoordelijke.uuid
if self.publicatie.verantwoordelijke
else None
),
}
]

@documenthandelingen.setter
def documenthandelingen(self, value: DocumentActions) -> None:
"""
Set the (created) `soort_handeling` field
"""
assert len(value) == 1
documenthandeling = value[0]
assert documenthandeling["soort_handeling"]

self.soort_handeling = documenthandeling["soort_handeling"]

@property
def zgw_document(self) -> ZGWDocument | None:
"""
Expand Down
14 changes: 13 additions & 1 deletion src/woo_publications/publications/tests/test_admin_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
)
from woo_publications.utils.tests.webtest import add_dynamic_field

from ..constants import PublicationStatusOptions
from ..constants import DocumentActionTypeOptions, PublicationStatusOptions
from ..models import Document, Publication
from .factories import DocumentFactory, PublicationFactory

Expand Down Expand Up @@ -305,6 +305,7 @@ def test_admin_update_revoke_published_documents_when_revoking_publication(self)
"document_service": None,
"registratiedatum": "2024-09-27T00:14:00Z",
"laatst_gewijzigd_datum": "2024-09-28T00:14:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "title",
}
Expand Down Expand Up @@ -445,6 +446,7 @@ def test_admin_inline_update_admin(self):
"document_service": None,
"registratiedatum": "2024-09-25T00:14:00Z",
"laatst_gewijzigd_datum": "2024-09-25T00:14:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "title",
}
Expand Down Expand Up @@ -498,6 +500,11 @@ def test_admin_inline_create_admin(self):
add_dynamic_field(form, "document_set-0-bestandsformaat", "application/pdf")
add_dynamic_field(form, "document_set-0-bestandsnaam", "foo.pdf")
add_dynamic_field(form, "document_set-0-bestandsomvang", "0")
add_dynamic_field(
form,
"document_set-0-soort_handeling",
DocumentActionTypeOptions.declared.value,
)

with freeze_time("2024-09-26T00:14:00-00:00"):
response = form.submit(name="_save")
Expand Down Expand Up @@ -531,6 +538,7 @@ def test_admin_inline_create_admin(self):
"officiele_titel": "title",
"registratiedatum": "2024-09-26T00:14:00Z",
"laatst_gewijzigd_datum": "2024-09-26T00:14:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
"document_service": None,
"document_uuid": None,
"lock": "",
Expand Down Expand Up @@ -619,6 +627,7 @@ def test_admin_inline_delete(self):
"document_service": None,
"registratiedatum": "2024-09-25T00:14:00Z",
"laatst_gewijzigd_datum": "2024-09-25T00:14:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "DELETE THIS ITEM",
}
Expand Down Expand Up @@ -689,6 +698,7 @@ def test_document_admin_create(self):
"document_service": None,
"registratiedatum": "2024-09-24T12:00:00Z",
"laatst_gewijzigd_datum": "2024-09-24T12:00:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "The official title of this document",
}
Expand Down Expand Up @@ -769,6 +779,7 @@ def test_document_admin_update(self):
"document_service": None,
"registratiedatum": "2024-09-25T14:00:00Z",
"laatst_gewijzigd_datum": "2024-09-29T14:00:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "changed official title",
}
Expand Down Expand Up @@ -828,6 +839,7 @@ def test_document_admin_delete(self):
"document_service": None,
"registratiedatum": "2024-09-25T14:00:00Z",
"laatst_gewijzigd_datum": "2024-09-25T14:00:00Z",
"soort_handeling": DocumentActionTypeOptions.declared,
},
"_cached_object_repr": "title one",
}
Expand Down
Loading

0 comments on commit c6673aa

Please sign in to comment.