Giter Club home page Giter Club logo

les-emplois's Introduction

Itou - Les emplois de l'inclusion

Les emplois de l'inclusion est un service numérique de délivrance des PASS IAE et de mise en relation d'employeurs inclusifs avec des candidats éloignés de l'emploi par le biais de tiers (prescripteurs habilités, orienteurs) ou en autoprescription.

Environnement de développement

Définition des variables d'environnement

Les valeurs par défaut de dev.py permettent de lancer un environnement fonctionnel.

Cependant, il est recommandé d'en prendre connaissance pour noter par exemple que les emails ne sont pas réellement envoyés mais que leur contenu est simplement écrit dans la sortie standard.

Le reste de la configuration se fait avec des variables d'environnement.

Celles concernant notre hébergeur CleverCloud sont définis au niveau du déploiement et de l'app CleverCloud tandis que les autres paramètres applicatifs indépendants du PaaS sont définis dans le projet itou-secrets.

Installation

L’application est développée avec Django, la base de données est gérée par PostgreSQL et le stockage objet type S3 MinIO.

Les instructions ci-dessous vous permettront d’obtenir un environnement de développement pratique à utiliser au quotidien. Pour obtenir un environnement fonctionnel très rapidement, mais moins ouvert au développement, suivre les instructions containerization.

Services nécessaires

Les dépendances (base de données PostgreSQL et le stockage objet type S3) sont rendues disponibles par Docker et Docker Compose.

Démarrez les dépendances de développement avec la commande :

docker compose up

Note : Vous pouvez personnaliser la configuration des dépendances gérées par Docker Compose en créant un fichier .env au même niveau que le fichier README.md.

Dépendances Python

Base de données

L’adaptateur Python pour PostgreSQL, psycopg, a quelques pré-requis auxquels votre système doit répondre. https://www.psycopg.org/docs/install.html#runtime-requirements

Par ailleurs, le projet utilise GDAL, et nécessite son installation préalable.

Sur MacOS :

$ brew install gdal

Sur Ubuntu :

$ apt-get install gdal-bin

Virtualenv

La commande make suivante crée un virtualenv et installe les dépendances pour le développement. Elle peut être exécutée régulièrement pour s’assurer que les dépendances sont bien à jour.

$ make venv

Dans un virtualenv, vous pouvez utiliser les commandes Django habituelles (./manage.py) mais également les recettes du Makefile.

Par défaut l'environment sera stocké dans le répertoire .venv. En bash/zsh c'est activé avec la commande source .venv/bin/activate (doc).

Il est recommandé d'utiliser direnv qui permet l'activation de l'environment automatique.

Création des buckets S3

Les fichiers téléversés sont enregistrés dans un stockage objet type S3. En local, le service est rendu par MinIO. Sa console d’administration est disponible à l’adresse http://localhost:9001/.

Login : minioadmin Password : minioadmin

Afin de créer les buckets nécessaires au développement et aux tests, lancer la commande :

$ make buckets

Accéder au serveur de développement

Démarrer le serveur de développement avec la commande :

$ make runserver

Vous pouvez y accéder à l'adresse http://localhost:8000/.

Créer le schéma de base de données

$ python manage.py migrate

Peupler la base de données

$ make populate_db

Charger une base de données de production

Inspirez-vous de la suite de commandes suivante :

$ rclone copy --max-age 24h --progress emplois:/encrypted-backups ./backups
$ pg_restore --jobs=4 --no-owner backups/backup.dump
$ python manage.py set_fake_passwords
$ python manage.py shell --command 'from itou.users.models import User; print(User.objects.update(identity_provider="DJANGO"))'

Rendez-vous sur la doc de itou-backups pour plus d’infos.

Qualité de code

make quality

Automatiquement avant chaque commit

Pre-commit est un outil qui gère des hooks de pre-commit Git.

Cela remplace les configurations individuelles par un fichier de configuration présent dans le projet.

$ pre-commit install

Lancer les tests

Le projet utilise pytest.

Lancer la suite complète, comme sur la CI :

make test

Lancer un test en particulier :

pytest itou/utils/tests.py::JSONTest::test_encoder

Mettre à jour les dépendances Python

La liste des dépendances est consignée dans les fichiers requirements/*.in. Une fois ces fichiers modifiés, les dépendances sont figées avec l’outil pip-tools. La commande suivante permet de mettre à jour une dépendance, par exemple flake8 :

$ PIP_COMPILE_OPTIONS="-P flake8" make compile-deps

Si les changements paraissent corrects, ils peuvent être ajoutés à git et commit.

Front-end

les-emplois's People

Contributors

agathelat avatar annie-rb avatar antoinepoindron avatar calummackervoy avatar celine-m-s avatar dejafait avatar dependabot[bot] avatar francoisfreitag avatar hellodeloo avatar ikarius avatar joffreymougel avatar keirua avatar kemar avatar leo-naeka avatar louije avatar madjid-asa avatar magopian avatar marionholis avatar rsebille avatar sebastienreuiller avatar sophie-itou avatar soumiaahlouch avatar stephane avatar tonial avatar vincentporte avatar vjousse avatar vmttn avatar vperron avatar xavfernandez avatar yannickpassa avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

les-emplois's Issues

Renvoyer toutes les structures du CODE_INSEE indiqué quelque soit la distance indiquée dans l'API

Je m'attends à ce que https://emplois.inclusion.beta.gouv.fr/api/v1/siaes/?code_insee=75056&distance_max_km=1&page_size=100 donne toutes les SIAE de Paris et les SIAE qui sont à moins de 1km de Paris.

J'obtiens une sous partie des SIAE de Paris, qui sont, j'imagine à moins de 1km d'un point (un peu arbitraire) de la zone géographique couverte par Paris.

curl https://emplois.inclusion.beta.gouv.fr/api/v1/siaes/\?code_insee\=75056\&distance_max_km\=1\&page_size\=1000 > siae_emploi_paris_petit.json

curl https://emplois.inclusion.beta.gouv.fr/api/v1/siaes/\?code_insee\=75056\&distance_max_km\=20\&page_size\=1000 > siae_emploi_paris_large.json

node <<EOF
const petit = require('./siae_emploi_paris_petit.json')
console.log('sous partie', petit.results.length)

const large = require('./siae_emploi_paris_large.json')
console.log('en tout', large.results.filter(i => i.departement == "75").length)
EOF

dont le résultats, aujourd'hui et sur ma machine est

sous partie 8
en tout 137

Cela étant dit, je ne m'attends pas un calcul complexe de la distance des SIAE à la surface qui correspond à Paris mais à une gestion plus fine pour les données dans une commune en particulier.

[Investigation UX] En tant qu’utilisateur j’aimerais pouvoir gérer TOUTES mes notifications

📜 Contexte

Toutes les notifs sont ici :
https://whimsical.com/notifications-C4VLyZenkkNgW5NFhxC9Py

Résumé du besoin :

  • Les utilisateurs reçoivent trop de notifications

Pourquoi ?

  • De nombreuses notifications sont transmises. Actuellement l’utilisateur peut uniquement désactiver les notifs relatives aux candidatures sur un poste

Comment répondre à ce besoin ?

  • permettre de gérer toutes les notifications

Cas d’usage : En tant qu’utilisateur des emplois, je veux contrôler les notifications que je reçois

🛠Espace production :

Détails du Livrable

  • A terme on aimerait que la console de gestion des notifications côté utilisateur permettent de gérer tout type de notif

Avant de commencer les travaux UX une investigation TECH doit permettre de lister toutes les notifs transmises par notre service [Investigation Tech] En tant qu’utilisateur j’aimerais pouvoir gérer TOUTES mes notifications (https://www.notion.so/Investigation-Tech-En-tant-qu-utilisateur-j-aimerais-pouvoir-g-rer-TOUTES-mes-notifications-a272138161324a09aa928b12c5ce22f7?pvs=21)

invitation_establishment_body.txt

https://github.com/betagouv/itou/blob/84cffa54247bd58f1b572ab8b252ba5e2d1aa96b/itou/templates/invitations_views/email/invitation_establishment_body.txt#L6-L20

Bonjour {{ first_name }} {{ last_name }} !

Vous avez été invité(e) à vous rattacher au compte de la structure {{ org_name }} sur la Plateforme de l'inclusion. Cliquez sur le lien ci-dessous pour vous inscrire en quelques clics. Nous sommes ravis de vous accueillir sur la Plateforme !
{% endblocktrans %}

{{ acceptance_link }}

{# Don't specify datetime format as it depends on the language. #}
{# Better relying on the global DATE_FORMAT configuration variable. #}
{% blocktrans with date=expiration_date|date %}
Cette invitation restera valide jusqu'au {{ date }}.
{% endblocktrans %}

{% blocktrans %}
Ignorez cet e-mail si vous ne souhaitez pas rejoindre cette organisation.
Styling with Markdown is supported

CANDIDATURES refuse_body.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/apply/email/refuse_body.txt#L8-L14

La candidature de {{ job_seeker_full_name }} envoyée par {{ sender_full_name }} chez {{ to_siae }} n'a malheureusement pas pu aboutir.
{% endblocktrans %}
Pour l'instant cette SIAE n'est plus habilitée à recevoir de candidatures.
{% else %}

{% blocktrans with to_siae=job_application.to_siae.display_name %}
Votre candidature chez {{ to_siae }} n'a malheureusement pas pu aboutir. Pour l'instant cette SIAE n'est plus habilitée à recevoir de candidatures. Nous vous souhaitons bon courage dans votre recherche et sommes persuadés que votre démarche aboutira ailleurs.

CANDIDATURES approval_number_body.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/apply/email/approval_number_body.txt#L5-L35

Merci d'avoir confirmé l'embauche d'un candidat sur la Plateforme de l'inclusion. Vous trouverez ci-dessous votre Pass IAE (il équivaut à l'agrément Pôle emploi conformément aux articles L 5132-1 à L 5132-17 du code du travail) :

{% trans "PASS IAE N° :" %} {{ job_application.approval.number_with_spaces }}

{% trans "Délivré pour l'embauche de :" %}
{% trans "Nom :" %} {{ job_application.approval.user.last_name }}
{% trans "Prénom :" %} {{ job_application.approval.user.first_name }}
{% trans "Date de naissance :" %} {{ job_application.approval.user.birthdate|date:"d/m/Y" }}

{% trans "Pour un contrat d'insertion :" %}
{% trans "Débutant le :" %} {{ job_application.hiring_start_at|date:"d/m/Y" }}{% if job_application.hiring_end_at %}
{% trans "Se terminant le :" %} {{ job_application.hiring_end_at|date:"d/m/Y" }}{% endif %}

{% trans "Au sein de la structure :" %}
{{ job_application.to_siae.display_name }}
{{ job_application.to_siae.get_kind_display }}
{{ job_application.to_siae.address_line_1 }}{% if job_application.to_siae.address_line_2 %}
{{ job_application.to_siae.address_line_2 }}{% endif %}
{{ job_application.to_siae.post_code }} {{ job_application.to_siae.city }}

{% trans "Pour le compte de Pôle emploi," %}

{% trans "Votre contact :" %}
{{ itou_email_contact }}

Afin de nous aider à évaluer la performance de notre service, accepteriez-vous de répondre à quelques questions ?
Prenez 30'' pour nous donnez votre avis ! Cliquez sur : {{ survey_link }}

Merci de votre participation et à très bientôt sur la Plateforme !

itou/itou/templates/account/email/password_reset_key_message.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/account/email/password_reset_key_message.txt#L1-L12

Vous recevez cet e-mail afin de réinitialiser votre mot de passe sur {{ site_name }}.
Nous vous invitons pour cela à cliquer sur le lien ci-dessous pour le réinitialiser.

Si vous n'avez pas demandé la réinitialisation de votre mot de passe, vous pouvez ignorer ce message.

{% if itou_environment == "DEMO"%}
Cet email a été envoyé depuis un environnement de démonstration, merci de ne pas en tenir compte. Pour le bon développement de la Plateforme de l'inclusion, l'équipe ITOU a parfois besoin de réaliser des tests de fonctionnement. Nous vous prions sincèrement de nous en excuser. [DEMO]{% endblocktrans %}
{% endif %}
inclusion.beta.gouv.fr

Users : convertir l’AddressMixin en adresse ASP sur JobSeekerProfile

⚠️ À faire après la mise en place de l’autocomplétion.

Les Users devraient ne pas hériter du AddressMixin non plus, il est donc à retirer du modèle User. Par contre, les JobSeekerProfile devraient connaître l’adresse postale du candidat, en particulier car cette étape est critique lors de la communication avec l’ASP. Cette adresse postale devrait en toute logique être saisie dans un référentiel “ASP” car non seulement ce dernier est plus précis et restrictif, mais en outre il sera de toutes façons utilisé lors de la création de la fiche de poste.

refused_prescriber_organization_email_body.txt

https://github.com/betagouv/itou/blob/dedd9a6201e8101ebe58a9db6a86e0b0f02b7a9e/itou/templates/prescribers/email/refused_prescriber_organization_email_body.txt#L6

{% trans "Nous sommes désolés, nous n'avons pas pu vérifier l'habilitation de votre organisation. Nous vous recontacterons au plus vite afin d'obtenir les renseignements qui nous manquent. Si toutefois notre tardons à revenir vers vous, n'hésitez pas à relancer notre équipe Support à l'adresse "%}{{ itou_email_contact }}{%

En tant qu’employeur je précise le poste sur lequel le candidat est embauché

📜 Contexte

Résumé du besoin :

  • Permettre à un employeur de préciser le poste sur lequel le candidat est retenu

Pourquoi ?

  • Suivi employeur
  • Données plus fiables pour le c2 (car actuellement une embauche peut englober plusieurs postes)

Comment répondre à ce besoin ?

  • Ajout de nouveaux champs “poste retenu” et “localisation” au moment de l’embauche

🛠Espace production (voir capture ci-dessous)

Problèmes conventionnement et annexes financières (AF)

Pour faire suite à notre conversation sur Ajout de l'interface "Mes annexes financières".

Avant-propos

Ne concerne que les structures d'insertion par l'activité économique.

Vocabulaire

Pourquoi stocker les conventions et les AF ?

  1. Détecter qu'un conventionnement est terminé
  2. Envoyer les numéros d'AF à l'ASP dans les fiches salariés (point controversé mais finalement nécessaire ?)

Différences de modélisation ASP/ITOU

  • côté ASP : 1 siret peut avoir n mesures (ex : AI et EI)
  • côté ITOU : contrainte d'unicité siret/kind (le champ kind est l'équivalent du terme ASP mesure)

=> 1 SIAE dans le SI ASP == n SIAE dans le SI ITOU

Historique de création de SIAE dans le SI ITOU

  1. Origine :
    • import d'un fichier CSV fourni par la DGEFP
    • les admin ITOU peuvent créer des SIAE (sans trace du created_by et sans restriction)
  2. 02/12/2019 : Siae Evolutions les utilisateurs peuvent créer des SIAE
    • ajout de Siae.created_by + Siae.source
    • ajout de la possibilité de créer une SIAE
      • la nouvelle SIAE doit commencer par le même SIREN
      • la nouvelle SIAE peut avoir n'importe quel type
  3. 24/04/2020 : vgrange/inject_siae_export_from_asp
    • début des travaux de synchronisation avec l'ASP en "combinant" des exports
    • certaines SIAE sont créées automatiquement
  4. 07/09/2020 : vgrange/restrict_siae_creation
    • la nouvelle SIAE doit appartenir au même kind que la SIAE active

=> le point commun est toujours le SIREN

=> ITOU permet de créer des SIAE qui n'existent pas dans l'ASP (antennes) or il faut pouvoir les relier à un conventionnement

Modélisation des conventions et annexes financières dans ITOU

Idée d'origine : relation mère-fille entre SIAE de source ASP et SIAE user-created.

C.f. https://docs.google.com/document/d/1jx-YYdRfyp2ukyLQnlX8n8JIJNMigqfdCs-Rn-nBju0

@kemar est contre car :

  • on peut créer une SIAE depuis n'importe quelle SIAE active, pas forcément la SIAE "mère"
  • on aurait tout stocké "à plat" dans le modéle SIAE qui continue de grossir par ailleurs, en contradiction avec les règles élémentaires des formes normales
  • 1 mesure au sens ASP peut avoir plusieurs AF, comment aurait-on pu avoir 1 AF par chantier pour une ACI ?

En atelier avec tous les devs on a décidé d'une autre abstraction :

siae_convention_fa_small

Problèmes

1) Notre modélisation est-elle correcte ?

Valider que notre abstraction est correcte ou prouver qu'une relation mère/fille est plus efficace que les tables SiaeConvention et SiaeFinancialAnnex.

Comment conserver un numéro d'AF spécifique pour une SIAE donnée s'il faut l'envoyer avec les fiches salariés ? Est-ce qu'il va falloir le sélectionner pour chaque envoi de fiche salarié ?

Expliquer les différences de modélisation entre le SI ASP et le SI ITOU.

2) Impossible de comprendre le champ SiaeFinancialAnnex.convention_number

Le commentaire est mystérieux :

This field is at SiaeFinancialAnnex level and not at SiaeConvention level because one SiaeConvention can have financial annexes with different convention numbers.

La documentation aussi :

  • numéro_de_convention : champ confusant et équivalent au numéro d'AF trouvé dans la Vue AF (exemple 030 010120 ACI 00004).
    • Je propose de l'exploiter aussi au cas où l'utilisateur rentre ce numéro au lieu du numéro d'AF pour retrouver la convention. Ou pas…

=> on ne sait pas ce que c'est => mauvaise analyse ?

Edit : Suppression du champ confusant numéro de convention #464

3) Manque de commentaires

Expliquer SIRET signature dans le code :

Historiquement nous utilisons uniquement le champ SIRET actualisé des structures, qui change dans le temps (déménagements etc) et est maintenu à jour dans la db ITOU grâce aux exports ASP.
Il faut savoir qu'il existe un second champ SIRET, nommé SIRET signature (c a d le SIRET au moment de la signature du conventionnement) qui présente l'avantage d'être immuable. Néanmoins nous ne l'exploitons pas à ce jour

Ajouter les explications sur l'ID d'AF :

Explications sur l'id d'AF :

  • Code mesure conventionnée
  • Département
  • 2 derniers caractères du millésime
  • Numéro d’ordre de l’annexe
    Ex : ACI051170013 (sans espace et sans numéro d'avenant)

4) Simplifier le code relatif à la période de grâce

Je soutiens depuis le début que c'est une mauvaise idée de mélanger is_active et in_grace_period.

La période de grâce concerne uniquement quelques cas spéciaux.

Si j'en crois la dernière version du document d'architecture :

Specs V4 plus souples du 30 octobre 2020

  • Pendant le délai de grâce de Y mois :
    • la SIAE continue à utiliser le service normalement sauf qu'elle a un gros warning sur son dashboard et partout ailleurs lui demandant de contacter le support ASAP pour régulariser sa situation et lui faire savoir qu'après cette date elle perdra l'accès à ses données (candidatures, agréments etc).

La période de grâce ne fait plus qu'une chose : afficher un message dans le tableau de bord.

Donc is_active englobe maintenant is_in_grace_period.

On devrait être en mesure de simplifier tout ce qui touche au QuerySet et aux permissions et ne conserver que is_active partout.

5) Améliorer la liaison SIAE/conventionnement

Postulat de départ : toute SIAE de source ASP est reliée automatiquement à un conventionnement.

Pour les SIAE qui n'existent pas dans le SI ASP et qu'on ne sait pas rattacher à un conventionnement, on propose une interface permettant de sélectionner une AF => l'AF permet de remonter au conventionnement.

Pour être plus user-friendly, proposer d'abord de sélectionner une SIAE de source ASP commençant par le même SIREN => "J'utilise la même convention que cette structure". La relation de filiation est matérialisée par le truchement de la table SiaeConvention.

email lié aux candidatures accept_trigger_approval_body.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/apply/email/accept_trigger_approval_body.txt#L4-L25

Informations pour l'obtention d'un Pass IAE suite à l'embauche de votre candidat via la Plateforme de l'inclusion :

{% trans "Candidat :" %}

  • Nom : {{ job_application.job_seeker.last_name }}
  • Prénom : {{ job_application.job_seeker.first_name }}{% if job_application.job_seeker.email %}
  • Email : {{ job_application.job_seeker.email }}{% endif %}
  • Date de naissance : {{ job_application.job_seeker.birthdate|date:"d/m/Y" }}

{% trans "Employeur solidaire :" %}

  • Siret : {{ job_application.to_siae.siret }}
  • Nom : {{ job_application.to_siae.display_name }}
  • Type : {{ job_application.to_siae.kind }} ({{ job_application.to_siae.get_kind_display }})
  • Département : {{ job_application.to_siae.get_department_display }}
  • Date de début du contrat : {{ job_application.hiring_start_at|date:"d/m/Y" }}{% if job_application.hiring_end_at %}
  • Date de fin du contrat : {{ job_application.hiring_end_at|date:"d/m/Y" }}{% endif %}{% if accepted_by %}
  • Accepté par : {{ accepted_by.get_full_name }} - {{ accepted_by.email }}{% endif %}

Ajouter un numéro d'agrément dans l'admin : ?? Cette phrase semble concerner le dev Itou plutôt que l'utilisateur ??

À bientôt sur la Plateforme de l'inclusion !

CANDIDATURES new_for_job_seeker_body.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/apply/email/new_for_job_seeker_body.txt#L8-L14

{% blocktrans with siae_name=job_application.to_siae.display_name sender=job_application.sender.get_full_name %}
{{ sender }} a envoyé votre candidature chez {{ siae_name }}.
{% endblocktrans %}

Vous et {{ sender }} serez tous les deux informés de l'avancement de cette candidature.

{% else %}
{% blocktrans with siae_name=job_application.to_siae.display_name %}
Candidature chez {{ siae_name }} envoyée avec succès !

Vous et votre candidat serez tous les deux informés de l'avancement de cette candidature.

email lié aux candidatures accept_body.txt

https://github.com/betagouv/itou/blob/8b6602be5bda73600aa4241c34fc4d8ca2896859/itou/templates/apply/email/accept_body.txt#L8-L30

Nous sommes ravis de vous annoncer que la candidature de {{ job_seeker_full_name }}, adressée par {{ sender_full_name }}, a été acceptée par {{ to_siae }}.

{% trans "Message de l'entreprise :" %}

Afin de nous aider à évaluer la performance de notre service, accepteriez-vous de répondre à quelques questions ?
Prenez 30'' pour nous donnez votre avis ! Cliquez sur : {{ survey_link }}

Merci de votre participation et à très bientôt sur la Plateforme !

:faked: Changer certaines bannières infos/alertes par des toasts

📜 Contexte

Résumé du besoin :

  • Réduire le nombre de bannières info/alerte sur l’ensemble de l’interface

Pourquoi ?

  • Trop de bannière annule leur impact pour l’utilisateur. Résultat ils ne lisent plus les messages et ça nuit à l’expérience globale.

Comment répondre à ce besoin ?

  • Transformer certaines bannières qui ont un rôle plutôt de réassurance en toasts.
  • En profiter pour ajuster certains contenus (wording)

🛠Espace production :

Ecran(s) concerné(s)

  • Accueil
  • dashboard
  • siae/job_description_list
  • invitations/invite_siae_staff
  • apply/
  • employee_record/

new_signup_activation_email_to_official_contact_body.txt

https://github.com/betagouv/itou/blob/dedd9a6201e8101ebe58a9db6a86e0b0f02b7a9e/itou/templates/siaes/email/new_signup_activation_email_to_official_contact_body.txt#L6-L23

{% trans "Un nouvel utilisateur souhaite rejoindre votre structure sur la Plateforme de l'inclusion !" %}

{% trans "Structure :" %}

  • {% trans "Nom" %} : {{ siae.display_name }}
  • {% trans "SIRET" %} : {{ siae.siret }}
  • {% trans "Type" %} : {{ siae.kind }}
  • {% trans "Email de contact" %} : {{ siae.auth_email }}

{% trans "Ouvrez le lien suivant pour procéder à l'inscription" %} : {{ signup_magic_link }}

{% trans "Si vous n'êtes pas à l'origine de cette demande, peut-être s'agit-il d'un collaborateur ou d'une collaboratrice. Transférez-lui cet email pour lui permettre de s'inscrire." %}

{% trans "Si vous êtes certain que cette demande n'émane d'aucun de vos collaborateurs ou collaboratrices, vous pouvez simplement ignorer notre e-mail." %}

{% trans "Cet e-mail a été envoyé à" %}
{{ siae.auth_email }}
{% trans "adresse présente pour cette structure dans notre base de données alimentée par les données officielles de l'inclusion (ASP, GEIQ...)." %}

new_signup_warning_email_to_existing_members_body.txt

https://github.com/betagouv/itou/blob/dedd9a6201e8101ebe58a9db6a86e0b0f02b7a9e/itou/templates/prescribers/email/new_signup_warning_email_to_existing_members_body.txt#L6

{% trans "Un nouvel utilisateur vient de rejoindre votre organisation sur la Plateforme de l'inclusion ! Si cette personne n'est pas un collaborateur ou une collaboratrice, il s'agit d'une erreur de rattachement, n'hésitez pas à nous en informer par email :" %} {{ itou_email_contact }}

Looks good!

Tourne parfaitement en local dev au premier essai. Même pas besoin de PR. Congrats @kemar ! 👍

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.