Modernisation et reparation de controle charte MA pour le secretaire

This commit is contained in:
Gabriel Detraz 2015-08-22 03:38:35 +02:00
parent 8d250bdc27
commit a2a8538b61
7 changed files with 61 additions and 46 deletions

View file

@ -1,7 +1,8 @@
#! /usr/bin/env python
#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
# Copyright (C) Stéphane Glondu, Alexandre Bos, Michel Blockelet
# Remanié en 2015 par Gabriel Détraz
# Licence : GPLv2
u"""Ce script permet au secrétaire de repérer plus facilement les membres
@ -21,22 +22,23 @@ Les commandes sont :
import sys, os, re
sys.path.append('/usr/scripts/gestion')
import config
import config.mails
from email_tools import send_email, parse_mail_template
# Fonctions d'affichage
from affich_tools import coul, tableau, prompt, cprint
from gestion.affich_tools import coul, tableau, prompt, cprint
from utils.sendmail import actually_sendmail
from gestion import mail
# Importation de la base de données
from ldap_crans import crans_ldap, ann_scol
db = crans_ldap()
from lc_ldap import shortcuts
# Lors des tests, on m'envoie tous les mails !
from socket import gethostname
debug = False
# Conn à la db
ldap = shortcuts.lc_ldap_admin()
if __name__ == '__main__':
if len(sys.argv) > 3 and sys.argv[-2] == '--debug':
debug = sys.argv[-1]
@ -65,33 +67,28 @@ def _controle_interactif_adherents(liste):
nb = 0
for a in liste:
valeur = a.charteMA()
valeur = a['charteMA']
if valeur:
suggestion = 'o'
else:
suggestion = 'n'
ok = prompt(u'[%3d] %s, %s (%s) ?'
% (restant, a.nom(), a.prenom(), a.id()), suggestion, '').lower()
% (restant, a['nom'][0], a['prenom'][0], a['aid'][0]), suggestion, '').lower()
restant -= 1
if ok == 'o':
nb += 1
if a.charteMA() == False :
modifiable = db.search('aid=%s' % a.id(), 'w')['adherent'][0]
if modifiable._modifiable:
modifiable.charteMA(True)
cprint(modifiable.save())
else:
cprint(u'Adhérent %s locké, réessayer plus tard' % modifiable.Nom(), 'rouge')
elif ok == 'n':
if a.charteMA() == True:
modifiable = db.search('aid=%s' % a.id(), 'w')['adherent'][0]
if modifiable._modifiable:
modifiable.charteMA(False)
cprint(modifiable.save())
else:
cprint(u'Adhérent %s locké, réessayer plus tard' % modifiable.Nom(), 'rouge')
else:
cprint(u'Arrêt du contrôle %s des membres actifs' % explicite, 'rouge')
if a['charteMA'] != True :
modifiable = ldap.search(u'aid=%s' % a['aid'][0], mode='rw')
try:
with modifiable[0] as adh:
adh['charteMA']=True
adh.history_gen()
adh.save()
cprint(u'Controle OK')
except:
cprint(u'Adhérent %s locké, réessayer plus tard' % a['nom'][0], 'rouge')
elif ok != 'n':
cprint(u'Arrêt du contrôle des membres actifs', 'rouge')
break
return nb, len(liste)-nb
@ -99,12 +96,12 @@ def _controle_interactif_adherents(liste):
def liste_charte_nok():
"""Retourne la liste des membres actifs qui n'ont pas signé la charte."""
liste_actifs = db.search('droits=*')['adherent']
liste_actifs = ldap.search(u'droits=*')
liste_nok = []
for adh in liste_actifs:
if (len([droit for droit in adh.droits()
if (len([droit for droit in adh['droits']
if droit not in ['Multimachines', 'Webradio']]) > 0
and not adh.charteMA()):
and not adh['charteMA']):
liste_nok.append(adh)
return liste_nok
@ -116,7 +113,7 @@ def controle_interactif():
# Tri de la liste des adhérents selon nom, prénom
# Ça peut se faire plus facilement en Python 2.4 avec l'argument key
todo_list.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom())))
todo_list.sort(lambda x, y: cmp((x['nom'][0], x['prenom'][0]), (y['nom'][0], y['prenom'][0])))
# Zou !
ok, nok = _controle_interactif_adherents(todo_list)
@ -132,19 +129,18 @@ def spammer():
todo_list = liste_charte_nok()
if todo_list:
from smtplib import SMTP
connexion = SMTP()
if gethostname().split(".")[0] == 'redisdead':
connexion.connect("localhost")
else: connexion.connect("redisdead.crans.org")
print "Envoi des mails de rappel pour les chartes des membres actifs"
for adh in todo_list:
to = adh.email()
to = adh['mail'][0]
print to
if not debug:
data = config.mails.txt_charte_MA % {'From' : u"ca@crans.org", 'To' : to}
connexion.sendmail("ca@crans.org",to,data.encode('utf-8'))
From = u"ca@crans.org"
data=mail.generate('missing_charte_MA', {
'To': to,
'From': From,
})
actually_sendmail(u'ca@crans.org', (to,), data)
def __usage(message=None):
""" Comment ça marche ? """
@ -163,7 +159,7 @@ if __name__ == '__main__' :
__usage(u'Mauvaise utilisation de liste')
print "Liste des membres actifs n'ayant pas signé la charte :"
for adh in liste_charte_nok():
print adh.Nom()
print unicode(adh['prenom'][0]) + u" " + unicode(adh['nom'][0])
elif sys.argv[1] == 'modif':
if len(sys.argv) != 2:
__usage(u'Mauvaise utilisation de modif')

View file

@ -0,0 +1 @@
Le bureau du Crans <ca@crans.org>

View file

@ -0,0 +1 @@
Envoyé à l'adhérent lorsque son impression est terminée

View file

@ -0,0 +1 @@
[Crans] Charte membre actif manquante

View file

@ -0,0 +1 @@
{{To}}

View file

@ -0,0 +1 @@
{{ mailer }}

View file

@ -0,0 +1,14 @@
Bonjour,
Il semble que tu es membre actif du CRANS et que tu n'as pas
signé la charte des membres actifs. Si tu n'es pas membre actif
ou si tu as signé la charte des membres actifs, merci de nous le
signaler. Sinon, il faudrait signer la charte et nous la rendre
rapidement. Tu peux l'imprimer à partir du fichier suivant :
https://wiki.crans.org/CransAdministratif?action=AttachFile&do=get&target=charte_ma.pdf
Merci par avance,
--
Le bureau du CRANS