def setUpTestData(cls): cls.entry1 = Journal.objects.create(action="connect_aidant", initiator="ABC") cls.aidant_thierry = AidantFactory( username="******", email="*****@*****.**", first_name="Thierry", last_name="Martin", organisation=OrganisationFactory(name="Commune de Vernon"), ) cls.usager_ned = UsagerFactory(given_name="Ned", family_name="Flanders") cls.first_mandat = MandatFactory( organisation=cls.aidant_thierry.organisation, usager=cls.usager_ned, expiration_date=timezone.now() + timedelta(days=6), ) cls.first_autorisation = AutorisationFactory( mandat=cls.first_mandat, demarche="Revenus", ) Journal.log_autorisation_creation(cls.first_autorisation, aidant=cls.aidant_thierry) cls.mandat_thierry_ned_365 = MandatFactory( organisation=cls.aidant_thierry.organisation, usager=cls.usager_ned, expiration_date=timezone.now() + timedelta(days=365), )
def test_log_autorisation_creation_complete(self): autorisation = AutorisationFactory( mandat=self.mandat_thierry_ned_365, demarche="logement", ) Journal.log_autorisation_creation(autorisation, self.aidant_thierry) journal_entries = Journal.objects.all() self.assertEqual(len(journal_entries), 3) last_entry = journal_entries.last() self.assertEqual(last_entry.action, "create_autorisation") self.assertIn("Ned Flanders", last_entry.usager) self.assertEqual(last_entry.autorisation, autorisation.id)
def new_mandat_recap(request): connection_id = request.session.get("connection") if not connection_id: log.error("No connection id found in session") return redirect("espace_aidant_home") connection = Connection.objects.get(pk=connection_id) aidant = request.user usager = connection.usager demarches_description = [ humanize_demarche_names(demarche) for demarche in connection.demarches ] duree = connection.get_duree_keyword_display() is_remote = connection.mandat_is_remote if request.method == "GET": form = RecapMandatForm(aidant) return render( request, "aidants_connect_web/new_mandat/new_mandat_recap.html", { "aidant": aidant, "usager": usager, "demarches": demarches_description, "duree": duree, "is_remote": is_remote, "form": form, }, ) else: form = RecapMandatForm(aidant=aidant, data=request.POST) if form.is_valid(): now = timezone.now() durationkw = connection.duree_keyword mandat_expiration_date = AuthorizationDurations.expiration( durationkw, now) mandat_duree = AuthorizationDurations.duration(durationkw, now) try: connection.demarches.sort() # Create a mandat mandat = Mandat.objects.create( organisation=aidant.organisation, usager=usager, duree_keyword=connection.duree_keyword, expiration_date=mandat_expiration_date, is_remote=connection.mandat_is_remote, ) # Add a Journal 'create_attestation' action Journal.log_attestation_creation( aidant=aidant, usager=usager, demarches=connection.demarches, duree=mandat_duree, is_remote_mandat=connection.mandat_is_remote, access_token=connection.access_token, attestation_hash=generate_attestation_hash( aidant, usager, connection.demarches, mandat_expiration_date), mandat=mandat, ) # This loop creates one `autorisation` object per `démarche` in the form for demarche in connection.demarches: # Revoke existing demarche autorisation(s) similar_active_autorisations = Autorisation.objects.active( ).filter( mandat__organisation=aidant.organisation, mandat__usager=usager, demarche=demarche, ) for similar_active_autorisation in similar_active_autorisations: similar_active_autorisation.revoke(aidant=aidant, revocation_date=now) # Create new demarche autorisation autorisation = Autorisation.objects.create( mandat=mandat, demarche=demarche, last_renewal_token=connection.access_token, ) Journal.log_autorisation_creation(autorisation, aidant) except AttributeError as error: log.error("Error happened in Recap") log.error(error) django_messages.error( request, f"Error with Usager attribute : {error}") return redirect("espace_aidant_home") except IntegrityError as error: log.error("Error happened in Recap") log.error(error) django_messages.error(request, f"No Usager was given : {error}") return redirect("espace_aidant_home") return redirect("new_mandat_success") else: return render( request, "aidants_connect_web/new_mandat/new_mandat_recap.html", { "aidant": aidant, "usager": usager, "demarche": demarches_description, "duree": duree, "form": form, }, )
def new_mandat_recap(request): connection = Connection.objects.get(pk=request.session["connection"]) aidant = request.user usager = connection.usager demarches_description = [ humanize_demarche_names(demarche) for demarche in connection.demarches ] duree = connection.get_duree_keyword_display() is_remote = connection.mandat_is_remote if request.method == "GET": form = RecapMandatForm(aidant) return render( request, "aidants_connect_web/new_mandat/new_mandat_recap.html", { "aidant": aidant, "usager": usager, "demarches": demarches_description, "duree": duree, "is_remote": is_remote, "form": form, }, ) else: form = RecapMandatForm(aidant=aidant, data=request.POST) if form.is_valid(): now = timezone.now() expiration_date = { "SHORT": now + timedelta(days=1), "LONG": now + timedelta(days=365), "EUS_03_20": settings.ETAT_URGENCE_2020_LAST_DAY, } mandat_expiration_date = expiration_date.get( connection.duree_keyword) days_before_expiration_date = { "SHORT": 1, "LONG": 365, "EUS_03_20": 1 + (settings.ETAT_URGENCE_2020_LAST_DAY - now).days, } mandat_duree = days_before_expiration_date.get( connection.duree_keyword) try: # Add a Journal 'create_attestation' action connection.demarches.sort() Journal.log_attestation_creation( aidant=aidant, usager=usager, demarches=connection.demarches, duree=mandat_duree, is_remote_mandat=connection.mandat_is_remote, access_token=connection.access_token, attestation_hash=generate_attestation_hash( aidant, usager, connection.demarches, mandat_expiration_date), ) # Create a mandat mandat = Mandat.objects.create( organisation=aidant.organisation, usager=usager, duree_keyword=connection.duree_keyword, expiration_date=mandat_expiration_date, is_remote=connection.mandat_is_remote, ) # This loop creates one `autorisation` object per `démarche` in the form for demarche in connection.demarches: # Revoke existing demarche autorisation(s) similar_active_autorisations = Autorisation.objects.active( ).filter( mandat__organisation=aidant.organisation, mandat__usager=usager, demarche=demarche, ) for similar_active_autorisation in similar_active_autorisations: similar_active_autorisation.revocation_date = now similar_active_autorisation.save( update_fields=["revocation_date"]) Journal.log_autorisation_cancel( similar_active_autorisation, aidant) # Create new demarche autorisation autorisation = Autorisation.objects.create( mandat=mandat, demarche=demarche, last_renewal_token=connection.access_token, ) Journal.log_autorisation_creation(autorisation, aidant) except AttributeError as error: log.error("Error happened in Recap") log.error(error) django_messages.error( request, f"Error with Usager attribute : {error}") return redirect("espace_aidant_home") except IntegrityError as error: log.error("Error happened in Recap") log.error(error) django_messages.error(request, f"No Usager was given : {error}") return redirect("espace_aidant_home") return redirect("new_mandat_success") else: return render( request, "aidants_connect_web/new_mandat/new_mandat_recap.html", { "aidant": aidant, "usager": usager, "demarche": demarches_description, "duree": duree, "form": form, }, )