Commit 5499472a authored by glondu's avatar glondu

- 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
parent 63f650cd
......@@ -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 dernire 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 donnes de data et modifie modifs si besoin """
"""
Met jour les donnes 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 reoive 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):
""" Mthodes de bases pour les classes Adherent et Club """
def __init__(self, data=(), mode='', conn=None):
"""
Si data est fourni initialise l'adhrent avec les valeurs donnes
......@@ -2065,6 +2080,29 @@ class Adherent(BaseProprietaire):
# renvoie la valeur trouve dans la base
return bool(self._data.get('rewriteMailHeaders', []))
def derniereConnexion(self, new=False):
"""
Date de dernire connexion. Le format est le nombre de secondes
coules depuis Epoch. Si new est donn, met jour la valeur si
elle est plus rcente.
"""
# si l'adhrent n'a pas de compte, on lve une exception
if not self.compte():
raise NotImplementedError, u"L'adhrent n'a pas de compte"
current = int(self._data.get('derniereConnexion', ['0'])[0])
if new:
# lve 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 dfinition d'un club """
......@@ -2872,14 +2910,14 @@ class BorneWifi(Machine):
On utilise des strings plutt que des floats cause de la prcision.
"""
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:
......
......@@ -48,7 +48,7 @@ except:
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 MachineWifi, BorneWifi
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())))
for a in adhers:
## Etat administratif
## tat administratif
ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\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()))
for c in clubs :
## Etat administratif
## tat administratif
ok = u'\x1b[1;32mo\x1b[1;0m'
ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m'
......@@ -360,10 +360,17 @@ def adher_details(adher) :
except IOError, e:
# Pas de .forward, ou .forward priv... on laisse tomber
pass
f += coul(u'Dernire 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'
# Etat administratif
f += coul(u'Etat administratif : ','gras')
# tat administratif
f += coul(u'tat administratif : ','gras')
jour=1
if ann_scol not in adher.carteEtudiant() :
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'\n'
# Etudes
# tudes
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) )
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) )
# Solde
......@@ -627,8 +634,8 @@ def club_details(club) :
# responsale
f += coul(u'Responsable : ','gras') + "%s\n" % club.responsable().Nom()
# Etat administratif
f += coul(u'Etat administratif : ','gras')
# tat administratif
f += coul(u'tat administratif : ','gras')
jour=1
if ann_scol not in club.paiement() :
if not jour : f += ' et '
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment