]> nos-oignons.net Git - gestion-adh.git/commitdiff
Implement send-member-emails-to-advisors
authorLunar <lunar@anargeek.net>
Fri, 29 Nov 2013 10:10:41 +0000 (11:10 +0100)
committerLunar <lunar@anargeek.net>
Fri, 29 Nov 2013 10:10:41 +0000 (11:10 +0100)
README
bin/send-member-emails-to-advisors [new file with mode: 0755]
features/send-member-emails-to-advisors.feature [new file with mode: 0644]
features/step_definitions/commands.rb
features/step_definitions/emails.rb
lib/nos_oignons.rb

diff --git a/README b/README
index 96cdd549d7cc6a08cfb3174c32958d638360a38c..7ba2097f73c34cc0db97681098256cf729b4d5bd 100644 (file)
--- a/README
+++ b/README
@@ -165,6 +165,7 @@ Ensuite, pour exécuter régulièrement les scripts via le *crontab* du compte
 
     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` :
diff --git a/bin/send-member-emails-to-advisors b/bin/send-member-emails-to-advisors
new file mode 100755 (executable)
index 0000000..b85d25d
--- /dev/null
@@ -0,0 +1,15 @@
+#!/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!
diff --git a/features/send-member-emails-to-advisors.feature b/features/send-member-emails-to-advisors.feature
new file mode 100644 (file)
index 0000000..af4a5e5
--- /dev/null
@@ -0,0 +1,15 @@
+# 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
index 221523aa59181f50d61ce7717e96e5465baeba69..1788c390bc40414506c0ba082f37f8d3e6bedb8d 100644 (file)
@@ -25,6 +25,10 @@ When /^(?:que )?j'exécute send-membership-reminders$/ do
   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
index 9ed3f98263e4ae42725fa0ba573e5642f373f7bf..2bbecd33a1583d23dccac6b9b0b3bb57a805a5cf 100644 (file)
@@ -27,3 +27,14 @@ 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
+
index 4ecd3c4b7e23600c50d8b3c38c5adae4e48b5d56..8368699fe2984f2224670b9596b7d370e33c422b 100644 (file)
@@ -8,6 +8,7 @@ require 'nos_oignons/reminder_db'
 
 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
@@ -48,6 +49,32 @@ module NosOignons
       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'