Skip to content

Commit

Permalink
feat(invitation_email): add conditionnal rendering for new template
Browse files Browse the repository at this point in the history
  • Loading branch information
gaspard-lonchampt committed Dec 4, 2024
1 parent 6b4cac3 commit 9110671
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 85 deletions.
24 changes: 8 additions & 16 deletions app/domain/company.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from sqlalchemy import exists, and_
from sqlalchemy import func, or_
from sqlalchemy.sql.functions import now
from sqlalchemy.orm import joinedload

from app import db
from app.helpers.mail_type import EmailType
Expand Down Expand Up @@ -367,34 +368,25 @@ def find_admins_still_without_invitations(
def find_employee_for_invitation(
first_employee_invitation_date, companies_to_exclude=None
):

return (
db.session.query(
Employment.id,
Employment.creation_time,
Employment.has_admin_rights,
Employment.user_id,
Employment.company_id,
)
db.session.query(Employment)
.options(joinedload(Employment.company))
.join(Email, Email.employment_id == Employment.id)
.filter(
Email.type == EmailType.INVITATION,
Email.user_id.is_(None),
Employment.creation_time
Email.creation_time
<= datetime.datetime.combine(
first_employee_invitation_date,
datetime.datetime.max.time(),
),
Employment.has_admin_rights == False,
Employment.user_id.is_(None),
Employment.company_id.notin_(companies_to_exclude or []),
Employment.validation_status
== EmploymentRequestValidationStatus.PENDING,
)
.with_entities(
Employment.id,
Employment.creation_time,
Employment.has_admin_rights,
Employment.user_id,
Employment.company_id,
)
.yield_per(100)
.yield_per(1000)
.all()
)
21 changes: 16 additions & 5 deletions app/helpers/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,9 @@ def remove_email_from_contact_list(self, email, contact_list):
email, contact_list, action=MailjetSubscriptionActions.REMOVE
)

def generate_employee_invite(self, employment, reminder=False):
def generate_employee_invite(
self, employment, reminder=False, scheduled_reminder=False
):
if not employment.invite_token:
raise ValueError(
f"Cannot send invite for employment {employment} : it is already bound to a user"
Expand All @@ -379,10 +381,14 @@ def generate_employee_invite(self, employment, reminder=False):
invitation_link = f"{app.config['FRONTEND_URL']}/invite?token={employment.invite_token}"

company_name = employment.company.name
subject = f"{'Rappel : ' if reminder else ''}{company_name} vous invite à rejoindre Mobilic."
subject = (
f"{'Rappel : Urgent ! ' if scheduled_reminder else ''}"
f"{'Rappel : ' if reminder else ''}"
f"Votre entreprise {company_name} vous invite à rejoindre Mobilic."
)

return Mailer._create_message_from_flask_template(
"invitation_email.html",
template="invitation_email.html",
subject=subject,
type_=EmailType.INVITATION,
recipient=employment.user.email
Expand All @@ -395,6 +401,7 @@ def generate_employee_invite(self, employment, reminder=False):
invitation_link=Markup(invitation_link),
company_name=company_name,
reminder=reminder,
scheduled_reminder=scheduled_reminder,
)

def send_employee_invite(self, employment, reminder=False):
Expand All @@ -403,9 +410,13 @@ def send_employee_invite(self, employment, reminder=False):
_disable_commit=True,
)

def batch_send_employee_invites(self, employments, reminder=False):
def batch_send_employee_invites(
self, employments, reminder=False, scheduled_reminder=False
):
messages = [
self.generate_employee_invite(e, reminder=reminder)
self.generate_employee_invite(
e, reminder=reminder, scheduled_reminder=scheduled_reminder
)
for e in employments
]
self.send_batch(messages, _disable_commit=True)
Expand Down
4 changes: 3 additions & 1 deletion app/jobs/emails/bizdev/send_invitation_emails.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@ def send_invitation_emails(today):

