42 * * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/update-ag-subscribers
42 6 * * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-membership-reminders
+ 21 0 1 * * BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/send-member-emails-to-advisors
Pour installer le `pre-commit` *hook* sur le dépôt utilisé par
Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` :
--- /dev/null
+#!/usr/bin/ruby1.9.1
+#-*- coding: utf-8 -*-
+
+require 'rubygems'
+require 'bundler'
+Bundler.setup
+
+require 'mail'
+require 'nos_oignons'
+
+Mail.defaults do
+ delivery_method :sendmail
+end
+
+NosOignons.send_member_emails_to_advisors!
--- /dev/null
+# language: fr
+
+Fonctionnalité: envoyer au comité de déontologie les emails des membres
+ Afin que le comité de déontologie puisse organiser une assemblée générale
+ extraordinaire sans avoir besoin de l'appui du conseil d'administration,
+ il est nécessaire de lui envoyer (chaque mois) les emails des membres
+ de l'association.
+
+ Scénario: Envoi de la liste des membres
+ Soit une base avec Jane, à jour de cotisation
+ Et avec Pierre qui n'a pas payé sa cotisation cette année
+ Et avec Fred qui doit renouveller sa cotisation d'ici 10 jours
+ Lorsque j'exécute send-member-emails-to-advisors
+ Alors un email doit avoir été envoyé au comité de déontologie
+ Et il doit contenir les adresses emails de Jane et Fred
NosOignons.send_membership_reminders!
end
+When /^j'exécute send\-member\-emails\-to\-advisors$/ do
+ NosOignons.send_member_emails_to_advisors!
+end
+
Then /^je ne dois pas avoir eu d'erreur$/ do
assert_exit_status(0)
end
Then /^(\d+) emails? (?:doit|doivent) avoir été envoyés?$/ do |count|
Mail::TestMailer.deliveries.should have(count).email
end
+
+Then /^un email doit avoir été envoyé au comité de déontologie$/ do
+ expect(Mail::TestMailer.deliveries).to have(1).email
+ expect(Mail::TestMailer.deliveries.first.to).to include('deontologie@nos-oignons.net')
+end
+
+Then /^il doit contenir les adresses emails de Jane et Fred$/ do
+ expect(Mail::TestMailer.deliveries.first.body).to include('jane@example.org')
+ expect(Mail::TestMailer.deliveries.first.body).to include('fred@example.org')
+end
+
module NosOignons
BOARD_EMAIL = 'ca@nos-oignons.net'
+ ADVISORS_EMAIL = 'deontologie@nos-oignons.net'
MEMBER_MAILING_LIST = 'ag'
# The following class methods are all meant to be called as command-line scripts
end
end
+ def send_member_emails_to_advisors!
+ uptodate_emails = NosOignons::Member.all.select(&:up_to_date?).collect(&:email)
+ subject = 'Adresses emails des members à jour de cotisation'
+ body = <<-END_OF_BODY.gsub(/^ /, '')
+ Cher comité de déontologie de Nos oignons,
+
+ Comme le prévoit les statuts l'article 12 des statuts de l'association,
+ vous devez être en mesure de pouvoir convoquer une assemblée générale
+ extraordinaire. Pour ce faire, voici donc la liste des emails à jour
+ de cotisation à la date d'aujourd'hui :
+
+ #{uptodate_emails.join("\n")}
+
+ Et merci encore de votre engagement auprès de Nos oignons !
+
+ --
+ Le robot du conseil d'administration
+ END_OF_BODY
+ mail = Mail.new :charset => 'utf-8',
+ :from => NosOignons::BOARD_EMAIL,
+ :to => NosOignons::ADVISORS_EMAIL,
+ :subject => subject,
+ :body => body
+ mail.deliver
+ end
+
def pre_commit_hook!
if system('git rev-parse --quiet --verify HEAD >/dev/null')
against = 'HEAD'