Commit 83b9aa12 authored by Nicolas Joyard's avatar Nicolas Joyard

Gestion envoi mails de masse

parent bc0e5b0b
......@@ -2,7 +2,10 @@
from getpass import getpass
import os
import re
import time
from flask import render_template
from flask_mail import Mail, Message
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
......@@ -36,12 +39,101 @@ def clear_cache():
os.unlink(os.path.join(files_root, item))
@manager.command
@manager.option('--envoyer', action='store_true')
def envoyer_emails(envoyer=False):
"""Envoie des e-mails pour tous les parlementaires"""
app.config.update(SQLALCHEMY_ECHO=False)
files_root = os.path.join(app.config['DATA_DIR'], 'files')
mail = Mail(app)
parls = Parlementaire.query.join(Parlementaire.etape) \
.filter(Etape.ordre > ETAPE_NA,
Parlementaire.mails_envoyes == 0) \
.all()
missed_addr = []
missed_email = []
total = 0
if envoyer:
print('')
print('ENVOI POUR DE VRAI dans 5s')
print('')
time.sleep(5)
else:
print('Envoi test, ajouter --envoyer pour le bouton rouge')
for parl in parls:
total += 1
if not parl.adresse:
missed_addr.append(parl.nom_complet)
continue
if not parl.emails:
missed_email.append(parl.nom_complet)
continue
filename = generer_demande(parl, files_root)
sender = ('Regards Citoyens', app.config['ADMIN_EMAIL'])
subject = 'Transparence IRFM - Demande de documents'
body = render_template('courriers/mail_parlementaire.txt.j2',
parlementaire=parl)
if envoyer:
recipients = parl.emails.split(',')
bcc = [app.config['ADMIN_EMAIL']]
else:
subject = '[TEST] %s' % subject
emails = ', '.join(parl.emails.split(','))
body = '[TEST] Destinataires: %s\n\n%s' % (emails, body)
recipients = [app.config['ADMIN_EMAIL']]
bcc = []
msg = Message(subject=subject, body=body, sender=sender,
recipients=recipients, bcc=bcc)
with open(os.path.join(files_root, filename), 'rb') as f:
msg.attach(filename, 'application/pdf', f.read())
print('[%s/%s] Envoi mail à %s (%s)' % (total, len(parls),
parl.nom_complet,
', '.join(recipients)))
mail.send(msg)
if envoyer:
parl.mails_envoyes = 1
db.session.commit()
time.sleep(1)
print('')
if len(missed_addr):
print('Parlementaires sans adresse postale :\n')
print('\n'.join(missed_addr))
else:
print('Aucun parlementaire sans adresse postale :)')
print('')
if len(missed_email):
print('Parlementaires sans adresse mail:\n')
print('\n'.join(missed_email))
else:
print('Aucun parlementaire sans adresse mail :)')
@manager.command
def generer_demandes():
"""Génère les demandes pour tous les parlementaires"""
app.config.update(SQLALCHEMY_ECHO=False)
files_root = os.path.join(app.config['DATA_DIR'], 'files')
files_root = os.path.join(app.config['DATA_DIR'], 'files')
parls = Parlementaire.query.join(Parlementaire.etape) \
.filter(Etape.ordre > ETAPE_NA) \
.all()
......
......@@ -47,3 +47,5 @@ class Parlementaire(db.Model):
etape = db.relationship('Etape', back_populates='parlementaires')
actions = db.relationship('Action', back_populates='parlementaire')
mails_envoyes = db.Column(db.Integer, default=0, server_default='0')
......@@ -114,7 +114,7 @@ def setup_routes(app):
db.session.commit()
subject = 'Transparence IRFM - Envoi d\'une demande de documents'
body = render_template('text/mail_envoi.txt.j2',
body = render_template('courriers/mail_prise_en_charge.txt.j2',
parlementaire=parl)
msg = Message(subject=subject, body=body,
sender=('Regards Citoyens',
......
{{ parlementaire|titre_parlementaire }},
Si cette législature a permis un certain nombre d'avancées positives en matière
de transparence démocratique, un sujet est resté très peu abordé : les frais
représentatifs de mandats (IRFM).
La ligne de Regards Citoyens a toujours été de lutter contre le poujadisme et
d'accompagner les citoyens dans leur compréhension des mécanismes
parlementaires parfois complexes à appréhender d'un regard extérieur. Il nous
apparaît cependant clairement que les comportements déviants de certains
parlementaires accompagnés du manque de transparence pour les autres
parlementaires est l'un des plus gros moteurs de la défiance vis à vis du
Parlement d'un nombre croissant de nos concitoyens. Afin de recréer un lien de
confiance entre les citoyens et le Parlement, nous souhaitons donc contribuer
à apporter de la transparence sur le travail et les moyens du Parlement.
C'est pour cette raison que nous menons, à partir cette semaine, une opération
autour de la transparence des dépenses liées aux frais de mandat en la
demandant pour les 6 derniers mois de la législature aux députés sortants.
D'ici quelques jours, vous recevrez donc une demande d'accès à l'information
concernant les relevés de votre compte dedié à l'IRFM dont vous trouverez copie
en pièce jointe. L'analyse juridique que nous avons menée indique que, ce
compte étant dédié à la dotation budgétaire qui vous est allouée pour mener à
bien votre mandat, il est soumis aux obligations de transparence reconnus par
la constitution et les déclarations des droits de l'Homme.
Cette demande ne résoudra pas les impératifs de contrôle inhérents à toute
dépense publique, mais il nous semble qu'en vue d'avancer sur ce sujet, cela
pourrait constituer une première brique illustrant que les députés peuvent
facilement se plier aux règles de transparence et de bienveillance à l'égard
de leurs administrés.
Nous pensons par ailleurs qu'il s'agit d'une chance de vous démarquer pendant
cette campagne, en faisant acte de transparence dès aujourd'hui.
N'hésitez pas à nous faire parvenir vos remarques ou interrogations.
Bien cordialement,
--
Regards Citoyens
(cet e-mail a été co-rédigé)
"""Ajout champ mails envoyes
Revision ID: f7f34ea0f9c3
Revises: 2cbf8b8a98b2
Create Date: 2017-05-14 20:12:58.541498
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'f7f34ea0f9c3'
down_revision = '2cbf8b8a98b2'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.add_column('parlementaires', sa.Column('mails_envoyes', sa.Integer(), server_default='0', nullable=True))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.drop_column('parlementaires', 'mails_envoyes')
# ### end Alembic commands ###
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment