c'est un script que j'avais fais quand j'etais tresorier.
darcs-hash:20071105203238-7b604-860dadd32ce353857615c82fde1aadee4eefdd31.gz
This commit is contained in:
parent
4ab8ac23dc
commit
cc1577f42b
1 changed files with 278 additions and 0 deletions
278
admin/controle_tresorier2.py
Executable file
278
admin/controle_tresorier2.py
Executable file
|
@ -0,0 +1,278 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# $Id: controle_tresorier2.py,v 1.1 2007-11-05 20:32:38 dimino Exp $
|
||||
#
|
||||
# tresorier.py
|
||||
# ------------
|
||||
#
|
||||
# Copyright (C) 2007 Jeremie Dimino <jeremie@dimino.org>
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This file is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA.
|
||||
|
||||
|
||||
import os, sys
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
|
||||
from ldap_crans import crans_ldap
|
||||
from config import ann_scol
|
||||
import dialog, time, config, re
|
||||
|
||||
db = crans_ldap()
|
||||
|
||||
# Détermination de l'uid du câbleur
|
||||
from user_tests import getuser
|
||||
uid = getuser()
|
||||
if not uid :
|
||||
print "Impossible de determiner l'utilisateur !"
|
||||
sys.exit(1)
|
||||
cableur = db.search('uid=%s' % uid)['adherent'][0]
|
||||
|
||||
# Vérification des droits
|
||||
if u'Tresorier' not in cableur.droits():
|
||||
print "Il faut etre tresorier pour executer ce script !"
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
dlg = dialog.Dialog()
|
||||
dlg.setBackgroundTitle('Tresorerie')
|
||||
encoding = sys.stdin.encoding or 'ISO-8859-15'
|
||||
|
||||
########################################################################
|
||||
# Retrait des accents
|
||||
#
|
||||
|
||||
_unaccent_dict = {u'Æ': u'AE', u'æ': u'ae', u'Œ': u'OE', u'œ': u'oe', u'ß': 'ss'}
|
||||
_re_latin_letter = re.compile(r"^(LATIN [A-Z]+ LETTER [A-Z]+) WITH")
|
||||
def unaccent(string):
|
||||
"""Remove accents ``string``."""
|
||||
result = []
|
||||
for char in string:
|
||||
if char in _unaccent_dict:
|
||||
char = _unaccent_dict[char]
|
||||
else:
|
||||
try:
|
||||
name = unicodedata.name(char)
|
||||
match = _re_latin_letter.search(name)
|
||||
if match:
|
||||
char = unicodedata.lookup(match.group(1))
|
||||
except:
|
||||
pass
|
||||
result.append(char)
|
||||
return "".join(result)
|
||||
|
||||
########################################################################
|
||||
# Ajoute un cheque a la liste
|
||||
#
|
||||
|
||||
_civilite = [ "M", "MLLE", "MME" ]
|
||||
_banque = [("CIC", u"CiC"),
|
||||
("BNP", u"BNP"),
|
||||
("BP", u"Banque Populaire"),
|
||||
("CA", u"Crédit Agricole"),
|
||||
("CE", u"Caisse d'Épargne"),
|
||||
("CL", u"Crédit Lyonnais"),
|
||||
("CM", u"Crédit Mutuel"),
|
||||
("CN", u"Crédit du Nord"),
|
||||
("HSBC", u"HSBC"),
|
||||
("LBP", u"La Banque Postale"),
|
||||
("LCL", u"Le Crédit Lyonnais"),
|
||||
("LP", u"La Poste"),
|
||||
("SG", u"Société Générale")]
|
||||
_banque.sort()
|
||||
_banque.insert(0, ("Autre", u"Éspèces"))
|
||||
def add_cheque(adh):
|
||||
annul, result = dlg.menu(u"Banque", choices = _banque)
|
||||
if annul: return False
|
||||
|
||||
banque = result
|
||||
if banque == "Autre":
|
||||
return True
|
||||
|
||||
annul, result = dlg.menu(u"Civilité",
|
||||
choices=[("1", u"Monsieur"),
|
||||
("2", u"Mademoiselle"),
|
||||
("3", u"Madame")])
|
||||
if annul: return False
|
||||
|
||||
civilite = _civilite[int(result)-1]
|
||||
|
||||
|
||||
line = '%s %s %s' % (civilite, unaccent(adh.Nom()).upper(), banque)
|
||||
|
||||
annul, line = dlg.inputbox(u"Vérification de l'émetteur du chèque", init=line)
|
||||
|
||||
f = open("%s/remise_cheques" % os.getenv("HOME"), 'a')
|
||||
f.write('%s\n' % line)
|
||||
f.close()
|
||||
return True
|
||||
|
||||
########################################################################
|
||||
# Menu de sélection des adhérents
|
||||
#
|
||||
|
||||
def main_menu():
|
||||
while True:
|
||||
|
||||
annul, result = dlg.checklist(u"Choisissez les adhérents à inclure dans la liste",
|
||||
choices=[("1", u'Nouveaux adhérents', 1),
|
||||
("2", u'Réadhésion', 0),
|
||||
("3", u'Clubs', 0)])
|
||||
|
||||
if annul:
|
||||
return
|
||||
|
||||
# Construction de la liste des adhérents à contrôler
|
||||
search_result = db.search('paiement=%d&controle!=p' % ann_scol)
|
||||
lst = search_result['adherent']
|
||||
if "3" in result:
|
||||
for club in search_result['club']:
|
||||
lst.append(club)
|
||||
|
||||
# Filtre si on ne veut pas des réadhesion
|
||||
if not "2" in result:
|
||||
# Date de début de la nouvelle année
|
||||
start_date = time.mktime((ann_scol, 8, 1, 0, 0, 0, 0, 0, 0))
|
||||
for adh in lst:
|
||||
if adh.dateInscription() < start_date:
|
||||
lst.remove(adh)
|
||||
|
||||
|
||||
adherent_menu(lst)
|
||||
|
||||
|
||||
########################################################################
|
||||
# Liste des adhérents
|
||||
#
|
||||
|
||||
def adherent_menu(lst):
|
||||
|
||||
nom_adh = {}
|
||||
adhs = []
|
||||
for adh in lst:
|
||||
disp = ('%s %s' % (adh.nom(), adh.prenom())).encode(encoding)
|
||||
adhs.append((disp, ''))
|
||||
nom_adh[disp] = adh
|
||||
|
||||
adhs.sort()
|
||||
|
||||
while True:
|
||||
annul, result = dlg.menu(u'Liste des adhérents', choices=adhs)
|
||||
|
||||
if annul:
|
||||
return
|
||||
|
||||
adh = nom_adh[result]
|
||||
|
||||
if admin_menu(adh):
|
||||
adhs.remove((result, ''))
|
||||
|
||||
|
||||
########################################################################
|
||||
# Controle d'un adhérent (repompé de gest_crans.py)
|
||||
#
|
||||
|
||||
def on_off(cond):
|
||||
if cond:
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def admin_menu(adh):
|
||||
|
||||
# Le proprietaire a-t-il une section carte d'étudiant (pas les clubs) ?
|
||||
has_card = adh.idn != 'cid'
|
||||
|
||||
# Initialisation des différentes checkbox
|
||||
carte = on_off(ann_scol in adh.carteEtudiant())
|
||||
paiement = on_off(ann_scol in adh.paiement())
|
||||
precab = on_off(ann_scol + 1 in adh.paiement())
|
||||
caution = on_off('k' in adh.controle())
|
||||
paiement_ok = on_off('p' in adh.controle())
|
||||
carte_ok = on_off('c' in adh.controle())
|
||||
|
||||
# Construction de la boîte de dialogue
|
||||
texte = []
|
||||
checklist = []
|
||||
|
||||
if has_card:
|
||||
checklist.append(("1", u"Carte d'étudiant %d/%d fournie" % (ann_scol, ann_scol+1), carte))
|
||||
|
||||
checklist.append(("2", u"Cotisation %d/%d réglée et charte signée" % (ann_scol, ann_scol+1), paiement))
|
||||
|
||||
# TODO: controle pour le précâblage
|
||||
if config.precab:
|
||||
checklist.append(("3", u"Adhésion %d/%d réglée et charte signée (précâblage)" % (ann_scol+1, ann_scol+2), precab))
|
||||
|
||||
if has_card:
|
||||
checklist.append(("4", u"Carte d\'étudiant vérifiée", carte_ok))
|
||||
checklist.append(("5", u"Cotisation/charte/caution vérifées", paiement_ok))
|
||||
|
||||
annul, result = dlg.checklist(u"Etat administratif de %s" % adh.Nom(),
|
||||
choices=checklist)
|
||||
if annul:
|
||||
return False
|
||||
|
||||
modif = False
|
||||
# On cherche s'il y a des modifs
|
||||
for tag, item, state in checklist:
|
||||
if (tag in result) ^ state:
|
||||
modif = True
|
||||
|
||||
if not modif:
|
||||
return False
|
||||
|
||||
adh = db.search('aid=%s' % adh.id(), 'w')['adherent'][0]
|
||||
|
||||
# Traitement
|
||||
if has_card:
|
||||
if '1' in result:
|
||||
adh.carteEtudiant(ann_scol)
|
||||
elif carte_ok:
|
||||
adh.carteEtudiant(-ann_scol)
|
||||
if '4' in result:
|
||||
adh.controle('+c')
|
||||
else:
|
||||
adh.controle('-c')
|
||||
|
||||
if '2' in result and ann_scol not in adh.paiement():
|
||||
adh.paiement(ann_scol)
|
||||
elif '2' not in result and paiement_ok:
|
||||
adh.paiement(-ann_scol)
|
||||
|
||||
if '3' in result:
|
||||
adh.paiement(ann_scol+1)
|
||||
elif paiement_ok:
|
||||
adh.paiement(-ann_scol-1)
|
||||
|
||||
if '5' in result:
|
||||
adh.controle('+p')
|
||||
else:
|
||||
adh.controle('-p')
|
||||
|
||||
if 'C' in result:
|
||||
adh.controle('+k')
|
||||
else:
|
||||
adh.controle('-k')
|
||||
|
||||
if not paiement_ok and "5" in result:
|
||||
#if add_cheque(adh):
|
||||
adh.save()
|
||||
#else:
|
||||
# return False
|
||||
|
||||
return True
|
||||
|
||||
main_menu()
|
Loading…
Add table
Add a link
Reference in a new issue