Send mails
This commit is contained in:
parent
c9b198cd3d
commit
f9dc0e57ad
|
@ -1,6 +1,8 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from django.core.mail import send_mail
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
@ -201,6 +203,15 @@ class Team(models.Model):
|
||||||
verbose_name_plural = _("teams")
|
verbose_name_plural = _("teams")
|
||||||
unique_together = (('name', 'year',), ('trigram', 'year',),)
|
unique_together = (('name', 'year',), ('trigram', 'year',),)
|
||||||
|
|
||||||
|
def send_mail(self, template_name, subject="Contact TFJM²", **kwargs):
|
||||||
|
context = kwargs
|
||||||
|
context["team"] = self
|
||||||
|
for user in self.users.all():
|
||||||
|
context["user"] = user
|
||||||
|
message = render_to_string("mail_templates/" + template_name + ".txt", context=context)
|
||||||
|
message_html = render_to_string("mail_templates/" + template_name + ".html", context=context)
|
||||||
|
send_mail(subject, message, "contact@tfjm.org", [user.email], html_message=message_html)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.trigram + " -- " + self.name
|
return self.trigram + " -- " + self.name
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.urls import path
|
||||||
|
|
||||||
from .views import TournamentListView, TournamentCreateView, TournamentDetailView, TournamentUpdateView, \
|
from .views import TournamentListView, TournamentCreateView, TournamentDetailView, TournamentUpdateView, \
|
||||||
TeamDetailView, TeamUpdateView, AddOrganizerView, SolutionsView, SolutionsOrgaListView, SynthesesView, \
|
TeamDetailView, TeamUpdateView, AddOrganizerView, SolutionsView, SolutionsOrgaListView, SynthesesView, \
|
||||||
SynthesesOrgaListView, PoolListView, PoolCreateView, PoolDetailView, PoolEndpoint
|
SynthesesOrgaListView, PoolListView, PoolCreateView, PoolDetailView
|
||||||
|
|
||||||
app_name = "tournament"
|
app_name = "tournament"
|
||||||
|
|
||||||
|
@ -20,6 +20,5 @@ urlpatterns = [
|
||||||
path("all_syntheses/", SynthesesOrgaListView.as_view(), name="all_syntheses"),
|
path("all_syntheses/", SynthesesOrgaListView.as_view(), name="all_syntheses"),
|
||||||
path("pools/", PoolListView.as_view(), name="pools"),
|
path("pools/", PoolListView.as_view(), name="pools"),
|
||||||
path("pool/add/", PoolCreateView.as_view(), name="create_pool"),
|
path("pool/add/", PoolCreateView.as_view(), name="create_pool"),
|
||||||
path("pool/add/endpoint/", PoolEndpoint.as_view(), name="create_pool_endpoint"),
|
|
||||||
path("pool/<int:pk>/", PoolDetailView.as_view(), name="pool_detail"),
|
path("pool/<int:pk>/", PoolDetailView.as_view(), name="pool_detail"),
|
||||||
]
|
]
|
||||||
|
|
|
@ -11,15 +11,12 @@ from django.shortcuts import redirect
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.urls import reverse_lazy
|
from django.urls import reverse_lazy
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.decorators import method_decorator
|
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.views import View
|
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
|
||||||
from django.views.generic import DetailView, CreateView, UpdateView
|
from django.views.generic import DetailView, CreateView, UpdateView
|
||||||
from django.views.generic.edit import BaseFormView
|
from django.views.generic.edit import BaseFormView
|
||||||
from django_tables2.views import SingleTableView
|
from django_tables2.views import SingleTableView
|
||||||
|
|
||||||
from member.models import TFJMUser, Solution, Synthesis
|
from member.models import TFJMUser, Solution, Synthesis
|
||||||
|
|
||||||
from .forms import TournamentForm, OrganizerForm, SolutionForm, SynthesisForm, TeamForm, PoolForm
|
from .forms import TournamentForm, OrganizerForm, SolutionForm, SynthesisForm, TeamForm, PoolForm
|
||||||
from .models import Tournament, Team, Pool
|
from .models import Tournament, Team, Pool
|
||||||
from .tables import TournamentTable, TeamTable, SolutionTable, SynthesisTable, PoolTable
|
from .tables import TournamentTable, TeamTable, SolutionTable, SynthesisTable, PoolTable
|
||||||
|
@ -145,17 +142,17 @@ class TeamDetailView(LoginRequiredMixin, DetailView):
|
||||||
elif "request_validation" in request.POST and request.user.participates:
|
elif "request_validation" in request.POST and request.user.participates:
|
||||||
team.validation_status = "1waiting"
|
team.validation_status = "1waiting"
|
||||||
team.save()
|
team.save()
|
||||||
# TODO Send mail
|
team.send_mail("request_validation", "Demande de validation TFJM²")
|
||||||
return redirect('tournament:team_detail', pk=team.pk)
|
return redirect('tournament:team_detail', pk=team.pk)
|
||||||
elif "validate" in request.POST and request.user.organizes:
|
elif "validate" in request.POST and request.user.organizes:
|
||||||
team.validation_status = "2valid"
|
team.validation_status = "2valid"
|
||||||
team.save()
|
team.save()
|
||||||
# TODO Send mail
|
team.send_mail("validate_team", "Équipe validée TFJM²")
|
||||||
return redirect('tournament:team_detail', pk=team.pk)
|
return redirect('tournament:team_detail', pk=team.pk)
|
||||||
elif "invalidate" in request.POST and request.user.organizes:
|
elif "invalidate" in request.POST and request.user.organizes:
|
||||||
team.validation_status = "0invalid"
|
team.validation_status = "0invalid"
|
||||||
team.save()
|
team.save()
|
||||||
# TODO Send mail
|
team.send_mail("unvalidate_team", "Équipe non validée TFJM²")
|
||||||
return redirect('tournament:team_detail', pk=team.pk)
|
return redirect('tournament:team_detail', pk=team.pk)
|
||||||
elif "delete" in request.POST and request.user.organizes:
|
elif "delete" in request.POST and request.user.organizes:
|
||||||
team.delete()
|
team.delete()
|
||||||
|
@ -485,11 +482,3 @@ class PoolDetailView(LoginRequiredMixin, DetailView):
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
return self.get(request, *args, **kwargs)
|
return self.get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
@method_decorator(csrf_exempt, 'dispatch')
|
|
||||||
class PoolEndpoint(View):
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
print(request.headers)
|
|
||||||
print(request.user)
|
|
||||||
print(self.request.POST)
|
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
<title>Demande de validation - TFJM²</title>
|
<title>Demande de validation - TFJM²</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
Bonjour {FIRST_NAME} {SURNAME},<br />
|
Bonjour {{ user }},<br />
|
||||||
<br />
|
<br />
|
||||||
L'équipe « {TEAM_NAME} » ({TRIGRAM}) vient de demander à valider son équipe pour participer au tournoi {TOURNAMENT} du
|
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer au tournoi
|
||||||
TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
{{ tournament }} du TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
||||||
<a href="{URL_BASE}/equipe/{TRIGRAM}">{URL_BASE}/equipe/{TRIGRAM}</a><br/>
|
<a href="{% url "tournament:team_detail" pk=team.pk %}">{% url "tournament:team_detail" pk=team.pk %}</a><br/>
|
||||||
<br/>
|
<br/>
|
||||||
Cordialement,<br/>
|
Cordialement,<br/>
|
||||||
<br />
|
<br />
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
Bonjour {{ user }},
|
||||||
|
|
||||||
|
L'équipe « {{ team.name }} » ({{ team.trigram }}) vient de demander à valider son équipe pour participer au tournoi
|
||||||
|
{{ tournament }} du TFJM². Vous pouvez décider d'accepter ou de refuser l'équipe en vous rendant sur la page de l'équipe :
|
||||||
|
<a href="{% url "tournament:team_detail" pk=team.pk %}">{% url "tournament:team_detail" pk=team.pk %}</a>
|
||||||
|
|
||||||
|
Cordialement,
|
||||||
|
|
||||||
|
Le comité national d'organisation du TFJM²
|
|
@ -2,15 +2,22 @@
|
||||||
<html lang="fr">
|
<html lang="fr">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>Équipe non validée – TFJM² {YEAR}</title>
|
<title>Équipe non validée – TFJM²</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
Bonjour {FIRST_NAME} {SURNAME},<br/>
|
Bonjour {{ user }},<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Maleureusement, votre équipe « {TEAM_NAME} » ({TRIGRAM}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
|
Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
|
||||||
{MESSAGE}<br />
|
{% if message %}
|
||||||
|
<p>
|
||||||
|
Le CNO vous adresse le message suivant :
|
||||||
|
<div>
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
<br />
|
<br />
|
||||||
N'hésitez pas à nous contacter à l'adresse <a href="contact@tfjm.org">contact@tfjm.org</a> pour plus d'informations.
|
N'hésitez pas à nous contacter à l'adresse <a href="mailto:contact@tfjm.org">contact@tfjm.org</a> pour plus d'informations.
|
||||||
<br/>
|
<br/>
|
||||||
Cordialement,<br/>
|
Cordialement,<br/>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
Bonjour {{ user }},
|
||||||
|
|
||||||
|
Maleureusement, votre équipe « {{ team.name }} » ({{ team.trigram }}) n'a pas été validée. Veuillez vérifier que vos autorisations sont correctes.
|
||||||
|
|
||||||
|
{% if message %}
|
||||||
|
Le CNO vous adresse le message suivant :
|
||||||
|
|
||||||
|
{{ message }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
N'hésitez pas à nous contacter à l'adresse contact@tfjm.org pour plus d'informations.
|
||||||
|
|
||||||
|
Cordialement,
|
||||||
|
|
||||||
|
Le comité national d'organisation du TFJM²
|
|
@ -9,7 +9,14 @@ Bonjour {{ user }},<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
|
Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
|
||||||
vos problèmes et publier vos solutions sur la plateforme.
|
vos problèmes et publier vos solutions sur la plateforme.
|
||||||
{{ message }}<br />
|
{% if message %}
|
||||||
|
<p>
|
||||||
|
Le CNO vous adresse le message suivant :
|
||||||
|
<div>
|
||||||
|
{{ message }}
|
||||||
|
</div>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
<br/>
|
<br/>
|
||||||
Cordialement,<br/>
|
Cordialement,<br/>
|
||||||
<br/>
|
<br/>
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
Bonjour {{ user }},
|
||||||
|
|
||||||
|
Félicitations ! Votre équipe « {{ team }} » ({{ team.trigram }}) est désormais validée ! Vous êtes désormais apte à travailler sur
|
||||||
|
vos problèmes et publier vos solutions sur la plateforme.
|
||||||
|
|
||||||
|
{% if message %}
|
||||||
|
Le CNO vous adresse le message suivant :
|
||||||
|
{{ message }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
Cordialement,
|
||||||
|
|
||||||
|
Le comité national d'organisation du TFJM²
|
Loading…
Reference in New Issue