diff --git a/backend/benefit/applications/api/v1/ahjo_integration_views.py b/backend/benefit/applications/api/v1/ahjo_integration_views.py index 694e1a0ab8..6259efcbc1 100644 --- a/backend/benefit/applications/api/v1/ahjo_integration_views.py +++ b/backend/benefit/applications/api/v1/ahjo_integration_views.py @@ -169,7 +169,7 @@ def post(self, request, *args, **kwargs): return Response( {"error": "Application not found"}, status=status.HTTP_404_NOT_FOUND ) - + # TODO how to check the success of the callback if it has no message property? if request_type == AhjoRequestType.SEND_DECISION_PROPOSAL: return self.handle_success_callback( request, application, callback_data, request_type @@ -299,6 +299,7 @@ def _handle_open_case_success(self, application: Application, callback_data: dic def _handle_delete_callback_success(self, application): # do anything that needs to be done when Ahjo sends a delete callback application.status = ApplicationStatus.CANCELLED + application.archived = True application.save() if application.batch and application.batch.auto_generated_by_ahjo: diff --git a/backend/benefit/applications/api/v1/application_batch_views.py b/backend/benefit/applications/api/v1/application_batch_views.py index 543cc4b13a..3c42d56fbc 100755 --- a/backend/benefit/applications/api/v1/application_batch_views.py +++ b/backend/benefit/applications/api/v1/application_batch_views.py @@ -1,3 +1,5 @@ +import logging + from django.db import transaction from django.forms import ValidationError from django.http import HttpResponse @@ -17,7 +19,11 @@ ApplicationBatchListSerializer, ApplicationBatchSerializer, ) -from applications.enums import ApplicationBatchStatus, ApplicationStatus +from applications.enums import ( + ApplicationBatchStatus, + ApplicationStatus, + ApplicationTalpaStatus, +) from applications.exceptions import ( BatchCompletionDecisionDateError, BatchCompletionRequiredFieldsError, @@ -30,6 +36,8 @@ from common.permissions import BFIsHandler from shared.audit_log.viewsets import AuditLoggingModelViewSet +LOGGER = logging.getLogger(__name__) + class ApplicationBatchFilter(filters.FilterSet): status = filters.MultipleChoiceFilter( @@ -213,7 +221,19 @@ def talpa_export_batch(self, request, *args, **kwargs) -> HttpResponse: # for easier testing in the test environment do not update the batches as sent_to_talpa # remove this when TALPA integration is ready for production if not skip_update: - approved_batches.all().update(status=ApplicationBatchStatus.SENT_TO_TALPA) + try: + # Update all approved batches to SENT_TO_TALPA status in a single query + approved_batches.update(status=ApplicationBatchStatus.SENT_TO_TALPA) + # Update all applications in the approved batches to SUCCESSFULLY_SENT_TO_TALPA status and archived=True + for a in applications: + a.talpa_status = ApplicationTalpaStatus.SUCCESSFULLY_SENT_TO_TALPA + a.archived = True + a.save() + + except Exception as e: + LOGGER.error( + f"An error occurred while updating batches after Talpa csv download: {e}" + ) return response @action(methods=["PATCH"], detail=False) diff --git a/backend/benefit/applications/api/v1/talpa_integration_views.py b/backend/benefit/applications/api/v1/talpa_integration_views.py index 309dc5d09e..bff693344b 100644 --- a/backend/benefit/applications/api/v1/talpa_integration_views.py +++ b/backend/benefit/applications/api/v1/talpa_integration_views.py @@ -57,7 +57,8 @@ def _handle_successful_applications( successful_applications = self._get_applications(application_numbers) if successful_applications: successful_applications.update( - talpa_status=ApplicationTalpaStatus.SUCCESSFULLY_SENT_TO_TALPA + talpa_status=ApplicationTalpaStatus.SUCCESSFULLY_SENT_TO_TALPA, + archived=True, ) for application in successful_applications: diff --git a/backend/benefit/applications/tests/test_ahjo_integration.py b/backend/benefit/applications/tests/test_ahjo_integration.py index c1907bb0a1..45f256e32e 100644 --- a/backend/benefit/applications/tests/test_ahjo_integration.py +++ b/backend/benefit/applications/tests/test_ahjo_integration.py @@ -532,6 +532,7 @@ def test_ahjo_callback_success( assert decided_application.status == ApplicationStatus.CANCELLED assert decided_application.batch.status == ApplicationBatchStatus.CANCELLED + assert decided_application.archived is True assert decided_application.ahjo_status.latest().status == ahjo_status diff --git a/backend/benefit/applications/tests/test_application_batch_api.py b/backend/benefit/applications/tests/test_application_batch_api.py index dc3de3e8dd..02cedf122f 100755 --- a/backend/benefit/applications/tests/test_application_batch_api.py +++ b/backend/benefit/applications/tests/test_application_batch_api.py @@ -12,7 +12,12 @@ from rest_framework.reverse import reverse from applications.api.v1.serializers.application import ApplicationBatchSerializer -from applications.enums import AhjoDecision, ApplicationBatchStatus, ApplicationStatus +from applications.enums import ( + AhjoDecision, + ApplicationBatchStatus, + ApplicationStatus, + ApplicationTalpaStatus, +) from applications.exceptions import BatchTooManyDraftsError from applications.models import Application, ApplicationBatch from applications.tests.conftest import * # noqa @@ -844,14 +849,26 @@ def test_application_batches_talpa_export(anonymous_client, application_batch): app_batch_2.status = ApplicationBatchStatus.DECIDED_ACCEPTED fill_as_valid_batch_completion_and_save(app_batch_2) + url = reverse("v1:applicationbatch-talpa-export-batch") + # Export accepted batches then change it status - response = anonymous_client.get(reverse("v1:applicationbatch-talpa-export-batch")) + response = anonymous_client.get(f"{url}?skip_update=0") application_batch.refresh_from_db() app_batch_2.refresh_from_db() assert application_batch.status == ApplicationBatchStatus.SENT_TO_TALPA assert app_batch_2.status == ApplicationBatchStatus.SENT_TO_TALPA + applications = Application.objects.filter( + batch__in=[application_batch, app_batch_2] + ) + for application in applications: + assert ( + application.talpa_status + == ApplicationTalpaStatus.SUCCESSFULLY_SENT_TO_TALPA + ) + assert application.archived is True + assert isinstance(response, HttpResponse) assert response.headers["Content-Type"] == "text/csv" assert response.status_code == 200 diff --git a/backend/benefit/applications/tests/test_talpa_integration.py b/backend/benefit/applications/tests/test_talpa_integration.py index 983504ba73..a5b05e248a 100644 --- a/backend/benefit/applications/tests/test_talpa_integration.py +++ b/backend/benefit/applications/tests/test_talpa_integration.py @@ -155,6 +155,8 @@ def test_talpa_callback_success(talpa_client, decided_application): == ApplicationTalpaStatus.SUCCESSFULLY_SENT_TO_TALPA ) + assert decided_application.archived is True + @pytest.mark.django_db def test_talpa_callback_rejected_application(