fin_connexion: previent aussi les clubs
This commit is contained in:
parent
52c3795255
commit
418aa7b79b
9 changed files with 59 additions and 27 deletions
|
@ -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)
|
||||||
|
if deco >= PERIODE_TRANSITOIRE[0] and deco < PERIODE_TRANSITOIRE[1]:
|
||||||
|
data['sursis'] = PERIODE_TRANSITOIRE[1]
|
||||||
|
|
||||||
From = 'respbats@crans.org'
|
data.update({'From': 'respbats@crans.org'})
|
||||||
To = adh.get_mail()
|
mail_conn.send_template(tpl_name, data)
|
||||||
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())
|
|
||||||
|
|
||||||
|
|
||||||
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)}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
"{{ adh|name }}" <{{To}}>
|
"{{adh|name}}" <{{adh.get_mail()}}>
|
||||||
|
|
|
@ -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 .
|
||||||
|
|
1
gestion/mail/template/fin_connexion_club/From/fr
Normal file
1
gestion/mail/template/fin_connexion_club/From/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Les câbleurs du Crans <cableurs@crans.org>
|
2
gestion/mail/template/fin_connexion_club/README
Normal file
2
gestion/mail/template/fin_connexion_club/README
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Envoyé lorsque la connexion (effective, adh+connexion) d'un adhérent est sur le
|
||||||
|
point d'expirer.
|
1
gestion/mail/template/fin_connexion_club/Subject/fr
Normal file
1
gestion/mail/template/fin_connexion_club/Subject/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[Crans] Fin de connexion dans moins de {{ delai }} jours
|
1
gestion/mail/template/fin_connexion_club/To/fr
Normal file
1
gestion/mail/template/fin_connexion_club/To/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
"{{adh|name}}" <{{ adh.get_mail() }}>
|
1
gestion/mail/template/fin_connexion_club/X-Mailer/fr
Normal file
1
gestion/mail/template/fin_connexion_club/X-Mailer/fr
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{{ mailer }}
|
20
gestion/mail/template/fin_connexion_club/body/fr
Normal file
20
gestion/mail/template/fin_connexion_club/body/fr
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue