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]
@ -56,42 +58,37 @@ def _controle_interactif_adherents(liste):
restant = len(liste)
if restant == 0:
return 0, 0
cprint(u'\nContrôle des membre actifs' , 'cyan')
cprint(u"Pour chaque entrée, il faut taper 'o' ou 'n' (défaut=n).")
cprint(u"Une autre réponse entraîne l'interruption du processus.")
cprint(u"Le format est [nb_restant] Nom, Prénom (aid).")
cprint(u"")
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
@ -113,14 +110,14 @@ def controle_interactif():
Procédure interactive de contrôle des chartes de membres actifs.
"""
todo_list = liste_charte_nok()
# 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)
cprint(u'\nRécapitulatif des nouveaux contrôles :', 'violet')
liste = [[u'membres actifs', str(ok), str(nok)]]
cprint(tableau(liste,
@ -132,20 +129,19 @@ 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 ? """
cprint(__doc__ % { 'prog': sys.argv[0] })
@ -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')