diff --git a/gestion/mail/fin_connexion.py b/gestion/mail/fin_connexion.py index b475908e..31b3e4d2 100755 --- a/gestion/mail/fin_connexion.py +++ b/gestion/mail/fin_connexion.py @@ -31,7 +31,7 @@ DAY = datetime.timedelta(days=1) FORMAT_LDAP = '%Y%m%d%H%M%S%z' #: 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 # 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 FILTRE_TPL = u"""(& - (aid=*) (&(finConnexion>=%(debut)s)(finAdhesion>=%(debut)s)) (|(!(finConnexion>=%(fin)s))(!(finAdhesion>=%(fin)s))) )""" @@ -67,31 +66,35 @@ FILTRE_TPL = u"""(& def warn(mail_conn, adh): """Envoie un mail d'avertissement à ``adh``, en utilisant la connexion mail ``mail_conn``""" - fin = min(max(parse_gtf(v.value) for v in adh[l]) \ - for l in ['finConnexion', 'finAdhesion'] ) + tpl_name = 'fin_connexion' + 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 data = { 'delai': delai, 'adh': adh, } - for l in ['adhesion', 'connexion']: - fin = max(parse_gtf(v.value) for v in adh['fin' + l.capitalize()]) - data['fin_%s' % l] = fin + for l in fields: + fin = max(parse_gtf(v.value) for v in adh[l]) + 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' - To = adh.get_mail() - 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): """Renvoie le datetime de fin effective de connexion de l'``adh``""" - value = min( max(parse_gtf(v.value) for v in adh['fin' + l]) - for l in ['Adhesion', 'Connexion']) + fields = ['finAdhesion'] + 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]: return PERIODE_TRANSITOIRE[1] return value @@ -142,7 +145,7 @@ def brief(c, debut, fin): for adh in to_warn: valeurs = [max(parse_gtf(v.value) for v in adh[l]) \ 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] print "%r %s %s;%s" % (adh, adh.dn.split(',', 1)[0], f_con, f_adh) return to_warn @@ -155,7 +158,7 @@ def prev_calendar(c, date): cal = calendar.Calendar() 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) by_day = {x: 0 for x in xrange(1, 32)} diff --git a/gestion/mail/template/fin_connexion/To/fr b/gestion/mail/template/fin_connexion/To/fr index 61b7314a..1ab08de8 100644 --- a/gestion/mail/template/fin_connexion/To/fr +++ b/gestion/mail/template/fin_connexion/To/fr @@ -1 +1 @@ -"{{ adh|name }}" <{{To}}> +"{{adh|name}}" <{{adh.get_mail()}}> diff --git a/gestion/mail/template/fin_connexion/body/fr b/gestion/mail/template/fin_connexion/body/fr index 08ec1203..bacdc8f6 100644 --- a/gestion/mail/template/fin_connexion/body/fr +++ b/gestion/mail/template/fin_connexion/body/fr @@ -1,13 +1,16 @@ Cher adhérent du Crans, Nous t'envoyons ce message pour t'informer que ta connexion arrive à -expiration dans moins de {{ delai }} jours.{% if fin_connexion > fin_adhesion %} -En effet, ton adhésion annuelle s'achève le {{ fin_adhesion|date}} même -si les frais de connexion restent acquis jusqu'au {{ fin_connexion|date }}. +expiration dans moins de {{ delai }} jours.{% if finConnexion > finAdhesion %} +En effet, ton adhésion annuelle s'achève le {{ finAdhesion|date}} même +si les frais de connexion restent acquis jusqu'au {{ finConnexion|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 %} +En effet, les frais de connexion sont valables jusqu'au {{ finConnexion|date }} +et ton adhésion annuelle s'achève le {{ finAdhesion|date }}. +{%- 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 lors d'une de nos permanences. Les horaires actuels sont disponibles à l'adresse www.crans.org/PermanencesCrans . diff --git a/gestion/mail/template/fin_connexion_club/From/fr b/gestion/mail/template/fin_connexion_club/From/fr new file mode 100644 index 00000000..d881fd7f --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/From/fr @@ -0,0 +1 @@ +Les câbleurs du Crans diff --git a/gestion/mail/template/fin_connexion_club/README b/gestion/mail/template/fin_connexion_club/README new file mode 100644 index 00000000..c8cf73ff --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/README @@ -0,0 +1,2 @@ +Envoyé lorsque la connexion (effective, adh+connexion) d'un adhérent est sur le +point d'expirer. diff --git a/gestion/mail/template/fin_connexion_club/Subject/fr b/gestion/mail/template/fin_connexion_club/Subject/fr new file mode 100644 index 00000000..d7b286c3 --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/Subject/fr @@ -0,0 +1 @@ +[Crans] Fin de connexion dans moins de {{ delai }} jours diff --git a/gestion/mail/template/fin_connexion_club/To/fr b/gestion/mail/template/fin_connexion_club/To/fr new file mode 100644 index 00000000..52a02de2 --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/To/fr @@ -0,0 +1 @@ +"{{adh|name}}" <{{ adh.get_mail() }}> diff --git a/gestion/mail/template/fin_connexion_club/X-Mailer/fr b/gestion/mail/template/fin_connexion_club/X-Mailer/fr new file mode 100644 index 00000000..f5d9c869 --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/X-Mailer/fr @@ -0,0 +1 @@ +{{ mailer }} diff --git a/gestion/mail/template/fin_connexion_club/body/fr b/gestion/mail/template/fin_connexion_club/body/fr new file mode 100644 index 00000000..a7b43ef8 --- /dev/null +++ b/gestion/mail/template/fin_connexion_club/body/fr @@ -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