From c57212cb587fcdfc81cbfc2895f53d373aa3d3f5 Mon Sep 17 00:00:00 2001 From: Michel Blockelet Date: Thu, 2 Oct 2008 10:57:56 +0200 Subject: [PATCH] ressuscite.py: recherche par dates, changement de type darcs-hash:20081002085756-ddb99-0ab825b7852761742c72b4dc0fbbaa962264c5b3.gz --- gestion/ressuscite.py | 68 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/gestion/ressuscite.py b/gestion/ressuscite.py index 687488f0..edde52fc 100755 --- a/gestion/ressuscite.py +++ b/gestion/ressuscite.py @@ -25,6 +25,7 @@ u"""Outil pour ressusciter des machines du cimetière.""" import os, sys import cPickle import dialog +from time import mktime, strptime sys.path.append('/usr/scripts/gestion') from ldap_crans import crans_ldap, MachineFixe, MachineWifi @@ -45,6 +46,7 @@ def menu_principal(): while 1: annul, choix = dlg.menu(u"Que souhaitez vous faire ?", choices=[("A",u"Ressusciter à partir d'un adhérent",u"Rechercher les anciennes machines d'un adhérent"), + ("D",u"Ressusciter à partir de la date",u"Rechercher à partir de la date de suppression de la machine"), ("F",u"Ressusciter à partir d'un fichier",u"Récupérer depuis un fichier du cimetière")], item_help=1,title=u"Ressusciter") if annul: break @@ -68,6 +70,47 @@ def menu_principal(): adh = choixadherent(machine, adh) if not adh: continue ressuscite(adh, machine) + + elif choix == 'D': + # Ressusciter à partir de la date + while 1: + debut = None + fin = None + annul, result = dlg.inputbox(width=54, height=10, + text=u"Entrez la plage de dates de recherche au format\nJJ/MM/AAAA:JJ/MM/AAAA :\n(Une des deux dates peut ne pas être spécifiée.)\n", + title=u"Sélection des dates") + if annul: break + try: + [strdebut, strfin] = result.strip().split(':', 1) + # On teste la validité des dates + # (strptime émet une erreur si le format est mauvais) + if len(strdebut) > 0: + debut = mktime(strptime(strdebut, '%d/%m/%Y')) + if len(strfin) > 0: + fin = mktime(strptime(strfin, '%d/%m/%Y')) + 24*60*60 + break + except: + dlg.msgbox(text=u"Dates invalides",title=u"Sélection des dates") + continue + + # On ne fait la recherche que si on a spécifié une date + # (c'est mieux de ne pas instancier en mémoire toutes les machines) + if debut != None or fin != None: + def condition(machine, date): + ok = True + unixdate = mktime(strptime(date, '%Y-%m-%d-%H:%M')) + if debut != None: ok = (unixdate >= debut) + if fin != None: ok = ok and (unixdate <= fin) + return ok + + choixmachine = choixrecherche(condition) + + if choixmachine != None: + (machine, date) = choixmachine + adh = choixadherent(machine, adh) + if not adh: continue + ressuscite(adh, machine) + elif choix == 'F': # Ressusciter à partir d'un fichier fichier = None @@ -102,7 +145,6 @@ def choixrecherche(condition=None): ("Tous",u"Rechercher les deux types")], title=u"Recherche de machine") if annul: return None - print choix # On cherche les machines machines = recherche(choix == 'Fixe' or choix == 'Tous', @@ -219,13 +261,31 @@ def choixmachine(valid): def ressuscite(adh, oldmachine): """Ressuscite une instance de machine.""" + # On regarde quel type de machine c'était if str(oldmachine.__class__)[-4:] == 'Fixe': - machine = MachineFixe(adh) + strmachine = u"Cette machine était une machine Fixe." + strdef = 'Fixe' elif str(oldmachine.__class__)[-4:] == 'Wifi': - machine = MachineWifi(adh) + strmachine = u"Cette machine était une machine Wifi." + strdef = 'Wifi' else: - # On va quand même créer une machine ... + strmachine = u"L'ancien type de cette machine est inconnu ..." + strdef = '' + + # Certaines fois, on peut vouloir transformer une machine Fixe en Wifi, + # et inversement (erreurs d'ajout ...) + annul, choix = dlg.menu(strmachine, + choices=[("Fixe",u"Ressusciter en tant que machine Fixe"), + ("Wifi",u"Ressusciter en tant que machine Wifi")], + default_item=strdef, + title=u"Nouveau type de machine") + + if annul: return False + + if choix == 'Fixe': machine = MachineFixe(adh) + elif choix == 'Wifi': + machine = MachineWifi(adh) err = ""