un petit scripts pour calculer les statistiques de cablages.
darcs-hash:20070906033716-7b604-9da418b4f6e8bce90899bf4ad9c0604b8e2dfeec.gz
This commit is contained in:
parent
eecd1d7a97
commit
8315a35478
1 changed files with 137 additions and 0 deletions
137
stats_cableurs.py
Executable file
137
stats_cableurs.py
Executable file
|
@ -0,0 +1,137 @@
|
|||
#!/usr/bin/python
|
||||
# -*- mode: python; coding: utf-8 -*-
|
||||
#
|
||||
# $Id: stats_cableurs.py,v 1.1 2007-09-06 03:37:16 dimino Exp $
|
||||
#
|
||||
# stats_cableurs.py
|
||||
# -----------------
|
||||
#
|
||||
# Copyright (C) 2007 François Bobot <bobot@crans.org>,
|
||||
# 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 sys
|
||||
sys.path.append("/usr/scripts/gestion/")
|
||||
from ldap_crans import crans_ldap
|
||||
from config import ann_scol
|
||||
from affich_tools import cprint
|
||||
import time
|
||||
|
||||
db = crans_ldap()
|
||||
date_debut_ann_scol = time.mktime((ann_scol, 8, 1, 0, 0, 0, 0, 0, 0))
|
||||
paiement_ann_scol = "paiement+%d" % ann_scol
|
||||
|
||||
def donne_cableur(adherent):
|
||||
u""" Cherche le cableur qui a inscrit ou réinscrit un adhérent. """
|
||||
|
||||
cableur = None
|
||||
# Est-ce qu'on recherche une inscription ou une reinscription?
|
||||
if adherent.dateInscription() < date_debut_ann_scol:
|
||||
action = 'reinscription'
|
||||
action_filtre = paiement_ann_scol
|
||||
else:
|
||||
action = 'inscription'
|
||||
action_filtre = 'inscription'
|
||||
|
||||
for hist in adherent.historique():
|
||||
# On decoupe pour avoir un truc utilisable
|
||||
champ = hist.replace(',', '').replace(': ', '').split(' ')
|
||||
# On inspecte la date
|
||||
date = champ[0].split('/')
|
||||
if int(date[1]) in [8, 9, 10] and int(date[2]) == ann_scol:
|
||||
# Maintenant on regarde si l'action recherchee est ici
|
||||
if action_filtre in champ[3:]:
|
||||
return action, champ[2]
|
||||
|
||||
return action, None
|
||||
|
||||
def calcul_score():
|
||||
u""" Calcul le score de tous les cableurs ayant inscrit ou
|
||||
réinscrit quelqu'un pour l'année en cours. """
|
||||
|
||||
liste = db.search("paiement=2007")['adherent']
|
||||
|
||||
score = {}
|
||||
for adherent in liste:
|
||||
action, cableur = donne_cableur(adherent)
|
||||
if cableur:
|
||||
if not score.has_key(cableur):
|
||||
score[cableur] = { 'inscription': 0,
|
||||
'reinscription': 0 }
|
||||
score[cableur][action] += 1
|
||||
|
||||
# On calcul le score total pour chaque cableur
|
||||
for s in score.values():
|
||||
s['total'] = s['inscription'] + s['reinscription']
|
||||
|
||||
return score
|
||||
|
||||
def classe(score={}):
|
||||
u""" Retourne la liste des câbleurs classé par score total décroisant. """
|
||||
cableurs = score.keys()
|
||||
cableurs.sort(lambda x,y : cmp(score[x]['total'],score[y]['total']), reverse=True)
|
||||
return cableurs
|
||||
|
||||
if __name__ == "__main__":
|
||||
score = calcul_score()
|
||||
classement = classe(score)
|
||||
|
||||
# On cherche les noms des câbleurs parceque c'est quand même mieux
|
||||
nom_reel = {}
|
||||
for cableur in classement:
|
||||
nom_reel[cableur] =db.search('uid=%s' % cableur)['adherent'][0].Nom()
|
||||
|
||||
# Calcul des statistiques
|
||||
total_inscription = 0
|
||||
total_reinscription = 0
|
||||
total = 0
|
||||
for s in score.values():
|
||||
total_inscription += s['inscription']
|
||||
total_reinscription += s['reinscription']
|
||||
total += s['total']
|
||||
cprint(u"""Statistiques globales:
|
||||
- inscriptions: %(inscription)d
|
||||
- réinscription: %(reinscription)d
|
||||
- total: %(total)d
|
||||
|
||||
""" % { 'inscription': total_inscription,
|
||||
'reinscription': total_reinscription,
|
||||
'total': total }, newline=False)
|
||||
|
||||
# Calcul la longueur du nom le plus long
|
||||
long_max = reduce(lambda m,c : max(m, len(c)), nom_reel.values(), len('cableur'))
|
||||
|
||||
colonnes = [('inscription', u'inscription'),
|
||||
('reinscription', u'réinscription'),
|
||||
('total', u'score total')]
|
||||
|
||||
# Titres des colonnes
|
||||
ligne = "%-*s" % (long_max, u'câbleur')
|
||||
for type, nom in colonnes:
|
||||
ligne += " | %s" % nom
|
||||
cprint(ligne)
|
||||
# Ligne pour délimiter
|
||||
ligne = ''.center(long_max, '-')
|
||||
for type, nom in colonnes:
|
||||
ligne += "-+-%s" % ''.center(len(nom), '-')
|
||||
cprint(ligne)
|
||||
# Statiqtiques par câbleur
|
||||
for cableur in classement:
|
||||
score_cableur = score[cableur]
|
||||
ligne = "%-*s" % (long_max, nom_reel[cableur])
|
||||
for type, nom in colonnes:
|
||||
ligne += " | %*d" % (len(nom), score_cableur[type])
|
||||
cprint(ligne)
|
Loading…
Add table
Add a link
Reference in a new issue