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