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