Skip to content

Commit

Permalink
open-zaak: upload & download file
Browse files Browse the repository at this point in the history
  • Loading branch information
mguikema committed May 12, 2022
1 parent a6eb42f commit bb20b8c
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 26 deletions.
40 changes: 31 additions & 9 deletions app/apps/cases/views/case.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import io
import mimetypes
import operator
from functools import reduce

from apps.addresses.models import HousingCorporation
from apps.cases.models import Case, CaseProject, CaseReason, CaseStateType
from apps.cases.models import Case, CaseDocument, CaseProject, CaseReason, CaseStateType
from apps.cases.serializers import (
AdvertisementSerializer,
CaseDocumentSerializer,
Expand All @@ -14,7 +16,7 @@
from apps.events.mixins import CaseEventsMixin
from apps.main.filters import RelatedOrderingFilter
from apps.main.pagination import EmptyPagination
from apps.openzaak.helpers import create_document
from apps.openzaak.helpers import create_document, get_document, get_document_inhoud
from apps.schedules.models import DaySegment, Priority, Schedule, WeekSegment
from apps.users.permissions import (
CanAccessSensitiveCases,
Expand All @@ -28,6 +30,7 @@
)
from django.db.models import OuterRef, Q, Subquery
from django.forms.fields import CharField, MultipleChoiceField
from django.http import FileResponse
from django.shortcuts import get_object_or_404
from django_filters import rest_framework as filters
from drf_spectacular.types import OpenApiTypes
Expand Down Expand Up @@ -497,18 +500,37 @@ def documents(self, request, pk):
)
@action(
detail=True,
url_path="documents",
url_path="documents/create",
methods=["post"],
)
def add_document(self, request, pk):
case = self.get_object()
print(request.FILES.get("file_uploaded"))
file_uploaded = request.FILES.get("file_uploaded")
content_type = file_uploaded.content_type
print(content_type)
response = create_document(case, file_uploaded, "Mijn docje")
print(response)
serialized = CaseDocumentSerializer(response)
print(serialized)
print(serialized.data)
return Response(serialized.data)


class CaseDocumentViewSet(
mixins.RetrieveModelMixin,
viewsets.GenericViewSet,
):
permission_classes = [CanAccessSensitiveCases]
serializer_class = CaseDocumentSerializer
queryset = CaseDocument.objects.all()
pagination_class = StandardResultsSetPagination

def retrieve(self, request, *args, **kwargs):
casedocument = self.get_object()
document = get_document(casedocument.document_url)
print(document)
content = get_document_inhoud(casedocument.document_content)

response = FileResponse(io.BytesIO(content))
response[
"Content-Disposition"
] = f"attachment; filename={document.bestandsnaam}"
response["Content-Type"] = mimetypes.types_map[document.formaat]
response["Content-Length"] = document.bestandsomvang
response["Last-Modified"] = document.creatiedatum
return response
34 changes: 18 additions & 16 deletions app/apps/openzaak/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@
Based on: https://github.com/VNG-Realisatie/zaken-api/blob/stable/1.0.x/src/notificaties.md
"""

import base64
import hashlib
import pathlib
import uuid
from datetime import date, datetime

import requests
from apps.cases.models import CaseDocument
from django.conf import settings
from django.utils import timezone
Expand Down Expand Up @@ -49,26 +53,19 @@ def _build_zaak_body(instance):
def _build_document_body(file, title, language, lock=None):
file.seek(0)
content = file.read()
string_content = content.decode("utf-8", errors="ignore")
string_content = base64.b64encode(content).decode("utf-8")

document_body = {
"identificatie": uuid.uuid4().hex,
"formaat": pathlib.Path(file.name).suffix,
"informatieobjecttype": settings.OPENZAAK_DEFAULT_INFORMATIEOBJECTTYPE,
"bronorganisatie": settings.DEFAULT_RSIN,
"creatiedatum": _parse_date(date.today()),
"titel": title,
"auteur": settings.DEFAULT_RSIN,
"taal": language,
"bestandsnaam": file.name,
"formaat": file.size,
"inhoud": string_content,
"informatieobjecttype": settings.OPENZAAK_DEFAULT_INFORMATIEOBJECTTYPE,
"ontvangstdatum": _parse_date(date.today()),
"verzenddatum": _parse_date(date.today()),
"ondertekening": {"soort": "analoog", "datum": _parse_date(date.today())},
"integriteit": {
"algoritme": "sha_3",
"waarde": _get_file_hash(content),
"datum": _parse_date(date.today()),
},
}
if lock:
document_body["lock"] = lock
Expand Down Expand Up @@ -189,15 +186,20 @@ def get_document(document_url):
response = drc_client.retrieve(
"zaakinformatieobject",
url=document_url,
request_kwargs={
"headers": {
"Accept-Crs": "EPSG:4326",
}
},
)
return factory(Document, response)


def get_document_inhoud(document_inhoud_url):
client = Service.objects.filter(api_type=APITypes.drc).get().build_client()
response = requests.get(
document_inhoud_url,
headers=client.auth.credentials(),
)
response.raise_for_status()
return response.content


def update_document(case_document, file, title, language="nld"):
drc_client = Service.objects.filter(api_type=APITypes.drc).get().build_client()
lock = drc_client.request(
Expand Down
3 changes: 2 additions & 1 deletion app/apps/openzaak/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ def create_case_state_instance_in_openzaak(sender, instance, created, **kwargs):
and not instance.system_build
):
try:
create_open_zaak_case_state(instance)
pass
# create_open_zaak_case_state(instance)
except ClientError as e:
logger.error(e)
except Exception as e:
Expand Down
2 changes: 2 additions & 0 deletions app/config/urls.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from apps.addresses.views import AddressViewSet
from apps.cases.views import (
CaseCloseViewSet,
CaseDocumentViewSet,
CaseThemeViewSet,
CaseViewSet,
ImportBWVCaseDataView,
Expand Down Expand Up @@ -33,6 +34,7 @@
router = DefaultRouter()
router.register(r"addresses", AddressViewSet, basename="addresses")
router.register(r"cases", CaseViewSet, basename="cases")
router.register(r"documents", CaseDocumentViewSet, basename="documents")
router.register(r"tasks", CaseUserTaskViewSet, basename="tasks")
router.register(r"themes", CaseThemeViewSet, basename="themes")
router.register(r"debriefings", DebriefingViewSet, basename="debriefings")
Expand Down
1 change: 1 addition & 0 deletions open-zaak/open-zaak/.env
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ DB_PASSWORD=openzaak
CACHE_DEFAULT=redis:6379
CACHE_AXES=redis:6379
EMAIL_HOST=mail.gemeente.nl
SENDFILE_BACKEND=django_sendfile.backends.simple

CMIS_ENABLED=False
CMIS_MAPPER_FILE="/app/config/cmis_mapper.json"
Expand Down

0 comments on commit bb20b8c

Please sign in to comment.