You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
padelclub_backend/tournaments/services/email_service.py

191 lines
7.4 KiB

from django.core.mail import EmailMessage
from django.utils import timezone
from django.urls import reverse
class TournamentEmailService:
@staticmethod
def send_registration_confirmation(request, tournament, team_registration):
waiting_list_position = tournament.get_waiting_list_position()
tournament_details_str = tournament.build_tournament_details_str()
name_str = tournament.build_name_details_str()
email_subject = TournamentEmailService._build_email_subject(
tournament_details_str,
name_str,
waiting_list_position
)
email_body = TournamentEmailService._build_email_body(
request,
tournament,
team_registration,
tournament_details_str,
name_str,
waiting_list_position
)
email = EmailMessage(
subject=email_subject,
body=email_body,
to=[request.user.email]
)
email.send()
@staticmethod
def _build_email_subject(tournament_details_str, name_str, waiting_list_position):
base_subject = f"Confirmation d'inscription au tournoi {tournament_details_str} {name_str}"
if waiting_list_position >= 0:
base_subject = f"En liste d'attente du tournoi {tournament_details_str} {name_str}"
return base_subject
@staticmethod
def _build_email_body(request, tournament, team_registration, tournament_details_str,
name_str, waiting_list_position):
inscription_date = timezone.now().strftime("%d/%m/%Y à %H:%M")
team_members = [player.name() for player in team_registration.playerregistration_set.all()]
team_members_str = " et ".join(team_members)
body_parts = []
body_parts.append("Bonjour,\n")
if waiting_list_position >= 0:
body_parts.append(f"Votre inscription en liste d'attente du tournoi {tournament_details_str} {name_str} est confirmée.")
else:
body_parts.append(f"Votre inscription au tournoi {tournament_details_str} {name_str} est confirmée.")
body_parts.extend([
f"\nDate d'inscription: {inscription_date}",
f"\nÉquipe inscrite: {team_members_str}",
f"\nLe tournoi commencera le {tournament.start_date.strftime('%d/%m/%Y')} au club {tournament.event.club.name}",
f"\nVoir les informations sur {request.build_absolute_uri(f'/tournament/{tournament.id}/')}",
"\nPour toute question, veuillez contacter votre juge-arbitre. Si vous n'êtes pas à l'origine de cette inscription, merci de le contacter rapidement.",
f"\n{tournament.event.creator.full_name()}\n{tournament.event.creator.email}",
"\nCeci est un e-mail automatique, veuillez ne pas y répondre.",
"\nCordialement,\n\nPadel Club"
])
return "\n".join(body_parts)
@staticmethod
def send_unregistration_confirmation(captain, tournament, other_player):
tournament_details_str = tournament.build_tournament_details_str()
name_str = tournament.build_name_details_str()
email_subject = f"Confirmation de désistement du tournoi {tournament_details_str} {name_str}"
email_body = TournamentEmailService._build_unregistration_email_body(
tournament,
captain,
tournament_details_str,
name_str,
other_player
)
email = EmailMessage(
subject=email_subject,
body=email_body,
to=[captain.email]
)
email.send()
if other_player.email is not None:
email_body = TournamentEmailService._build_unregistration_email_body(
tournament,
other_player,
tournament_details_str,
name_str,
captain
)
email = EmailMessage(
subject=email_subject,
body=email_body,
to=[other_player.email]
)
email.send()
@staticmethod
def send_out_of_waiting_list_confirmation(captain, tournament, other_player):
tournament_details_str = tournament.build_tournament_details_str()
name_str = tournament.build_name_details_str()
email_subject = f"Participation au tournoi {tournament_details_str} {name_str}"
email_body = TournamentEmailService._buil_out_of_waiting_list_email_body(
tournament,
captain,
tournament_details_str,
name_str,
other_player
)
email = EmailMessage(
subject=email_subject,
body=email_body,
to=[captain.email]
)
email.send()
if other_player.email is not None:
email_body = TournamentEmailService._buil_out_of_waiting_list_email_body(
tournament,
other_player,
tournament_details_str,
name_str,
captain
)
email = EmailMessage(
subject=email_subject,
body=email_body,
to=[other_player.email]
)
email.send()
@staticmethod
def _build_unregistration_email_body(tournament, captain, tournament_details_str, name_str, other_player):
body_parts = [
"Bonjour,\n",
f"Votre inscription au tournoi {tournament_details_str} {name_str}, prévu le {tournament.start_date.strftime('%d/%m/%Y')} au club {tournament.event.club.name} a été annulée"
]
if other_player is not None:
body_parts.append(
f"\n\nVous étiez inscrit avec {other_player.name()}, n'oubliez pas de prévenir votre partenaire."
)
body_parts.extend([
"\n\nPour toute question, veuillez contacter votre juge-arbitre. "
"Si vous n'êtes pas à l'origine de cette inscription, merci de le contacter rapidement.",
f"\n{tournament.event.creator.full_name()}\n{tournament.event.creator.email}",
"\n\nCeci est un e-mail automatique, veuillez ne pas y répondre."
])
return "".join(body_parts)
@staticmethod
def _buil_out_of_waiting_list_email_body(tournament, captain, tournament_details_str, name_str, other_player):
body_parts = [
"Bonjour,\n",
f"Suite au désistement d'une paire, vous êtes maintenant inscrit au tournoi {tournament_details_str} {name_str}, prévu le {tournament.start_date.strftime('%d/%m/%Y')} au club {tournament.event.club.name}"
]
unregister_url = reverse('tournament:unregister-tournament', args=[tournament.id])
# Make it an absolute URL by adding the domain
absolute_url = f"https://xlr.alwaysdata.net{unregister_url}" # Replace with your domain
if other_player is not None:
body_parts.append(
f"\nVoici le partenaire indiqué dans l'inscription : {other_player.name()}, n'oubliez pas de le prévenir."
)
body_parts.append(
"\nSi vous n'êtes plus disponible pour participer à ce tournoi, cliquez sur ce lien ou contactez rapidement le juge-arbitre."
f"\n{absolute_url}"
)
body_parts.extend([
f"\n\n{tournament.event.creator.full_name()}\n{tournament.event.creator.email}",
"\n\nCeci est un e-mail automatique, veuillez ne pas y répondre."
])
return "".join(body_parts)