From 72a65da6993ecc097fb189276a608b5fa2b5459e Mon Sep 17 00:00:00 2001 From: Xavier Fernandez Date: Mon, 30 Sep 2024 16:26:16 +0200 Subject: [PATCH 1/2] suspension: add new approval box in suspend processes --- itou/templates/approvals/suspend.html | 8 +- .../approvals/suspension_action_choice.html | 5 +- .../approvals/suspension_delete.html | 5 +- .../approvals/suspension_update.html | 5 +- .../approvals/suspension_update_enddate.html | 5 +- itou/www/approvals_views/views.py | 20 +- .../__snapshots__/test_suspend.ambr | 212 +++++++++++++++++- 7 files changed, 244 insertions(+), 16 deletions(-) diff --git a/itou/templates/approvals/suspend.html b/itou/templates/approvals/suspend.html index 7be4df9223..1e1b02636c 100644 --- a/itou/templates/approvals/suspend.html +++ b/itou/templates/approvals/suspend.html @@ -16,13 +16,10 @@

-
+
{% if not preview %} {# Edit mode. #} -
- {% include "approvals/includes/status.html" with common_approval=approval hiring_pending=False %} -
@@ -88,6 +85,9 @@
Vous êtes sur le point de suspendre ce PASS IAE {% endif %}
+
+ {% include "approvals/includes/box.html" with approval=approval only %} +
diff --git a/itou/templates/approvals/suspension_action_choice.html b/itou/templates/approvals/suspension_action_choice.html index 2019bfdc85..ab4f80852a 100644 --- a/itou/templates/approvals/suspension_action_choice.html +++ b/itou/templates/approvals/suspension_action_choice.html @@ -16,7 +16,7 @@

-
+
{% include 'approvals/includes/progress_bar.html' with ratio=40 only %}

@@ -46,6 +46,9 @@

+
+ {% include "approvals/includes/box.html" with approval=suspension.approval only %} +
diff --git a/itou/templates/approvals/suspension_delete.html b/itou/templates/approvals/suspension_delete.html index ad0d2daa18..fef00d1db0 100644 --- a/itou/templates/approvals/suspension_delete.html +++ b/itou/templates/approvals/suspension_delete.html @@ -17,7 +17,7 @@

-
+
{% include 'approvals/includes/progress_bar.html' with ratio=80 only %}

@@ -52,6 +52,9 @@

+
+ {% include "approvals/includes/box.html" with approval=suspension.approval only %} +
diff --git a/itou/templates/approvals/suspension_update.html b/itou/templates/approvals/suspension_update.html index 4f4c13aeca..f21a26ab68 100644 --- a/itou/templates/approvals/suspension_update.html +++ b/itou/templates/approvals/suspension_update.html @@ -16,7 +16,7 @@

-
+
@@ -31,6 +31,9 @@

+
+ {% include "approvals/includes/box.html" with approval=suspension.approval only %} +
diff --git a/itou/templates/approvals/suspension_update_enddate.html b/itou/templates/approvals/suspension_update_enddate.html index dd5b7d8b57..5711d52a7f 100644 --- a/itou/templates/approvals/suspension_update_enddate.html +++ b/itou/templates/approvals/suspension_update_enddate.html @@ -16,7 +16,7 @@

-
+
{% include 'approvals/includes/progress_bar.html' with ratio=80 only %}

@@ -39,6 +39,9 @@

+
+ {% include "approvals/includes/box.html" with approval=suspension.approval only %} +
diff --git a/itou/www/approvals_views/views.py b/itou/www/approvals_views/views.py index 5a0cfd7463..e0fde11094 100644 --- a/itou/www/approvals_views/views.py +++ b/itou/www/approvals_views/views.py @@ -475,7 +475,10 @@ def suspend(request, approval_id, template_name="approvals/suspend.html"): @login_required() def suspension_action_choice(request, suspension_id, template_name="approvals/suspension_action_choice.html"): siae = get_current_company_or_404(request) - suspension = get_object_or_404(Suspension.objects.select_related("approval__user"), pk=suspension_id) + suspension = get_object_or_404( + Suspension.objects.select_related("approval__user").prefetch_related("approval__suspension_set"), + pk=suspension_id, + ) if not suspension.can_be_handled_by_siae(siae): raise PermissionDenied() @@ -519,7 +522,10 @@ def suspension_update(request, suspension_id, template_name="approvals/suspensio """ siae = get_current_company_or_404(request) - suspension = get_object_or_404(Suspension.objects.select_related("approval__user"), pk=suspension_id) + suspension = get_object_or_404( + Suspension.objects.select_related("approval__user").prefetch_related("approval__suspension_set"), + pk=suspension_id, + ) if not suspension.can_be_handled_by_siae(siae): raise PermissionDenied() @@ -551,7 +557,10 @@ def suspension_update(request, suspension_id, template_name="approvals/suspensio @login_required() def suspension_update_enddate(request, suspension_id, template_name="approvals/suspension_update_enddate.html"): siae = get_current_company_or_404(request) - suspension = get_object_or_404(Suspension.objects.select_related("approval__user"), pk=suspension_id) + suspension = get_object_or_404( + Suspension.objects.select_related("approval__user").prefetch_related("approval__suspension_set"), + pk=suspension_id, + ) if not suspension.can_be_handled_by_siae(siae): raise PermissionDenied() @@ -595,7 +604,10 @@ def suspension_delete(request, suspension_id, template_name="approvals/suspensio """ siae = get_current_company_or_404(request) - suspension = get_object_or_404(Suspension.objects.select_related("approval__user"), pk=suspension_id) + suspension = get_object_or_404( + Suspension.objects.select_related("approval__user").prefetch_related("approval__suspension_set"), + pk=suspension_id, + ) if not suspension.can_be_handled_by_siae(siae): raise PermissionDenied() diff --git a/tests/www/approvals_views/__snapshots__/test_suspend.ambr b/tests/www/approvals_views/__snapshots__/test_suspend.ambr index 9f1bc7ac87..14df392396 100644 --- a/tests/www/approvals_views/__snapshots__/test_suspend.ambr +++ b/tests/www/approvals_views/__snapshots__/test_suspend.ambr @@ -1,7 +1,7 @@ # serializer version: 1 # name: ApprovalSuspendActionChoiceViewTest.test_context[view queries] dict({ - 'num_queries': 12, + 'num_queries': 14, 'queries': list([ dict({ 'origin': list([ @@ -240,6 +240,27 @@ LIMIT 21 ''', }), + dict({ + 'origin': list([ + 'suspension_action_choice[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE "approvals_suspension"."approval_id" IN (%s) + ORDER BY "approvals_suspension"."start_at" DESC + ''', + }), dict({ 'origin': list([ 'JobApplicationQuerySet.first[/django/db/models/query.py]', @@ -355,6 +376,36 @@ LIMIT 1 ''', }), + dict({ + 'origin': list([ + 'SuspensionQuerySet.first[/django/db/models/query.py]', + 'WithNode[approvals/includes/box.html]', + 'IfNode[approvals/includes/box.html]', + 'IncludeNode[approvals/suspension_action_choice.html]', + 'BlockNode[layout/base.html]', + 'ExtendsNode[approvals/suspension_action_choice.html]', + 'suspension_action_choice[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE ("approvals_suspension"."approval_id" = %s + AND "approvals_suspension"."end_at" >= %s + AND "approvals_suspension"."start_at" <= %s) + ORDER BY "approvals_suspension"."start_at" DESC + LIMIT 1 + ''', + }), dict({ 'origin': list([ 'Atomic.__exit__[/django/db/transaction.py]', @@ -391,7 +442,7 @@ # --- # name: ApprovalSuspendUpdateEndDateViewTest.test_context[view queries] dict({ - 'num_queries': 12, + 'num_queries': 14, 'queries': list([ dict({ 'origin': list([ @@ -630,6 +681,27 @@ LIMIT 21 ''', }), + dict({ + 'origin': list([ + 'suspension_update_enddate[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE "approvals_suspension"."approval_id" IN (%s) + ORDER BY "approvals_suspension"."start_at" DESC + ''', + }), dict({ 'origin': list([ 'JobApplicationQuerySet.first[/django/db/models/query.py]', @@ -745,6 +817,36 @@ LIMIT 1 ''', }), + dict({ + 'origin': list([ + 'SuspensionQuerySet.first[/django/db/models/query.py]', + 'WithNode[approvals/includes/box.html]', + 'IfNode[approvals/includes/box.html]', + 'IncludeNode[approvals/suspension_update_enddate.html]', + 'BlockNode[layout/base.html]', + 'ExtendsNode[approvals/suspension_update_enddate.html]', + 'suspension_update_enddate[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE ("approvals_suspension"."approval_id" = %s + AND "approvals_suspension"."end_at" >= %s + AND "approvals_suspension"."start_at" <= %s) + ORDER BY "approvals_suspension"."start_at" DESC + LIMIT 1 + ''', + }), dict({ 'origin': list([ 'Atomic.__exit__[/django/db/transaction.py]', @@ -867,7 +969,7 @@ # --- # name: ApprovalSuspendViewTest.test_delete_suspension[view queries] dict({ - 'num_queries': 12, + 'num_queries': 14, 'queries': list([ dict({ 'origin': list([ @@ -1106,6 +1208,27 @@ LIMIT 21 ''', }), + dict({ + 'origin': list([ + 'suspension_delete[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE "approvals_suspension"."approval_id" IN (%s) + ORDER BY "approvals_suspension"."start_at" DESC + ''', + }), dict({ 'origin': list([ 'JobApplicationQuerySet.first[/django/db/models/query.py]', @@ -1221,6 +1344,36 @@ LIMIT 1 ''', }), + dict({ + 'origin': list([ + 'SuspensionQuerySet.first[/django/db/models/query.py]', + 'WithNode[approvals/includes/box.html]', + 'IfNode[approvals/includes/box.html]', + 'IncludeNode[approvals/suspension_delete.html]', + 'BlockNode[layout/base.html]', + 'ExtendsNode[approvals/suspension_delete.html]', + 'suspension_delete[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE ("approvals_suspension"."approval_id" = %s + AND "approvals_suspension"."end_at" >= %s + AND "approvals_suspension"."start_at" <= %s) + ORDER BY "approvals_suspension"."start_at" DESC + LIMIT 1 + ''', + }), dict({ 'origin': list([ 'Atomic.__exit__[/django/db/transaction.py]', @@ -1257,7 +1410,7 @@ # --- # name: ApprovalSuspendViewTest.test_update_suspension[view queries] dict({ - 'num_queries': 14, + 'num_queries': 16, 'queries': list([ dict({ 'origin': list([ @@ -1496,6 +1649,27 @@ LIMIT 21 ''', }), + dict({ + 'origin': list([ + 'suspension_update[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE "approvals_suspension"."approval_id" IN (%s) + ORDER BY "approvals_suspension"."start_at" DESC + ''', + }), dict({ 'origin': list([ 'JobApplicationQuerySet.first[/django/db/models/query.py]', @@ -1725,6 +1899,36 @@ LIMIT 1 ''', }), + dict({ + 'origin': list([ + 'SuspensionQuerySet.first[/django/db/models/query.py]', + 'WithNode[approvals/includes/box.html]', + 'IfNode[approvals/includes/box.html]', + 'IncludeNode[approvals/suspension_update.html]', + 'BlockNode[layout/base.html]', + 'ExtendsNode[approvals/suspension_update.html]', + 'suspension_update[www/approvals_views/views.py]', + ]), + 'sql': ''' + SELECT "approvals_suspension"."id", + "approvals_suspension"."approval_id", + "approvals_suspension"."start_at", + "approvals_suspension"."end_at", + "approvals_suspension"."siae_id", + "approvals_suspension"."reason", + "approvals_suspension"."reason_explanation", + "approvals_suspension"."created_at", + "approvals_suspension"."created_by_id", + "approvals_suspension"."updated_at", + "approvals_suspension"."updated_by_id" + FROM "approvals_suspension" + WHERE ("approvals_suspension"."approval_id" = %s + AND "approvals_suspension"."end_at" >= %s + AND "approvals_suspension"."start_at" <= %s) + ORDER BY "approvals_suspension"."start_at" DESC + LIMIT 1 + ''', + }), dict({ 'origin': list([ 'Atomic.__exit__[/django/db/transaction.py]', From de3d07a0475b03413ea1a86d264aafa4424e4dc1 Mon Sep 17 00:00:00 2001 From: Xavier Fernandez Date: Mon, 30 Sep 2024 16:47:44 +0200 Subject: [PATCH 2/2] prolongation: add new approval box in declare_prolongation process --- itou/templates/approvals/declare_prolongation.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/itou/templates/approvals/declare_prolongation.html b/itou/templates/approvals/declare_prolongation.html index c4fd7de6e9..b3144153c1 100644 --- a/itou/templates/approvals/declare_prolongation.html +++ b/itou/templates/approvals/declare_prolongation.html @@ -16,13 +16,10 @@

-
+
{% if not preview %} {# Edit mode. #} -
- {% include "approvals/includes/status.html" with common_approval=approval hiring_pending=False %} -
-
{% include "approvals/includes/prolongation_declaration_form.html" %}
+
{% include "approvals/includes/prolongation_declaration_form.html" %}
{% else %} {# Preview mode: ask for confirmation before committing to DB. #} @@ -36,7 +33,7 @@

{% endfor %} {# Show the user a preview of the prolongation. #} -
+
Vous êtes sur le point de déclarer une prolongation de PASS IAE pour la raison suivante : @@ -87,6 +84,9 @@
{% endif %}
+
+ {% include "approvals/includes/box.html" with approval=approval only %} +