if employments:
try:
mailer.batch_send_employee_invites(employments, reminder=True)
mailer.batch_send_employee_invites(
employments, reminder=False, scheduled_reminder=True
)
app.logger.info(f"Emails sent for {len(employments)} employments.")
except Exception as e:
app.logger.error("Error during batch email sending.")
Expand Down
40 changes: 20 additions & 20 deletions app/templates/invitation_email.html
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@
{% extends "transactional_base.html" %}
{% import 'button.html' as button %}

{% block subject %}
{{ company_name }} vous invite à rejoindre Mobilic
{% endblock %}

{% block body %}
<p>Bonjour{% if first_name %} {{first_name | capitalize}}{% endif %},</p>
{% if not first_name %}
<p>Bonjour{% if first_name %} {{ first_name | capitalize }}{% endif %},</p>
{% if scheduled_reminder %}
<p>L'entreprise <strong>{{ company_name | upper }}</strong> vous rappelle que vous avez été invité à créer votre compte
sur <strong>Mobilic</strong>, l'outil numérique pour suivre et protéger vos droits en tant que salarié.</p>
<p>Grâce à <strong>Mobilic</strong>, vous pourrez facilement :</p>
<ul>
<li>Enregistrer vos heures de travail en toute simplicité</li>
<li>Assurer le respect de vos droits au quotidien</li>
</ul>
<p><strong>Il vous suffit de quelques clics pour activer votre compte et être prêt(e) à l'utiliser ! </strong></p>
<p>Cliquez sur le bouton ci-dessous pour créer votre compte ou l'associer à <strong>{{ company_name | upper }}</strong> :</p>
{{ button.button('Activer mon compte', invitation_link) }}
<p><strong>Petit rappel important :</strong> L’enregistrement de votre temps de travail via Mobilic ou le livret
individuel de contrôle (LIC) est obligatoire dans votre secteur.</p>
<p>À très bientôt sur Mobilic !</p>
{% else %}
<p>
{% if reminder %}
L'entreprise <strong>{{company_name | upper}}</strong> vous rappelle que vous avez été invité
L'entreprise <strong>{{ company_name | upper }}</strong> vous rappelle que vous avez été invité
{% else %}
Vous avez été invité(e) par l’entreprise <strong>{{company_name | upper}}</strong>
Vous avez été invité(e) par l’entreprise <strong>{{ company_name | upper }}</strong>
{% endif %} à créer un compte Mobilic pour enregistrer votre temps de travail.</p>
<p>Mobilic est la plateforme gouvernementale qui simplifie <strong>l'enregistrement et le suivi du temps de travail</strong> des travailleurs mobiles du transport routier léger et du déménagement.</p>
<p>Pour créer votre compte ou rattacher votre compte existant à l'entreprise <strong>{{company_name | upper}}</strong> cliquez sur le bouton d'activation suivant :</p>
{{button.button('Activer mon compte', invitation_link)}}
{% else %}
<p>
{% if reminder %}
L'entreprise <strong>{{company_name | upper}}</strong> vous rappelle que vous avez été invité à la rejoindre
{% else %}
Vous avez été invité(e) à rejoindre l'entreprise <strong>{{company_name | upper}}</strong>
{% endif %} sur Mobilic.
</p>
<p>Pour rattacher votre compte à l'entreprise <strong>{{company_name | upper}}</strong> cliquez sur le bouton d'activation suivant :</p>
{{button.button('Activer mon compte', invitation_link)}}
<p>Pour créer votre compte ou rattacher votre compte existant à l'entreprise <strong>{{ company_name | upper }}</strong> cliquez sur le bouton d'activation suivant :</p>
{{ button.button('Activer mon compte', invitation_link) }}
{% endif %}
<p>Bien à vous,</p>
{% endblock %}
43 changes: 0 additions & 43 deletions app/tests/bizdev/test_find_employee_for_invitation.py

This file was deleted.

0 comments on commit 9110671

Please sign in to comment.