Overview
Comment: | Encore des soucis de foreign keys: il faut permettre de mettre id_auteur à NULL pour pouvoir supprimer des membres qui ont fait des rapprochements. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
795737be8ae98e5edd244f891796a75c |
User & Date: | bohwaz on 2016-05-31 05:38:10 |
Other Links: | manifest | tags |
References
2020-12-08
| ||
23:25 | • Wiki page "Changelog/0.9" artifact: b9c916b4d1 user: bohwaz | |
Context
2016-05-31
| ||
05:40 | Quand on supprime une cotisation on veut aussi supprimer les rappels liés. check-in: 2404bb932f user: bohwaz tags: trunk | |
05:38 | Encore des soucis de foreign keys: il faut permettre de mettre id_auteur à NULL pour pouvoir supprimer des membres qui ont fait des rapprochements. check-in: 795737be8a user: bohwaz tags: trunk | |
05:21 | Ne pas permettre de faire des ID de compte en minuscule check-in: 2ff14ece2a user: bohwaz tags: trunk | |
Changes
Modified src/include/data/0.7.2.sql from [7a12e6fced] to [010e7b0250].
1 2 3 4 5 6 | # Colonne manquante ALTER TABLE rappels_envoyes ADD COLUMN id_rappel INTEGER NULL REFERENCES rappels (id); # Un bug a permis d'insérer des comptes avec des lettres minuscules, créant des problèmes # corrigeons donc les comptes pour les mettre en majuscules. UPDATE compta_comptes SET id = UPPER(id); | > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | # Colonne manquante ALTER TABLE rappels_envoyes ADD COLUMN id_rappel INTEGER NULL REFERENCES rappels (id); # Un bug a permis d'insérer des comptes avec des lettres minuscules, créant des problèmes # corrigeons donc les comptes pour les mettre en majuscules. UPDATE compta_comptes SET id = UPPER(id); # Le champ id_auteur était à NOT NULL, il faut corriger ça pour pouvoir avoir un rapprochement anonyme # une fois que le membre a été supprimé CREATE TABLE compta_rapprochement2 -- Rapprochement entre compta et relevés de comptes ( id_operation INTEGER NOT NULL PRIMARY KEY REFERENCES compta_journal (id), date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, id_auteur INTEGER NULL REFERENCES membres (id) ); INSERT INTO compta_rapprochement2 (SELECT operation, date, auteur FROM compta_rapprochement); DROP TABLE compta_rapprochement; ALTER TABLE compta_rapprochement2 RENAME TO compta_rapprochement; |
Modified src/include/data/schema.sql from [255336d2fc] to [5ab5416f01].
︙ | ︙ | |||
124 125 126 127 128 129 130 | FOREIGN KEY (id) REFERENCES wiki_pages(id) ); CREATE TABLE wiki_revisions -- Révisions du contenu des pages ( id_page INTEGER NOT NULL, | | | | 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | FOREIGN KEY (id) REFERENCES wiki_pages(id) ); CREATE TABLE wiki_revisions -- Révisions du contenu des pages ( id_page INTEGER NOT NULL, revision INTEGER NULL, id_auteur INTEGER NULL, 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), |
︙ | ︙ | |||
313 314 315 316 317 318 319 | callback TEXT NOT NULL, PRIMARY KEY (signal, plugin) ); CREATE TABLE compta_rapprochement -- Rapprochement entre compta et relevés de comptes ( | | | | 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | callback TEXT NOT NULL, PRIMARY KEY (signal, plugin) ); CREATE TABLE compta_rapprochement -- Rapprochement entre compta et relevés de comptes ( id_operation INTEGER NOT NULL PRIMARY KEY REFERENCES compta_journal (id), date TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP, id_auteur INTEGER NULL REFERENCES membres (id) ); CREATE TABLE fichiers -- Données sur les fichiers ( id INTEGER NOT NULL PRIMARY KEY, nom TEXT NOT NULL, -- nom de fichier (par exemple image1234.jpeg) |
︙ | ︙ |
Modified src/include/lib/Garradin/Compta/Journal.php from [40cb96972d] to [8da9330c29].
︙ | ︙ | |||
149 150 151 152 153 154 155 | if (!$this->_checkOpenExercice($db->simpleQuerySingle('SELECT id_exercice FROM compta_journal WHERE id = ?;', false, $id))) { throw new UserException('Cette opération fait partie d\'un exercice qui a été clôturé.'); } $db->exec('BEGIN;'); $db->simpleExec('DELETE FROM membres_operations WHERE id_operation = ?;', (int)$id); | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | if (!$this->_checkOpenExercice($db->simpleQuerySingle('SELECT id_exercice FROM compta_journal WHERE id = ?;', false, $id))) { throw new UserException('Cette opération fait partie d\'un exercice qui a été clôturé.'); } $db->exec('BEGIN;'); $db->simpleExec('DELETE FROM membres_operations WHERE id_operation = ?;', (int)$id); $db->simpleExec('DELETE FROM compta_rapprochement WHERE id_operation = ?;', (int)$id); $db->simpleExec('DELETE FROM compta_journal WHERE id = ?;', (int)$id); $db->exec('END;'); return true; } public function get($id) |
︙ | ︙ |
Modified src/include/lib/Garradin/Compta/Rapprochement.php from [69ffb638fe] to [883bfc5b12].
︙ | ︙ | |||
27 28 29 30 31 32 33 | ]); $query = ' SELECT j.*, strftime(\'%s\', j.date) AS date, (CASE WHEN j.compte_debit = :compte THEN j.montant ELSE -(j.montant) END) AS solde, r.date AS date_rapprochement FROM compta_journal AS j | | | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | ]); $query = ' SELECT j.*, strftime(\'%s\', j.date) AS date, (CASE WHEN j.compte_debit = :compte THEN j.montant ELSE -(j.montant) END) AS solde, r.date AS date_rapprochement FROM compta_journal AS j LEFT JOIN compta_rapprochement AS r ON r.id_operation = j.id WHERE (compte_debit = :compte OR compte_credit = :compte) AND id_exercice = :exercice AND j.date >= :debut AND j.date <= :fin ORDER BY date ASC;'; $result = $db->simpleStatementFetch($query, DB::ASSOC, [ 'compte' => $compte, 'debut' => $debut, |
︙ | ︙ | |||
66 67 68 69 70 71 72 | $cases = []; } $db = DB::getInstance(); $db->exec('BEGIN;'); // Synchro des trucs cochés | | | | 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | $cases = []; } $db = DB::getInstance(); $db->exec('BEGIN;'); // Synchro des trucs cochés $st = $db->prepare('INSERT OR REPLACE INTO compta_rapprochement (id_operation, id_auteur) VALUES (:operation, :auteur);'); $st->bindValue(':auteur', (int)$auteur, \SQLITE3_INTEGER); foreach ($journal as $row) { if (!array_key_exists($row['id'], $cases)) continue; $st->bindValue(':operation', (int)$row['id'], \SQLITE3_INTEGER); $st->execute(); } // Synchro des trucs NON cochés $st = $db->prepare('DELETE FROM compta_rapprochement WHERE id_operation = :id;'); foreach ($journal as $row) { if (array_key_exists($row['id'], $cases)) continue; $st->bindValue(':id', (int)$row['id'], \SQLITE3_INTEGER); |
︙ | ︙ |
Modified src/include/lib/Garradin/Membres.php from [b912871f30] to [e460b08c95].
︙ | ︙ | |||
451 452 453 454 455 456 457 | // Si on ne vérifie pas toutes les tables qui sont liées ici à un ID de membre // la requête de modification provoquera une erreur de contrainte de foreign key // ce qui est normal. Donc : il n'est pas possible de changer l'ID d'un membre qui // a participé au wiki, à la compta, etc. if ($db->simpleQuerySingle('SELECT 1 FROM wiki_revisions WHERE id_auteur = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM compta_journal WHERE id_auteur = ?;', false, (int)$id) | | | 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | // Si on ne vérifie pas toutes les tables qui sont liées ici à un ID de membre // la requête de modification provoquera une erreur de contrainte de foreign key // ce qui est normal. Donc : il n'est pas possible de changer l'ID d'un membre qui // a participé au wiki, à la compta, etc. if ($db->simpleQuerySingle('SELECT 1 FROM wiki_revisions WHERE id_auteur = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM compta_journal WHERE id_auteur = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM compta_rapprochement WHERE id_auteur = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM membres_operations WHERE id_membre = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM cotisations_membres WHERE id_membre = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM rappels_envoyes WHERE id_membre = ?;', false, (int)$id) || $db->simpleQuerySingle('SELECT 1 FROM fichiers_membres WHERE id = ?;', false, (int)$id)) # FIXME || $db->simpleQuerySingle('SELECT 1 FROM wiki_suivi WHERE id_membre = ?;', false, (int)$id)) { throw new UserException('Le numéro n\'est pas modifiable pour ce membre car des contenus sont liés à ce numéro de membre (wiki, compta, etc.).'); |
︙ | ︙ | |||
703 704 705 706 707 708 709 710 711 712 713 714 715 716 | $membres = implode(',', $membres); $db = DB::getInstance(); // Mise à jour des références, membre qui n'existe plus $db->exec('UPDATE wiki_revisions SET id_auteur = NULL WHERE id_auteur IN ('.$membres.');'); $db->exec('UPDATE compta_journal SET id_auteur = NULL WHERE id_auteur IN ('.$membres.');'); // Suppression des données liées au membre $db->exec('DELETE FROM rappels_envoyes WHERE id_membre IN ('.$membres.');'); $db->exec('DELETE FROM membres_operations WHERE id_membre IN ('.$membres.');'); $db->exec('DELETE FROM cotisations_membres WHERE id_membre IN ('.$membres.');'); //$db->exec('DELETE FROM wiki_suivi WHERE id_membre IN ('.$membres.');'); | > | 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 | $membres = implode(',', $membres); $db = DB::getInstance(); // Mise à jour des références, membre qui n'existe plus $db->exec('UPDATE wiki_revisions SET id_auteur = NULL WHERE id_auteur IN ('.$membres.');'); $db->exec('UPDATE compta_journal SET id_auteur = NULL WHERE id_auteur IN ('.$membres.');'); $db->exec('UPDATE compta_rapprochement SET id_auteur = NULL WHERE id_auteur IN ('.$membres.');'); // Suppression des données liées au membre $db->exec('DELETE FROM rappels_envoyes WHERE id_membre IN ('.$membres.');'); $db->exec('DELETE FROM membres_operations WHERE id_membre IN ('.$membres.');'); $db->exec('DELETE FROM cotisations_membres WHERE id_membre IN ('.$membres.');'); //$db->exec('DELETE FROM wiki_suivi WHERE id_membre IN ('.$membres.');'); |
︙ | ︙ |