Skip to content

Commit 23adc80

Browse files
SilviaAmAmsvenvandescheur
authored andcommittedSep 3, 2024
🐛 [#296] Resync zaken and items after re-caching
1 parent 7c0f1e5 commit 23adc80

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed
 

‎backend/src/openarchiefbeheer/destruction/utils.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
from django.conf import settings
44
from django.core.mail import send_mail
55
from django.db import transaction
6+
from django.db.models import OuterRef, Q, Subquery
67

78
from openarchiefbeheer.accounts.models import User
89
from openarchiefbeheer.emails.models import EmailConfig
910
from openarchiefbeheer.emails.render_backend import get_sandboxed_backend
11+
from openarchiefbeheer.zaken.models import Zaak
1012

1113
from .constants import InternalStatus
12-
from .models import DestructionList, DestructionListAssignee
14+
from .models import DestructionList, DestructionListAssignee, DestructionListItem
1315

1416

1517
def notify(subject: str, body: str, context: dict, recipients: list[str]) -> None:
@@ -130,3 +132,11 @@ def process_new_assignees(
130132
)
131133

132134
return new_assignees
135+
136+
137+
def resync_items_and_zaken() -> None:
138+
DestructionListItem.objects.filter(~Q(_zaak_url=""), zaak__isnull=True).update(
139+
zaak_id=Subquery(
140+
Zaak.objects.filter(url=OuterRef("_zaak_url")).values("pk")[:1]
141+
)
142+
)

‎backend/src/openarchiefbeheer/zaken/tasks.py

+47
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
import logging
33

44
from django.conf import settings
5+
from django.db import transaction
56
from django.db.models import Max
67

78
from zgw_consumers.client import build_client
89
from zgw_consumers.constants import APITypes
910
from zgw_consumers.models import Service
1011

1112
from openarchiefbeheer.celery import app
13+
from openarchiefbeheer.destruction.utils import resync_items_and_zaken
1214

1315
from .api.serializers import ZaakSerializer
1416
from .models import Zaak
@@ -67,3 +69,48 @@ def retrieve_and_cache_zaken_from_openzaak() -> None:
6769
serializer = ZaakSerializer(data=zaken, many=True)
6870
serializer.is_valid(raise_exception=True)
6971
serializer.save()
72+
73+
74+
@app.task
75+
@transaction.atomic()
76+
def resync_zaken():
77+
zrc_service = Service.objects.get(api_type=APITypes.zrc)
78+
zrc_client = build_client(zrc_service)
79+
80+
today = datetime.date.today()
81+
query_params = {
82+
"expand": "resultaat,resultaat.resultaattype,zaaktype,rollen",
83+
"archiefnominatie": "vernietigen",
84+
"einddatum__isnull": False,
85+
"einddatum__lt": today.isoformat(),
86+
}
87+
88+
Zaak.objects.all().delete()
89+
90+
with zrc_client:
91+
response = zrc_client.get(
92+
"zaken",
93+
headers={"Accept-Crs": "EPSG:4326"},
94+
params=query_params,
95+
timeout=settings.REQUESTS_DEFAULT_TIMEOUT,
96+
)
97+
response.raise_for_status()
98+
99+
data_iterator = pagination_helper(
100+
zrc_client,
101+
response.json(),
102+
headers={"Accept-Crs": "EPSG:4326"},
103+
timeout=settings.REQUESTS_DEFAULT_TIMEOUT,
104+
)
105+
106+
for index, data in enumerate(data_iterator):
107+
logger.info("Retrieved page %s.", index + 1)
108+
109+
zaken = process_expanded_data(data["results"])
110+
111+
serializer = ZaakSerializer(data=zaken, many=True)
112+
serializer.is_valid(raise_exception=True)
113+
serializer.save()
114+
115+
# Resync the destruction list items with the zaken
116+
resync_items_and_zaken()

0 commit comments

Comments
 (0)
Please sign in to comment.