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