fin_connexion: going to prod

This commit is contained in:
Daniel STAN 2014-10-26 17:22:01 +01:00
parent b6d3917ef7
commit 9faaf0d6b6
3 changed files with 74 additions and 41 deletions

View file

@ -55,20 +55,15 @@ FILTRE_TPL = u"""(&
# usage : # usage :
# datetime.datetime.now(tz) # datetime.datetime.now(tz)
c = lc_ldap_readonly()
# Instant courant: on ne garde que le jour def warn(mail_conn, adh):
now = datetime.datetime.now() fin = min(max(parse_gtf(v.value) for v in adh[l]) \
for l in ['finConnexion', 'finAdhesion'] )
# Applique un delta, si spécifié delai = (fin - datetime.datetime.now(pytz.UTC)).days
for arg in sys.argv[1:]: data = {
if arg.startswith('+'): 'delai': delai,
now += int(arg[1:])*DAY 'adh': adh,
today = now.replace(**ERASE_DAY) }
print "Nous serons le %s" % today
def warn(adh, delai):
data = {'delai': delai}
for l in ['adhesion', 'connexion']: for l in ['adhesion', 'connexion']:
fin = max(parse_gtf(v.value) for v in adh['fin' + l.capitalize()]) fin = max(parse_gtf(v.value) for v in adh['fin' + l.capitalize()])
data['fin_%s' % l] = fin data['fin_%s' % l] = fin
@ -80,7 +75,7 @@ def warn(adh, delai):
return return
data.update({'To': To, 'From': From}) data.update({'To': To, 'From': From})
mailtxt = mail_module.generate('fin_connexion', data) mailtxt = mail_module.generate('fin_connexion', data)
print mailtxt mail_conn.sendmail(From, [To], mailtxt.as_string())
def compute_fin_connexion(adh): def compute_fin_connexion(adh):
@ -123,7 +118,7 @@ def brief(c, debut, fin):
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
def prev(c, date): def prev_calendar(c, date):
"""Prévisualise l'expiration des connexions sur le mois courant""" """Prévisualise l'expiration des connexions sur le mois courant"""
month = date.month month = date.month
year = date.year year = date.year
@ -139,37 +134,72 @@ def prev(c, date):
date = compute_fin_connexion(adh) date = compute_fin_connexion(adh)
by_day[date.day] += 1 by_day[date.day] += 1
spaces = 3 yield ['L', 'M', 'Me', 'J', 'V', 'S', 'D']
days = ['L', 'M', 'Me', 'J', 'V', 'S', 'D']
print " ".join(d + ' '*(spaces-len(d)) for d in days)
l = [] l = []
for d in cal.itermonthdays(year, month): for d in cal.itermonthdays(year, month):
if not d: if not d:
item = "" item = None
elif not by_day[d]:
item = "."
else: else:
item = str(by_day[d]) item = by_day[d]
l.append(item + ' '*(spaces-len(item))) l.append(item)
if len(l) == 7: if len(l) == 7:
print " ".join(l) yield l
l = [] l = []
if l: if l:
print " ".join(l) yield l+(7-len(l))*[None]
# zone de test def ascii_calendar(calendar):
#warn(c.search(u'aid=4281')[0], 7) spaces = 3
prev(c, today) def pretty_day(x):
if x is None:
return ''
if x == 0:
return '.'
return str(x)
def spaced(x):
v = pretty_day(x)
return v + (spaces-len(v))*' '
# Plusieurs type d'execution: for line in calendar:
# * Manuel (préventif): avertit d'une déco dans moins d'un mois print ' '.join(map(spaced, line))
# select(c, today, today+30*DAY)
# * Quotidien (préventif) : avertit d'une déco dans moins d'un mois def batch_warn(liste):
# select(c, today+(30-1)*DAY, today+30*DAY) with mail_module.ServerConnection() as mail_conn:
# * Quotidien (last chance): avertit d'une déco dans moins de 4 jours for adh in liste:
# (l'idée, c'est qu'il y a toujours une perm entre les deux) warn(mail_conn, adh)
# select(c, today+(4-1)*DAY, today+4*DAY)
if __name__ == '__main__':
db = lc_ldap_readonly()
now = datetime.datetime.now()
args = sys.argv[1:]
today = now.replace(**ERASE_DAY)
for arg in args:
# Applique un delta, si spécifié
if arg.startswith('+'):
now += int(arg[1:])*DAY
print "Nous serons le %s" % today
if '--preventif' in args:
# * Manuel (préventif): avertit d'une déco dans moins d'un mois
liste = select(db, today, today+30*DAY)
print "Va envoyer %d mails. Appuyer sur entrée." % len(liste)
raw_input()
batch_warn(liste)
if '--daily' in args:
# * Quotidien (préventif) : avertit d'une déco dans moins d'un mois
liste = select(db, today+(30-1)*DAY, today+30*DAY)
batch_warn(liste)
if '--daily-last-chance' in args:
# * Quotidien (préventif) : avertit d'une déco dans moins de 4 jours
# but: prévenir une dernière fois avant la prochaine perm
liste = select(db, today+(4-1)*DAY, today+4*DAY)
batch_warn(liste)
if '--prev' in args:
ascii_calendar(prev_calendar(db, today))
# TODO
# * Mensuel: avertit les cableurs des connexions à expiration dans le mois # * Mensuel: avertit les cableurs des connexions à expiration dans le mois
# prochain # prochain
# select(c, first_day, last_day+DAY) # select(c, first_day, last_day+DAY)

View file

@ -1 +1 @@
{{To}} "{{ adh|name }}" <{{To}}>

View file

@ -1,10 +1,13 @@
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. En effet, elle est valable jusqu'au expiration dans moins de {{ delai }} jours.{% if fin_connexion > fin_adhesion %}
{{ fin_connexion|date }}, sous réserve d'adhésion, s'achevant le En effet, ton adhésion annuelle s'achève le {{ fin_adhesion|date}} même
{{ fin_adhesion|date }}. si les frais de connexion restent acquis jusqu'au {{ fin_connexion|date }}.
{% else %}
En effet, les frais de connexion sont valables jusqu'au {{ fin_connexion|date }}
et ton adhésion annuelle s'achève le {{ fin_adhesion|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. Pour rappel, elles ont lieu du lundi au vendredi, lors d'une de nos permanences. Pour rappel, elles ont lieu du lundi au vendredi,
de 12h30 à 13h30 et de 18h30 à 20h30, *sauf le mardi soir*. de 12h30 à 13h30 et de 18h30 à 20h30, *sauf le mardi soir*.