From 11c381d8c8565b90c112e62a6d10bf6d2d2704e5 Mon Sep 17 00:00:00 2001 From: pauget Date: Mon, 7 Nov 2005 01:06:53 +0100 Subject: [PATCH] Changement nom+prenom par Stphane. Si l'adhrent n'a pas de compte ne pose pas de question. Sinon demande si le compte est utilis si oui conserve le login inchang si non dtruit le compte et en cre un nouveau darcs-hash:20051107000653-41617-8638a050728561810634ecd1e09c04917aca9987.gz --- gestion/gest_crans.py | 63 +++++++++++++++++++++++++++++++++++++++++++ gestion/ldap_crans.py | 16 +++++++---- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index ada0a0fb..4a8902e6 100755 --- a/gestion/gest_crans.py +++ b/gestion/gest_crans.py @@ -411,6 +411,64 @@ def set_mail_ext(adher) : dialog(arg) return set_mail_ext(adher) +def set_etat_civil(adher): + u""" + Modifie l'état-civil (nom, prénom) d'un adhérent. + """ + if u'Nounou' in adher.droits() and not isadm : + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg+= u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) + return + + # Construction de la boite de dialogue + arg = u'--title "État-civil de %s" ' % adher.Nom() + arg+= u'--form "" 0 0 0 ' + arg+= u'"Nom :" 1 1 "%s" 1 13 20 20 ' % adher.nom() + arg+= u'"Prénom :" 2 1 "%s" 2 13 20 20 ' % adher.prenom() + + # Affichage + annul, result = dialog(arg) + if annul: return + + # Traitement + err = '' + try: adher.nom(result[0]) + except ValueError, c: err += c.args[0] + '\n' + + try: adher.prenom(result[1]) + except ValueError, c: err += c.args[0] + '\n' + + # Des erreurs ? + if err: + arg = u'--title "État-civil de %s" ' % adher.Nom() + arg+= u'--msgbox "%s\n\n" 0 0' % err + dialog(arg) + # On redemande + return set_etat_civil(adher) + + # On change éventuellement le compte + if adher.compte(): + # On demande au câbleur s'il faut garder le compte ou pas + arg = u'--title "Modification du compte de %s" ' % adher.Nom() + arg += u'--colors --defaultno --yesno "Changer le login de l\'adhérent ?\n' + arg += u'Son login actuel est %s.\n\n' % adher.compte() + arg += u'Choisir Oui si l\'adhérent n\'a jamais utilisé son compte.\n\n' + arg += u'\Zr\Z1AVERTISSEMENT :\n' + arg += u'Le changement de login entraîne la suppression irréversible du compte, ' + arg += u'et donc de tous les fichiers, mails, etc. associés !\Z0\ZR\n\n\n" ' + arg += u'0 0' + no = not dialog(arg)[0] + + if no: + # L'utilisateur n'utilise pas son compte, on le supprime... + adher.supprimer_compte() + # ..et on le recrée (ou on met une adresse mail extérieure) + if set_mail(adher): + # Le changement d'adresse a été annulé, on recommence tout + adher.restore() + return set_etat_civil(adher) + def set_compte(adher) : """ Créé un compte sur vert pour un adhérent. @@ -1249,6 +1307,9 @@ def modif_adher(adher) : arg = u'--title "Modification de %s" ' % adher.Nom() arg+= u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' arg+= u'"Administratif" "Précâblage, carte d\'étudiant, études" ' + if adher.compte(): changement_compte = u", compte sur zamok" + else: changement_compte = u"" + arg+= u'"État-civil" "Nom, prénom%s" ' % changement_compte if adher.chbre() == 'EXT' : arg+= u'"Adresse" "Déménagement" ' else : @@ -1272,6 +1333,8 @@ def modif_adher(adher) : if res[0]=='Etudes' : set_etudes(adher) + elif res[0] == 'État-civil': + set_etat_civil(adher) elif res[0]=='Administratif' : if not set_admin(adher) : set_etudes(adher) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 6c27678a..d6b789b9 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -1561,16 +1561,22 @@ class adherent(base_proprietaire): if sre.match('.*crans.(org|ens-cachan.fr)$',new): raise ValueError(u"Adresse mail @crans interdite ici") - self._set('mail',[new]) - # Il ne doit pas y avoir de compte + self.supprimer_compte() + self._set('mail',[new]) + + return new + + def supprimer_compte(self): + u""" + Supprime le compte sur zamok. Penser à définir l'adresse mail après. + """ + self._set('mail', ['']) self._data['objectClass'] = [ 'adherent' ] - + for c in [ 'uid', 'cn', 'shadowLastChange', 'shadowMax', 'shadowWarning', 'loginShell', 'userPassword', 'uidNumber', 'gidNumber', 'homeDirectory', 'gecos', 'droits','mailAlias', 'cannonicalAlias' ]: try: self._data.pop(c) except: pass - - return new def etudes(self,index_or_new): """