|
2 | 2 | import logging
|
3 | 3 |
|
4 | 4 | from django.conf import settings
|
| 5 | +from django.db import transaction |
5 | 6 | from django.db.models import Max
|
6 | 7 |
|
7 | 8 | from zgw_consumers.client import build_client
|
8 | 9 | from zgw_consumers.constants import APITypes
|
9 | 10 | from zgw_consumers.models import Service
|
10 | 11 |
|
11 | 12 | from openarchiefbeheer.celery import app
|
| 13 | +from openarchiefbeheer.destruction.utils import resync_items_and_zaken |
12 | 14 |
|
13 | 15 | from .api.serializers import ZaakSerializer
|
14 | 16 | from .models import Zaak
|
@@ -67,3 +69,48 @@ def retrieve_and_cache_zaken_from_openzaak() -> None:
|
67 | 69 | serializer = ZaakSerializer(data=zaken, many=True)
|
68 | 70 | serializer.is_valid(raise_exception=True)
|
69 | 71 | 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