Historique plus souple.
Dans base_classes_crans, modifs devient un dictionnaire. Franois, c'est toi. darcs-hash:20060120023038-68412-8a5b577ca9877e7c46c53b00a0b4a2773d6d2b58.gz
This commit is contained in:
parent
7e6b82566a
commit
5b075f28bf
2 changed files with 65 additions and 39 deletions
|
@ -763,10 +763,21 @@ def set_solde(clas) :
|
||||||
arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom()
|
arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom()
|
||||||
arg+= u'--inputbox "Solde actuel : %s\n Opération à effectuer (+ pour crédits et - pour débit) ?" 0 0 "" ' % clas.solde()
|
arg+= u'--inputbox "Solde actuel : %s\n Opération à effectuer (+ pour crédits et - pour débit) ?" 0 0 "" ' % clas.solde()
|
||||||
annul,res = dialog(arg)
|
annul,res = dialog(arg)
|
||||||
if annul : return 1
|
if annul: return 1
|
||||||
|
|
||||||
|
# Ajout du commentaire
|
||||||
|
arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom()
|
||||||
|
arg+= u'--inputbox "Commentaire à insérer ?" 0 0'
|
||||||
|
annul, comment = dialog(arg)
|
||||||
|
|
||||||
|
if not annul:
|
||||||
|
if comment[0]:
|
||||||
|
comment = comment[0]
|
||||||
|
else:
|
||||||
|
comment = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
clas.solde(res[0])
|
clas.solde(res[0], comment)
|
||||||
break
|
break
|
||||||
except ValueError, c :
|
except ValueError, c :
|
||||||
arg = u'--title "Opération impossible" '
|
arg = u'--title "Opération impossible" '
|
||||||
|
|
|
@ -830,7 +830,7 @@ class base_classes_crans(crans_ldap):
|
||||||
|
|
||||||
if self._data['blacklist'] != liste:
|
if self._data['blacklist'] != liste:
|
||||||
self._data['blacklist']=liste
|
self._data['blacklist']=liste
|
||||||
self.modifs.append('blacklist_' + new[2])
|
self.modifs.setdefault('blacklist_' + new[2], None)
|
||||||
if not hasattr(self,"_blacklist_restart"):
|
if not hasattr(self,"_blacklist_restart"):
|
||||||
self._blacklist_restart={}
|
self._blacklist_restart={}
|
||||||
if not self._blacklist_restart.has_key(new[2]):
|
if not self._blacklist_restart.has_key(new[2]):
|
||||||
|
@ -846,7 +846,7 @@ class base_classes_crans(crans_ldap):
|
||||||
def restore(self):
|
def restore(self):
|
||||||
""" Restore les données à l'état initial """
|
""" Restore les données à l'état initial """
|
||||||
self._data = self._init_data.copy()
|
self._data = self._init_data.copy()
|
||||||
self.modifs=[]
|
self.modifs = {}
|
||||||
|
|
||||||
def historique(self):
|
def historique(self):
|
||||||
""" Retourne l'historique de l'objet """
|
""" Retourne l'historique de l'objet """
|
||||||
|
@ -901,23 +901,25 @@ class base_classes_crans(crans_ldap):
|
||||||
|
|
||||||
# Construction de l'historique
|
# Construction de l'historique
|
||||||
if not self._init_data:
|
if not self._init_data:
|
||||||
modif='inscription'
|
modif = 'inscription'
|
||||||
else:
|
else:
|
||||||
### ON NE TOUCHE PAS A SELF.MODIFS, IL EST UTILISÉ PLUS LOIN !!!!!!!
|
### ON NE TOUCHE PAS A SELF.MODIFS, IL EST UTILISÉ PLUS LOIN !!!!!!!
|
||||||
# Copie locale de la liste
|
# Dictionnaire local des modifs
|
||||||
modif = self.modifs[:]
|
modif = {}
|
||||||
|
|
||||||
# Cas spécial
|
# Cas spécial
|
||||||
if "solde" in self.modifs:
|
if "solde" in self.modifs:
|
||||||
diff = float(self._init_data.get('solde',[0])[0]) - float(self._data.get('solde',[0])[0])
|
diff = float(self._init_data.get('solde',[0])[0]) - float(self._data.get('solde',[0])[0])
|
||||||
if diff > 0:
|
if diff > 0:
|
||||||
modif[modif.index('solde')] = "debit %s Euros" % str(diff)
|
modif['solde'] = "debit %s Euros" % str(diff)
|
||||||
else:
|
else:
|
||||||
modif[modif.index('solde')] = "credit %s Euros" % str(-diff)
|
modif['solde'] = "credit %s Euros" % str(-diff)
|
||||||
|
|
||||||
# Formate les entrées de l'historique de la forme champ (ancien -> nouveau)
|
# Formate les entrées de l'historique de la forme champ (ancien -> nouveau)
|
||||||
# On suppose que le champ apparaît forcément dans l'enregistrement
|
# On suppose que le champ apparaît forcément dans l'enregistrement
|
||||||
for champ in ['chbre', 'nom', 'prenom', 'puissance', 'canal', 'prise', 'responsable', 'contourneGreylist']:
|
for champ in ['chbre', 'nom', 'prenom', 'mail',
|
||||||
|
'puissance', 'canal', 'prise', 'responsable',
|
||||||
|
'contourneGreylist']:
|
||||||
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'
|
||||||
|
@ -927,12 +929,13 @@ class base_classes_crans(crans_ldap):
|
||||||
valeur_finale = 'N/A'
|
valeur_finale = 'N/A'
|
||||||
else:
|
else:
|
||||||
valeur_finale = self._data[champ][0]
|
valeur_finale = self._data[champ][0]
|
||||||
modif[modif.index(champ)] = '%s (%s -> %s)' % (champ,
|
modif[champ] = '%s (%s -> %s)' % (champ,
|
||||||
valeur_initiale,
|
valeur_initiale,
|
||||||
valeur_finale)
|
valeur_finale)
|
||||||
|
|
||||||
# Formate les entrées de l'historique de la forme champ+diff-diff
|
# Formate les entrées de l'historique de la forme champ+diff-diff
|
||||||
for champ in ['droits', 'controle', 'paiement', 'carteEtudiant', 'mailAlias', 'hostAlias', 'exempt']:
|
for champ in ['droits', 'controle', 'paiement', 'carteEtudiant',
|
||||||
|
'mailAlias', 'hostAlias', 'exempt']:
|
||||||
if champ in self.modifs:
|
if champ in self.modifs:
|
||||||
if champ == 'controle':
|
if champ == 'controle':
|
||||||
# Ce n'est pas pareil que self._init_data.get('controle', [''])
|
# Ce n'est pas pareil que self._init_data.get('controle', [''])
|
||||||
|
@ -948,10 +951,16 @@ class base_classes_crans(crans_ldap):
|
||||||
# On établit le diff
|
# On établit le diff
|
||||||
diff = ''.join([ '+%s' % decode(d) for d in nouveau if d not in ancien ])
|
diff = ''.join([ '+%s' % decode(d) for d in nouveau if d not in ancien ])
|
||||||
diff += ''.join([ '-%s' % decode(d) for d in ancien if d not in nouveau ])
|
diff += ''.join([ '-%s' % decode(d) for d in ancien if d not in nouveau ])
|
||||||
modif[modif.index(champ)] = champ + diff
|
modif[champ] = champ + diff
|
||||||
|
|
||||||
# On recolle tous les morceaux
|
# On recolle tous les morceaux
|
||||||
modif = ', '.join(modif)
|
liste_historique = []
|
||||||
|
for champ in self.modifs.keys():
|
||||||
|
ligne = modif.get(champ, champ)
|
||||||
|
if self.modifs[champ] != None:
|
||||||
|
ligne += ' [%s]' % self.modifs[champ]
|
||||||
|
liste_historique.append(ligne)
|
||||||
|
modif = ', '.join(liste_historique)
|
||||||
|
|
||||||
timestamp = localtime()
|
timestamp = localtime()
|
||||||
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur )
|
hist = "%s, %s" % ( time.strftime(date_format, timestamp), script_utilisateur )
|
||||||
|
@ -1027,7 +1036,7 @@ class base_classes_crans(crans_ldap):
|
||||||
""" Sauvegarde puis destruction du dn (et des sous-dn) fourni """
|
""" Sauvegarde puis destruction du dn (et des sous-dn) fourni """
|
||||||
# Commentaires
|
# Commentaires
|
||||||
comment = preattr(comment)[1]
|
comment = preattr(comment)[1]
|
||||||
self.modifs.append('destruction (%s)' % comment)
|
self.modifs.setdefault('destruction (%s)' % comment, None)
|
||||||
self._save()
|
self._save()
|
||||||
|
|
||||||
# Sauvegarde
|
# Sauvegarde
|
||||||
|
@ -1053,13 +1062,18 @@ class base_classes_crans(crans_ldap):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _set(self,champ,val):
|
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 """
|
||||||
if (not self._data.has_key(champ) and val != []) \
|
if (not self._data.has_key(champ) and val != []) \
|
||||||
or (self._data.has_key(champ) and self._data[champ]!=val):
|
or (self._data.has_key(champ) and self._data[champ]!=val):
|
||||||
self._data[champ]=val
|
self._data[champ]=val
|
||||||
if champ not in self.modifs:
|
if self.modifs.get(champ) == None or comment == None:
|
||||||
self.modifs.append(champ)
|
self.modifs[champ] = comment
|
||||||
|
else:
|
||||||
|
# Ici, self.modifs[champ] et comment devraient être tous deux
|
||||||
|
# des chaînes de caractères
|
||||||
|
self.modifs[champ] += ', ' + comment
|
||||||
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
|
@ -1083,7 +1097,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
if type(data) != tuple:
|
if type(data) != tuple:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
self.modifs=[]
|
self.modifs = {}
|
||||||
if data:
|
if data:
|
||||||
self.dn=data[0]
|
self.dn=data[0]
|
||||||
if mode == 'w':
|
if mode == 'w':
|
||||||
|
@ -1183,10 +1197,11 @@ class base_proprietaire(base_classes_crans):
|
||||||
""" Retourne les machines wifi appartenant à l'instance """
|
""" Retourne les machines wifi appartenant à l'instance """
|
||||||
return filter(lambda x: x.ipsec(), self.machines())
|
return filter(lambda x: x.ipsec(), self.machines())
|
||||||
|
|
||||||
def solde(self, operation=None):
|
def solde(self, operation=None, comment=None):
|
||||||
""" Retourne ou modifie le solde d'un propriétaire
|
""" Retourne ou modifie le solde d'un propriétaire
|
||||||
operation doit être un nombre positif ou négatif
|
operation doit être un nombre positif ou négatif
|
||||||
(string ou int ou float)
|
(string ou int ou float)
|
||||||
|
comment est un commentaire à rajouter dans l'historique
|
||||||
"""
|
"""
|
||||||
solde = float(self._data.get('solde',[0])[0])
|
solde = float(self._data.get('solde',[0])[0])
|
||||||
|
|
||||||
|
@ -1203,7 +1218,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
if new < config.impression.decouvert:
|
if new < config.impression.decouvert:
|
||||||
raise ValueError(u"Solde minimal atteind, opération non effectuée.")
|
raise ValueError(u"Solde minimal atteind, opération non effectuée.")
|
||||||
|
|
||||||
self._set('solde',[str(new)])
|
self._set('solde',[str(new)], comment)
|
||||||
return new
|
return new
|
||||||
|
|
||||||
def controle(self,new=None):
|
def controle(self,new=None):
|
||||||
|
@ -1238,7 +1253,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
if self._data.pop('controle') != []:
|
if self._data.pop('controle') != []:
|
||||||
# Il y avait vraiment qqch avant
|
# Il y avait vraiment qqch avant
|
||||||
if 'controle' not in self.modifs:
|
if 'controle' not in self.modifs:
|
||||||
self.modifs.append('controle')
|
self.modifs.setdefault('controle', None)
|
||||||
else:
|
else:
|
||||||
self._set('controle',[actuel])
|
self._set('controle',[actuel])
|
||||||
|
|
||||||
|
@ -1415,7 +1430,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
self.services_to_restart('mail_modif',['uid=%s' % self._data['uid'][0]])
|
self.services_to_restart('mail_modif',['uid=%s' % self._data['uid'][0]])
|
||||||
|
|
||||||
# Remise à zero
|
# Remise à zero
|
||||||
self.modifs=[]
|
self.modifs = {}
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -1445,7 +1460,7 @@ class base_proprietaire(base_classes_crans):
|
||||||
trans.remove(-action)
|
trans.remove(-action)
|
||||||
touched = True
|
touched = True
|
||||||
if touched and champ not in self.modifs:
|
if touched and champ not in self.modifs:
|
||||||
self.modifs.append(champ)
|
self.modifs.setdefault(champ, None)
|
||||||
|
|
||||||
trans.sort()
|
trans.sort()
|
||||||
self._data[champ] = map(str, trans)
|
self._data[champ] = map(str, trans)
|
||||||
|
@ -1758,7 +1773,7 @@ class adherent(base_proprietaire):
|
||||||
|
|
||||||
self._data['mail']= [ login ]
|
self._data['mail']= [ login ]
|
||||||
if not 'compte' in self.modifs:
|
if not 'compte' in self.modifs:
|
||||||
self.modifs.append('compte')
|
self.modifs.setdefault('compte', None)
|
||||||
|
|
||||||
# Création de l'alias cannonique
|
# Création de l'alias cannonique
|
||||||
if self.nom() and self.prenom():
|
if self.nom() and self.prenom():
|
||||||
|
@ -1948,7 +1963,7 @@ class club(base_proprietaire):
|
||||||
self.lock('mail',login)
|
self.lock('mail',login)
|
||||||
|
|
||||||
if not 'compte' in self.modifs:
|
if not 'compte' in self.modifs:
|
||||||
self.modifs.append('compte')
|
self.modifs.setdefault('compte', None)
|
||||||
|
|
||||||
self._data['objectClass'] = [ 'club', 'posixAccount', 'shadowAccount' ]
|
self._data['objectClass'] = [ 'club', 'posixAccount', 'shadowAccount' ]
|
||||||
self._data['uid'] = [ login ]
|
self._data['uid'] = [ login ]
|
||||||
|
@ -1997,7 +2012,7 @@ class machine(base_classes_crans):
|
||||||
"""
|
"""
|
||||||
self.conn = conn
|
self.conn = conn
|
||||||
if not self.conn: self.connect()
|
if not self.conn: self.connect()
|
||||||
self.modifs=[]
|
self.modifs = {}
|
||||||
t = parent_or_tuple.__class__
|
t = parent_or_tuple.__class__
|
||||||
if t == tuple:
|
if t == tuple:
|
||||||
# Initialisation avec données fournies
|
# Initialisation avec données fournies
|
||||||
|
@ -2537,7 +2552,7 @@ class machine(base_classes_crans):
|
||||||
self.services_to_restart('surveillance_machines')
|
self.services_to_restart('surveillance_machines')
|
||||||
|
|
||||||
# Remise à zéro
|
# Remise à zéro
|
||||||
self.modifs=[]
|
self.modifs = {}
|
||||||
|
|
||||||
# Message de sortie
|
# Message de sortie
|
||||||
ret += coul(u"Machine %s enregistrée avec succès." % self._data['host'][0],'vert')
|
ret += coul(u"Machine %s enregistrée avec succès." % self._data['host'][0],'vert')
|
||||||
|
@ -2589,11 +2604,11 @@ class machine(base_classes_crans):
|
||||||
if ports and self._data.get(champ)!=ports:
|
if ports and self._data.get(champ)!=ports:
|
||||||
self._data[champ] = [ ports ]
|
self._data[champ] = [ ports ]
|
||||||
if 'ports' not in self.modifs:
|
if 'ports' not in self.modifs:
|
||||||
self.modifs.append('ports')
|
self.modifs.setdefault('ports', None)
|
||||||
elif self._data.has_key(champ):
|
elif self._data.has_key(champ):
|
||||||
self._data.pop(champ)
|
self._data.pop(champ)
|
||||||
if 'ports' not in self.modifs:
|
if 'ports' not in self.modifs:
|
||||||
self.modifs.append('ports')
|
self.modifs.setdefault('ports', None)
|
||||||
|
|
||||||
class _fake_proprio(crans_ldap):
|
class _fake_proprio(crans_ldap):
|
||||||
""" Définitions de base d'un propriétaire virtuel """
|
""" Définitions de base d'un propriétaire virtuel """
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue