diff --git a/conventions/services/avenants.py b/conventions/services/avenants.py index 97df6f2db..afb16f510 100644 --- a/conventions/services/avenants.py +++ b/conventions/services/avenants.py @@ -26,14 +26,14 @@ def __init__(self): def create_avenant(request: HttpRequest, convention_uuid: UUID) -> dict[str, Any]: parent_convention = ( Convention.objects.prefetch_related("programme") - # .prefetch_related("lot") - .prefetch_related("avenants").get(uuid=convention_uuid) + .prefetch_related("avenants") + .get(uuid=convention_uuid) ) if parent_convention.is_avenant(): parent_convention = ( Convention.objects.prefetch_related("programme") - # .prefetch_related("lot") - .prefetch_related("avenants").get(id=parent_convention.parent_id) + .prefetch_related("avenants") + .get(id=parent_convention.parent_id) ) if request.method == "POST": diff --git a/conventions/views/avenants.py b/conventions/views/avenants.py index 03b94d88a..2dcdd1157 100644 --- a/conventions/views/avenants.py +++ b/conventions/views/avenants.py @@ -9,11 +9,14 @@ from django.views.decorators.http import require_http_methods from conventions.forms import AvenantSearchForm +from conventions.models.choices import ConventionStatut +from conventions.models.convention import Convention from conventions.permissions import ( currentrole_permission_required, currentrole_permission_required_view_function, ) from conventions.services.avenants import ( + OngoingAvenantError, complete_avenants_for_avenant, create_avenant, remove_avenant_type_from_avenant, @@ -26,7 +29,25 @@ @login_required @currentrole_permission_required("convention.add_convention") def new_avenant(request: HttpRequest, convention_uuid: UUID) -> HttpResponse: - result = create_avenant(request, convention_uuid) + try: + result = create_avenant(request, convention_uuid) + except OngoingAvenantError: + convention = Convention.objects.get(uuid=convention_uuid) + last_avenant = ( + convention.avenants.filter( + statut__in=[ + ConventionStatut.PROJET.label, + ConventionStatut.INSTRUCTION.label, + ConventionStatut.CORRECTION.label, + ] + ) + .order_by("-cree_le") + .first() + ) + return HttpResponseRedirect( + reverse("conventions:recapitulatif", args=[last_avenant.uuid]) + ) + if result["success"] == ReturnStatus.SUCCESS: convention = result["convention"] target_pathname = None