Skip to content

Commit

Permalink
Merge branch 'main' into Writing-documentation-by-PO
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoKlerks authored Nov 15, 2024
2 parents 60aa266 + c6673aa commit c78b9e1
Show file tree
Hide file tree
Showing 21 changed files with 1,195 additions and 110 deletions.
21 changes: 18 additions & 3 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,11 +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. "Published" betekent dat het document online vindbaar en raadpleegbaar is. "Concept" en "Revoked" zijn offline voor de buitenwereld.
* ``Documenten 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 ontgrendelsleutel nodig voor updates aan het document 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 is.
* ``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 voorlopig automatisch gezet.
* ``Vanaf``. Het gerapporteerde moment van de documenthandeling. Deze wordt voorlopig gelijk gesteld aan de documentregistratiedatum.
* ``Was geassocieerd met``. De organisatie die deze handeling heeft uitgevoerd. Deze wordt voorlopig 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
9 changes: 9 additions & 0 deletions src/woo_publications/api/exceptions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.utils.translation import gettext_lazy as _

from rest_framework import status
from rest_framework.exceptions import APIException


class BadGateway(APIException):
status_code = status.HTTP_502_BAD_GATEWAY
default_detail = _("Bad gateway.")
100 changes: 100 additions & 0 deletions src/woo_publications/api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,71 @@ paths:
schema:
$ref: '#/components/schemas/DocumentStatus'
description: ''
/api/v1/documenten/{uuid}/download:
get:
operationId: documentenDownloadRetrieve
description: |-
Download the binary content of the document. The endpoint does not return JSON data, but instead the file content is streamed.
You can only download the content of files that are completely uploaded in the upstream API.
summary: Download the binary file contents
parameters:
- in: header
name: Audit-Remarks
schema:
type: string
description: |2
Any additional information describing the action performed by the user.
required: true
- in: header
name: Audit-User-ID
schema:
type: string
description: |2
The system identifier that uniquely identifies the user performing the action.
Ideally, this is obtained from some Identity and Access Management infrastructure.
With OpenID Connect, this would typically be the `sub` claim.
required: true
- in: header
name: Audit-User-Representation
schema:
type: string
description: |2
The display name of the user performing the action, to make them recognizable.
required: true
- in: path
name: uuid
schema:
type: string
format: uuid
required: true
tags:
- Documenten
security:
- tokenAuth: []
responses:
'200':
headers:
Content-Length:
schema:
type: string
description: Total size in bytes of the download.
content:
application/octet-stream:
schema:
type: string
format: binary
description: The binary file contents.
'502':
headers:
Content-Length:
schema:
type: string
description: Total size in bytes of the download.
description: Bad gateway - failure to stream content.
/api/v1/informatiecategorieen:
get:
operationId: informatiecategorieenList
Expand Down Expand Up @@ -1310,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 @@ -1318,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 @@ -1794,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
2 changes: 1 addition & 1 deletion src/woo_publications/logging/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ class Events(models.TextChoices):
update = "update", _("Record updated")
delete = "delete", _("Record deleted")
# Specific events
...
download = "download", _("Downloaded")
18 changes: 18 additions & 0 deletions src/woo_publications/logging/logevent.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"audit_api_read",
"audit_api_update",
"audit_api_delete",
"audit_api_download",
]


Expand Down Expand Up @@ -202,3 +203,20 @@ def audit_api_delete(
object_data=object_data,
remarks=remarks,
)


def audit_api_download(
*,
content_object: models.Model,
user_id: str,
user_display: str,
remarks: str,
) -> None:
_audit_event(
content_object=content_object,
event=Events.download,
user_id=user_id,
user_display=user_display,
django_user=None,
remarks=remarks,
)
2 changes: 2 additions & 0 deletions src/woo_publications/logging/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
audit_admin_update,
audit_api_create,
audit_api_delete,
audit_api_download,
audit_api_read,
audit_api_update,
)
Expand Down Expand Up @@ -41,4 +42,5 @@
"audit_api_read",
"audit_api_update",
"audit_api_delete",
"audit_api_download",
]
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
Loading

0 comments on commit c78b9e1

Please sign in to comment.