#!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- from gestion.affich_tools import coul, tableau import time import sys import gestion.annuaires_pg def prise_etat(chbre): # Il faut écrire une vrai fonction pour ça au lieu d'utiliser celle du vieux whos cf Jeudi28Novembre2013 import gestion.whos if chbre=="????": return coul("Chambre invalide", "violet") return gestion.whos.prise_etat(chbre)[0] def timeformat(t, format): return time.strftime(format, time.localtime(t)) def blacklist(l): bl=[] for b in l: debut=b['debut'] if b['debut'] == '-' else time.strftime("%d/%m/%Y %H:%M", time.localtime(b['debut'])) fin=b['fin'] if b['fin'] == '-' else time.strftime("%d/%m/%Y %H:%M", time.localtime(b['fin'])) couleur='rouge' if b['actif'] else None if debut != '-' and fin !='-': bl.append(coul(u"du %s au %s : %s [%s]" % (debut, fin, b['type'], b['comm']), couleur)) elif debut != '-': bl.append(coul(u"À partir du %s : %s [%s]" % (debut, b['type'], b['comm']), couleur)) elif fin != '-': bl.append(coul(u"Jusqu'au %s : %s [%s]" % (fin, b['type'], b['comm']), couleur)) else: bl.append(coul(u"%s [%s]" % (b['type'], b['comm']), couleur)) return bl def split(str, *arg): return str.split(*arg) def telephone(l): tel=[] for t in 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 str(t).startswith("00"): t="+%s" % str(t)[2:] tel.append(t) return tel templateEnv=None def template(): global templateEnv if not templateEnv: # un import paresseux, comme ça, pas la peine d'installer jinja2 sur les machines où il n'y en a pas besoin import jinja2 template_path = '/usr/scripts/lc_ldap/printing/templates/' templateLoader = jinja2.FileSystemLoader( searchpath=["/", template_path] ) templateEnv = jinja2.Environment( loader=templateLoader, trim_blocks=True ) templateEnv.add_extension('jinja2.ext.do') templateEnv.filters['coul'] = coul templateEnv.filters['blacklist'] = blacklist templateEnv.filters['prise_etat'] = prise_etat 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=[] if proprio.paiement_ok() and proprio.carte_ok(): etat_administratif.append(coul(u"à jour", "vert")) if not proprio.carte_ok(): etat_administratif.append(coul(u"manque carte d'étudiant", "violet")) if not proprio.paiement_ok(): etat_administratif.append(coul(u"cotisation non réglée", "violet")) 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): params=proprio(club, params) return template().get_template("club").render(params) def adherent(adherent, params): params=proprio(adherent, params) return template().get_template("adherent").render(params) def facture(facture, params): params['o']=facture return template().get_template("facture").render(params) def sprint(object, limit=5): from lc_ldap import objets params={'limit':limit} if isinstance(object, objets.machine): return machine(object, params) elif isinstance(object, objets.adherent): return adherent(object, params) elif isinstance(object, objets.club): return club(object, params) elif isinstance(object, objets.facture): return facture(object, params) else: 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)