diff --git a/impact/reglementations/tests/test_csrd_reglementation.py b/impact/reglementations/tests/test_csrd_reglementation.py index 98cc16b9..12869bf1 100644 --- a/impact/reglementations/tests/test_csrd_reglementation.py +++ b/impact/reglementations/tests/test_csrd_reglementation.py @@ -12,6 +12,7 @@ from conftest import CODE_SE from entreprises.models import CaracteristiquesAnnuelles from habilitations.models import attach_user_to_entreprise +from reglementations.models import RapportCSRD from reglementations.views.base import ReglementationStatus from reglementations.views.csrd import CSRDReglementation @@ -2141,3 +2142,70 @@ def test_calcule_etat_si_soumis_en_2026_car_exercice_comptable_different_annee_c "Vous devez publier le Rapport de Durabilité en même temps que le rapport de gestion." ) assert reglementation.prochaine_echeance == 2026 + + +def test_calcule_etat_avec_CSRD_initialisée(entreprise_factory, alice): + entreprise = entreprise_factory( + categorie_juridique_sirene=CODE_SA, + code_pays_etranger_sirene=None, + est_cotee=False, + appartient_groupe=False, + effectif=CaracteristiquesAnnuelles.EFFECTIF_MOINS_DE_10, + tranche_bilan=CaracteristiquesAnnuelles.BILAN_MOINS_DE_450K, + tranche_chiffre_affaires=CaracteristiquesAnnuelles.CA_MOINS_DE_900K, + ) + habilitation = attach_user_to_entreprise(alice, entreprise, "Présidente") + RapportCSRD.objects.create( + entreprise=entreprise, + proprietaire=alice, + annee=date.today().year, + ) + + reglementation = CSRDReglementation.calculate_status( + entreprise.dernieres_caracteristiques_qualifiantes, alice + ) + + assert ( + reglementation.primary_action.title + == "Accéder à l'espace Rapport de Durabilité" + ) + assert reglementation.primary_action.url == reverse( + "reglementations:gestion_csrd", + kwargs={ + "siren": entreprise.siren, + "etape": 1, + }, + ) + + +def test_calcule_etat_avec_CSRD_et_étapes_validées(entreprise_factory, alice): + entreprise = entreprise_factory( + categorie_juridique_sirene=CODE_SA, + code_pays_etranger_sirene=None, + est_cotee=False, + appartient_groupe=False, + effectif=CaracteristiquesAnnuelles.EFFECTIF_MOINS_DE_10, + tranche_bilan=CaracteristiquesAnnuelles.BILAN_MOINS_DE_450K, + tranche_chiffre_affaires=CaracteristiquesAnnuelles.CA_MOINS_DE_900K, + ) + habilitation = attach_user_to_entreprise(alice, entreprise, "Présidente") + DEJA_VALIDEE = 2 + RapportCSRD.objects.create( + entreprise=entreprise, + proprietaire=alice, + annee=date.today().year, + etape_validee=DEJA_VALIDEE, + ) + + reglementation = CSRDReglementation.calculate_status( + entreprise.dernieres_caracteristiques_qualifiantes, alice + ) + + assert reglementation.primary_action.title == "Reprendre ma CSRD" + assert reglementation.primary_action.url == reverse( + "reglementations:gestion_csrd", + kwargs={ + "siren": entreprise.siren, + "etape": DEJA_VALIDEE + 1, + }, + ) diff --git a/impact/reglementations/views/csrd.py b/impact/reglementations/views/csrd.py index 97f36c2a..5af6eb26 100644 --- a/impact/reglementations/views/csrd.py +++ b/impact/reglementations/views/csrd.py @@ -310,15 +310,28 @@ def calculate_status( ) -> ReglementationStatus: if reglementation_status := super().calculate_status(caracteristiques, user): return reglementation_status + + rapport = rapport_csrd( + entreprise=caracteristiques.entreprise, + user=user, + annee=datetime.today().year, + ) + if rapport and rapport.etape_validee: + etape_suivante = rapport.etape_validee + 1 + label_gestion_csrd = "Reprendre ma CSRD" + else: + etape_suivante = 1 + label_gestion_csrd = "Accéder à l'espace Rapport de Durabilité" + primary_action = ReglementationAction( reverse_lazy( "reglementations:gestion_csrd", kwargs={ "siren": caracteristiques.entreprise.siren, - "etape": 1, + "etape": etape_suivante, }, ), - "Accéder à l'espace Rapport de Durabilité", + label_gestion_csrd, ) if annee := cls.est_soumis_a_partir_de_l_exercice(caracteristiques): premiere_annee_publication = ( @@ -448,6 +461,18 @@ def est_grand_groupe(cls, caracteristiques: CaracteristiquesAnnuelles) -> bool: ) +def rapport_csrd(user, entreprise, annee): + try: + habilitation = user.habilitation_set.get(entreprise=entreprise) + return RapportCSRD.objects.get( + entreprise=entreprise, + proprietaire=None if habilitation.is_confirmed else user, + annee=annee, + ) + except ObjectDoesNotExist: + pass + + @login_required def guide_csrd(request, siren=None, phase=0, etape=0, sous_etape=0): if not siren: