Skip to content

Commit 7929213

Browse files
authored
Merge pull request #527 from maykinmedia/feature/504-improve-destruction-report
[#504] Improve destruction report
2 parents f28aec9 + 6ac8671 commit 7929213

File tree

14 files changed

+754
-363
lines changed

14 files changed

+754
-363
lines changed

backend/src/openarchiefbeheer/conf/locale/nl/LC_MESSAGES/django.po

+306-246
Large diffs are not rendered by default.

backend/src/openarchiefbeheer/destruction/api/viewsets.py

+2
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ def perform_destroy(self, instance: DestructionList) -> None:
292292
% {"destruction_date": destruction_date.strftime("%d/%m/%Y")}
293293
)
294294

295+
logevent.destruction_list_deletion_triggered(instance, self.request.user)
296+
295297
if instance.processing_status == InternalStatus.new:
296298
instance.planned_destruction_date = today + timedelta(days=WAITING_PERIOD)
297299
instance.save()

backend/src/openarchiefbeheer/destruction/destruction_report.py

+38-5
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@
99
from xlsxwriter.worksheet import Worksheet
1010

1111
from openarchiefbeheer.accounts.utils import format_user, format_user_groups
12-
from openarchiefbeheer.logging.logevent import destruction_list_reviewed
13-
from openarchiefbeheer.logging.utils import get_event_template, get_readable_timestamp
12+
from openarchiefbeheer.logging.logevent import (
13+
destruction_list_deletion_triggered,
14+
destruction_list_reviewed,
15+
)
16+
from openarchiefbeheer.logging.utils import get_event_template
17+
from openarchiefbeheer.utils.formatting import get_readable_timestamp
1418
from openarchiefbeheer.zaken.api.constants import ZAAK_METADATA_FIELDS_MAPPINGS
1519

16-
from .constants import InternalStatus
20+
from .constants import InternalStatus, ListItemStatus
1721
from .models import DestructionList
1822

1923

@@ -41,13 +45,41 @@ def add_review_process_table(
4145
data = [
4246
format_user_groups(log.extra_data["user_groups"]),
4347
format_user(log.extra_data["user"]),
44-
get_readable_timestamp(log),
48+
get_readable_timestamp(log.timestamp),
4549
# This column is not useful, since we are filtering on approved reviews.
4650
# But it was specifically requested.
4751
_("Has approved"),
4852
]
4953
worksheet.write_row(start_row + row_count + 1, 0, data)
5054

55+
def add_general_info_table(self, worksheet: Worksheet, start_row: int = 0) -> None:
56+
column_names = [
57+
_("Date/Time of deletion"),
58+
_("User who started the deletion"),
59+
_("Groups"),
60+
_("Number of deleted cases"),
61+
]
62+
worksheet.write_row(start_row, 0, column_names)
63+
64+
log = (
65+
TimelineLog.objects.for_object(self.destruction_list)
66+
.filter(template=get_event_template(destruction_list_deletion_triggered))
67+
.order_by("timestamp")
68+
.last()
69+
)
70+
number_of_cases = self.destruction_list.items.filter(
71+
processing_status=InternalStatus.succeeded,
72+
status=ListItemStatus.suggested,
73+
).count()
74+
75+
general_info_data = [
76+
get_readable_timestamp(self.destruction_list.end),
77+
format_user(log.extra_data["user"]) if log else "",
78+
format_user_groups(log.extra_data["user_groups"]) if log else "",
79+
number_of_cases,
80+
]
81+
worksheet.write_row(start_row + 1, 0, general_info_data)
82+
5183
def add_zaken_table(self, worksheet: Worksheet, start_row: int = 0) -> None:
5284
worksheet.write_row(
5385
start_row, 0, [field["name"] for field in ZAAK_METADATA_FIELDS_MAPPINGS]
@@ -70,7 +102,8 @@ def generate_destruction_report(self, file: IO) -> None:
70102
worksheet_zaken = workbook.add_worksheet(name=_("Deleted zaken"))
71103
worksheet_review_process = workbook.add_worksheet(name=_("Review process"))
72104

73-
self.add_zaken_table(worksheet_zaken)
105+
self.add_general_info_table(worksheet_zaken)
106+
self.add_zaken_table(worksheet_zaken, start_row=3)
74107
self.add_review_process_table(worksheet_review_process)
75108

76109
workbook.close()

backend/src/openarchiefbeheer/destruction/models.py

+2
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ def assign(assignee: "DestructionListAssignee") -> None:
151151
def set_status(self, status: str) -> None:
152152
self.status = status
153153
self.status_changed = timezone.now()
154+
if status == ListStatus.deleted:
155+
self.end = timezone.now()
154156
self.save()
155157

156158
def add_items(

backend/src/openarchiefbeheer/destruction/tests/endpoints/test_list_destruction.py

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from rest_framework import status
88
from rest_framework.reverse import reverse
99
from rest_framework.test import APITestCase
10+
from timeline_logger.models import TimelineLog
1011

1112
from openarchiefbeheer.accounts.tests.factories import UserFactory
1213

@@ -222,3 +223,10 @@ def test_can_start_destruction_if_archiefactiedatum_in_the_future_but_removed(se
222223
)
223224

224225
self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code)
226+
227+
logs = TimelineLog.objects.for_object(destruction_list).filter(
228+
template="logging/destruction_list_deletion_triggered.txt"
229+
)
230+
231+
self.assertEqual(len(logs), 1)
232+
self.assertEqual(logs[0].extra_data["user"]["username"], "record_manager")

0 commit comments

Comments
 (0)