- Nouvelle methode derniereConnexion pour Adherent.

- On verifie que la nouvelle valeur n'est pas nulle dans la methode
   _set de BaseClasseCrans.

darcs-hash:20060520153737-68412-dd0a67b580cd1e23440667a6f8fae697905c7de3.gz
This commit is contained in:
glondu 2006-05-20 17:37:37 +02:00
parent 63f650cd86
commit 5499472a9c
2 changed files with 61 additions and 16 deletions

View file

@ -1031,7 +1031,8 @@ class BaseClasseCrans(CransLdap):
for champ in ['chbre', 'nom', 'prenom', 'mail', 'tel',
'rewriteMailHeaders', 'contourneGreylist',
'puissance', 'canal', 'prise', 'responsable',
'macAddress', 'ipHostNumber', 'host', 'positionBorne']:
'macAddress', 'ipHostNumber', 'host', 'positionBorne',
'derniereConnexion']:
if champ in self.modifs:
if champ not in self._init_data.keys():
valeur_initiale = 'N/A'
@ -1077,6 +1078,13 @@ class BaseClasseCrans(CransLdap):
timestamp = time.localtime()
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur )
if self.modifs.has_key('derniereConnexion'):
# On nettoie l'historique pour ne garder que la dernière modification
# (celle en cours)
self._data['historique'] = [x
for x in self._data['historique']
if 'derniereConnexion' not in x]
# On loggue
try:
@ -1176,7 +1184,10 @@ class BaseClasseCrans(CransLdap):
pass
def _set(self, champ, val, comment=None):
""" Met à jour les données de data et modifie modifs si besoin """
"""
Met à jour les données de _data et modifie modifs si besoin.
Si val=[] ou None, supprime le champ.
"""
# On convertit éventuellement en utf-8 avant
# On n'utilise pas preattr pour éviter de tout casser... mais
# il faudra à l'avenir que _set reçoive toujours en unicode
@ -1188,7 +1199,10 @@ class BaseClasseCrans(CransLdap):
comment = convert(comment)
# On fait le changement et on note s'il y a vraiment eu une modif
if self._data.get(champ, []) != val:
self._data[champ] = val
if val:
self._data[champ] = val
else:
self._data.pop(champ)
if self.modifs.get(champ) == None or comment == None:
self.modifs[champ] = comment
else:
@ -1201,6 +1215,7 @@ class BaseClasseCrans(CransLdap):
class BaseProprietaire(BaseClasseCrans):
""" Méthodes de bases pour les classes Adherent et Club """
def __init__(self, data=(), mode='', conn=None):
"""
Si data est fourni initialise l'adhérent avec les valeurs données
@ -2065,6 +2080,29 @@ class Adherent(BaseProprietaire):
# renvoie la valeur trouvée dans la base
return bool(self._data.get('rewriteMailHeaders', []))
def derniereConnexion(self, new=False):
"""
Date de dernière connexion. Le format est le nombre de secondes
écoulées depuis Epoch. Si new est donné, met à jour la valeur si
elle est plus récente.
"""
# si l'adhérent n'a pas de compte, on lève une exception
if not self.compte():
raise NotImplementedError, u"L'adhérent n'a pas de compte"
current = int(self._data.get('derniereConnexion', ['0'])[0])
if new:
# lève une exception si l'argument n'est pas valide
new = int(new)
if new > current:
self._set('derniereConnexion', [str(new)])
current = new
return current
class Club(BaseProprietaire):
""" Classe de définition d'un club """
@ -2872,14 +2910,14 @@ class BorneWifi(Machine):
On utilise des strings plutôt que des floats à cause de la précision.
"""
if new == False:
valeur = self._data.get('positionBorne',[''])[0]
valeur = self._data.get('positionBorne', [''])[0]
if valeur:
return tuple(valeur.split(' '))
else:
return None
elif new == None:
self._data.pop('positionBorne')
self._set('positionBorne', [])
return None
else: