diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index bb9099a3..62296f08 100755 --- a/gestion/gest_crans.py +++ b/gestion/gest_crans.py @@ -631,15 +631,70 @@ def set_responsable(club): else: club.responsable(resp) -def set_responsables(club): - """ Modifie les responsable d'un club """ - arg = u'--title "Responsable du club" ' - arg += u'--msgbox "Séléctionnez l\'adhérent responsable du club\n\n\n" 0 0' - dialog(arg) - resp = select(club, u'du responsable du club a', 'ro') - if not resp: return 1 - else: - club.responsable(resp) +def set_imprimeurs(club): + """ Modifie les imprimeurs d'un club """ + while 1: + arg = u'--title "Imprimeurs de %s" ' % club.Nom() + if len(club.imprimeurs()) > 0: + arg += u'--menu "Action ?" 0 0 0 ' + arg += u'"Enlever" "Enlever un imprimeur" ' + else: + arg += u'--menu "Il n\'y a aucun imprimeur pour ce club." 0 0 0 ' + arg += u'"Ajouter" "Ajouter un imprimeur" ' + annul, res = dialog(arg) + if annul: break + if res[0] == 'Enlever': + liste = map(lambda s: db.search("aid=%s" % s)['adherent'][0], club.imprimeurs()) + if len(liste) == 1: + # Une seule réponse + choix = liste[0] + else: + # Il faut choisir + while 1: + os.system('clear') + choix = None + print "Ce club a plusieurs imprimeurs :" + aff(liste) + i = affich_tools.prompt(u'Votre choix ? (0 pour annuler) aid =') + if i == '0': break + for v in liste: + if v.id() == i: + choix = v + break + if not choix: + # Redemande le choix + print 'Choix invalide' + continue + if choix: break + + if not choix: + continue + + arg = u'--title "Enlever un imprimeur" ' + arg += u'--yesno "Enlever l\'imprimeur %s ? \n\n" 0 0' % choix.Nom() + no, res = dialog(arg) + if not no: + if club.imprimeurs(retirer=str(choix.id())): + arg = u'--title "Enlever un imprimeur" ' + arg += u'--msgbox "Imprimeur enlevé\n\n\n" 0 0' + dialog(arg) + else: + arg = u'--title "Enlever un imprimeur" ' + arg += u'--msgbox "Cet adhérent n\'est pas imprimeur du club !\n\n\n" 0 0' + dialog(arg) + + elif res[0] == 'Ajouter': + newimp = select(club, u'd\'un nouvel imprimeur a', 'ro') + if newimp: + if club.imprimeurs(ajouter=str(newimp.id())): + arg = u'--title "Ajout imprimeur" ' + arg += u'--msgbox "Imprimeur ajouté\n\n\n" 0 0' + dialog(arg) + else: + arg = u'--title "Ajout imprimeur" ' + arg += u'--msgbox "Cet adhérent est déjà imprimeur !\n\n\n" 0 0' + dialog(arg) + continue def set_club_nom(club): # Nom du club @@ -1123,6 +1178,7 @@ def modif_club(club): arg += u'--menu "Que souhaitez vous modifier ?" 0 0 0 ' arg += u'"NomClub" "Modifier le nom du club" ' arg += u'"Responsable" "Changer le responsable du club %s" ' % club.responsable().Nom() + arg += u'"Imprimeurs" "Changer la liste des imprimeurs" ' arg += u'"Administratif" "Précâblage" ' arg += u'"Local" "Modifier le local du club" ' arg += u'"Compte" "Créer un compte crans." ' @@ -1142,6 +1198,8 @@ def modif_club(club): set_club_nom(club) elif res[0] == 'Responsable': set_responsable(club) + elif res[0] == 'Imprimeurs': + set_imprimeurs(club) elif res[0] == 'Administratif': set_admin(club) elif res[0] == 'Compte': diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 31d114bc..a0e7c08f 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -1098,7 +1098,7 @@ class BaseClasseCrans(CransLdap): for champ in ['droits', 'controle', 'paiement', 'carteEtudiant', 'mailAlias', 'hostAlias', 'exempt', 'nvram', 'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', - 'homepageAlias']: + 'homepageAlias', 'imprimeurClub']: if champ in self.modifs: if champ == 'controle': # Ce n'est pas pareil que self._init_data.get('controle', ['']) @@ -2421,24 +2421,29 @@ class Club(BaseProprietaire): self._set('responsable', [adher.id()]) return adher - def responsables(self, ajouter=None, retirer=None): - """ - NE PAS UTILISER CETTE FONCTION - Elle correspond a un champ qui n'existe - pas encore dans le schema - Responsables du club, ajouter et retirer doivent - tre des instances de la classe adherent """ - if ajouter != None: - self._data['responsables'].remove(ajouter.id()) - self._data['responsables'].append(ajouter.id()) - elif retirer != None: - self._data['responsables'].remove(retirer.id()) + def imprimeurs(self, ajouter=None, retirer=None): + """Retourne la liste des aid des personnes autorisees a imprimer avec + le compte *@club-*, ou ajoute/retire un aid a cette liste.""" + if self._data.has_key('imprimeurClub'): + liste = list(self._data['imprimeurClub']) else: - resultat = [] - for aid in self._data['responsables']: - resultat.append(db.search('uid ='+uid)['adherent'][0]) - return adher - + liste = [] + if ajouter != None: + if len(db.search('aid=%s' % ajouter)['adherent']) > 0: + if ajouter not in liste: + liste.append(ajouter) + self._set('imprimeurClub', liste) + self.modifs['imprimeurClub'] = None + return True + return False + return False + elif retirer != None: + if retirer in liste: + liste.remove(retirer) + self._set('imprimeurClub', liste) + return True + return False + return liste def chbre(self, new=None): """ Défini le local du club diff --git a/gestion/whos.py b/gestion/whos.py index ed9a1e27..b225cebe 100755 --- a/gestion/whos.py +++ b/gestion/whos.py @@ -664,7 +664,7 @@ def machine_details(machine) : def club_details(club) : """ - Affichage du détail des propriétés d'un adhérent + Affichage du détail des propriétés d'un club """ f='' # Cid @@ -674,7 +674,11 @@ def club_details(club) : # responsale f += coul(u'Responsable : ','gras') + "%s\n" % club.responsable().Nom() - + + if len(club.imprimeurs()) > 0: + f += (coul(u'Imprimeurs : ', 'gras') + "%s\n" % ', '.join(map(lambda x: + club.search("aid=%s" % x)['adherent'][0].Nom(), club.imprimeurs()))) + # État administratif f += coul(u'État administratif : ','gras') jour=1 diff --git a/intranet/Root.py b/intranet/Root.py index 8b4338d5..16814658 100755 --- a/intranet/Root.py +++ b/intranet/Root.py @@ -164,11 +164,8 @@ def verifLogin(login = '', password = ''): if login_club == 'club-crans': if u'Nounou' not in adh.droits() and u'Bureau' not in adh.droits(): raise Exception, "Pas respo bureau ou nounou" - # gros hack moche et temporaire car je n'ai pas trop le temps et c'est presse - elif login_club == 'club-bde': - if login not in ['queue','jmarty','recher','monge']: - raise Exception, "Pas dans les respos du BDE" - elif adh.id() not in club._data['responsable']: + elif (adh.id() not in club._data['responsable'] + and adh.id() not in club.imprimeurs()): raise Exception, "Pas respo club" cherrypy.session['uid'] = login_club cherrypy.session['droits'] = []