diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 5f83ff45..9dfe5733 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -290,10 +290,11 @@ class CransLdap: ['etudes', 'paiement', 'carteEtudiant', 'aid', 'postalAddress', 'historique', 'blacklist', 'droits', 'uidNumber', 'uid', 'info', 'solde', 'controle', 'contourneGreylist', 'rewriteMailHeaders', - 'ablacklist', 'homepageAlias', 'mailInvalide', 'charteMA'], \ + 'ablacklist', 'homepageAlias', 'mailInvalide', 'charteMA', + 'adherentPayant'], \ 'club': \ ['cid', 'responsable', 'paiement', 'historique', 'blacklist', - 'mailAlias', 'info', 'controle', 'ablacklist'], \ + 'mailAlias', 'info', 'controle', 'ablacklist', 'imprimeurClub'], \ 'machineFixe': non_auto_search_machines_champs, 'machineCrans': non_auto_search_machines_champs + ['prise'], 'borneWifi': non_auto_search_machines_champs + \ @@ -2022,6 +2023,19 @@ class Adherent(BaseProprietaire): # renvoie la valeur trouvée dans la base return bool(self._data.get('charteMA', [])) + def adherentPayant(self, valeur = None): + """ + L'adhérent paie sa cotisation (a droit au WiFi, à un compte Crans, ... True par défaut + """ + + if isinstance(valeur, bool): + self._set('adherentPayant', valeur and [] or ['FALSE']) + else if valeur is not None: + raise ValueError, u"adherentPayant prend un booléen comme argument" + + # bool d'une liste non vide est true, on inverse donc (la base ne peut contenir que FALSE) + return not bool(self._data.get('adherentPayant', [])) + def supprimer_compte(self): """ Supprime le compte sur zamok. Penser à définir l'adresse mail après. @@ -2108,6 +2122,9 @@ class Adherent(BaseProprietaire): l, login = preattr(login) login = login.lower() + if login and not self.adherentPayant(): + raise ValueError(u"L'adhérent ne paie pas de cotisation, il n'a pas droit à un compte.") + if 'posixAccount' in self._data['objectClass']: if login != self._data['uid']: # A déja un compte @@ -2768,11 +2785,15 @@ class Machine(BaseClasseCrans): net = [ '0.0.0.0/0' ] pool_ip = lister_ip_dispo('all') else: - try: - net = config.NETs[self.proprietaire().chbre()[0].lower()] - pool_ip = lister_ip_dispo(self.proprietaire().chbre()[0].lower()) - except: - raise RuntimeError(u'Impossible de trouver le réseau où placer la machine.') + if self.proprietaire().adherentPayant(): + try: + net = config.NETs[self.proprietaire().chbre()[0].lower()] + pool_ip = lister_ip_dispo(self.proprietaire().chbre()[0].lower()) + except: + raise RuntimeError(u'Impossible de trouver le réseau où placer la machine.') + else: + net = config.NETs["gratuit"] + pool_ip = lister_ip_dispo("gratuit") if ip == '': # On va prendre choisir une IP au hasard dans le pool des IP dispo