ressuscite.py: recherche par dates, changement de type

darcs-hash:20081002085756-ddb99-0ab825b7852761742c72b4dc0fbbaa962264c5b3.gz
This commit is contained in:
Michel Blockelet 2008-10-02 10:57:56 +02:00
parent 1ff889beda
commit c57212cb58

View file

@ -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 = ""