fin_connexion: previent aussi les clubs

This commit is contained in:
Daniel STAN 2015-07-24 02:13:36 +02:00
parent 52c3795255
commit 418aa7b79b
9 changed files with 59 additions and 27 deletions

View file

@ -31,7 +31,7 @@ DAY = datetime.timedelta(days=1)
FORMAT_LDAP = '%Y%m%d%H%M%S%z' FORMAT_LDAP = '%Y%m%d%H%M%S%z'
#: Infos à oublier dans un datetime pour ne garder que le jour #: Infos à oublier dans un datetime pour ne garder que le jour
ERASE_DAY = { 'second': 0, 'minute': 0, 'microsecond': 0, 'hour': 0, } ERASE_DAY = {'second': 0, 'minute': 0, 'microsecond': 0, 'hour': 0, }
#: filtre ldap max(finConnexion) \in intervalle #: filtre ldap max(finConnexion) \in intervalle
# NB: finConnexion est un attribut ldap multivalué, et on s'intéresse ici # NB: finConnexion est un attribut ldap multivalué, et on s'intéresse ici
@ -49,7 +49,6 @@ FILTRE_TPL_SIMPLE = u'(&(finConnexion>=%(debut)s)(!(finConnexion>=%(fin)s)))'
# min(a,b) >= v <=> a >= v /\ b >= v # min(a,b) >= v <=> a >= v /\ b >= v
# min(a,b) < v <=> a < v \/ b < v # min(a,b) < v <=> a < v \/ b < v
FILTRE_TPL = u"""(& FILTRE_TPL = u"""(&
(aid=*)
(&(finConnexion>=%(debut)s)(finAdhesion>=%(debut)s)) (&(finConnexion>=%(debut)s)(finAdhesion>=%(debut)s))
(|(!(finConnexion>=%(fin)s))(!(finAdhesion>=%(fin)s))) (|(!(finConnexion>=%(fin)s))(!(finAdhesion>=%(fin)s)))
)""" )"""
@ -67,31 +66,35 @@ FILTRE_TPL = u"""(&
def warn(mail_conn, adh): def warn(mail_conn, adh):
"""Envoie un mail d'avertissement à ``adh``, en utilisant la connexion mail """Envoie un mail d'avertissement à ``adh``, en utilisant la connexion mail
``mail_conn``""" ``mail_conn``"""
fin = min(max(parse_gtf(v.value) for v in adh[l]) \ tpl_name = 'fin_connexion'
for l in ['finConnexion', 'finAdhesion'] ) fields = ['finAdhesion']
if 'aid' in adh:
fields.append('finConnexion')
else:
tpl_name += '_club'
fin = compute_fin_connexion(adh)
delai = (fin - datetime.datetime.now(pytz.UTC)).days delai = (fin - datetime.datetime.now(pytz.UTC)).days
data = { data = {
'delai': delai, 'delai': delai,
'adh': adh, 'adh': adh,
} }
for l in ['adhesion', 'connexion']: for l in fields:
fin = max(parse_gtf(v.value) for v in adh['fin' + l.capitalize()]) fin = max(parse_gtf(v.value) for v in adh[l])
data['fin_%s' % l] = fin data[l] = fin
deco = min(data[l] for l in fields)
From = 'respbats@crans.org' if deco >= PERIODE_TRANSITOIRE[0] and deco < PERIODE_TRANSITOIRE[1]:
To = adh.get_mail() data['sursis'] = PERIODE_TRANSITOIRE[1]
if not To:
print "No valid mail for %r" % adh
return
data.update({'To': To, 'From': From})
mailtxt = mail_module.generate('fin_connexion', data)
mail_conn.sendmail(From, [To], mailtxt.as_string())
data.update({'From': 'respbats@crans.org'})
mail_conn.send_template(tpl_name, data)
def compute_fin_connexion(adh): def compute_fin_connexion(adh):
"""Renvoie le datetime de fin effective de connexion de l'``adh``""" """Renvoie le datetime de fin effective de connexion de l'``adh``"""
value = min( max(parse_gtf(v.value) for v in adh['fin' + l]) fields = ['finAdhesion']
for l in ['Adhesion', 'Connexion']) if 'aid' in adh:
fields.append('finConnexion')
value = min(max(parse_gtf(v.value) for v in adh[l]) for l in fields)
if value >= PERIODE_TRANSITOIRE[0] and value < PERIODE_TRANSITOIRE[1]: if value >= PERIODE_TRANSITOIRE[0] and value < PERIODE_TRANSITOIRE[1]:
return PERIODE_TRANSITOIRE[1] return PERIODE_TRANSITOIRE[1]
return value return value
@ -142,7 +145,7 @@ def brief(c, debut, fin):
for adh in to_warn: for adh in to_warn:
valeurs = [max(parse_gtf(v.value) for v in adh[l]) \ valeurs = [max(parse_gtf(v.value) for v in adh[l]) \
for l in ['finConnexion', 'finAdhesion'] ] for l in ['finConnexion', 'finAdhesion'] ]
[f_con, f_adh] = [ coul(str(v), 'rouge' if v >= debut and v < fin else 'vert') \ [f_con, f_adh] = [coul(str(v), 'rouge' if v >= debut and v < fin else 'vert') \
for v in valeurs] for v in valeurs]
print "%r %s %s;%s" % (adh, adh.dn.split(',', 1)[0], f_con, f_adh) print "%r %s %s;%s" % (adh, adh.dn.split(',', 1)[0], f_con, f_adh)
return to_warn return to_warn
@ -155,7 +158,7 @@ def prev_calendar(c, date):
cal = calendar.Calendar() cal = calendar.Calendar()
first = datetime.datetime(day=1, month=month, year=year, tzinfo=pytz.UTC) first = datetime.datetime(day=1, month=month, year=year, tzinfo=pytz.UTC)
last = first.replace(month=1+month%12, year=year+int(month==12)) last = first.replace(month=1+month%12, year=year+int(month == 12))
disconnect = select(c, first, last) disconnect = select(c, first, last)
by_day = {x: 0 for x in xrange(1, 32)} by_day = {x: 0 for x in xrange(1, 32)}

