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:
print ' '.join(map(spaced, line))
def batch_warn(liste):
with mail_module.ServerConnection() as mail_conn:
for adh in liste:
warn(mail_conn, adh)
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 # * Manuel (préventif): avertit d'une déco dans moins d'un mois
# select(c, today, today+30*DAY) 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 # * Quotidien (préventif) : avertit d'une déco dans moins d'un mois
# select(c, today+(30-1)*DAY, today+30*DAY) liste = select(db, today+(30-1)*DAY, today+30*DAY)
# * Quotidien (last chance): avertit d'une déco dans moins de 4 jours batch_warn(liste)
# (l'idée, c'est qu'il y a toujours une perm entre les deux) if '--daily-last-chance' in args:
# select(c, today+(4-1)*DAY, today+4*DAY) # * 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*.