- 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:
parent
63f650cd86
commit
5499472a9c
2 changed files with 61 additions and 16 deletions
|
@ -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'
|
||||
|
@ -1078,6 +1079,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:
|
||||
fd = file('%s/%s_%s_%s' % ("%s/logs" % config.cimetiere, str(self.__class__).split('.')[-1],
|
||||
|
@ -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
|
||||
|
@ -2066,6 +2081,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 """
|
||||
idn = 'cid'
|
||||
|
@ -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:
|
||||
|
|
|
@ -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'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'
|
||||
|
||||
|
||||
# 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 '
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue