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,15 +763,26 @@ def set_solde(clas) :
|
|||
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()
|
||||
annul,res = dialog(arg)
|
||||
if annul : return 1
|
||||
if annul: return 1
|
||||
|
||||
try:
|
||||
clas.solde(res[0])
|
||||
break
|
||||
except ValueError, c :
|
||||
arg = u'--title "Opération impossible" '
|
||||
arg+= u'--msgbox "%s\n\n\n" 0 0' % c.args[0]
|
||||
dialog(arg)
|
||||
# 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:
|
||||
clas.solde(res[0], comment)
|
||||
break
|
||||
except ValueError, c :
|
||||
arg = u'--title "Opération impossible" '
|
||||
arg+= u'--msgbox "%s\n\n\n" 0 0' % c.args[0]
|
||||
dialog(arg)
|
||||
|
||||
def confirm(clas) :
|
||||
""" Demande confirmation avant enregistrement"""
|
||||
|
|
|
@ -830,7 +830,7 @@ class base_classes_crans(crans_ldap):
|
|||
|
||||
if 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"):
|
||||
self._blacklist_restart={}
|
||||
if not self._blacklist_restart.has_key(new[2]):
|
||||
|
@ -846,7 +846,7 @@ class base_classes_crans(crans_ldap):
|
|||
def restore(self):
|
||||
""" Restore les données à l'état initial """
|
||||
self._data = self._init_data.copy()
|
||||
self.modifs=[]
|
||||
self.modifs = {}
|
||||
|
||||
def historique(self):
|
||||
""" Retourne l'historique de l'objet """
|
||||
|
@ -901,23 +901,25 @@ class base_classes_crans(crans_ldap):
|
|||
|
||||
# Construction de l'historique
|
||||
if not self._init_data:
|
||||
modif='inscription'
|
||||
modif = 'inscription'
|
||||
else:
|
||||
### ON NE TOUCHE PAS A SELF.MODIFS, IL EST UTILISÉ PLUS LOIN !!!!!!!
|
||||
# Copie locale de la liste
|
||||
modif = self.modifs[:]
|
||||
# Dictionnaire local des modifs
|
||||
modif = {}
|
||||
|
||||
# Cas spécial
|
||||
if "solde" in self.modifs:
|
||||
diff = float(self._init_data.get('solde',[0])[0]) - float(self._data.get('solde',[0])[0])
|
||||
if diff > 0:
|
||||
modif[modif.index('solde')] = "debit %s Euros" % str(diff)
|
||||
modif['solde'] = "debit %s Euros" % str(diff)
|
||||
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)
|
||||
# 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 not in self._init_data.keys():
|
||||
valeur_initiale = 'N/A'
|
||||
|
@ -927,12 +929,13 @@ class base_classes_crans(crans_ldap):
|
|||
valeur_finale = 'N/A'
|
||||
else:
|
||||
valeur_finale = self._data[champ][0]
|
||||
modif[modif.index(champ)] = '%s (%s -> %s)' % (champ,
|
||||
valeur_initiale,
|
||||
valeur_finale)
|
||||
modif[champ] = '%s (%s -> %s)' % (champ,
|
||||
valeur_initiale,
|
||||
valeur_finale)
|
||||
|
||||
# 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 == '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
|
||||
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 ])
|
||||
modif[modif.index(champ)] = champ + diff
|
||||
modif[champ] = champ + diff
|
||||
|
||||
# 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()
|
||||
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 """
|
||||
# Commentaires
|
||||
comment = preattr(comment)[1]
|
||||
self.modifs.append('destruction (%s)' % comment)
|
||||
self.modifs.setdefault('destruction (%s)' % comment, None)
|
||||
self._save()
|
||||
|
||||
# Sauvegarde
|
||||
|
@ -1053,13 +1062,18 @@ class base_classes_crans(crans_ldap):
|
|||
except:
|
||||
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 """
|
||||
if (not self._data.has_key(champ) and val != []) \
|
||||
or (self._data.has_key(champ) and self._data[champ]!=val):
|
||||
self._data[champ]=val
|
||||
if champ not in self.modifs:
|
||||
self.modifs.append(champ)
|
||||
if self.modifs.get(champ) == None or comment == None:
|
||||
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:
|
||||
raise TypeError
|
||||
|
||||
self.modifs=[]
|
||||
self.modifs = {}
|
||||
if data:
|
||||
self.dn=data[0]
|
||||
if mode == 'w':
|
||||
|
@ -1183,10 +1197,11 @@ class base_proprietaire(base_classes_crans):
|
|||
""" Retourne les machines wifi appartenant à l'instance """
|
||||
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
|
||||
operation doit être un nombre positif ou négatif
|
||||
(string ou int ou float)
|
||||
comment est un commentaire à rajouter dans l'historique
|
||||
"""
|
||||
solde = float(self._data.get('solde',[0])[0])
|
||||
|
||||
|
@ -1203,7 +1218,7 @@ class base_proprietaire(base_classes_crans):
|
|||
if new < config.impression.decouvert:
|
||||
raise ValueError(u"Solde minimal atteind, opération non effectuée.")
|
||||
|
||||
self._set('solde',[str(new)])
|
||||
self._set('solde',[str(new)], comment)
|
||||
return new
|
||||
|
||||
def controle(self,new=None):
|
||||
|
@ -1238,7 +1253,7 @@ class base_proprietaire(base_classes_crans):
|
|||
if self._data.pop('controle') != []:
|
||||
# Il y avait vraiment qqch avant
|
||||
if 'controle' not in self.modifs:
|
||||
self.modifs.append('controle')
|
||||
self.modifs.setdefault('controle', None)
|
||||
else:
|
||||
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]])
|
||||
|
||||
# Remise à zero
|
||||
self.modifs=[]
|
||||
self.modifs = {}
|
||||
|
||||
return ret
|
||||
|
||||
|
@ -1445,7 +1460,7 @@ class base_proprietaire(base_classes_crans):
|
|||
trans.remove(-action)
|
||||
touched = True
|
||||
if touched and champ not in self.modifs:
|
||||
self.modifs.append(champ)
|
||||
self.modifs.setdefault(champ, None)
|
||||
|
||||
trans.sort()
|
||||
self._data[champ] = map(str, trans)
|
||||
|
@ -1758,7 +1773,7 @@ class adherent(base_proprietaire):
|
|||
|
||||
self._data['mail']= [ login ]
|
||||
if not 'compte' in self.modifs:
|
||||
self.modifs.append('compte')
|
||||
self.modifs.setdefault('compte', None)
|
||||
|
||||
# Création de l'alias cannonique
|
||||
if self.nom() and self.prenom():
|
||||
|
@ -1948,7 +1963,7 @@ class club(base_proprietaire):
|
|||
self.lock('mail',login)
|
||||
|
||||
if not 'compte' in self.modifs:
|
||||
self.modifs.append('compte')
|
||||
self.modifs.setdefault('compte', None)
|
||||
|
||||
self._data['objectClass'] = [ 'club', 'posixAccount', 'shadowAccount' ]
|
||||
self._data['uid'] = [ login ]
|
||||
|
@ -1997,7 +2012,7 @@ class machine(base_classes_crans):
|
|||
"""
|
||||
self.conn = conn
|
||||
if not self.conn: self.connect()
|
||||
self.modifs=[]
|
||||
self.modifs = {}
|
||||
t = parent_or_tuple.__class__
|
||||
if t == tuple:
|
||||
# Initialisation avec données fournies
|
||||
|
@ -2537,7 +2552,7 @@ class machine(base_classes_crans):
|
|||
self.services_to_restart('surveillance_machines')
|
||||
|
||||
# Remise à zéro
|
||||
self.modifs=[]
|
||||
self.modifs = {}
|
||||
|
||||
# Message de sortie
|
||||
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:
|
||||
self._data[champ] = [ ports ]
|
||||
if 'ports' not in self.modifs:
|
||||
self.modifs.append('ports')
|
||||
self.modifs.setdefault('ports', None)
|
||||
elif self._data.has_key(champ):
|
||||
self._data.pop(champ)
|
||||
if 'ports' not in self.modifs:
|
||||
self.modifs.append('ports')
|
||||
self.modifs.setdefault('ports', None)
|
||||
|
||||
class _fake_proprio(crans_ldap):
|
||||
""" Définitions de base d'un propriétaire virtuel """
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue