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): """