diff --git a/itou/templates/approvals/list.html b/itou/templates/approvals/list.html index c4d44b5542..3473939098 100644 --- a/itou/templates/approvals/list.html +++ b/itou/templates/approvals/list.html @@ -1,6 +1,8 @@ {% extends "layout/base.html" %} {% load django_bootstrap5 %} {% load static %} +{% load matomo %} +{% load str_filters %} {% block title %}Salariés et PASS IAE {{ block.super }}{% endblock %} @@ -8,35 +10,54 @@ {% include "layout/previous_step.html" with back_url=back_url only %} {% endblock %} -{% block title_content %}

Salariés et PASS IAE

{% endblock %} +{% block title_content %}

Salariés

{% endblock %} + +{% block title_extra %} + {% if request.current_organization.can_use_employee_record %} + + {% endif %} +{% endblock %} {% block content %}
-
-
- {% include "approvals/includes/approvals_filters/status.html" %} - {% include "includes/btn_dropdown_filter/radio.html" with field=filters_form.expiry only %} - {% include "approvals/includes/list_reset_filters.html" %} +
+

Salariés et PASS IAE

+ +
+ {% include "approvals/includes/approvals_filters/status.html" %} + {% include "includes/btn_dropdown_filter/radio.html" with field=filters_form.expiry only %} + {% include "approvals/includes/list_reset_filters.html" %} +
+ +
+ {% include "approvals/includes/list_counter.html" %} +
{% bootstrap_field filters_form.job_seeker layout="inline" %}
- -
-
-
-
-
- {% include "approvals/includes/list_counter.html" %} -
{% bootstrap_field filters_form.job_seeker layout="inline" %}
+ {% include "approvals/includes/list_results.html" %}
- {% include "approvals/includes/list_results.html" %}
@@ -45,6 +66,7 @@ {% block script %} {{ block.super }} + diff --git a/itou/templates/dashboard/includes/employer_employees_card.html b/itou/templates/dashboard/includes/employer_employees_card.html index 6f5bfa136e..78e92d999a 100644 --- a/itou/templates/dashboard/includes/employer_employees_card.html +++ b/itou/templates/dashboard/includes/employer_employees_card.html @@ -18,7 +18,7 @@ Fiches salariés ASP {% if num_rejected_employee_records %} - {{ num_rejected_employee_records }} + {{ num_rejected_employee_records }} {% endif %} {% if request.current_organization.kind == CompanyKind.EITI %} {% include "dashboard/includes/stats_new_badge.html" %} diff --git a/itou/templates/employee_record/list.html b/itou/templates/employee_record/list.html index 0660e3a6ff..7343385877 100644 --- a/itou/templates/employee_record/list.html +++ b/itou/templates/employee_record/list.html @@ -1,6 +1,7 @@ {% extends "layout/base.html" %} {% load django_bootstrap5 %} {% load static %} +{% load matomo %} {% block title %}Fiches salarié ASP - {{ request.current_organization.display_name }} {{ block.super }}{% endblock %} @@ -29,20 +30,26 @@ {% endif %} {% endblock %} -{% block title_content %} -

Fiches salarié ASP - {{ request.current_organization.display_name }}

-

Nous transférons vos fiches salarié à l'ASP afin de vous faire gagner du temps

-

Une fois envoyées et validées, vous retrouverez directement vos données sur l'extranet de l'ASP.

-
    -
  • - Ne sont présentes dans cette liste que les candidatures acceptées (embauches) à partir du {{ feature_availability_date|date }}. -
  • -
  • - Vous devez avoir une annexe financière valide dans l'extranet de l'ASP pour pouvoir déclarer une fiche salarié dans les emplois. -
  • -
  • La visualisation dans l’Extranet IAE 2.0 interviendra dans les 2 heures suivant l’envoi.
  • -
- {% include "employee_record/includes/list_status_help.html" with request=request status=form.status.value only %} +{% block title_content %}

Salariés

{% endblock %} + +{% block title_extra %} + {% if request.current_organization.can_use_employee_record %} + + {% endif %} {% endblock %} {% block content %} @@ -50,46 +57,63 @@

Nous transférons vos fiches salarié à l'ASP afin de vous faire
-
-
Vous ne trouvez pas la fiche salarié d’un de vos salariés ?
- Créer une fiche salarié -
-
-
-
-
-
-
- -
-
-
- {% include "employee_record/includes/list_counter.html" %} - {% include "employee_record/includes/list_order.html" %} -
- {% bootstrap_field filters_form.job_seeker layout="inline" %} +
+
+ +
+ {# Filled via jQuery. Does not need reloading with HTMX, its content is static. #} + {{ form.order.as_hidden }} +
+
+ {% include "employee_record/includes/list_counter.html" %} + {% include "employee_record/includes/list_order.html" %} +
+ {% bootstrap_field filters_form.job_seeker layout="inline" %} +
+ {% include "employee_record/includes/list_results.html" %}
- {% include "employee_record/includes/list_results.html" %}
@@ -98,6 +122,7 @@

Nous transférons vos fiches salarié à l'ASP afin de vous faire {% block script %} {{ block.super }} + diff --git a/itou/www/approvals_views/views.py b/itou/www/approvals_views/views.py index adbca2a644..fa807cbea7 100644 --- a/itou/www/approvals_views/views.py +++ b/itou/www/approvals_views/views.py @@ -21,12 +21,9 @@ from itou.approvals import enums as approvals_enums from itou.approvals.constants import PROLONGATION_REPORT_FILE_REASONS -from itou.approvals.models import ( - Approval, - ProlongationRequest, - ProlongationRequestDenyInformation, - Suspension, -) +from itou.approvals.models import Approval, ProlongationRequest, ProlongationRequestDenyInformation, Suspension +from itou.employee_record.enums import Status +from itou.employee_record.models import EmployeeRecord from itou.files.models import File from itou.job_applications.enums import JobApplicationState from itou.job_applications.models import JobApplication @@ -179,6 +176,7 @@ def __init__(self): def setup(self, request, *args, **kwargs): super().setup(request, *args, **kwargs) + # self.siae = get_current_company_or_404(request) if self.siae: self.form = ApprovalForm(self.siae.pk, self.request.GET or None) @@ -203,6 +201,9 @@ def get_context_data(self, **kwargs): context["filters_form"] = self.form context["filters_counter"] = self.form.get_filters_counter() context["back_url"] = reverse("dashboard:index") + context["num_rejected_employee_records"] = ( + EmployeeRecord.objects.for_company(self.siae).filter(status=Status.REJECTED).count(), + ) return context diff --git a/itou/www/employee_record_views/views.py b/itou/www/employee_record_views/views.py index 825adb3bd7..17f24b2138 100644 --- a/itou/www/employee_record_views/views.py +++ b/itou/www/employee_record_views/views.py @@ -259,6 +259,9 @@ def list_employee_records(request, template_name="employee_record/list.html"): "ordered_by_label": order_by.label, "matomo_custom_title": "Fiches salarié ASP", "back_url": reverse("dashboard:index"), + "num_rejected_employee_records": EmployeeRecord.objects.for_company(siae) + .filter(status=Status.REJECTED) + .count(), } return render(request, "employee_record/includes/list_results.html" if request.htmx else template_name, context) diff --git a/tests/www/dashboard/test_dashboard.py b/tests/www/dashboard/test_dashboard.py index b61f9ea348..520330070e 100644 --- a/tests/www/dashboard/test_dashboard.py +++ b/tests/www/dashboard/test_dashboard.py @@ -23,34 +23,30 @@ from itou.users.enums import Title from itou.utils import constants as global_constants from itou.utils.models import InclusiveDateRange -from itou.utils.templatetags.format_filters import format_approval_number, format_siret -from tests.approvals.factories import ApprovalFactory, ProlongationRequestFactory -from tests.companies.factories import ( - CompanyAfterGracePeriodFactory, - CompanyFactory, - CompanyMembershipFactory, - CompanyPendingGracePeriodFactory, -) +from itou.utils.templatetags.format_filters import (format_approval_number, + format_siret) +from tests.approvals.factories import (ApprovalFactory, + ProlongationRequestFactory) +from tests.companies.factories import (CompanyAfterGracePeriodFactory, + CompanyFactory, + CompanyMembershipFactory, + CompanyPendingGracePeriodFactory) from tests.employee_record.factories import EmployeeRecordFactory from tests.files.factories import FileFactory -from tests.geiq.factories import ImplementationAssessmentCampaignFactory, ImplementationAssessmentFactory -from tests.institutions.factories import InstitutionFactory, InstitutionMembershipFactory, LaborInspectorFactory +from tests.geiq.factories import (ImplementationAssessmentCampaignFactory, + ImplementationAssessmentFactory) +from tests.institutions.factories import (InstitutionFactory, + InstitutionMembershipFactory, + LaborInspectorFactory) from tests.job_applications.factories import JobApplicationFactory from tests.prescribers import factories as prescribers_factories from tests.siae_evaluations.factories import ( - EvaluatedAdministrativeCriteriaFactory, - EvaluatedJobApplicationFactory, - EvaluatedSiaeFactory, - EvaluationCampaignFactory, -) -from tests.users.factories import ( - EmployerFactory, - JobSeekerFactory, - PrescriberFactory, -) + EvaluatedAdministrativeCriteriaFactory, EvaluatedJobApplicationFactory, + EvaluatedSiaeFactory, EvaluationCampaignFactory) +from tests.users.factories import (EmployerFactory, JobSeekerFactory, + PrescriberFactory) from tests.utils.test import TestCase, parse_response_to_soup - DISABLED_NIR = 'disabled aria-describedby="id_nir_helptext" id="id_nir"' @@ -61,7 +57,7 @@ class DashboardViewTest(ParametrizedTestCase, TestCase): "Votre compte utilisateur n’est rattaché à aucune agence France Travail, " "par conséquent vous ne pouvez pas bénéficier du statut de prescripteur habilité." ) - DANGER_CLASS = "bg-danger" + WARNING_CLASS = "bg-warning" SUSPEND_TEXT = "Suspendre un PASS IAE" HIRE_LINK_LABEL = "Déclarer une embauche" DORA_LABEL = "DORA" @@ -149,7 +145,7 @@ def test_dashboard_displays_asp_badge(self): url = reverse("dashboard:index") response = self.client.get(url) self.assertContains(response, "Fiches salariés ASP") - self.assertNotContains(response, self.DANGER_CLASS) + self.assertNotContains(response, self.WARNING_CLASS) assert response.context["num_rejected_employee_records"] == 0 # create rejected job applications @@ -169,14 +165,14 @@ def test_dashboard_displays_asp_badge(self): session[global_constants.ITOU_SESSION_CURRENT_ORGANIZATION_KEY] = company.pk session.save() response = self.client.get(url) - self.assertContains(response, self.DANGER_CLASS) + self.assertContains(response, self.WARNING_CLASS) assert response.context["num_rejected_employee_records"] == 2 # select the second company's in the session session[global_constants.ITOU_SESSION_CURRENT_ORGANIZATION_KEY] = other_company.pk session.save() response = self.client.get(url) - self.assertContains(response, self.DANGER_CLASS) + self.assertContains(response, self.WARNING_CLASS) assert response.context["num_rejected_employee_records"] == 1 # select the third company's in the session