diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index a91eb12d..620d7263 100755 --- a/gestion/gest_crans.py +++ b/gestion/gest_crans.py @@ -883,57 +883,106 @@ def set_mail_ext(adher): def set_etat_civil(adher): """ - Modifie l'état-civil (nom, prénom) d'un adhérent. + Modifie l'état-civil (nom, prénom) d'un adhérent si l'utilisateur est en + droit de le faire. + + Paramètres: + - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` + + Utilises: + - :py:func:`dialog` + - :py:class:`ldap_crans.Adherent` + - :py:func:`set_mail` + + Peut lever: + - :py:exc:`ValueError` + + Retournes: + - None ou 1 (en cas de problème) + - ``adher`` """ 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 + # Si l'adhérent à modifier est Nounou et que l'utilisateur n'est pas + # administrateur au sens de :py:func:`user_test.isadm`, on dit à + # l'utilisateur qu'il est bien mignon mais qu'il a pas le droit. + arguments_echec = [ + "--title", "Adresse mail de " + adher.Nom(), + "--msgbox", "T'es bien mignon(ne) mais t'as le droit de faire ça.\n" + \ + "Il faut être administrateur pour modifier le mail d'une nounou.\n\n\n", "0", "0" + ] + + # Affichage de la boîte dialogue de "NOPE" + dialog(arguments_echec) + return 1 # 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() + arguments = [ + "--title", "État-civil de" + adher.Nom(), + "--form", "", "0", "0", "0", + "Nom :", "1", "1", adher.nom(), "1", "13", "20", "20", + "Prénom :", "2", "1", adher.prenom(), "2", "13", "20", "20" + ] - # Affichage - annul, result = dialog(arg) - if annul: return + # Affichage de la boîte de dialogue + code_erreur, sortie = dialog(arguments) - # Traitement - err = '' - try: adher.nom(result[0]) - except ValueError, c: err += c.args[0] + '\n' + if code_erreur: + # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé + return 1 - try: adher.prenom(result[1]) - except ValueError, c: err += c.args[0] + '\n' + # Gestion des erreurs + erreur = '' + try: + # Tentative de peuplement de la variable nom + adher.nom(result[0]) + except ValueError as exception: + erreur += exception.args[0] + '\n' - # Des erreurs ? - if err: - arg = u'--title "État-civil de %s" ' % adher.Nom() - arg += u'--msgbox "%s\n\n" 0 0' % to_unicode(err) - dialog(arg) - # On redemande + try: + # Tentative de peuplement de la variable prenom + adher.prenom(result[1]) + except ValueError as exception: + erreur += exception.args[0] + '\n' + + if erreur: + # Construction de la liste des arguments à passer à dialog pour + # construire une boîte d'erreur + arguments_echec = [ + "--title", "État-civil de " + adher.Nom(), + "--msgbox", to_unicode(erreur) + "\n\n", "0", "0" + ] + # Affichage de la boîte de dialogue + dialog(arguments_echec) + + # Et on recommence tout le processus return set_etat_civil(adher) - # On change éventuellement le compte + # Si l'état civil est modifié, on veut pouvoir (éventuellement) modifier + # le compte Crans de l'adhérent (s'il en a un) 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] + # Si l'adhérent a un compte Crans, on prépare la liste des arguments + # à passer au programme dialog. + arguments = [ + "--title", "Modification du compte de " + adher.Nom(), + "--colors", "--defaultno", "--yesno", + "Changer le login de l'adhérent ?\n" + \ + "Son login actuel est " + adher.compte() + ".\n\n" + \ + "Choisir Oui si l'adhérent n'a jamais utilisé son compte.\n\n" + \ + # \Zr\Z1 et \Zn sont là pour faire l'effet stabilo rouge + "\Zr\Z1AVERTISSEMENT :\n" + \ + "Le changement de login entraîne la suppression irréversible " + \ + "du compte et donc de tous les fichiers, mails, etc associés !\Zn\n\n\n", + "0", "0" + ] - if no: - # L'utilisateur n'utilise pas son compte, on le supprime... + # Affichage de la boîte de dialogue + non, _ = dialog(arguments) + + if not non: + # Si l'utilisateur a dit "Oui", c'est que l'adhérent n'utilise pas + # son compte et que l'on peut le supprimer. adher.supprimer_compte() - # ..et on le recrée (ou on met une adresse mail extérieure) + # …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()