]> nos-oignons.net Git - gestion-adh.git/blob - README
Correction d'erreurs dans le message pour le comité de déontologie
[gestion-adh.git] / README
1 ====================================
2 Gestion des adhésions de Nos oignons
3 ====================================
4
5 Voici une collection de scripts et de bouts de code qui permettent de gérer les
6 adhésions de Nos oignons conformément aux statuts de l'association.
7
8 Base des membres
9 ================
10
11 La base des membres est pensée pour être stockés dans le wiki du conseil
12 d'administration. Elle est formée sous forme d'une série de pages, une par
13 membre.
14
15 Cela donne l'aboresence suivante :
16
17     Membres
18     ├── 000000.mdwn
19     ├── 000001.mdwn
20     ├── 000002.mdwn
21     ├── 000003.mdwn
22     ├── 000004.mdwn
23     …
24     └── 000042.mdwn
25
26 Chaque page doit ressembler à :
27
28     ---
29     name: Violette Dupuis
30     address: |
31       42 rue du Fleuve
32       12042 Essaiville
33     email: violette@example.org
34     joined_on: 2013-05-25
35     membership_fee_paid_on: 2013-05-25
36     ---
37
38     Violette sait programmer en Ruby, on peut lui demander si on a besoin de
39     coup de main.
40
41 Le début de chaque page est un morceau de [YAML]. Il doit contenir les entrées
42 suivantes :
43
44 =`name`=
45     Le nom (complet) du membre.
46 =`address`=
47     L'adresse postale du membre.
48 =`email`=
49     L'adresse email du membre. C'est à cette adresse que seront envoyés les
50     messages de l'assemblée générale et les rappels de cotisation.
51 =`joined_on`=
52     Date d'adhésion à l'association.
53 =`membership_fee_paid_on`=
54     Date du paiement de la dernière cotisation.
55
56 Le reste de la page peut servir à noter ce qu'on veut.
57
58 [YAML]: http://yaml.org/
59
60 Scripts
61 =======
62
63 Voici le détail des scripts utilisés. On peut se faire une idée de leurs
64 fonctionalités respectives en lisant les cas d'utilisation dans les fichiers
65 `features/*.feature`.
66
67 Le chemin vers la racine du clone du wiki du conseil d'amnisitration est
68 spécifié par la variable d'environnement `NOS_OIGNONS_BOARD_WIKI_PATH`. Si
69 cette dernière n'est pas spécifié, les scripts cherchent un répertoire
70 `Membres` à la racine du Git courant, et si ce n'est pas le cas, dans
71 le répertoire `wiki-ca` du répertoire parent du Git courant.
72
73 `list-email`
74 ------------
75
76 Affiche sur la sortie standard les adresses emails des membres à jour de
77 cotisation.
78
79 `pre-commit-hook`
80 -----------------
81
82 `pre-commit` hook pour Git. Ce dernier est avant tout là pour éviter de pouvoir
83 enregistrer des informations invalides dans la base des membres depuis Ikiwiki.
84 Il est nécessaire de le configurer à chaque fois qu'on clone le dépôt du wiki du
85 C.A. (en faisant un lien symbolique dans `.git/hooks/pre-commit`).
86
87 `pre-receive-hook`
88 ------------------
89
90 `pre-commit` hook pour Git. Ce dernier est là pour éviter de pouvoir enregistrer
91 des informations invalides dans la base des membres. Il doit être configuré dans
92 le dépôt central du wiki du C.A. (via un lien symbolique dans
93 `.git/hooks/pre-receive`).
94
95 `update-ag-subscribers`
96 -----------------------
97
98 Met à jour la liste des emails inscrites à la liste ag@ par rapport aux membres
99 à jour de cotisation. À exécuter à travers un *cron*. A besoin de pouvoir
100 lancer les commandes `list_members`, `add_members` et `remove_members` via
101 `sudo` sur le compte `list`.
102
103 `send-membership-reminders`
104 ---------------------------
105
106 Préviens les membres qu'il faut renouveller leur cotisation.
107
108 Le fichier utiliser pour garder la liste des envois déjà effectués est soit
109 celui indiqué par la variable d'environnement `NOS_OIGNONS_REMINDER_DB`, ou
110 le fichier si elle est vide `var/reminders.yaml`.
111
112 `send-member-emails-to-advisors`
113 --------------------------------
114
115 Envoie la liste des emails des membres à jour de cotisation au comité
116 de déontologie.
117
118 Ce script a vocation a être executé tous les mois afin que le comité
119 puisse convoquer une assemblée générale extraordinaire, même en cas de
120 défaillance du conseil d'administration.
121
122 `create-membership-fee-reciept`
123 -------------------------------
124
125 Permet de créer un reçu de cotisation pour les membres en faisant
126 la demande.
127
128 Exemple d'utilisation :
129
130     bin/create-membership-fee-reciept 000042 10,00
131
132 Cela crééra un reçu pour le membre 000042 pour une cotisation d'un
133 montant de 10,00€. Le reçu est généré sous forme d'un fichier PDF dans
134 le répertoire spécifié par la variable d'environnement NOS_OIGNONS_RECIEPTS_DIR
135 (ou le répertoire `reciepts` dans le répertoire courant).
136
137 Il faut créer le répertoire avant utilisation s'il n'existe pas déjà.
138
139 Développement
140 =============
141
142 L'essentiel du code est en Ruby. Les dépendences sont gérés avec Bundler. Les
143 tests d'intégrations sont fait avec Cucumber.
144
145 Installer les paquets Debian qui vont bien (sur Wheezy) :
146
147     apt-get install ruby1.9.1 bundler
148
149 Pour récupérer les dépendences :
150
151     ruby1.9.1 /usr/bin/bundle install --path=vendor/bundle
152
153 Déploiement
154 ===========
155
156 Installer les paquets Debian qui vont bien (sur Wheezy) :
157
158     apt-get install ruby1.9.1 bundler
159
160 Installer les dépendences :
161
162     ruby1.9.1 /usr/bin/bundle install --deployment \
163                                       --without=development \
164                                       --path=vendor/bundle
165     chmod -R o+rX vendor/bundle
166
167 Il faut donner les droits d'écriture à `wiki-ca` sur le répertoire `var`.
168
169 Pour rendre facilement accessible `list-members-emails`, on peut ajouter dans
170 `/usr/local/bin` un mini script tel que celui-ci :
171
172     #!/bin/sh
173     NOS_OIGNONS_BOARD_WIKI_PATH=/srv/ikiwiki/wiki-ca/src \
174         /srv/ikiwiki/wiki-ca/gestion-adh/bin/list-emails
175
176 Ne pas oublier de le rendre exécutable.
177
178 Pour permettre au script `update-ag-subscribers` de fonctionner, il est
179 nécessaire de l'autoriser à exécuter certaines commandes de Mailman.
180 Pour cela, on va créer un fichier dans `/etc/sudoers.d` :
181
182     Defaults:wiki-ca !requiretty
183
184     Cmnd_Alias AG_MANAGEMENT = /usr/sbin/list_members ag,\
185                                /usr/sbin/add_members -r - ag,\
186                                /usr/sbin/remove_members -f - ag
187
188     wiki-ca ALL = (list) NOPASSWD: AG_MANAGEMENT
189
190 Ensuite, pour exécuter régulièrement les scripts via le *crontab* du compte
191 `wiki-ca`, il faut y ajouter :
192
193     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
194     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
195     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
196
197 Pour installer le `pre-commit` *hook* sur le dépôt utilisé par
198 Ikiwiki, on met dans `/srv/ikiwiki/wiki-ca/src/.git/hooks/pre-commit` :
199
200     if ! BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-commit-hook; then
201             # Reset changes that do not pass the pre-commit hook to prevent
202             # wrong changes to lay in the Ikiwiki source directory.
203             git reset --hard
204             exit 1
205     fi
206
207 Ne pas oublier de le rendre exécutable.
208
209 Pour installer le `pre-receive` *hook* sur le dépôt central, on met dans
210 `/srv/git/.gitolite/hooks/wiki-ca/hooks/pre-receive` :
211
212     #!/bin/sh
213     BUNDLE_GEMFILE=/srv/ikiwiki/wiki-ca/gestion-adh/Gemfile ruby1.9.1 /srv/ikiwiki/wiki-ca/gestion-adh/bin/pre-receive-hook
214
215 Ne pas oublier de le rendre exécutable. Il faut ensuite faire un lien symbolique :
216
217     ln -s ../../../.gitolite/hooks/wiki-ca/pre-receive /srv/git/repositories/wiki-ca.git/hooks/pre-receive