Cpm
/
gvot
bifurqué depuis cliss21/gvot
1
0
Bifurcation 0

feat(mailling): ajout du filtrage des destinataires

master
François Poulain 2021-03-04 23:41:25 +01:00 commité par Cliss XXI - dev
Parent 1b8a88f002
révision ac2bfedf01
4 fichiers modifiés avec 59 ajouts et 3 suppressions

Voir le fichier

@ -26,6 +26,18 @@ class MaillingForm(forms.Form):
],
)
filter_key = forms.ChoiceField(
choices=(),
required=False,
help_text="Filtre optionnellement les pouvoirs dont "
"le champ personnalisé désigné est égal à :",
)
filter_val = forms.CharField(
required=False,
max_length=255,
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@ -43,6 +55,21 @@ class MaillingForm(forms.Form):
for scrutin in Scrutin.objects.live().public()
]
self.fields['filter_key'].choices = [
(None, "Filtrez selon un champ personnalisé")
] + [
(
scrutin.title,
[
(chp, "{} : {}".format(scrutin, chp))
for chp in scrutin.pouvoir_set.values_list(
'champ_perso__intitule', flat=True
).distinct()
],
)
for scrutin in Scrutin.objects.live().public()
]
class MaillingSingleForm(forms.Form):
"""

Voir le fichier

@ -136,6 +136,8 @@ class MaillingIndex(FormInvalidMixin, FormView):
# save data in session
self.request.session['dests'] = form.cleaned_data['dests']
self.request.session['template_id'] = form.cleaned_data['template'].id
self.request.session['filter_key'] = form.cleaned_data['filter_key']
self.request.session['filter_val'] = form.cleaned_data['filter_val']
return super().form_valid(form)
def get_error_message(self):
@ -151,6 +153,8 @@ class MaillingConfirm(FormInvalidMixin, FormView):
super().setup(request, *args, **kwargs)
self.dests = self.request.session.get('dests', None)
self.template_id = self.request.session.get('template_id', None)
self.filter_key = self.request.session.get('filter_key', None)
self.filter_val = self.request.session.get('filter_val', None)
def dispatch(self, request, *args, **kwargs):
if (
@ -169,6 +173,12 @@ class MaillingConfirm(FormInvalidMixin, FormView):
elif self.dests == 'abstenus':
self.qs = pouvoirs.filter(vote__isnull=True)
if self.filter_key:
self.qs = pouvoirs.filter(
champ_perso__intitule=self.filter_key,
champ_perso__contenu=self.filter_val,
).distinct()
return super().dispatch(request, *args, **kwargs)
def form_valid(self, form):
@ -192,6 +202,8 @@ class MaillingConfirm(FormInvalidMixin, FormView):
context['dests'] = "tous les participants ayant voté"
elif self.dests == 'abstenus':
context['dests'] = "tous les participants n'ayant pas encore voté"
context['filter_key'] = self.filter_key
context['filter_val'] = self.filter_val
context['preview'] = dict(
zip(
['subject', 'txt', 'html'],

Voir le fichier

@ -12,9 +12,10 @@
<h2>Résumé</h2>
<p>
Vous êtes sur le point d'envoyer un mailing à <strong>{{ dests }}</strong> au scrutin « {{ scrutin.title }} ».
Vous êtes sur le point d'envoyer un mailing à <strong>{{ dests }}</strong> au scrutin « {{ scrutin.title }} »{% if filter_key %}
dont le champ « <i>{{ filter_key }}</i> » est égal à « <i>{{ filter_val }}</i> »{% endif %}.
</p>
<div class="help-block help-info">
<div class="help-block {% if nb %}help-info{% else %}help-critical{% endif %}">
Cette action va engendrer une file de <strong>{{ nb }}</strong> courriel{{ nb | pluralize }}.
</div>
<hr>

Voir le fichier

@ -24,7 +24,8 @@
</fieldset>
</div>
</div>
</li><li class="object required file_field">
</li>
<li class="object required file_field">
<div class="title-wrapper">
<label for="id_destinataires">
Destinataires
@ -38,6 +39,21 @@
</div>
</div>
</li>
<li class="object file_field">
<div class="title-wrapper">
<label for="id_destinataires">
Filtrage supplémentaire
</label>
</div>
<div class="object-layout">
<div class="object-layout_big-part">
<fieldset>
{% include "wagtailadmin/shared/field_as_li.html" with field=form.filter_key show_label=False %}
{% include "wagtailadmin/shared/field_as_li.html" with field=form.filter_val show_label=False %}
</fieldset>
</div>
</div>
</li>
</ul>
{% endblock %}