Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
site-kwei
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mediatek
site-kwei
Commits
16adaf63
Commit
16adaf63
authored
4 years ago
by
Dorian Lesbre
Browse files
Options
Downloads
Patches
Plain Diff
Working mass emails
parent
c6154168
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
home/models.py
+2
-1
2 additions, 1 deletion
home/models.py
home/templates/admin.html
+5
-1
5 additions, 1 deletion
home/templates/admin.html
home/urls.py
+1
-0
1 addition, 0 deletions
home/urls.py
home/views.py
+82
-19
82 additions, 19 deletions
home/views.py
with
90 additions
and
21 deletions
home/models.py
+
2
−
1
View file @
16adaf63
...
@@ -128,7 +128,8 @@ class InterludesParticipant(models.Model):
...
@@ -128,7 +128,8 @@ class InterludesParticipant(models.Model):
# mug = models.BooleanField("commander une tasse", default=False)
# mug = models.BooleanField("commander une tasse", default=False)
def
__str__
(
self
)
->
str
:
def
__str__
(
self
)
->
str
:
return
"
{} {} ({})
"
.
format
(
self
.
user
.
first_name
,
self
.
user
.
last_name
,
self
.
school
)
school
=
self
.
ENS
(
self
.
school
).
label
.
replace
(
"
ENS
"
,
""
)
if
self
.
school
else
""
return
"
{} {} ({})
"
.
format
(
self
.
user
.
first_name
,
self
.
user
.
last_name
,
school
)
@property
@property
def
nb_meals
(
self
)
->
int
:
def
nb_meals
(
self
)
->
int
:
...
...
This diff is collapsed.
Click to expand it.
home/templates/admin.html
+
5
−
1
View file @
16adaf63
...
@@ -142,7 +142,7 @@
...
@@ -142,7 +142,7 @@
if
(
confirm
(
if
(
confirm
(
`
${
errors
}
Cette action va envoyer {{ orga_email_nb }} emails.\nÊtes-vous sur de vouloir continuer ?`
`
${
errors
}
Cette action va envoyer {{ orga_email_nb }} emails.\nÊtes-vous sur de vouloir continuer ?`
))
))
window
.
location
=
"
{% url '
home
' %}
"
;
window
.
location
=
"
{% url '
email_orgas
' %}
"
;
}
}
{
%
endif
%
}
{
%
endif
%
}
</script>
</script>
...
@@ -152,11 +152,15 @@
...
@@ -152,11 +152,15 @@
<p>
Un email communiquant la répartition aux utilisateurs a déjà été envoyé.
<p>
Un email communiquant la répartition aux utilisateurs a déjà été envoyé.
(Modifiez les paramètres s'il faut en renvoyer un)
(Modifiez les paramètres s'il faut en renvoyer un)
</p>
</p>
{% else %}
<p>
L'email aux inscrits enverra un email à tous les utilisateurs inscrits
</p>
{% endif %}
{% endif %}
{% if settings.orga_notified %}
{% if settings.orga_notified %}
<p>
Un email communiquant les inscrits aux organisateur à déjà été envoyé.
<p>
Un email communiquant les inscrits aux organisateur à déjà été envoyé.
(Modifiez les paramètres s'il faut en renvoyer un)
(Modifiez les paramètres s'il faut en renvoyer un)
</p>
</p>
{% else %}
<p>
L'email aux orga enverra un email uniquement aux orgas des activités qui ont demandé de communiquer la liste de participants.
</p>
{% endif %}
{% endif %}
<div
class=
"flex wrap"
>
<div
class=
"flex wrap"
>
...
...
This diff is collapsed.
Click to expand it.
home/urls.py
+
1
−
0
View file @
16adaf63
...
@@ -18,6 +18,7 @@ urlpatterns = [
...
@@ -18,6 +18,7 @@ urlpatterns = [
path
(
'
export/participants/
'
,
views
.
ExportParticipants
.
as_view
(),
name
=
"
participants.csv
"
),
path
(
'
export/participants/
'
,
views
.
ExportParticipants
.
as_view
(),
name
=
"
participants.csv
"
),
path
(
'
export/activity_choices/
'
,
views
.
ExportActivityChoices
.
as_view
(),
name
=
"
activity_choices.csv
"
),
path
(
'
export/activity_choices/
'
,
views
.
ExportActivityChoices
.
as_view
(),
name
=
"
activity_choices.csv
"
),
path
(
'
email/send_user_emails_0564946523/
'
,
views
.
SendUserEmail
.
as_view
(),
name
=
"
email_users
"
),
path
(
'
email/send_user_emails_0564946523/
'
,
views
.
SendUserEmail
.
as_view
(),
name
=
"
email_users
"
),
path
(
'
email/send_orga_emails_5682480453/
'
,
views
.
SendOrgaEmail
.
as_view
(),
name
=
"
email_orgas
"
),
path
(
path
(
'
sitemap.xml
'
,
sitemap
,
{
'
sitemaps
'
:
sitemaps
},
'
sitemap.xml
'
,
sitemap
,
{
'
sitemaps
'
:
sitemaps
},
name
=
'
django.contrib.sitemaps.views.sitemap
'
name
=
'
django.contrib.sitemaps.views.sitemap
'
...
...
This diff is collapsed.
Click to expand it.
home/views.py
+
82
−
19
View file @
16adaf63
from
datetime
import
timedelta
from
datetime
import
timedelta
from
django.conf
import
settings
from
django.contrib
import
messages
from
django.contrib
import
messages
from
django.contrib.auth.mixins
import
LoginRequiredMixin
from
django.contrib.auth.mixins
import
LoginRequiredMixin
from
django.contrib.sitemaps
import
Sitemap
from
django.contrib.sitemaps
import
Sitemap
...
@@ -252,9 +251,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
...
@@ -252,9 +251,7 @@ class AdminView(SuperuserRequiredMixin, TemplateView):
validations
+=
self
.
validate_activity_conflicts
()
validations
+=
self
.
validate_activity_conflicts
()
validations
+=
'
</ul>
'
validations
+=
'
</ul>
'
user_email_nb
=
ActivityList
.
objects
.
filter
(
user_email_nb
=
InterludesParticipant
.
objects
.
filter
(
is_registered
=
True
).
count
()
participant__is_registered
=
True
).
values
(
"
participant
"
).
distinct
().
count
()
orga_email_nb
=
InterludesActivity
.
objects
.
filter
(
orga_email_nb
=
InterludesActivity
.
objects
.
filter
(
display
=
True
,
must_subscribe
=
True
,
communicate_participants
=
True
display
=
True
,
must_subscribe
=
True
,
communicate_participants
=
True
).
count
()
).
count
()
...
@@ -321,26 +318,40 @@ class ExportActivityChoices(SuperuserRequiredMixin, CSVWriteView):
...
@@ -321,26 +318,40 @@ class ExportActivityChoices(SuperuserRequiredMixin, CSVWriteView):
])
])
return
rows
return
rows
class
Send
User
Email
(
SuperuserRequiredMixin
,
RedirectView
):
class
SendEmail
Base
(
SuperuserRequiredMixin
,
RedirectView
):
"""
Envoie aux utilisate
ur
s
l
eur repartition d
'
activité
"""
"""
Classe abstraite po
ur l
'
envoie d
'
un groupe d
'
emails
"""
pattern_name
=
"
site_admin
"
pattern_name
=
"
site_admin
"
from_address
=
settings
.
DEFAULT_FROM_EMAIL
from_address
=
None
def
send_emails
(
self
):
raise
NotImplementedError
(
"
{}.send_emails isn
'
t implemented
"
.
format
(
self
.
__class__
.
__name__
))
def
get_redirect_url
(
self
,
*
args
,
**
kwargs
):
self
.
send_emails
()
return
reverse
(
self
.
pattern_name
)
class
SendUserEmail
(
SendEmailBase
):
"""
Envoie aux utilisateurs leur repartition d
'
activité
"""
def
get_emails
(
self
):
def
get_emails
(
self
):
"""
genere les mails a envoyer
"""
"""
genere les mails a envoyer
"""
# on envoie qu'au participant qui se sont inscrit à des activites
# on envoie qu'au participant qui se sont inscrit à des activites
participants
=
ActivityList
.
objects
.
filter
(
participants
=
InterludesParticipant
.
objects
.
filter
(
is_registered
=
True
)
participant__is_registered
=
True
).
values
(
"
participant
"
).
distinct
()
emails
=
[]
emails
=
[]
for
p
in
participants
:
settings
=
SiteSettings
.
load
()
participant
=
InterludesParticipant
.
objects
.
get
(
id
=
p
[
"
participant
"
])
for
participant
in
participants
:
messages
=
render_to
my_activities
=
ActivityList
.
objects
.
filter
(
participant
=
participant
)
message
=
render_to_string
(
"
email/user.html
"
,
{
"
user
"
:
participant
.
user
,
"
settings
"
:
settings
,
"
requested_activities_nb
"
:
my_activities
.
count
(),
"
activities
"
:
my_activities
.
filter
(
accepted
=
True
),
})
emails
.
append
((
emails
.
append
((
"
Vos activités interludes
"
,
# subject
"
Vos activités interludes
"
,
# subject
message
,
message
,
self
.
from_address
,
# From:
self
.
from_address
,
# From:
[
participant
.
user
.
email
]
# To:
[
participant
.
user
.
email
]
,
# To:
))
))
return
emails
return
emails
...
@@ -351,12 +362,64 @@ class SendUserEmail(SuperuserRequiredMixin, RedirectView):
...
@@ -351,12 +362,64 @@ class SendUserEmail(SuperuserRequiredMixin, RedirectView):
return
return
settings
.
user_notified
=
True
settings
.
user_notified
=
True
settings
.
save
()
settings
.
save
()
messages
.
success
(
self
.
request
,
"
Email aux utilisateurs envoyé
"
)
emails
=
self
.
get_emails
()
send
nb_sent
=
send_mass_mail
(
emails
,
fail_silently
=
False
)
mail_admins
(
"
Emails de répartition envoyés aux participants
"
,
"
Les participants ont reçu un mail leur communiquant la répartition des activités
\n
"
"
Nombre total de mail envoyés: {}
\n\n
"
"
-- Site Interludes (mail généré automatiquement
"
.
format
(
nb_sent
)
)
messages
.
success
(
self
.
request
,
"
{} mails envoyés aux utilisateurs
"
.
format
(
nb_sent
))
class
SendOrgaEmail
(
SendEmailBase
):
"""
Envoie aux organisateur leur communiquant les nom/mail des inscrits
à leurs activités
"""
def
get_emails
(
self
):
"""
genere les mails a envoyer
"""
# on envoie qu'au participant qui se sont inscrit à des activites
activities
=
InterludesActivity
.
objects
.
filter
(
must_subscribe
=
True
,
display
=
True
,
communicate_participants
=
True
)
emails
=
[]
settings
=
SiteSettings
.
load
()
for
act
in
activities
:
participants
=
ActivityList
.
objects
.
filter
(
activity
=
act
,
accepted
=
True
)
message
=
render_to_string
(
"
email/orga.html
"
,
{
"
activity
"
:
act
,
"
settings
"
:
settings
,
"
participants
"
:
participants
,
})
emails
.
append
((
"
Vos activités interludes
"
,
# subject
message
,
self
.
from_address
,
# From:
[
act
.
host_email
]
# To:
))
return
emails
def
send_emails
(
self
):
settings
=
SiteSettings
.
load
()
if
settings
.
orga_notified
:
messages
.
error
(
self
.
request
,
"
Les orgas ont déjà reçu un mail avec leur listes d
'
inscrits. Modifiez les réglages pour en envoyer un autre
"
)
return
settings
.
orga_notified
=
True
settings
.
save
()
emails
=
self
.
get_emails
()
nb_sent
=
send_mass_mail
(
emails
,
fail_silently
=
False
)
mail_admins
(
"
Listes d
'
inscrits envoyés aux orgas
"
,
"
Les mails communiquant aux organisateurs leur listes d
'
inscrit ont été envoyés
\n
"
"
Nombre total de mail envoyés: {}
\n\n
"
"
-- Site Interludes (mail généré automatiquement
"
.
format
(
nb_sent
)
)
messages
.
success
(
self
.
request
,
"
{} mails envoyés aux orgas
"
.
format
(
nb_sent
))
def
get_redirect_url
(
self
,
*
args
,
**
kwargs
):
self
.
send_emails
()
return
reverse
(
self
.
pattern_name
)
# ==============================
# ==============================
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment