-- Configuration de Garradin
CREATE TABLE config (
cle TEXT PRIMARY KEY,
valeur TEXT
);
-- On stocke ici les ID de catégorie de compta correspondant aux types spéciaux
-- compta_categorie_cotisations => id_categorie
-- compta_categorie_dons => id_categorie
CREATE TABLE membres_categories
-- Catégories de membres
(
id INTEGER PRIMARY KEY,
nom TEXT,
description TEXT,
montant_cotisation REAL,
duree_cotisation INTEGER DEFAULT 12, -- En mois
droit_wiki INT DEFAULT 1,
droit_membres INT DEFAULT 1,
droit_compta INT DEFAULT 1,
droit_inscription INT DEFAULT 0,
droit_connexion INT DEFAULT 1,
droit_config INT DEFAULT 0,
cacher INT DEFAULT 0
);
-- Membres de l'asso
CREATE TABLE membres (
id INTEGER PRIMARY KEY,
id_categorie INTEGER NOT NULL,
-- Connexion
passe TEXT,
-- Données personnelles
nom TEXT,
email TEXT,
adresse TEXT,
code_postal INTEGER,
ville TEXT,
pays TEXT,
telephone TEXT,
date_naissance TEXT,
-- Pour le bordel
notes TEXT,
date_inscription TEXT DEFAULT CURRENT_DATE,
date_connexion TEXT,
-- Dernière cotisation enregistrée
date_cotisation TEXT,
FOREIGN KEY (id_categorie) REFERENCES membres_categories (id)
);
CREATE INDEX membres_id_categorie ON membres (id_categorie);
--
-- WIKI
--
CREATE TABLE wiki_pages
-- Pages du wiki
(
id INTEGER PRIMARY KEY,
uri TEXT, -- URI unique (équivalent NomPageWiki)
titre TEXT,
date_creation TEXT DEFAULT CURRENT_TIMESTAMP,
date_modification TEXT DEFAULT CURRENT_TIMESTAMP,
parent INTEGER DEFAULT 0, -- ID de la page parent
revision INTEGER DEFAULT 0, -- Numéro de révision (commence à 0 si pas de texte, +1 à chaque changement du texte)
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)
droit_ecriture INTEGER DEFAULT 0 -- Accès en écriture (0 = tous ceux qui ont droit d'écriture sur le wiki, 1+ = ID de groupe)
);
CREATE UNIQUE INDEX wiki_uri ON wiki_pages (uri);
CREATE VIRTUAL TABLE wiki_recherche USING fts4
-- Table dupliquée pour chercher une page
(
id INTEGER PRIMARY KEY NOT NULL, -- Clé externe obligatoire
titre TEXT,
contenu TEXT, -- Contenu de la dernière révision
FOREIGN KEY (id) REFERENCES wiki_pages(id)
);
CREATE TABLE wiki_revisions
-- Révisions du contenu des pages
(
id_page INTEGER NOT NULL,
revision INTEGER,
id_auteur INTEGER,
contenu TEXT,
modification TEXT, -- Description des modifications effectuées
chiffrement INTEGER DEFAULT 0, -- 1 si le contenu est chiffré, 0 sinon
date TEXT DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id_page, revision),
FOREIGN KEY (id_page) REFERENCES wiki_pages (id), -- Clé externe obligatoire
FOREIGN KEY (id_auteur) REFERENCES membres (id) -- Clé externe non-obligatoire (peut être supprimée après en cas de suppression de membre)
);
CREATE INDEX wiki_revisions_id_page ON wiki_revisions (id_page);
CREATE INDEX wiki_revisions_id_auteur ON wiki_revisions (id_auteur);
-- Triggers pour synchro avec table wiki_pages
CREATE TRIGGER wiki_recherche_insert AFTER INSERT ON wiki_pages
BEGIN
INSERT INTO wiki_recherche (id, titre) VALUES (new.id, new.titre);
END;
CREATE TRIGGER wiki_recherche_delete AFTER DELETE ON wiki_pages
BEGIN
DELETE FROM wiki_recherche WHERE id = old.id;
END;
CREATE TRIGGER wiki_recherche_update AFTER UPDATE OF id, titre ON wiki_pages
BEGIN
UPDATE wiki_recherche SET id = new.id, titre = new.titre WHERE id = old.id;
END;
-- Trigger pour mettre à jour le contenu de la table de recherche lors d'une nouvelle révision
CREATE TRIGGER wiki_recherche_contenu_insert AFTER INSERT ON wiki_revisions WHEN new.chiffrement != 1
BEGIN
UPDATE wiki_recherche SET contenu = new.contenu WHERE id = new.id_page;
END;
-- Si le contenu est chiffré, la recherche n'affiche pas de contenu
CREATE TRIGGER wiki_recherche_contenu_chiffre AFTER INSERT ON wiki_revisions WHEN new.chiffrement = 1
BEGIN
UPDATE wiki_recherche SET contenu = '' WHERE id = new.id_page;
END;
CREATE TABLE wiki_fichiers (
id INTEGER PRIMARY KEY,
id_page INTEGER NOT NULL,
nom TEXT,
hash TEXT,
FOREIGN KEY (id_page) REFERENCES wiki_pages (id) -- Clé externe obligatoire
);
CREATE INDEX wiki_fichiers_id_page ON wiki_fichiers (id_page);
CREATE TABLE wiki_suivi
-- Suivi des pages
(
id_membre INTEGER NOT NULL,
id_page INTEGER NOT NULL,
PRIMARY KEY (id_membre, id_page),
FOREIGN KEY (id_page) REFERENCES wiki_pages (id), -- Clé externe obligatoire
FOREIGN KEY (id_membre) REFERENCES membres (id) -- Clé externe obligatoire
);
/*
--
-- COMPTA
--
CREATE TABLE compta_exercices
-- Exercices
(
id INTEGER PRIMARY KEY,
debut TEXT DEFAULT CURRENT_DATE,
fin TEXT DEFAULT CURRENT_DATE
);
CREATE TABLE compta_plan
-- Plan comptable
(
id INT PRIMARY KEY,
nom TEXT,
parent INT,
description TEXT,
perso_type TEXT DEFAULT NULL, -- Si NULL, alors l'entrée provient du plan comptable
perso_valeur INT DEFAULT NULL
);
CREATE TABLE compta_comptes
-- Comptes bancaires
(
id INTEGER PRIMARY KEY,
banque TEXT,
iban TEXT,
bic TEXT,
solde_initial REAL,
solde REAL
);
CREATE TABLE compta_operations
-- Opérations comptables
(
id INTEGER PRIMARY KEY,
libelle TEXT,
remarques TEXT,
reference TEXT, -- Référence diverse, par exemple numéro de chèque
debit REAL,
credit REAL,
date TEXT DEFAULT CURRENT_DATE,
moyen_paiement INT DEFAULT NULL,
double INT, -- Pour compta partie double, ID de l'opération inverse associée
id_exercice INTEGER DEFAULT NULL, -- En cas de compta simple, l'exercice est permanent
id_plan INTEGER,
id_auteur INTEGER
);
CREATE TABLE compta_moyens
-- Moyens de paiement
(
id INTEGER PRIMARY KEY,
nom TEXT
);
INSERT INTO compta_moyens (nom) VALUES ('Espèces');
INSERT INTO compta_moyens (nom) VALUES ('Carte bleue');
INSERT INTO compta_moyens (nom) VALUES ('Chèque');
INSERT INTO compta_moyens (nom) VALUES ('Virement');
INSERT INTO compta_moyens (nom) VALUES ('Prélèvement');
INSERT INTO compta_moyens (nom) VALUES ('TIP');
CREATE INDEX compta_operations_id_compte ON compta_operations (id_exercice);
CREATE INDEX compta_operations_id_categorie ON compta_operations (id_plan);
CREATE INDEX compta_operations_id_auteur ON compta_operations (id_auteur);
--
-- générateur de paperasses
--
CREATE TABLE papiers (
id INTEGER PRIMARY KEY,
modele INTEGER,
donnees TEXT
);
*/