menage_cableurs.py 3.39 KB
Newer Older
1
#! /usr/bin/env python
2
# -*- coding: utf-8 -*-
3 4 5

import sys

6
# Copyright (C) Stéphane Glondu, Alexandre Bos
7 8
# Licence : GPLv2

9 10
__doc__ = u"""Ce script permet de faire le menages parmis les câbleurs qui ne 
sont plus sur le campus, ie ceux qui ne sont plus à jour de cotisation.
11 12 13 14 15

Utilisation :
%(prog)s {lister|radier} [--debug <adresse>]

Les commandes sont :
16 17
  * lister              afficher la liste des câbleurs succeptibles d'être
                        radiés
18 19 20 21 22 23 24 25 26 27 28 29 30
  * radier              selectionner, parmis eux, les cableurs que l'on 
                        souhaite radier
"""


import sys, os, re
sys.path.append('/usr/scripts/gestion')
import config
from email_tools import send_email, parse_mail_template

# Fonctions d'affichage
from affich_tools import coul, tableau, prompt, cprint

31
# Importation de la base de données
32 33 34 35 36
from ldap_crans import crans_ldap, ann_scol
db = crans_ldap()

def _controle_interactif_adherents(liste):
    """
37
    Demande ce qu'il faut faire à chaque fois
38 39 40 41 42 43
    """

    restant = len(liste)
    if restant == 0:
        return 0, 0
    
44 45 46 47
    cprint(u'\nRadiation des câbleurs fantômes' , '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).")
48 49 50 51 52 53 54 55 56 57 58 59 60
    cprint(u"")
    
    nb = 0
    for a in liste:
        ok = prompt(u'[%3d] %s, %s (%s) ?'
                    % (restant, a.nom(), a.prenom(), a.id()), 'n', '').lower()
        restant -= 1
        if ok == 'o':
            modifiable = db.search('aid=%s' % a.id(), 'w')['adherent'][0]
            if modifiable._modifiable:
                modifiable.droits([])
                cprint(modifiable.save())
            else:
61
                cprint(u'Adhérent %s locké, réessayer plus tard' % modifiable.Nom(), 'rouge')
62
        elif ok != 'n':
63
            cprint(u'Arrêt du contrôle %s des membres actifs' % explicite, 'rouge')
64 65
            break

bos's avatar
Mieux  
bos committed
66
def candidats():
67 68 69
    todo_list1 = db.search('droits=*')['adherent']
    todo_list  = []
    for adh in todo_list1:
bos's avatar
bos committed
70
        if adh.droitsGeles():
71
            todo_list.append(adh)
72
    todo_list.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom())))
bos's avatar
Mieux  
bos committed
73 74 75 76
    return todo_list
    
def lister():
    """
77
    Afficher les câbleurs fantômes potentiels.
bos's avatar
Mieux  
bos committed
78 79
    """
    todo_list = candidats()
80
    print "Liste des câbleur dont la cotisation n'est pas à jour."
81 82 83 84 85 86 87 88
    print
    for adh in todo_list:
        print adh.prenom() + " " + adh.nom()
    print
    print "total : " + str(len(todo_list))
        
def controle_interactif():
    """
89
    Procédure interactive de radiations des câbleurs fantômes.
90
    """
bos's avatar
Mieux  
bos committed
91
    todo_list = candidats()
92 93 94 95 96
    
    # Zou !
    _controle_interactif_adherents(todo_list)
    
def __usage(message=None):
97
    """ Comment ça marche ? """
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

    cprint(__doc__ % { 'prog': sys.argv[0] })
    if message:
        cprint(message)
    sys.exit(1)


if __name__ == '__main__' :
    
    if len(sys.argv) <= 1:
        __usage()
    
    elif sys.argv[1] == 'lister':
        if len(sys.argv) != 2:
            __usage(u'Mauvaise utilisation de lister')
        lister()
    
    elif sys.argv[1] == 'radier':
        if len(sys.argv) != 2:
            __usage(u'Mauvaise utilisation de radier')
        controle_interactif()
    else:
        __usage(u'Commande inconnue : %s' % sys.argv[1])
    
    sys.exit(0)


# pydoc n'aime pas l'unicode :-(