Commit 49cef4c0 authored by Pierre-Elliott Bécue's avatar Pierre-Elliott Bécue

Passage aux adhésions glissantes (partie I, sans lc_ldap)

parent 169b7000
...@@ -28,7 +28,7 @@ Options : ...@@ -28,7 +28,7 @@ Options :
-h : Afficher cette aide -h : Afficher cette aide
-v : Afficher les totaux par personne -v : Afficher les totaux par personne
-vv : Afficher tous les mouvements par personne -vv : Afficher tous les mouvements par personne
Les dates doivent etre de la forme jj/mm/aaaa.""" Les dates doivent etre de la forme jj/mm/aaaa."""
import sys import sys
...@@ -40,7 +40,6 @@ import time ...@@ -40,7 +40,6 @@ import time
db = crans_ldap() db = crans_ldap()
date_debut_ann_scol = time.mktime((ann_scol, 8, 1, 0, 0, 0, 0, 0, 0)) date_debut_ann_scol = time.mktime((ann_scol, 8, 1, 0, 0, 0, 0, 0, 0))
paiement_ann_scol = "paiement+%d" % ann_scol
def datestrtoint(strdate): def datestrtoint(strdate):
u""" Convertit une date en entier. """ u""" Convertit une date en entier. """
...@@ -139,6 +138,6 @@ def calcul_soldes(): ...@@ -139,6 +138,6 @@ def calcul_soldes():
cprint('Credit total : ' + str(totalcredit) + ' euros', 'vert') cprint('Credit total : ' + str(totalcredit) + ' euros', 'vert')
if verbose >= 1: if verbose >= 1:
cprint('=' * 80, 'bleu') cprint('=' * 80, 'bleu')
if __name__ == "__main__": if __name__ == "__main__":
calcul_soldes() calcul_soldes()
...@@ -18,7 +18,7 @@ def _need_conn(f): ...@@ -18,7 +18,7 @@ def _need_conn(f):
if __name__.endswith('annuaires_pg_test'): if __name__.endswith('annuaires_pg_test'):
host='localhost' host='localhost'
else: else:
host='pgsql.adm.crans.org' host='pgsql.v4.adm.crans.org'
# "connecting …" # "connecting …"
try: try:
if not conn: if not conn:
......
...@@ -13,6 +13,7 @@ import datetime ...@@ -13,6 +13,7 @@ import datetime
import time import time
import re import re
import lc_ldap.shortcuts import lc_ldap.shortcuts
from lc_ldap.crans_utils import fromGeneralizedTimeFormat, toGeneralizedTimeFormat
conn = lc_ldap.shortcuts.lc_ldap_admin() conn = lc_ldap.shortcuts.lc_ldap_admin()
import mail as mail_module import mail as mail_module
...@@ -38,12 +39,11 @@ year = config.ann_scol ...@@ -38,12 +39,11 @@ year = config.ann_scol
delai = config.demenagement_delai delai = config.demenagement_delai
# On récupère ceux qui n'ont pas payé cette année # On récupère ceux qui n'ont pas payé cette année
now = time.time()
if config.periode_transitoire: if config.periode_transitoire:
bad_boys_e_s = conn.search(u'(&(aid=*)(chbre=????)(paiement=%d)(!(paiement=%d)))' % (year-1,year)) bad_boys_e_s = conn.search(u'(&(aid=*)(chbre=????)(|(&(paiement=%d)(!(paiement=%d)))(finAdhesion<=%s)(finConnexion<=%s)))' % (year-1, year, toGeneralizedTimeFormat(now), toGeneralizedTimeFormat(now)))
else: else:
bad_boys_e_s = conn.search(u'(&(aid=*)(chbre=????)(paiement=%d))' % year) bad_boys_e_s = conn.search(u'(&(aid=*)(chbre=????)(|(paiement=%d)(finAdhesion>=%s)(finConnexion>=%s)))' % (year, toGeneralizedTimeFormat(now), toGeneralizedTimeFormat(now)))
now = time.time()
to_print = [] to_print = []
to_error = [] to_error = []
...@@ -56,7 +56,7 @@ for clandestin in bad_boys_e_s: ...@@ -56,7 +56,7 @@ for clandestin in bad_boys_e_s:
if x <> None: if x <> None:
kickout_date = x.group(1) kickout_date = x.group(1)
exchambre = x.group(2) exchambre = x.group(2)
machine_liste = clandestin.machines() machine_liste = clandestin.machines()
# On lui accorde un délai # On lui accorde un délai
kickout_date = time.mktime(time.strptime(kickout_date, "%d/%m/%Y %H:%M")) kickout_date = time.mktime(time.strptime(kickout_date, "%d/%m/%Y %H:%M"))
...@@ -77,7 +77,7 @@ for clandestin in bad_boys_e_s: ...@@ -77,7 +77,7 @@ for clandestin in bad_boys_e_s:
mailer = os.popen("/usr/sbin/sendmail -t", "w") mailer = os.popen("/usr/sbin/sendmail -t", "w")
mailer.write(mail + "\n.") mailer.write(mail + "\n.")
mailer.close() mailer.close()
else: else:
for m in machine_liste: for m in machine_liste:
try: try:
......
...@@ -30,7 +30,8 @@ else: ...@@ -30,7 +30,8 @@ else:
ann_scol = dat[0] ann_scol = dat[0]
periode_transitoire = False periode_transitoire = False
duree_periode_transitoire = 45*86400 debut_periode_transitoire = time.mktime(time.strptime("%s/08/16 00:00:00" % (ann_scol,), "%Y/%m/%d %H:%M:%S"))
fin_periode_transitoire = time.mktime(time.strptime("%s/09/30 23:59:59" % (ann_scol,), "%Y/%m/%d %H:%M:%S"))
## Bloquage si carte d'étudiants manquante pour l'année en cours ## Bloquage si carte d'étudiants manquante pour l'année en cours
# /!\ Par sécurité, ces valeurs sont considérées comme False si # /!\ Par sécurité, ces valeurs sont considérées comme False si
......
This diff is collapsed.
This diff is collapsed.
...@@ -38,7 +38,7 @@ for adh in adhs : ...@@ -38,7 +38,7 @@ for adh in adhs :
if not bat in bats : if not bat in bats :
bat = '?' bat = '?'
liste[bat].append( u'%s %s' % ( adh.nom(), adh.prenom() ) ) liste[bat].append( u'%s %s' % ( adh.nom(), adh.prenom() ) )
# création du fichier tex # création du fichier tex
######################### #########################
...@@ -65,7 +65,7 @@ for bat in bats + '?' : ...@@ -65,7 +65,7 @@ for bat in bats + '?' :
\\textbf{Nom Prenom} & \\textbf{Signature} \\\\ \\textbf{Nom Prenom} & \\textbf{Signature} \\\\
\\hline \\hline
\\endhead""" % {'bat' : titre(bat) } \\endhead""" % {'bat' : titre(bat) }
# ajout des adhérents # ajout des adhérents
liste[bat].sort() liste[bat].sort()
for adh in liste[bat] : for adh in liste[bat] :
......
...@@ -179,17 +179,13 @@ def adhers_brief(adhers) : ...@@ -179,17 +179,13 @@ def adhers_brief(adhers) :
ook = u'\x1b[1;32mO\x1b[1;0m' ook = u'\x1b[1;32mO\x1b[1;0m'
nok = u'\x1b[1;31mn\x1b[1;0m' nok = u'\x1b[1;31mn\x1b[1;0m'
# Paiement # Paiement
if ann_scol in a.paiement(): if a.adhesion() > time() or a.paiement():
if 'p' in a.controle(): paid = ook if 'p' in a.controle(): paid = ook
else: paid = ok else: paid = ok
elif isinstance(a,Adherent) and not a.adherentPayant(): paid = coul('G', 'bleu')
else: paid = nok else: paid = nok
# Précablage
if ann_scol+1 in a.paiement() : paid = coul(paid,'f_vert')
# Carte d'étudiant # Carte d'étudiant
if ann_scol in a.carteEtudiant(): if a.carteEtudiant():
if 'c' in a.controle(): carte = ook if 'c' in a.controle(): carte = ook
else: carte = ok else: carte = ok
else : carte = nok else : carte = nok
...@@ -254,11 +250,8 @@ def machines_brief(machines) : ...@@ -254,11 +250,8 @@ def machines_brief(machines) :
p = a.Nom() p = a.Nom()
# A jour administrativement # A jour administrativement
if ann_scol not in a.paiement() or ann_scol not in a.carteEtudiant(): if (a.adhesion() > time() and ann_scol not in a.paiement()) or not a.carteEtudiant():
if isinstance(a, Adherent) and not a.adherentPayant(): p = coul(p,'rouge')
p = coul(p, 'bleu')
else:
p = coul(p,'rouge')
# Données # Données
data.append([m.id(), m.rid() , t, m.nom().split('.')[0], p, a.chbre(), bl]) data.append([m.id(), m.rid() , t, m.nom().split('.')[0], p, a.chbre(), bl])
...@@ -515,24 +508,22 @@ def adher_details(adher) : ...@@ -515,24 +508,22 @@ def adher_details(adher) :
f += u"\n" f += u"\n"
# État administratif # État administratif
f += coul("Date d'inscription : ", "gras") f += coul(u"Date d'inscription : ", "gras")
f += strftime('%d/%m/%Y %H:%M:%S', localtime(adher.dateInscription())) f += strftime('%d/%m/%Y %H:%M:%S', localtime(adher.dateInscription()))
f += coul(u'\nÉtat administratif : ','gras') f += coul(u'\nÉtat administratif : ','gras')
jour=1 jour = True
if ann_scol not in adher.carteEtudiant() : if not adher.carteEtudiant() :
f += coul(u"manque carte d'étudiant",'violet') f += coul(u"manque carte d'étudiant",'violet')
jour = 0 jour = False
if ann_scol not in adher.paiement() : if ann_scol not in adher.paiement() and (adher.adhesion() <= time()):
if not jour : f += ' et ' if not jour: f += ' et '
if isinstance(adher, Adherent) and not adher.adherentPayant():
f += coul(u"inscription gratuite ", 'bleu')
else: else:
f += coul(u"cotisation %s/%d non réglée"% (ann_scol, ann_scol+1 ),'violet') f += coul(u"Non adhérent actuellement.",'violet')
jour = 0 jour = False
if jour : if jour:
f += coul(u"à jour",'vert') f += coul(u"à jour",'vert')
f += '\n' f += "\n"
# Telephone # Telephone
tel = adher.tel() tel = adher.tel()
...@@ -591,30 +582,25 @@ def adher_details(adher) : ...@@ -591,30 +582,25 @@ def adher_details(adher) :
f += coul(u" (droits gelés car pas cotisé cette année)",'bleu') f += coul(u" (droits gelés car pas cotisé cette année)",'bleu')
f += u'\n' f += u'\n'
# Adhésion
if adher.adhesion() > time():
f += coul(u"Adhésion jusqu'au %s" % strftime("%d/%m/%Y %H:%M:%S", localtime(adher.adhesion())), "vert")
f += u"\n"
elif adher.paiement():
f += coul(u"Paiement pour %s/%s ok (connexion inclue)" % (ann_scol, ann_scol+1), "vert")
f += u"\n"
# Paiement # Paiement
if adher.paiement() : if adher.connexion() > time():
if len(adher.paiement()) == 1 : f += coul(u"Connexion jusqu'au %s" % strftime("%d/%m/%Y %H:%M:%S", localtime(adher.adhesion())), "vert")
f += coul(u'Cotisation payée pour l\'année scolaire :','gras') if adher.adhesion() < adher.connexion():
else : f += coul(u"(Théoriquement %s, sous réserve de réadhésion)" % (strftime("%d/%m/%Y %H:%M:%S", localtime(adher.connexion())),), "rouge")
f += coul(u'Cotisation payée pour les années scolaires :','gras')
g = u''
for an in adher.paiement() : g += u" %i-%i" % ( an, an+1 )
if len(g) > 35 : f += '\n\t'
f += g
if 'p' in adher.controle(): f += coul(u' (OK)', 'vert')
f += u'\n' f += u'\n'
# Cartes d'étudiant fournie # Carte d'étudiant fournie
if adher.carteEtudiant() : if adher.carteEtudiant():
if len(adher.carteEtudiant()) == 1 : f += coul(u"Carte d'étudiant fournie.",'gras')
f += coul(u"Carte d'étudiant fournie pour l'année scolaire :",'gras') if 'c' in adher.controle(): f += coul(u' (Contrôle OK)', 'vert')
else :
f += coul(u"Carte d'étudiant fournie pour les années scolaires :",'gras')
g = u''
for an in adher.carteEtudiant() : g += u" %i-%i" % ( an, an+1 )
if len(g) > 25 : f += '\n\t'
f += g
if 'c' in adher.controle(): f += coul(u' (OK)', 'vert')
f += u'\n' f += u'\n'
f += _blacklist(adher) f += _blacklist(adher)
...@@ -820,13 +806,12 @@ def club_details(club) : ...@@ -820,13 +806,12 @@ def club_details(club) :
# État administratif # État administratif
f += coul(u'État administratif : ','gras') f += coul(u'État administratif : ','gras')
jour=1 jour = True
if ann_scol not in club.paiement() : if club.adhesion() < time() and not club.paiement():
if not jour : f += ' et ' jour = False
f += coul(u"charte %s/%d non signée"% (ann_scol, ann_scol+1 ),'violet') f += coul(u"Non adhérent." ,'violet')
jour = 0
if jour : if jour:
f += coul(u"à jour",'vert') f += coul(u"à jour",'vert')
f += '\n' f += '\n'
...@@ -843,14 +828,12 @@ def club_details(club) : ...@@ -843,14 +828,12 @@ def club_details(club) :
f += coul(u'VLAN : ','gras') + u'%s' % vlans f += coul(u'VLAN : ','gras') + u'%s' % vlans
f += u'\n' f += u'\n'
# Paiement # Adhésion
if club.paiement() : if club.adhesion() > time():
f += coul(u'Charte signée pour les années scolaires :','gras') f += coul(u"Adhésion jusque %s." % (strftime("%d/%m/%Y %H:%M:%S", localtime(club.adhesion())),), "vert")
g = '' f += '\n'
for an in club.paiement() : g += " %i-%i" % ( an, an+1 ) elif ann_scol in club.paiement():
if len(g) > 35 : f += '\n\t' f += coul(u"Adhésion pour l'année en cours", "vert")
f += g
if 'p' in club.controle(): f += coul(u' (OK)', 'vert')
f += '\n' f += '\n'
login = club.compte() login = club.compte()
...@@ -883,6 +866,14 @@ def club_details(club) : ...@@ -883,6 +866,14 @@ def club_details(club) :
else : else :
f += 'aucune' f += 'aucune'
f += u"\n"
f += coul(u'Facture(s) : ','gras')
m = club.factures()
if m :
f += u'\n' + list_factures(m)
else :
f += u'aucune'
return f return f
########################################### ###########################################
...@@ -1014,8 +1005,6 @@ def borne_clients_canal(borne) : ...@@ -1014,8 +1005,6 @@ def borne_clients_canal(borne) :
wl = subprocess.Popen("ssh -o StrictHostKeyChecking=no -i %s root@%s 'cat /tmp/auth-mac.dump ; echo -n \"CANAL \" ; /usr/sbin/nvram get wl0_channel'" % (clef, borne), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) wl = subprocess.Popen("ssh -o StrictHostKeyChecking=no -i %s root@%s 'cat /tmp/auth-mac.dump ; echo -n \"CANAL \" ; /usr/sbin/nvram get wl0_channel'" % (clef, borne), shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
wl.stdin.close() wl.stdin.close()
for line in wl.stdout.readlines(): for line in wl.stdout.readlines():
print 'coucou'
print line
# Chaque ligne est de la forme # Chaque ligne est de la forme
# 00:11:22:33:44:55 -20 # 00:11:22:33:44:55 -20
line = line.strip().split() line = line.strip().split()
......
...@@ -49,13 +49,17 @@ elif arg == "fichier" : ...@@ -49,13 +49,17 @@ elif arg == "fichier" :
data = db.search(filtre) data = db.search(filtre)
return len(data['adherent']) + len(data['club']) return len(data['adherent']) + len(data['club'])
def count_adh():
data = db.get_adherents()
return len(data['adherent']) + len(data['club'])
total = 0 total = 0
for bat in 'abcghijmpo' : for bat in 'abcghijmpo' :
nb = count('paiement=ok&chbre=%s*' % bat) nb = count_adh()
total += nb total += nb
file.write("bat%s.value %d\n" % (bat, nb)) file.write("bat%s.value %d\n" % (bat, nb))
nb = count('paiement=ok&chbre=EXT') nb = count_adh()
total += nb total += nb
file.write("wifi.value %d\n" % nb) file.write("wifi.value %d\n" % nb)
......
...@@ -16,7 +16,11 @@ ACTIONS POSSIBLES ...@@ -16,7 +16,11 @@ ACTIONS POSSIBLES
# Licence : GPLv2 # Licence : GPLv2
import sys, os, re, time, cPickle import sys
import os
import re
import time
import cPickle
from time import mktime, time, localtime, strptime, strftime from time import mktime, time, localtime, strptime, strftime
from socket import gethostname from socket import gethostname
from smtplib import SMTP from smtplib import SMTP
...@@ -187,7 +191,7 @@ Légende : ...@@ -187,7 +191,7 @@ Légende :
- F : existence d'un .forward - F : existence d'un .forward
- M : existence de mails non lus - M : existence de mails non lus
-- --
comptes_inactifs.py comptes_inactifs.py
""" """
inscrits = [] inscrits = []
...@@ -208,7 +212,7 @@ comptes_inactifs.py ...@@ -208,7 +212,7 @@ comptes_inactifs.py
mail = nb_mails_non_lus(login) mail = nb_mails_non_lus(login)
mail = mail == None and u'?' or mail > 0 and u'X' or u' ' mail = mail == None and u'?' or mail > 0 and u'X' or u' '
ligne = (a.id(), login, a.Nom(), date, forward, mail) ligne = (a.id(), login, a.Nom(), date, forward, mail)
if ann_scol in a.paiement(): if ann_scol in a.paiement() or a.adhesion() > time():
inscrits.append(ligne) inscrits.append(ligne)
else: else:
anciens.append(ligne) anciens.append(ligne)
...@@ -292,7 +296,7 @@ comptes_inactifs.py ...@@ -292,7 +296,7 @@ comptes_inactifs.py
recapitulatif += u""" recapitulatif += u"""
Total : %d Total : %d
-- --
comptes_inactifs.py comptes_inactifs.py
""" % total """ % total
send_email(mail_sender, send_email(mail_sender,
......
...@@ -69,11 +69,11 @@ def generate_ps(sanction, proprio, db): ...@@ -69,11 +69,11 @@ def generate_ps(sanction, proprio, db):
log('Generate deconnexion notice for %s' % proprio.Nom()) log('Generate deconnexion notice for %s' % proprio.Nom())
# Dossier de génération du ps # Dossier de génération du ps
dossier = '/usr/scripts/surveillance/fiche_deconnexion' dossier = '/usr/scripts/surveillance/fiche_deconnexion'
# Base pour le nom du fichier # Base pour le nom du fichier
fichier = time.strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, fichier = time.strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction,
strip_accents(proprio.Nom().lower().replace(' ', '-'))) strip_accents(proprio.Nom().lower().replace(' ', '-')))
# Création du fichier tex # Création du fichier tex
format_date = '%A %d %B %Y' format_date = '%A %d %B %Y'
template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read() template = file('%s/deconnexion_%s.tex' % (dossier, sanction)).read()
...@@ -103,9 +103,9 @@ def generate_ps(sanction, proprio, db): ...@@ -103,9 +103,9 @@ def generate_ps(sanction, proprio, db):
if sanction == 'upload' : if sanction == 'upload' :
template = template.replace('~limitehard~', str(upload.hard)) template = template.replace('~limitehard~', str(upload.hard))
template = template.replace('~nbadher~', str(len(db.search('paiement=ok')['adherent']))) template = template.replace('~nbadher~', str(len(db.search('paiement=ok')['adherent'])))
file('%s/%s.tex' % (dossier, fichier), 'w').write(template) file('%s/%s.tex' % (dossier, fichier), 'w').write(template)
# Compilation du fichier latex # Compilation du fichier latex
# Paquets nécessaires : texlive-latex-base, texlive-latex-recommended, # Paquets nécessaires : texlive-latex-base, texlive-latex-recommended,
# texlive-latex-extra, texlive-lang-french, texlive-luatex, # texlive-latex-extra, texlive-lang-french, texlive-luatex,
...@@ -123,18 +123,18 @@ def generate_ps(sanction, proprio, db): ...@@ -123,18 +123,18 @@ def generate_ps(sanction, proprio, db):
strip_accents(proprio.Nom()))) strip_accents(proprio.Nom())))
log(exceptions.formatExc()) log(exceptions.formatExc())
raise e raise e
if __name__ == "__main__": if __name__ == "__main__":
def log(x): def log(x):
print x print x
def aide(): def aide():
print help print help
sys.exit(0) sys.exit(0)
if '--help' in sys.argv or '-h' in sys.argv: if '--help' in sys.argv or '-h' in sys.argv:
aide() aide()
db = crans_ldap() db = crans_ldap()
sanction = '' sanction = ''
...@@ -145,7 +145,7 @@ if __name__ == "__main__": ...@@ -145,7 +145,7 @@ if __name__ == "__main__":
if not sanction : if not sanction :
print "Erreur : aucune sanction définie.\n" print "Erreur : aucune sanction définie.\n"
aide() aide()
if len(sys.argv) <= 2 : if len(sys.argv) <= 2 :
print "Erreur : aucun motif de recherche défini.\n" print "Erreur : aucun motif de recherche défini.\n"
aide() aide()
...@@ -162,7 +162,7 @@ if __name__ == "__main__": ...@@ -162,7 +162,7 @@ if __name__ == "__main__":
aide() aide()
else : else :
adherent = recherche[0] adherent = recherche[0]
# On génére alors le postscript # On génére alors le postscript
fichier = generate_ps(sanction, adherent, db) fichier = generate_ps(sanction, adherent, db)
print u'Le fichier %s a été généré.' % fichier print u'Le fichier %s a été généré.' % fichier
...@@ -26,14 +26,10 @@ def chap_ok(password, challenge, clear_pass) : ...@@ -26,14 +26,10 @@ def chap_ok(password, challenge, clear_pass) :
return False return False
def paiement_ok(adh): def paiement_ok(adh):
"""Paiment ok ?""" """Vérifie que le paiement est ok
global ann_scol
paid = max(adh.paiement() + [0]) """
if periode_transitoire: return adh.paiement_ok()
# Si periode transitoire, on accepte les personnes n'ayant pas
# réadhéré
ann_scol -= 1
return ann_scol <= paid
def do_auth(mac, prise): def do_auth(mac, prise):
"""Effectue l'authentification. Renvoie (success, msg, """Effectue l'authentification. Renvoie (success, msg,
...@@ -66,14 +62,14 @@ def do_auth(mac, prise): ...@@ -66,14 +62,14 @@ def do_auth(mac, prise):
if 'bloq' in m[0].blacklist_actif(): if 'bloq' in m[0].blacklist_actif():
return (-1, "Bloquage total des services pour cette machine", "") return (-1, "Bloquage total des services pour cette machine", "")
# les gens qui doivent être isolés # les gens qui doivent être isolés
if ('virus' in m[0].blacklist_actif() or 'ipv6_ra' in m[0].blacklist_actif() if ('virus' in m[0].blacklist_actif() or 'ipv6_ra' in m[0].blacklist_actif()
or 'autodisc_virus' in m[0].blacklist_actif()): or 'autodisc_virus' in m[0].blacklist_actif()):
return (0, "Bad boy", "isolement") return (0, "Bad boy", "isolement")
if ('carte_etudiant' in m[0].blacklist_actif()): if ('carte_etudiant' in m[0].blacklist_actif()):
return (0, "Manque carte etudiant", "accueil") return (0, "Manque carte etudiant", "accueil")
# Paiement proprio ? # Paiement proprio ?
if not paiement_ok(proprio): if not paiement_ok(proprio):
return (0, "N'a pas payé", "accueil") return (0, "N'a pas payé", "accueil")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment