Commit 787c55ef authored by Gabriel Detraz's avatar Gabriel Detraz
Browse files

Permet la gestion du local club, et centralise la gestion des locaux/chambres dans propio.py

parent 79a593b5
......@@ -56,7 +56,7 @@ class Dialog(proprio.Dialog):
'Administratif' : {'text' : "Adhésion, chartes", "callback":self.adherent_administratif},
'Personnel' : {'text' : "Nom, prénom, téléphone, et mail de contact", 'callback':self.adherent_personnel},
'Études' : {'text' : "Étude en cours", "callback":self.adherent_etudes},
'Chambre' : {'text' : 'Déménagement', "callback":self.adherent_chambre},
'Chambre' : {'text' : 'Déménagement', "adherent":"proprio", "callback":self.proprio_chambre},
'Compte' : {'text' : "Gestion du compte crans", "adherent":"proprio", "callback":TailCall(self.proprio_compte, update_obj='adherent'), 'help':"Création/Suppression/Activation/Désactivation du compte, gestion des alias mails crans du compte"},
'GPGFingerprint' : {'text':'Ajouter ou supprimer une empeinte GPG', 'attribut':attributs.gpgFingerprint},
'Remarques' : {'text':'Ajouter ou supprimer une remarque à cet adhérent', 'attribut':attributs.info},
......@@ -577,10 +577,10 @@ class Dialog(proprio.Dialog):
delay[key] = values
print delay
# on récupère la chambre
adherent = self.adherent_chambre_campus(success_cont=None, cont=self_cont(make_compte_crans=make_compte_crans), adherent=adherent, create=True)
adherent = self.proprio_chambre_campus(success_cont=None, cont=self_cont(make_compte_crans=make_compte_crans), proprio=adherent, create=True)
# Si c'est EXT, on demande une adresse complète
if 'EXT' in adherent['chbre']:
adherent = self.adherent_chambre_ext(keep_machine=True, keep_compte=True, success_cont=None, cont=self_cont(make_compte_crans=make_compte_crans), adherent=adherent, create=True)
adherent = self.proprio_chambre_ext(keep_machine=True, keep_compte=True, success_cont=None, cont=self_cont(make_compte_crans=make_compte_crans), proprio=adherent, create=True)
# Si compte crans à créer, on le crée.
# On le met en dernier pour éviter de faire entrez plusieurs fois son mdp à l'adhérent
# en cas d'erreur de la part du cableur
......@@ -639,226 +639,6 @@ class Dialog(proprio.Dialog):
codes_todo=[([self.dialog.DIALOG_OK], todo, [to_display, non_empty, tags, adherent, separateur, make_compte_crans, force_create, retry_cont, cont])]
)
@tailcaller
def adherent_chambre_campus(self, success_cont, cont, adherent, create=False):
"""Permet de faire déménager d'adhérent sur le campus"""
def box():
return self.dialog.inputbox(
"chambre ?",
title="%s de %s %s" % ("Création" if create else "Déménagement", adherent['prenom'][0], adherent["nom"][0]),
cancel_label="Retour",
width=50, timeout=self.timeout,
)
def expulse_squatteur(adherent, chbre):
with self.conn.search(u"chbre=%s" % chbre, mode='rw')[0] as squatteur:
if self.confirm_item(
item=squatteur,
title="Chambre occupée",
defaultno=True,
text=u"L'adhérent ci-dessous occupé déjà la chambre %s :\n" % output,
text_bottom=u"\nPasser la chambre de cet adhérent en chambre inconnue ?"
):
squatteur['chbre'] = u'????'
squatteur.validate_changes()
squatteur.history_gen()
squatteur.save()
return True
else:
return False
def set_chambre(adherent, chbre):
try:
adherent['postalAddress'] = []
adherent['chbre'] = unicode(output, 'utf-8')
except UniquenessError:
if expulse_squatteur(adherent, chbre):
# La chambre est maintenant normalement libre
adherent['chbre'] = unicode(output, 'utf-8')
else:
raise Continue(self_cont)
return adherent
def todo(chbre, adherent, self_cont, success_cont):
if not output:
raise Continue(self_cont)
if output == "????":
raise ValueError("Chambre ???? invalide")
if create:
return set_chambre(adherent, chbre)
else:
with self.conn.search(dn=adherent.dn, scope=0, mode='rw')[0] as adherent:
adherent = set_chambre(adherent, chbre)
adherent.validate_changes()
adherent.history_gen()
adherent.save()
self.display_item(item=adherent, title="Adhérent déménagé dans la chambre %s" % output)
raise Continue(success_cont(adherent=adherent))
(code, output) = self.handle_dialog(cont, box)
self_cont = TailCall(self.adherent_chambre_campus, adherent=adherent, success_cont=success_cont, cont=cont, create=create)
return self.handle_dialog_result(
code=code,
output=output,
cancel_cont=cont,
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], todo, [output, adherent, self_cont, success_cont])]
)
@tailcaller
def adherent_chambre_ext(self, keep_machine, keep_compte, success_cont, cont, adherent, create=False):
"""Permet de faire déménager l'adhérent hors campus"""
if keep_machine and not keep_compte:
raise EnvironmentError("On ne devrait pas supprimer un compte crans et y laisser des machines")
elif keep_machine and keep_compte:
def box(values={}):
form = [("Adresse", 40), ("Compl. adr.", 40), ("Code postal", 7), ("Ville", 16)]
fields = [("%s :" % k, values.get(k, ""), l, 50) for (k, l) in form]
return self.dialog.form(
text="",
timeout=self.timeout,
height=0, width=0, form_height=0,
fields=fields,
title="Paramètres machine",
backtitle="Gestion des machines du Crans")
def todo(output, adherent, success_cont, cont):
if not create:
if self.dialog.yesno("changer l'adresse de l'adhérent pour %s ?" % ", ".join([o for o in output if o]),
title=u"Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
defaultno=True, timeout=self.timeout) == self.dialog.DIALOG_OK:
with self.conn.search(dn=adherent.dn, scope=0, mode='rw')[0] as adherent:
adherent['postalAddress'] = [unicode(pa, 'utf-8') for pa in output]
adherent['chbre'] = u'EXT'
adherent.validate_changes()
adherent.history_gen()
adherent.save()
self.display_item(item=adherent, title="Adhérent déménégé hors campus, machines conservées")
raise Continue(success_cont(adherent=adherent))
else:
raise Continue(cont)
else:
adherent['postalAddress'] = [unicode(pa, 'utf-8') for pa in output]
adherent['chbre'] = u'EXT'
return adherent
elif not keep_machine and keep_compte:
if create:
raise EnvironmentError("On ne crée pas un adhérent en lui supprimant des machines")
def box(values={}):
return (self.dialog.DIALOG_OK, "")
def todo(output, adherent, success_cont, cont):
if self.confirm_item(
item=adherent,
text=u"Supprimer toutes les machines de l'adhérent ci-dessous ?\n\n",
text_bottom=u"\nLa chambre de l'adhérent passera de plus en EXT.",
title=u"Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
defaultno=True):
with self.conn.search(dn=adherent.dn, scope=0, mode='rw')[0] as adherent:
for machine in adherent.machines():
with machine:
machine.delete()
adherent['chbre'] = u'EXT'
adherent.validate_changes()
adherent.history_gen()
adherent.save()
self.display_item(item=adherent, title="Adhérent déménégé hors campus, machines supprimées")
raise Continue(success_cont(adherent=adherent))
else:
raise Continue(cont)
elif not keep_machine and not keep_compte:
if create:
raise EnvironmentError("On ne crée pas un adhérent en lui supprimant des machines et un compte")
def box(values={}):
return (self.dialog.DIALOG_OK, "")
def todo(output, adherent, success_cont, cont):
if adherent.get('solde', [0])[0] > 0:
self.dialog.msgbox("Solde de l'adhérent %s€ strictement positif, impossible de supprimer le compte\nRepasser le solde à 0€ pour supprimer le compte." % adherent.get('solde', [0])[0],
title=u"Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
width=50, timeout=self.timeout)
raise Continue(cont)
elif self.confirm_item(
item=adherent,
text=u"Supprimer toutes les machines et du compte crans de l'adhérent ci-dessous ?\n\n",
text_bottom=u"\nLa chambre de l'adhérent passera de plus en EXT.",
title=u"Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
defaultno=True):
with self.conn.search(dn=adherent.dn, scope=0, mode='rw')[0] as adherent:
for machine in adherent.machines():
with machine:
machine.delete()
adherent['chbre'] = u'EXT'
adherent.validate_changes()
adherent.history_gen()
adherent.save()
# On supprime le compte crans (on essaye)
def post_deletion(proprio, cont):
if not "cransAccount" in proprio['objectClass']:
self.display_item(item=adherent, title="Adhérent déménégé hors campus, machines et compte crans supprimées")
else:
self.display_item(item=adherent, title="Adhérent déménégé hors campus, machines supprimées et compte crans concervé")
raise Continue(cont(adherent=proprio))
self.proprio_compte_delete(proprio=adherent, cont=TailCall(post_deletion, proprio=adherent, cont=success_cont(adherent=adherent)), force=True)
else:
raise Continue(cont)
else:
raise EnvironmentError("Impossible, on a fait tous les cas, python est buggué")
(code, output) = self.handle_dialog(cont, box)
self_cont = TailCall(self.adherent_chambre_ext, adherent=adherent, keep_machine=keep_machine, keep_compte=keep_compte, success_cont=success_cont, cont=cont)
return self.handle_dialog_result(
code=code,
output=output,
cancel_cont=cont,
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], todo, [output, adherent, success_cont, cont])]
)
def adherent_chambre(self, adherent, cont, default_item=None):
"""Permet de faire déménager d'adhérent"""
a = attributs
menu_droits = {
'0' : [a.cableur, a.nounou],
'1' : [a.cableur, a.nounou],
'2' : [a.cableur, a.nounou],
'3' : [a.cableur, a.nounou],
}
menu = {
"0": {'text':"Déménagement sur le campus", 'callback':self.adherent_chambre_campus, 'help': "Déménagement vers une chambre sur le campus, on ne demande que le bâtiment et la chambre"},
"1": {'text':"Déménagement à l'extérieur en conservant les machines", "callback": TailCall(self.adherent_chambre_ext, keep_machine=True, keep_compte=True), "help": "Pour concerver ses machines, il faut donner un adresse postale complète"},
"2": {'text':"Départ du campus en conservant son compte", "callback":TailCall(self.adherent_chambre_ext, keep_machine=False, keep_compte=True), "help":"Supprime les machines mais concerve le compte crans, l'adresse passe en EXT sans plus d'information"},
"3": {'text':"Départ du campus en supprimant son compte", "callback":TailCall(self.adherent_chambre_ext, keep_machine=False, keep_compte=False), "help":"Supprime les machines et le compte crans, l'adhérent reste dans la base de donnée, il est possible de mettre une redirection du mail crans vers une autre adresse dans bcfg2"},
}
menu_order = [str(i) for i in range(4)]
def box(default_item=None):
return self.dialog.menu(
"Quel est le type du déménagement ?",
width=0,
height=0,
menu_height=0,
timeout=self.timeout,
item_help=1,
default_item=str(default_item),
title="Déménagement de %s %s" % (adherent['prenom'][0], adherent["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=self._connected_as(),
choices=[(k, menu[k]['text'], menu[k]['help']) for k in menu_order if self.has_right(menu_droits[k], adherent)])
def todo(tag, menu, adherent, self_cont, cont):
if not tag in menu_order:
raise Continue(self_cont)
else:
raise Continue(TailCall(menu[tag]['callback'], cont=self_cont, success_cont=cont, adherent=adherent))
(code, tag) = self.handle_dialog(cont, box, default_item)
self_cont = TailCall(self.adherent_chambre, adherent=adherent, cont=cont, default_item=tag)
return self.handle_dialog_result(
code=code,
output=tag,
cancel_cont=cont,
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], todo, [tag, menu, adherent, self_cont, cont])]
)
def create_adherent(self, cont):
"""Crée un adhérent et potentiellement son compte crans avec lui"""
def mycont(adherent=None, **kwargs):
......
......@@ -2,7 +2,11 @@
# -*- coding: utf-8 -*-
u"""
Copyright (C) Valentin Samir
Copyright (C)
Valentin Samir
Gabriel Détraz
Licence : GPLv3
"""
......@@ -52,7 +56,7 @@ class Dialog(proprio.Dialog):
menu_droits = {
#'Administratif' : [a.cableur, a.nounou],
#'Infos':[a.cableur, a.nounou, a.soi],
#'Local':[a.cableur, a.nounou],
'Local':[a.cableur, a.nounou],
'Compte':[a.cableur, a.nounou],
'Remarques' : [a.cableur, a.nounou],
'Blackliste':[a.bureau, a.nounou],
......@@ -62,7 +66,7 @@ class Dialog(proprio.Dialog):
menu = {
#'Administratif' : {'text' : "Adhésion du club", "callback":self.adherent_administratif},
#'Infos' : {'text' : "Nom, prénom, téléphone, et mail de contact", 'callback':self.adherent_personnel},
#'Local' : {'text' : 'Déménagement', "callback":self.adherent_chambre},
'Local' : {'text' : 'Déménagement', "club":"proprio", "callback":self.proprio_chambre},
'Compte' : {'text' : "Gestion du compte crans", "club":"proprio", "callback":TailCall(self.proprio_compte, update_obj='club'), 'help':"Création/Suppression/Activation/Désactivation du compte, gestion des alias mails crans du compte"},
'Remarques' : {'text':'Ajouter ou supprimer une remarque à ce club', 'attribut':attributs.info},
'Blackliste' : {'text': 'Modifier les blacklist de ce club', 'callback':self.modif_club_blacklist},
......@@ -70,7 +74,7 @@ class Dialog(proprio.Dialog):
'Supprimer' : {'text':"Supprimer le club de la base de donnée", 'callback':TailCall(self.delete_club, del_cont=cont(proprio=None))},
}
#menu_order = ['Administratif', 'Infos', 'Local', 'Compte', 'Remarques', 'Blackliste', 'Vente', 'Supprimer']
menu_order = ['Compte', 'Remarques', 'Blackliste', 'Vente', 'Supprimer']
menu_order = ['Local', 'Compte', 'Remarques', 'Blackliste', 'Vente', 'Supprimer']
def box(default_item=None):
choices = []
......
......@@ -2,7 +2,11 @@
# -*- coding: utf-8 -*-
u"""
Copyright (C) Valentin Samir
Copyright (C)
Valentin Samir
Gabriel Détraz
Licence : GPLv3
"""
......@@ -21,6 +25,9 @@ import lc_ldap.objets as objets
import lc_ldap.attributs as attributs
import lc_ldap.crans_utils as lc_utils
from lc_ldap.attributs import UniquenessError
import machine
import blacklist
from CPS import TailCall, tailcaller, Continue
......@@ -75,8 +82,13 @@ class Dialog(machine.Dialog, blacklist.Dialog):
# Sinon on propage l'erreur pour l'afficher à l'utilisateur
else:
raise
if isinstance(proprio, objets.adherent):
titre = "Le compte ne sera créé que lors de l'enregistrement des données\n\nL'adresse mail de l'adhérent est : %s\nL'adhérent possède également l'alias : \n%s\n" % (proprio['mail'][0], proprio['canonicalAlias'][0])
else:
titre = "Le compte ne sera créé que lors de l'enregistrement des données"
self.dialog.msgbox(
text="Le compte ne sera créé que lors de l'enregistrement des données\n\nL'adresse mail de l'adhérent est : %s\nL'adhérent possède également l'alias :\n%s\n" % (proprio['mail'][0], proprio['canonicalAlias'][0]),
text=titre,
title="Création du compte de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
width=75,
height=12, timeout=self.timeout,
......@@ -181,17 +193,21 @@ class Dialog(machine.Dialog, blacklist.Dialog):
"""Permet la suppression du compte crans d'un proprio"""
def todo(proprio, self_cont, cont):
if force or self.confirm_item(item=proprio, title="Voulez vous vraiement supprimer le compte de %s %s ?" % (proprio.get('prenom', [''])[0], proprio["nom"][0]), defaultno=True):
(code, mail) = self.dialog.inputbox(
text="Il faut choisir une nouvelle adresse de contact.\n(On regarde s'il y a une adresse optionnel)",
title="Choix d'une adresse de contact pour %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
init=str(proprio.get("mailExt", [""])[0]),
width=50, timeout=self.timeout)
if not code == self.dialog.DIALOG_OK:
raise Continue(cont)
elif not mail:
raise ValueError("Il faut entrer une adresse mail")
if isinstance(proprio, objets.adherent):
(code, mail) = self.dialog.inputbox(
text="Il faut choisir une nouvelle adresse de contact.\n(On regarde s'il y a une adresse optionnel)",
title="Choix d'une adresse de contact pour %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
init=str(proprio.get("mailExt", [""])[0]),
width=50, timeout=self.timeout)
if not code == self.dialog.DIALOG_OK:
raise Continue(cont)
elif not mail:
raise ValueError("Il faut entrer une adresse mail")
with self.conn.search(dn=proprio.dn, scope=0, mode='rw')[0] as proprio:
proprio.delete_compte(unicode(mail, 'utf-8'))
if isinstance(proprio, objets.adherent):
proprio.delete_compte(unicode(mail, 'utf-8'))
else:
proprio.delete_compte_club()
proprio.validate_changes()
proprio.history_gen()
proprio.save()
......@@ -580,3 +596,226 @@ class Dialog(machine.Dialog, blacklist.Dialog):
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], choose_item, [proprio, tags, copy.deepcopy(gestion.config.factures.ITEMS), self_cont])]
)
@tailcaller
def proprio_chambre_campus(self, success_cont, cont, proprio, create=False):
"""Permet de faire déménager d'adhérent sur le campus"""
def box():
return self.dialog.inputbox(
"chambre ?",
title="%s de %s %s" % ("Création" if create else "Déménagement", proprio.get('prenom', [''])[0], proprio["nom"][0]),
cancel_label="Retour",
width=50, timeout=self.timeout,
)
def expulse_squatteur(proprio, chbre):
with self.conn.search(u"chbre=%s" % chbre, mode='rw')[0] as squatteur:
if self.confirm_item(
item=squatteur,
title="Chambre occupée",
defaultno=True,
text=u"L'adhérent ci-dessous occupé déjà la chambre %s :\n" % output,
text_bottom=u"\nPasser la chambre de cet adhérent en chambre inconnue ?"
):
squatteur['chbre'] = u'????'
squatteur.validate_changes()
squatteur.history_gen()
squatteur.save()
return True
else:
return False
def set_chambre(proprio, chbre):
try:
if isinstance(proprio, objets.adherent):
proprio['postalAddress'] = []
proprio['chbre'] = unicode(output, 'utf-8')
except UniquenessError:
if expulse_squatteur(proprio, chbre):
# La chambre est maintenant normalement libre
proprio['chbre'] = unicode(output, 'utf-8')
else:
raise Continue(self_cont)
return proprio
def todo(chbre, proprio, self_cont, success_cont):
if not output:
raise Continue(self_cont)
if output == "????":
raise ValueError("Chambre ???? invalide")
if create:
return set_chambre(proprio, chbre)
else:
with self.conn.search(dn=proprio.dn, scope=0, mode='rw')[0] as proprio:
proprio = set_chambre(proprio, chbre)
proprio.validate_changes()
proprio.history_gen()
proprio.save()
self.display_item(item=proprio, title="Adhérent déménagé dans la chambre %s" % output)
raise Continue(success_cont())
(code, output) = self.handle_dialog(cont, box)
self_cont = TailCall(self.proprio_chambre_campus, proprio=proprio, success_cont=success_cont, cont=cont, create=create)
return self.handle_dialog_result(
code=code,
output=output,
cancel_cont=cont,
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], todo, [output, proprio, self_cont, success_cont])]
)
@tailcaller
def proprio_chambre_ext(self, keep_machine, keep_compte, success_cont, cont, proprio, create=False):
"""Permet de faire déménager l'adhérent hors campus"""
if keep_machine and not keep_compte:
raise EnvironmentError("On ne devrait pas supprimer un compte crans et y laisser des machines")
elif keep_machine and keep_compte:
def box(values={}):
form = [("Adresse", 40), ("Compl. adr.", 40), ("Code postal", 7), ("Ville", 16)]
fields = [("%s :" % k, values.get(k, ""), l, 50) for (k, l) in form]
return self.dialog.form(
text="",
timeout=self.timeout,
height=0, width=0, form_height=0,
fields=fields,
title="Paramètres machine",
backtitle="Gestion des machines du Crans")
def todo(output, proprio, success_cont, cont):
if not create:
if self.dialog.yesno("changer l'adresse de l'adhérent pour %s ?" % ", ".join([o for o in output if o]),
title=u"Déménagement de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
defaultno=True, timeout=self.timeout) == self.dialog.DIALOG_OK:
with self.conn.search(dn=proprio.dn, scope=0, mode='rw')[0] as proprio:
if isinstance(proprio, objets.adherent):
proprio['postalAddress'] = [unicode(pa, 'utf-8') for pa in output]
proprio['chbre'] = u'EXT'
proprio.validate_changes()
proprio.history_gen()
proprio.save()
self.display_item(item=proprio, title="Adhérent déménégé hors campus, machines conservées")
raise Continue(success_cont())
else:
raise Continue(cont)
else:
proprio['postalAddress'] = [unicode(pa, 'utf-8') for pa in output]
proprio['chbre'] = u'EXT'
return proprio
elif not keep_machine and keep_compte:
if create:
raise EnvironmentError("On ne crée pas un adhérent en lui supprimant des machines")
def box(values={}):
return (self.dialog.DIALOG_OK, "")
def todo(output, proprio, success_cont, cont):
if self.confirm_item(
item=proprio,
text=u"Supprimer toutes les machines de l'adhérent ci-dessous ?\n\n",
text_bottom=u"\nLa chambre de l'adhérent passera de plus en EXT.",
title=u"Déménagement de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
defaultno=True):
with self.conn.search(dn=proprio.dn, scope=0, mode='rw')[0] as proprio:
for machine in proprio.machines():
with machine:
machine.delete()
proprio['chbre'] = u'EXT'
proprio.validate_changes()
proprio.history_gen()
proprio.save()
self.display_item(item=proprio, title="Adhérent déménégé hors campus, machines supprimées")
raise Continue(success_cont())
else:
raise Continue(cont)
elif not keep_machine and not keep_compte:
if create:
raise EnvironmentError("On ne crée pas un adhérent en lui supprimant des machines et un compte")
def box(values={}):
return (self.dialog.DIALOG_OK, "")
def todo(output, proprio, success_cont, cont):
if proprio.get('solde', [0])[0] > 0:
self.dialog.msgbox("Solde de l'adhérent %s€ strictement positif, impossible de supprimer le compte\nRepasser le solde à 0€ pour supprimer le compte." % proprio.get('solde', [0])[0],
title=u"Déménagement de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
width=50, timeout=self.timeout)
raise Continue(cont)
elif self.confirm_item(
item=proprio,
text=u"Supprimer toutes les machines et du compte crans de l'adhérent ci-dessous ?\n\n",
text_bottom=u"\nLa chambre de l'adhérent passera de plus en EXT.",
title=u"Déménagement de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
defaultno=True):
with self.conn.search(dn=proprio.dn, scope=0, mode='rw')[0] as proprio:
for machine in proprio.machines():
with machine:
machine.delete()
proprio['chbre'] = u'EXT'
proprio.validate_changes()
proprio.history_gen()
proprio.save()
# On supprime le compte crans (on essaye)
def post_deletion(proprio, cont):
if not "cransAccount" in proprio['objectClass']:
self.display_item(item=proprio, title="Adhérent déménagé hors campus, machines et compte crans supprimées")
else:
self.display_item(item=proprio, title="Adhérent déménagé hors campus, machines supprimées et compte crans conservé")
raise Continue(cont)
self.proprio_compte_delete(proprio=proprio, cont=TailCall(post_deletion, proprio=proprio, cont=success_cont()), force=True)
else:
raise Continue(cont)
else:
raise EnvironmentError("Impossible, on a fait tous les cas, python est buggué")
(code, output) = self.handle_dialog(cont, box)
self_cont = TailCall(self.proprio_chambre_ext, proprio=proprio, keep_machine=keep_machine, keep_compte=keep_compte, success_cont=success_cont, cont=cont)
return self.handle_dialog_result(
code=code,
output=output,
cancel_cont=cont,
error_cont=self_cont,
codes_todo=[([self.dialog.DIALOG_OK], todo, [output, proprio, success_cont, cont])]
)
def proprio_chambre(self, proprio, cont, default_item=None):
"""Permet de faire déménager d'adhérent"""
a = attributs
menu_droits = {
'0' : [a.cableur, a.nounou],
'1' : [a.cableur, a.nounou],
'2' : [a.cableur, a.nounou],
'3' : [a.cableur, a.nounou],
}
menu = {
"0": {'text':"Déménagement sur le campus", 'callback':self.proprio_chambre_campus, 'help': "Déménagement vers une chambre sur le campus, on ne demande que le bâtiment et la chambre"},
"1": {'text':"Déménagement à l'extérieur en conservant les machines", "callback": TailCall(self.proprio_chambre_ext, keep_machine=True, keep_compte=True), "help": "Pour concerver ses machines, il faut donner un adresse postale complète"},
"2": {'text':"Départ du campus en conservant son compte", "callback":TailCall(self.proprio_chambre_ext, keep_machine=False, keep_compte=True), "help":"Supprime les machines mais concerve le compte crans, l'adresse passe en EXT sans plus d'information"},
"3": {'text':"Départ du campus en supprimant son compte", "callback":TailCall(self.proprio_chambre_ext, keep_machine=False, keep_compte=False), "help":"Supprime les machines et le compte crans, l'adhérent reste dans la base de donnée, il est possible de mettre une redirection du mail crans vers une autre adresse dans bcfg2"},
}
menu_order = [str(i) for i in range(4)]
def box(default_item=None):
return self.dialog.menu(
"Quel est le type du déménagement ?",
width=0,
height=0,
menu_height=0,
timeout=self.timeout,
item_help=1,
default_item=str(default_item),
title="Déménagement de %s %s" % (proprio.get('prenom', [''])[0], proprio["nom"][0]),
scrollbar=True,
cancel_label="Retour",
backtitle=self._connected_as(),
choices=[(k, menu[k]['text'], menu[k]['help']) for k in menu_order if self.has_right(menu_droits[k], proprio)])
def todo(tag, menu, proprio, self_cont, cont):
if not tag in menu_order:
raise Continue(self_cont)
else:
raise Continue(TailCall(menu[tag]['callback'], cont=self_cont, proprio=proprio, success_cont=cont))
(code, tag) = self.handle_dialog(cont, box, default_item)
self_cont = TailCall(self.proprio_chambre, proprio=proprio, cont=cont, default_item=tag)
return self.handle_dialog_result(
code=code,
output=tag,
cancel_cont=cont,