2cc846fae5957af737355ee3ce5e4d12a6e550a9
[garradin.git] / include / data / schema.sql
1 CREATE TABLE config (
2 -- Configuration de Garradin
3 cle TEXT PRIMARY KEY,
4 valeur TEXT
5 );
6
7 -- On stocke ici les ID de catégorie de compta correspondant aux types spéciaux
8 -- compta_categorie_cotisations => id_categorie
9 -- compta_categorie_dons => id_categorie
10
11 CREATE TABLE membres_categories
12 -- Catégories de membres
13 (
14 id INTEGER PRIMARY KEY,
15 nom TEXT,
16 description TEXT,
17
18 droit_wiki INT DEFAULT 1,
19 droit_membres INT DEFAULT 1,
20 droit_compta INT DEFAULT 1,
21 droit_inscription INT DEFAULT 0,
22 droit_connexion INT DEFAULT 1,
23 droit_config INT DEFAULT 0,
24 cacher INT DEFAULT 0,
25
26 id_cotisation_obligatoire INTEGER NULL REFERENCES cotisations (id)
27 );
28
29 -- Membres de l'asso
30 -- Table dynamique générée par l'application
31 -- voir class.champs_membres.php
32
33 CREATE TABLE cotisations
34 -- Types de cotisations et activités
35 (
36 id INTEGER PRIMARY KEY,
37 id_categorie_compta INTEGER NULL, -- NULL si le type n'est pas associé automatiquement à la compta
38
39 intitule TEXT NOT NULL,
40 description TEXT NULL,
41 montant REAL NOT NULL,
42
43 duree INTEGER NULL, -- En jours
44 debut TEXT NULL, -- timestamp
45 fin TEXT NULL,
46
47 FOREIGN KEY (id_categorie_compta) REFERENCES compta_categories (id)
48 );
49
50 CREATE TABLE cotisations_membres
51 -- Enregistrement des cotisations et activités
52 (
53 id INTEGER NOT NULL PRIMARY KEY,
54 id_membre INTEGER NOT NULL REFERENCES membres (id),
55 id_cotisation INTEGER NOT NULL REFERENCES cotisations (id),
56
57 date TEXT NOT NULL DEFAULT CURRENT_DATE
58 );
59
60 CREATE UNIQUE INDEX cm_unique ON cotisations_membres (id_membre, id_cotisation, date);
61
62 CREATE TABLE membres_operations
63 -- Liaision des enregistrement des paiements en compta
64 (
65 id_membre INTEGER NOT NULL REFERENCES membres (id),
66 id_operation INTEGER NOT NULL REFERENCES compta_journal (id),
67 id_cotisation INTEGER NULL REFERENCES cotisations_membres (id),
68
69 PRIMARY KEY (id_membre, id_operation)
70 );
71
72 CREATE TABLE rappels
73 -- Rappels de devoir renouveller une cotisation
74 (
75 id INTEGER PRIMARY KEY,
76 id_cotisation INTEGER NOT NULL REFERENCES cotisations (id),
77
78 delai INTEGER NOT NULL, -- Délai en jours pour envoyer le rappel
79
80 sujet TEXT NOT NULL,
81 texte TEXT NOT NULL
82 );
83
84 CREATE TABLE rappels_envoyes
85 -- Enregistrement des rappels envoyés à qui et quand
86 (
87 id INTEGER PRIMARY KEY,
88
89 id_membre INTEGER NOT NULL REFERENCES membres (id),
90 id_cotisation INTEGER NOT NULL REFERENCES cotisations (id),
91
92 date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
93
94 media INTEGER NOT NULL -- Média utilisé pour le rappel : 1 = email, 2 = courrier, 3 = autre
95 );
96
97 --
98 -- WIKI
99 --
100
101 CREATE TABLE wiki_pages
102 -- Pages du wiki
103 (
104 id INTEGER PRIMARY KEY,
105 uri TEXT, -- URI unique (équivalent NomPageWiki)
106 titre TEXT,
107 date_creation TEXT DEFAULT CURRENT_TIMESTAMP,
108 date_modification TEXT DEFAULT CURRENT_TIMESTAMP,
109 parent INTEGER DEFAULT 0, -- ID de la page parent
110 revision INTEGER DEFAULT 0, -- Numéro de révision (commence à 0 si pas de texte, +1 à chaque changement du texte)
111 droit_lecture INTEGER DEFAULT 0, -- Accès en lecture (-1 = public [site web], 0 = tous ceux qui ont accès en lecture au wiki, 1+ = ID de groupe)
112 droit_ecriture INTEGER DEFAULT 0 -- Accès en écriture (0 = tous ceux qui ont droit d'écriture sur le wiki, 1+ = ID de groupe)
113 );
114
115 CREATE UNIQUE INDEX wiki_uri ON wiki_pages (uri);
116
117 CREATE VIRTUAL TABLE wiki_recherche USING fts4
118 -- Table dupliquée pour chercher une page
119 (
120 id INT PRIMARY KEY NOT NULL, -- Clé externe obligatoire
121 titre TEXT,
122 contenu TEXT, -- Contenu de la dernière révision
123 FOREIGN KEY (id) REFERENCES wiki_pages(id)
124 );
125
126 CREATE TABLE wiki_revisions
127 -- Révisions du contenu des pages
128 (
129 id_page INTEGER NOT NULL,
130 revision INTEGER,
131
132 id_auteur INTEGER,
133
134 contenu TEXT,
135 modification TEXT, -- Description des modifications effectuées
136 chiffrement INTEGER DEFAULT 0, -- 1 si le contenu est chiffré, 0 sinon
137 date TEXT DEFAULT CURRENT_TIMESTAMP,
138
139 PRIMARY KEY(id_page, revision),
140 FOREIGN KEY (id_page) REFERENCES wiki_pages (id), -- Clé externe obligatoire
141 FOREIGN KEY (id_auteur) REFERENCES membres (id) -- Clé externe non-obligatoire (peut être supprimée après en cas de suppression de membre)
142 );
143
144 CREATE INDEX wiki_revisions_id_page ON wiki_revisions (id_page);
145 CREATE INDEX wiki_revisions_id_auteur ON wiki_revisions (id_auteur);
146
147 -- Triggers pour synchro avec table wiki_pages
148 CREATE TRIGGER wiki_recherche_delete AFTER DELETE ON wiki_pages
149 BEGIN
150 DELETE FROM wiki_recherche WHERE id = old.id;
151 END;
152
153 CREATE TRIGGER wiki_recherche_update AFTER UPDATE OF id, titre ON wiki_pages
154 BEGIN
155 UPDATE wiki_recherche SET id = new.id, titre = new.titre WHERE id = old.id;
156 END;
157
158 -- Trigger pour mettre à jour le contenu de la table de recherche lors d'une nouvelle révision
159 CREATE TRIGGER wiki_recherche_contenu_insert AFTER INSERT ON wiki_revisions WHEN new.chiffrement != 1
160 BEGIN
161 UPDATE wiki_recherche SET contenu = new.contenu WHERE id = new.id_page;
162 END;
163
164 -- Si le contenu est chiffré, la recherche n'affiche pas de contenu
165 CREATE TRIGGER wiki_recherche_contenu_chiffre AFTER INSERT ON wiki_revisions WHEN new.chiffrement = 1
166 BEGIN
167 UPDATE wiki_recherche SET contenu = '' WHERE id = new.id_page;
168 END;
169
170 /*
171 CREATE TABLE wiki_fichiers (
172 id INTEGER PRIMARY KEY,
173 id_page INTEGER NOT NULL,
174 nom TEXT,
175 hash TEXT,
176
177 FOREIGN KEY (id_page) REFERENCES wiki_pages (id) -- Clé externe obligatoire
178 );
179
180 CREATE INDEX wiki_fichiers_id_page ON wiki_fichiers (id_page);
181
182 CREATE TABLE wiki_suivi
183 -- Suivi des pages
184 (
185 id_membre INTEGER NOT NULL,
186 id_page INTEGER NOT NULL,
187
188 PRIMARY KEY (id_membre, id_page),
189
190 FOREIGN KEY (id_page) REFERENCES wiki_pages (id), -- Clé externe obligatoire
191 FOREIGN KEY (id_membre) REFERENCES membres (id) -- Clé externe obligatoire
192 );
193 */
194
195 --
196 -- COMPTA
197 --
198
199 CREATE TABLE compta_exercices
200 -- Exercices
201 (
202 id INTEGER PRIMARY KEY,
203
204 libelle TEXT NOT NULL,
205
206 debut TEXT NOT NULL DEFAULT CURRENT_DATE,
207 fin TEXT NULL DEFAULT NULL,
208
209 cloture INTEGER NOT NULL DEFAULT 0
210 );
211
212
213 CREATE TABLE compta_comptes
214 -- Plan comptable
215 (
216 id TEXT PRIMARY KEY, -- peut contenir des lettres, eg. 53A, 53B, etc.
217 parent TEXT NOT NULL DEFAULT 0,
218
219 libelle TEXT NOT NULL,
220
221 position INTEGER NOT NULL, -- position actif/passif/charge/produit
222 plan_comptable INTEGER NOT NULL DEFAULT 1, -- 1 = fait partie du plan comptable, 0 = a été ajouté par l'utilisateur
223 desactive INTEGER NOT NULL DEFAULT 0 -- 1 = compte historique désactivé
224 );
225
226 CREATE INDEX compta_comptes_parent ON compta_comptes (parent);
227
228 CREATE TABLE compta_comptes_bancaires
229 -- Comptes bancaires
230 (
231 id TEXT PRIMARY KEY,
232
233 banque TEXT NOT NULL,
234
235 iban TEXT,
236 bic TEXT,
237
238 FOREIGN KEY(id) REFERENCES compta_comptes(id)
239 );
240
241 CREATE TABLE compta_journal
242 -- Journal des opérations comptables
243 (
244 id INTEGER PRIMARY KEY,
245
246 libelle TEXT NOT NULL,
247 remarques TEXT,
248 numero_piece TEXT, -- N° de pièce comptable
249
250 montant REAL,
251
252 date TEXT DEFAULT CURRENT_DATE,
253 moyen_paiement TEXT DEFAULT NULL,
254 numero_cheque TEXT DEFAULT NULL,
255
256 compte_debit TEXT, -- N° du compte dans le plan
257 compte_credit TEXT, -- N° du compte dans le plan
258
259 id_exercice INTEGER NULL DEFAULT NULL, -- En cas de compta simple, l'exercice est permanent (NULL)
260 id_auteur INTEGER NULL,
261 id_categorie INTEGER NULL, -- Numéro de catégorie (en mode simple)
262
263 FOREIGN KEY(moyen_paiement) REFERENCES compta_moyens_paiement(code),
264 FOREIGN KEY(compte_debit) REFERENCES compta_comptes(id),
265 FOREIGN KEY(compte_credit) REFERENCES compta_comptes(id),
266 FOREIGN KEY(id_exercice) REFERENCES compta_exercices(id),
267 FOREIGN KEY(id_auteur) REFERENCES membres(id),
268 FOREIGN KEY(id_categorie) REFERENCES compta_categories(id)
269 );
270
271 CREATE INDEX compta_operations_exercice ON compta_journal (id_exercice);
272 CREATE INDEX compta_operations_date ON compta_journal (date);
273 CREATE INDEX compta_operations_comptes ON compta_journal (compte_debit, compte_credit);
274 CREATE INDEX compta_operations_auteur ON compta_journal (id_auteur);
275
276 CREATE TABLE compta_moyens_paiement
277 -- Moyens de paiement
278 (
279 code TEXT PRIMARY KEY,
280 nom TEXT
281 );
282
283 --INSERT INTO compta_moyens_paiement (code, nom) VALUES ('AU', 'Autre');
284 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('CB', 'Carte bleue');
285 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('CH', 'Chèque');
286 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('ES', 'Espèces');
287 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('PR', 'Prélèvement');
288 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('TI', 'TIP');
289 INSERT INTO compta_moyens_paiement (code, nom) VALUES ('VI', 'Virement');
290
291 CREATE TABLE compta_categories
292 -- Catégories pour simplifier le plan comptable
293 (
294 id INTEGER PRIMARY KEY,
295 type INTEGER DEFAULT 1, -- 1 = recette, -1 = dépense, 0 = autre (utilisé uniquement pour l'interface)
296
297 intitule TEXT NOT NULL,
298 description TEXT,
299
300 compte TEXT NOT NULL, -- Compte affecté par cette catégorie
301
302 FOREIGN KEY(compte) REFERENCES compta_comptes(id)
303 );
304
305 CREATE TABLE plugins
306 (
307 id TEXT PRIMARY KEY,
308 officiel INTEGER NOT NULL DEFAULT 0,
309 nom TEXT NOT NULL,
310 description TEXT,
311 auteur TEXT,
312 url TEXT,
313 version TEXT NOT NULL,
314 menu INTEGER NOT NULL DEFAULT 0,
315 config TEXT
316 );