Skip to content

Commit

Permalink
refactor(Emails): Bouger la méthode d'ajout à une liste de contact da…
Browse files Browse the repository at this point in the history
…ns les utils (#1102)
  • Loading branch information
raphodn authored Mar 27, 2024
1 parent 6d7230b commit 50cc60e
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 76 deletions.
8 changes: 3 additions & 5 deletions lemarche/utils/apis/api_brevo.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@
from huey.contrib.djhuey import task
from sib_api_v3_sdk.rest import ApiException

from lemarche.siaes.models import Siae
from lemarche.users.models import User
from lemarche.utils.urls import get_object_admin_url, get_object_share_url


Expand All @@ -27,7 +25,7 @@ def get_api_client():
return sib_api_v3_sdk.ApiClient(config)


def create_contact(user: User, list_id: int):
def create_contact(user, list_id: int):
api_client = get_api_client()
api_instance = sib_api_v3_sdk.ContactsApi(api_client)
new_contact = sib_api_v3_sdk.CreateContact(
Expand All @@ -51,7 +49,7 @@ def create_contact(user: User, list_id: int):
logger.error(f"Exception when calling Brevo->ContactsApi->create_contact: {e}")


def remove_contact_from_list(user: User, list_id: int):
def remove_contact_from_list(user, list_id: int):
api_client = get_api_client()
api_instance = sib_api_v3_sdk.ContactsApi(api_client)
contact_emails = sib_api_v3_sdk.RemoveContactFromList(emails=[user.email])
Expand All @@ -67,7 +65,7 @@ def remove_contact_from_list(user: User, list_id: int):
logger.error(f"Exception when calling Brevo->ContactsApi->remove_contact_from_list: {e}")


def create_or_update_company(siae: Siae):
def create_or_update_company(siae):
"""
Brevo docs:
- Python library: https://github.com/sendinblue/APIv3-python-library/blob/master/docs/CompaniesApi.md
Expand Down
7 changes: 2 additions & 5 deletions lemarche/utils/apis/api_hubspot.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,6 @@
from hubspot import Client
from hubspot.crm.contacts import ApiException, SimplePublicObject, SimplePublicObjectInput

from lemarche.tenders.models import Tender
from lemarche.users.models import User


# from huey.contrib.djhuey import task

Expand Down Expand Up @@ -85,7 +82,7 @@ def add_to_contacts(
logger.info("Hubspot: not add contact to the crm (STAGING or TEST environment detected)")


def add_user_to_crm(user: User):
def add_user_to_crm(user):
result = add_to_contacts(
email=user.email,
company=user.company_name,
Expand All @@ -100,7 +97,7 @@ def add_user_to_crm(user: User):


# @task
def create_deal_from_tender(tender: Tender):
def create_deal_from_tender(tender):
tender_author_hubspot_contact_id = tender.author.hubspot_contact_id
if not tender_author_hubspot_contact_id:
user_added_in_crm = add_user_to_crm(tender.author)
Expand Down
25 changes: 24 additions & 1 deletion lemarche/utils/apis/api_mailjet.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
from django.conf import settings
from huey.contrib.djhuey import task

from lemarche.utils.emails import EMAIL_SUBJECT_PREFIX
from lemarche.users import constants as user_constants
from lemarche.utils.constants import EMAIL_SUBJECT_PREFIX


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -34,6 +35,28 @@ def get_default_client(params={}):
return client


def get_mailjet_cl_on_signup(user, source: str = user_constants.SOURCE_SIGNUP_FORM):
if user.kind == user_constants.KIND_SIAE:
return settings.MAILJET_NL_CL_SIAE_ID
elif user.kind == user_constants.KIND_BUYER:
if source == user_constants.SOURCE_SIGNUP_FORM:
return settings.MAILJET_NL_CL_BUYER_ID
elif source == user_constants.SOURCE_TALLY_FORM:
return settings.MAILJET_NL_CL_BUYER_TALLY_ID
elif source == user_constants.SOURCE_TENDER_FORM:
return settings.MAILJET_NL_CL_BUYER_TENDER_ID
elif user.kind == user_constants.KIND_PARTNER:
if user.partner_kind == user_constants.PARTNER_KIND_FACILITATOR:
return settings.MAILJET_NL_CL_PARTNER_FACILITATORS_ID
elif user.partner_kind in (
user_constants.PARTNER_KIND_NETWORD_IAE,
user_constants.PARTNER_KIND_NETWORK_HANDICAP,
):
return settings.MAILJET_NL_CL_PARTNER_NETWORKS_IAE_HANDICAP_ID
elif user.partner_kind == user_constants.PARTNER_KIND_DREETS:
return settings.MAILJET_NL_CL_PARTNER_DREETS_ID


@task()
def add_to_contact_list_async(email_address, properties, contact_list_id, client=None):
"""
Expand Down
6 changes: 6 additions & 0 deletions lemarche/utils/constants.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from django.conf import settings


EMPTY_CHOICE = (("", ""),)

ADMIN_FIELD_HELP_TEXT = "Champ renseigné par un ADMIN"
Expand Down Expand Up @@ -261,3 +264,6 @@ def format_district(post_code, department):
# Could use ordinal from humanize but it would be overkill
number = int(post_code) - (int(department) * 1000)
return "1er" if number == 1 else f"{number}e"


EMAIL_SUBJECT_PREFIX = f"[{settings.BITOUBI_ENV.upper()}] " if settings.BITOUBI_ENV != "prod" else ""
40 changes: 38 additions & 2 deletions lemarche/utils/emails.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
from django.core.mail import send_mail
from huey.contrib.djhuey import task


EMAIL_SUBJECT_PREFIX = f"[{settings.BITOUBI_ENV.upper()}] " if settings.BITOUBI_ENV != "prod" else ""
from lemarche.users import constants as user_constants
from lemarche.utils.apis import api_brevo, api_hubspot, api_mailjet
from lemarche.utils.constants import EMAIL_SUBJECT_PREFIX


def anonymize_email(email):
Expand All @@ -25,6 +26,41 @@ def whitelist_recipient_list(recipient_list):
return [email for email in recipient_list if (email and email.endswith("beta.gouv.fr"))]


def add_to_contact_list(user, type: str, source: str = user_constants.SOURCE_SIGNUP_FORM):
"""Add user to contactlist
Args:
user (User): the user how will be added in the contact list
type (String): "signup", OR "buyer_download" or "buyer_search" else raise ValueError
"""
if type == "signup":
contact_list_id = api_mailjet.get_mailjet_cl_on_signup(user, source)
if user.kind == user.KIND_BUYER:
# TODO: we still use it ?
api_hubspot.add_user_to_crm(user)
api_brevo.create_contact(user=user, list_id=settings.BREVO_CL_SIGNUP_BUYER_ID)
elif type == "buyer_search":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_LIST_ID
elif type == "buyer_search_traiteur":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_TRAITEUR_LIST_ID
elif type == "buyer_search_nettoyage":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_NETTOYAGE_LIST_ID
elif type == "buyer_download":
contact_list_id = settings.MAILJET_NL_CL_BUYER_DOWNLOAD_SIAE_LIST_ID
else:
raise ValueError("type must be defined")
if contact_list_id:
properties = {
"nom": user.last_name.capitalize(),
"prénom": user.first_name.capitalize(),
"pays": "france",
"nomsiae": user.company_name.capitalize() if user.company_name else "",
"poste": user.position.capitalize() if user.position else "",
}

api_mailjet.add_to_contact_list_async(user.email, properties, contact_list_id)


@task()
def send_mail_async(
email_subject,
Expand Down
60 changes: 1 addition & 59 deletions lemarche/www/auth/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode

from lemarche.users import constants as user_constants
from lemarche.users.models import User
from lemarche.utils.apis import api_brevo, api_hubspot, api_mailjet
from lemarche.utils.apis import api_mailjet
from lemarche.utils.emails import send_mail_async, whitelist_recipient_list
from lemarche.utils.urls import get_domain_url

Expand Down Expand Up @@ -61,60 +60,3 @@ def send_new_user_password_reset_link(user: User):
recipient_name=recipient_name,
variables=variables,
)


def get_mailjet_cl_on_signup(user: User, source: str = user_constants.SOURCE_SIGNUP_FORM):
if user.kind == user.KIND_SIAE:
return settings.MAILJET_NL_CL_SIAE_ID
elif user.kind == user.KIND_BUYER:
if source == user_constants.SOURCE_SIGNUP_FORM:
return settings.MAILJET_NL_CL_BUYER_ID
elif source == user_constants.SOURCE_TALLY_FORM:
return settings.MAILJET_NL_CL_BUYER_TALLY_ID
elif source == user_constants.SOURCE_TENDER_FORM:
return settings.MAILJET_NL_CL_BUYER_TENDER_ID
elif user.kind == user.KIND_PARTNER:
if user.partner_kind == user_constants.PARTNER_KIND_FACILITATOR:
return settings.MAILJET_NL_CL_PARTNER_FACILITATORS_ID
elif user.partner_kind in (
user_constants.PARTNER_KIND_NETWORD_IAE,
user_constants.PARTNER_KIND_NETWORK_HANDICAP,
):
return settings.MAILJET_NL_CL_PARTNER_NETWORKS_IAE_HANDICAP_ID
elif user.partner_kind == user_constants.PARTNER_KIND_DREETS:
return settings.MAILJET_NL_CL_PARTNER_DREETS_ID


def add_to_contact_list(user: User, type: str, source: str = user_constants.SOURCE_SIGNUP_FORM):
"""Add user to contactlist
Args:
user (User): the user how will be added in the contact list
type (String): "signup", OR "buyer_download" or "buyer_search" else raise ValueError
"""
if type == "signup":
contact_list_id = get_mailjet_cl_on_signup(user, source)
if user.kind == user.KIND_BUYER:
# TODO: we still use it ?
api_hubspot.add_user_to_crm(user)
api_brevo.create_contact(user=user, list_id=settings.BREVO_CL_SIGNUP_BUYER_ID)
elif type == "buyer_search":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_LIST_ID
elif type == "buyer_search_traiteur":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_TRAITEUR_LIST_ID
elif type == "buyer_search_nettoyage":
contact_list_id = settings.MAILJET_NL_CL_BUYER_SEARCH_SIAE_NETTOYAGE_LIST_ID
elif type == "buyer_download":
contact_list_id = settings.MAILJET_NL_CL_BUYER_DOWNLOAD_SIAE_LIST_ID
else:
raise ValueError("type must be defined")
if contact_list_id:
properties = {
"nom": user.last_name.capitalize(),
"prénom": user.first_name.capitalize(),
"pays": "france",
"nomsiae": user.company_name.capitalize() if user.company_name else "",
"poste": user.position.capitalize() if user.position else "",
}

api_mailjet.add_to_contact_list_async(user.email, properties, contact_list_id)
3 changes: 2 additions & 1 deletion lemarche/www/auth/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@
from django.views.generic import CreateView

from lemarche.users.models import User
from lemarche.utils.emails import add_to_contact_list
from lemarche.utils.urls import get_safe_url
from lemarche.www.auth.forms import LoginForm, PasswordResetForm, SignupForm
from lemarche.www.auth.tasks import add_to_contact_list, send_signup_notification_email
from lemarche.www.auth.tasks import send_signup_notification_email


class LoginView(auth_views.LoginView):
Expand Down
3 changes: 2 additions & 1 deletion lemarche/www/pages/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
from django.core.mail import EmailMessage, send_mail
from django.template.loader import render_to_string

from lemarche.utils.emails import EMAIL_SUBJECT_PREFIX, whitelist_recipient_list
from lemarche.utils.constants import EMAIL_SUBJECT_PREFIX
from lemarche.utils.emails import whitelist_recipient_list


# TODO: make async (celery)
Expand Down
2 changes: 1 addition & 1 deletion lemarche/www/siaes/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@
from lemarche.favorites.models import FavoriteList
from lemarche.siaes.models import Siae
from lemarche.utils.apis import api_elasticsearch
from lemarche.utils.emails import add_to_contact_list
from lemarche.utils.export import export_siae_to_csv, export_siae_to_excel
from lemarche.utils.s3 import API_CONNECTION_DICT
from lemarche.utils.urls import get_domain_url, get_encoded_url_from_params
from lemarche.www.auth.tasks import add_to_contact_list
from lemarche.www.conversations.forms import ContactForm
from lemarche.www.siaes.forms import (
SiaeDownloadForm,
Expand Down
3 changes: 2 additions & 1 deletion lemarche/www/tenders/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
from lemarche.tenders.models import Tender, TenderQuestion
from lemarche.users import constants as user_constants
from lemarche.users.models import User
from lemarche.www.auth.tasks import add_to_contact_list, send_new_user_password_reset_link
from lemarche.utils.emails import add_to_contact_list
from lemarche.www.auth.tasks import send_new_user_password_reset_link


def create_questions_list(tender, questions_list):
Expand Down

0 comments on commit 50cc60e

Please sign in to comment.