From 8bbcc3b0350a9be3ce333d4684b3a04221d6953d Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Tue, 26 Nov 2013 01:44:22 +0100 Subject: [PATCH] [printing] Affichage des liste de machines et factures sur un proprio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit en même temps, on met une fonction pour lister les adherents. Je ne suis pas trop satisfait de ces fonctions de listing, mais je ne vois pas vraiement comment faire autrement. --- filter2.py | 2 +- printing/templates.py | 69 +++++++++++++++++++++++++++++++++++--- printing/templates/proprio | 4 +++ 3 files changed, 69 insertions(+), 6 deletions(-) diff --git a/filter2.py b/filter2.py index a3302a1..3ba44a3 100644 --- a/filter2.py +++ b/filter2.py @@ -71,4 +71,4 @@ def human_to_list(data): return collapse(toprefix(prioritize(pypexpr().parseString("(%s)" % data).asList()))) def human_to_ldap(data): - return "(%s)" % toldapfilter(human_to_list(data)) + return u"(%s)" % toldapfilter(human_to_list(data)) diff --git a/printing/templates.py b/printing/templates.py index c7391b5..aea47a3 100644 --- a/printing/templates.py +++ b/printing/templates.py @@ -1,8 +1,7 @@ #!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- -from gestion.affich_tools import coul +from gestion.affich_tools import coul, tableau import time - import gestion.whos import gestion.annuaires_pg @@ -32,8 +31,8 @@ def telephone(l): if len(str(t)) == 10: tel.append("%c%c.%c%c.%c%c.%c%c.%c%c" % tuple(map(ord, str(t)))) else: - if t.startswith("00"): - t="+%s" % t[2:] + if str(t).startswith("00"): + t="+%s" % str(t)[2:] tel.append(t) return tel @@ -53,12 +52,46 @@ def template(): templateEnv.filters['timeformat'] = timeformat templateEnv.filters['split'] = split templateEnv.filters['telephone'] = telephone + templateEnv.filters['tableau'] = tableau return templateEnv def machine(machine, params): params['o']=machine return template().get_template("machine").render(params) + +def list_machines(machines): + return tableau([ + [m['mid'][0], m['rid'][0] , str(m['objectClass'][0])[7:], str(m['host'][0]).split('.')[0], + m['ipHostNumber'][0] if m.get('ipHostNumber',[]) else '-', m['macAddress'][0], + m.blacklist_actif()[0] if m.blacklist_actif() else '-'] for m in machines], + titre = [u'mid', u'rid', u'Type', u'Nom de machine', u'Adresse IP', u'Adresse MAC', u'Limitation'], + largeur = [5, 5, 6, '*', 15, 17, 10], + alignement = ['d', 'd', 'c', 'c', 'c', 'c', 'c']) + +def list_factures(factures): + return tableau([ + [f['fid'][0], f['modePaiement'][0], + coul("OK", "vert") if f.get('recuPaiement', []) else coul("NON", "rouge"), + ' '.join(attr['code'] for attr in f.get('article',[])), + u"%s€" % sum([float(a['pu'])*int(a['nombre']) for a in f.get('article',[])]) + ] for f in factures], + titre = [u'fid', u'Mode de paiement', u'Payé', u'Articles', u"Total"], + largeur = [5, 16, 6, '*', 8], + alignement = ['d', 'g', 'c', 'g', 'd']) + +def list_adherents(adherents): + return tableau([ + [a['aid'][0], + u' '.join(unicode(i) for i in a['prenom'] + a['nom']), + a['chbre'][0], coul('o', 'vert') if a.paiement_ok() else coul('n', 'rouge'), + coul('o', 'vert') if a.carte_ok() else coul('n', 'rouge'), + u', '.join(unicode(m['host'][0]).split('.',1)[0] for m in a.machines()) + ] for a in adherents ], + titre = [u'aid', u'Prénom Nom', u'Chbre', u'P', u'C', u'Machines'], + largeur = [5, 35, 5, 1, 1, '*'], + alignement = ['d', 'c', 'c', 'c', 'c', 'g']) + def proprio(proprio, params): params['o']=proprio etat_administratif=[] @@ -71,6 +104,11 @@ def proprio(proprio, params): params['etat_administratif']=etat_administratif if proprio["chbre"][0].value not in ["????", "EXT"]: params['brassage'] = coul("Cr@ns", "bleu") if gestion.annuaires_pg.is_crans(proprio["chbre"][0].value[0], proprio["chbre"][0].value[1:]) else coul("CROUS", "jaune") + + if proprio.machines(): + params['machines']=list_machines(proprio.machines()) + if proprio.factures(): + params['factures']=list_factures(proprio.factures()) return params def club(club, params): @@ -86,8 +124,8 @@ def facture(facture, params): return template().get_template("facture").render(params) def sprint(object, limit=5): - params={'limit':limit} from lc_ldap import objets + params={'limit':limit} if isinstance(object, objets.machine): return machine(object, params) elif isinstance(object, objets.adherent): @@ -100,3 +138,24 @@ def sprint(object, limit=5): return str(object) + +def sprint_list(list): + from lc_ldap import objets + mlist={} + ret=[] + for o in list: + mlist[o.__class__] = mlist.get(o.__class__, []) + [o] + + for classe, list in mlist.items(): + if issubclass(classe, objets.machine): + ret.append(list_machines(list)) + elif issubclass(classe, objets.adherent): + ret.append(list_adherents(list)) + #elif issubclass(classe, objets.club): + # ret.append(list_clubs(list)) + elif issubclass(classe, objets.facture): + ret.append(list_factures(list)) + else: + ret.append("Listes d'objets de classe %s non affichage" % classe.__name__) + return '\n'.join(ret) + diff --git a/printing/templates/proprio b/printing/templates/proprio index cbe3c7f..c552ad2 100644 --- a/printing/templates/proprio +++ b/printing/templates/proprio @@ -9,3 +9,7 @@ {{"Brassage : "|coul('gras')}}{{brassage}} {% endif %} {% include 'blacklist' %} + +{{machines}} + +{{factures}}