View file

@ -1 +1 @@
"{{ adh|name }}" <{{To}}> "{{adh|name}}" <{{adh.get_mail()}}>

View file

@ -1,13 +1,16 @@
Cher adhérent du Crans, Cher adhérent du Crans,
Nous t'envoyons ce message pour t'informer que ta connexion arrive à Nous t'envoyons ce message pour t'informer que ta connexion arrive à
expiration dans moins de {{ delai }} jours.{% if fin_connexion > fin_adhesion %} expiration dans moins de {{ delai }} jours.{% if finConnexion > finAdhesion %}
En effet, ton adhésion annuelle s'achève le {{ fin_adhesion|date}} même En effet, ton adhésion annuelle s'achève le {{ finAdhesion|date}} même
si les frais de connexion restent acquis jusqu'au {{ fin_connexion|date }}. si les frais de connexion restent acquis jusqu'au {{ finConnexion|date }}.
{% else %} {% else %}
En effet, les frais de connexion sont valables jusqu'au {{ fin_connexion|date }} En effet, les frais de connexion sont valables jusqu'au {{ finConnexion|date }}
et ton adhésion annuelle s'achève le {{ fin_adhesion|date }}. et ton adhésion annuelle s'achève le {{ finAdhesion|date }}.
{% endif %} {%- endif %}{%- if sursis %}
Cependant, en raison de l'affluence de rentrée, ta connexion est prolongée
jusqu'au {{ sursis|date }}.{%- endif %}
Pour réadhérer ou prolonger ta connexion, tu peux nous retrouver Pour réadhérer ou prolonger ta connexion, tu peux nous retrouver
lors d'une de nos permanences. Les horaires actuels sont disponibles à lors d'une de nos permanences. Les horaires actuels sont disponibles à
l'adresse www.crans.org/PermanencesCrans . l'adresse www.crans.org/PermanencesCrans .

View file

@ -0,0 +1 @@
Les câbleurs du Crans <cableurs@crans.org>

View file

@ -0,0 +1,2 @@
Envoyé lorsque la connexion (effective, adh+connexion) d'un adhérent est sur le
point d'expirer.

View file

@ -0,0 +1 @@
[Crans] Fin de connexion dans moins de {{ delai }} jours

View file

@ -0,0 +1 @@
"{{adh|name}}" <{{ adh.get_mail() }}>

View file

@ -0,0 +1 @@
{{ mailer }}

View file

@ -0,0 +1,20 @@
Cher adhérent du Crans,
Nous t'envoyons ce message pour t'informer que la connexion du {{adh|name}},
dont tu es responsable, arrive à expiration dans moins de {{delai}} jours.
En effet, son adhésion annuelle s'achève le {{finAdhesion|date}}
{%- if sursis %}
Cependant, en raison de l'affluence de rentrée, la connexion est prolongée
jusqu'au {{ sursis|date }}.{%- endif %}
Pour réadhérer (gratuitement), tu peux nous retrouver lors d'une de nos
permanences. Les horaires actuels sont disponibles à
l'adresse www.crans.org/PermanencesCrans .
Le cas échéant, tu peux nous indiquer si tu souhaites modifier ou supprimer le
club, ses machines, ses imprimeurs ou le responsable.
À très bientôt !
--
Les membres actifs de l'association