- 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', for champ in ['chbre', 'nom', 'prenom', 'mail', 'tel',
'rewriteMailHeaders', 'contourneGreylist', 'rewriteMailHeaders', 'contourneGreylist',
'puissance', 'canal', 'prise', 'responsable', 'puissance', 'canal', 'prise', 'responsable',
'macAddress', 'ipHostNumber', 'host', 'positionBorne']: 'macAddress', 'ipHostNumber', 'host', 'positionBorne',
'derniereConnexion']:
if champ in self.modifs: if champ in self.modifs:
if champ not in self._init_data.keys(): if champ not in self._init_data.keys():
valeur_initiale = 'N/A' valeur_initiale = 'N/A'
@ -1078,6 +1079,13 @@ class BaseClasseCrans(CransLdap):
timestamp = time.localtime() timestamp = time.localtime()
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur ) 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 # On loggue
try: try:
fd = file('%s/%s_%s_%s' % ("%s/logs" % config.cimetiere, str(self.__class__).split('.')[-1], fd = file('%s/%s_%s_%s' % ("%s/logs" % config.cimetiere, str(self.__class__).split('.')[-1],
@ -1176,7 +1184,10 @@ class BaseClasseCrans(CransLdap):
pass pass
def _set(self, champ, val, comment=None): 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 convertit éventuellement en utf-8 avant
# On n'utilise pas preattr pour éviter de tout casser... mais # On n'utilise pas preattr pour éviter de tout casser... mais
# il faudra à l'avenir que _set reçoive toujours en unicode # il faudra à l'avenir que _set reçoive toujours en unicode
@ -1188,7 +1199,10 @@ class BaseClasseCrans(CransLdap):
comment = convert(comment) comment = convert(comment)
# On fait le changement et on note s'il y a vraiment eu une modif # On fait le changement et on note s'il y a vraiment eu une modif
if self._data.get(champ, []) != val: 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: if self.modifs.get(champ) == None or comment == None:
self.modifs[champ] = comment self.modifs[champ] = comment
else: else:
@ -1201,6 +1215,7 @@ class BaseClasseCrans(CransLdap):
class BaseProprietaire(BaseClasseCrans): class BaseProprietaire(BaseClasseCrans):
""" Méthodes de bases pour les classes Adherent et Club """ """ Méthodes de bases pour les classes Adherent et Club """
def __init__(self, data=(), mode='', conn=None): def __init__(self, data=(), mode='', conn=None):
""" """
Si data est fourni initialise l'adhérent avec les valeurs données Si data est fourni initialise l'adhérent avec les valeurs données
@ -2066,6 +2081,29 @@ class Adherent(BaseProprietaire):
# renvoie la valeur trouvée dans la base # renvoie la valeur trouvée dans la base
return bool(self._data.get('rewriteMailHeaders', [])) 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): class Club(BaseProprietaire):
""" Classe de définition d'un club """ """ Classe de définition d'un club """
idn = 'cid' idn = 'cid'
@ -2872,14 +2910,14 @@ class BorneWifi(Machine):
On utilise des strings plutôt que des floats à cause de la précision. On utilise des strings plutôt que des floats à cause de la précision.
""" """
if new == False: if new == False:
valeur = self._data.get('positionBorne',[''])[0] valeur = self._data.get('positionBorne', [''])[0]
if valeur: if valeur:
return tuple(valeur.split(' ')) return tuple(valeur.split(' '))
else: else:
return None return None
elif new == None: elif new == None:
self._data.pop('positionBorne') self._set('positionBorne', [])
return None return None
else: else:

View file

@ -48,7 +48,7 @@ except:
base = None base = None
from time import strftime, localtime from time import strftime, localtime, time
from ldap_crans import is_actif, crans_ldap, ann_scol, AssociationCrans, hostname from ldap_crans import is_actif, crans_ldap, ann_scol, AssociationCrans, hostname
from ldap_crans import MachineWifi, BorneWifi from ldap_crans import MachineWifi, BorneWifi
from affich_tools import * from affich_tools import *
@ -114,7 +114,7 @@ def adhers_brief(adhers) :
adhers.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom()))) adhers.sort(lambda x, y: cmp((x.nom(), x.prenom()), (y.nom(), y.prenom())))
for a in adhers: for a in adhers:
## Etat administratif ## État administratif
ok = u'\x1b[1;32mo\x1b[1;0m' ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\x1b[1;0m' ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m' nok = u'\x1b[1;31mn\x1b[1;0m'
@ -205,7 +205,7 @@ def clubs_brief(clubs) :
clubs.sort(lambda x, y: cmp(x.Nom(), y.Nom())) clubs.sort(lambda x, y: cmp(x.Nom(), y.Nom()))
for c in clubs : for c in clubs :
## Etat administratif ## État administratif
ok = u'\x1b[1;32mo\x1b[1;0m' ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\x1b[1;0m' ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m' nok = u'\x1b[1;31mn\x1b[1;0m'
@ -360,10 +360,17 @@ def adher_details(adher) :
except IOError, e: except IOError, e:
# Pas de .forward, ou .forward privé... on laisse tomber # Pas de .forward, ou .forward privé... on laisse tomber
pass pass
f += coul(u'Dernière connexion : ', 'gras')
timestamp = adher.derniereConnexion()
if timestamp == 0:
f += coul(u'Jamais', 'rouge')
else:
f += coul(strftime('%d/%m/%Y %H:%M', localtime(timestamp)),
time()-timestamp > 32*24*3600 and 'rouge' or '')
f += u'\n'
# État administratif
# Etat administratif f += coul(u'État administratif : ','gras')
f += coul(u'Etat administratif : ','gras')
jour=1 jour=1
if ann_scol not in adher.carteEtudiant() : if ann_scol not in adher.carteEtudiant() :
f += coul(u"manque carte d'étudiant",'violet') f += coul(u"manque carte d'étudiant",'violet')
@ -406,12 +413,12 @@ def adher_details(adher) :
f += u'(%s)' % prise_etat(adher.chbre()) f += u'(%s)' % prise_etat(adher.chbre())
f += u'\n' f += u'\n'
# Etudes # Études
if adher.etudes(1).isdigit() : if adher.etudes(1).isdigit() :
f += coul(u'Etudes : ','gras')+ "%s %s%s\n" % \ f += coul(u'Études : ','gras')+ "%s %s%s\n" % \
( adher.etudes(0), adher.etudes(1), adher.etudes(2) ) ( adher.etudes(0), adher.etudes(1), adher.etudes(2) )
elif adher.etudes(0) : elif adher.etudes(0) :
f += coul(u'Etudes : ','gras')+ "%s %s %s\n" % \ f += coul(u'Études : ','gras')+ "%s %s %s\n" % \
( adher.etudes(0), adher.etudes(1), adher.etudes(2) ) ( adher.etudes(0), adher.etudes(1), adher.etudes(2) )
# Solde # Solde
@ -627,8 +634,8 @@ def club_details(club) :
# responsale # responsale
f += coul(u'Responsable : ','gras') + "%s\n" % club.responsable().Nom() f += coul(u'Responsable : ','gras') + "%s\n" % club.responsable().Nom()
# Etat administratif # État administratif
f += coul(u'Etat administratif : ','gras') f += coul(u'État administratif : ','gras')
jour=1 jour=1
if ann_scol not in club.paiement() : if ann_scol not in club.paiement() :
if not jour : f += ' et ' if not jour : f += ' et '