fin_connexion: going to prod
This commit is contained in:
parent
b6d3917ef7
commit
9faaf0d6b6
3 changed files with 74 additions and 41 deletions
|
@ -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)
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
{{To}}
|
"{{ adh|name }}" <{{To}}>
|
||||||
|
|
|
@ -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*.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue