Overview
Comment: | Création de l'entité Exercice |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA1: |
24709246dfeceb72a9fb42ef4378f373 |
User & Date: | bohwaz on 2020-01-21 13:28:02 |
Other Links: | branch diff | manifest | tags |
Context
2020-01-27
| ||
00:43 | * Gérer les fichiers CSV provenant des vieilles versions d'Excel pour Mac OS. * Ajouter la mention de la taille limite du fichier check-in: 738039429a user: bohwaz tags: dev | |
2020-01-21
| ||
13:28 | Création de l'entité Exercice check-in: 24709246df user: bohwaz tags: dev | |
13:27 | Déplacement des entités, ajout de vérifications supplémentaires check-in: 5a3f31fcb9 user: bohwaz tags: dev | |
Changes
Modified src/VERSION from [72f19f670a] to [c538b66c71].
|
| | | 1 | 1.0.0 |
Modified src/include/data/1.0.0_migration.sql from [ab0d748387] to [0f53908e4c].
1 2 3 4 5 6 7 8 9 10 | ALTER TABLE compta_journal RENAME TO compta_journal_old; ALTER TABLE compta_comptes RENAME TO compta_comptes_old; ALTER TABLE compta_categories RENAME TO compta_categories_old; ALTER TABLE membres_operations RENAME TO membres_operations_old; DROP TABLE fichiers_compta_journal; -- Inutilisé à ce jour .read 1.0.0_schema.sql -- Migration comptes de code comme identifiant à ID unique | > | 1 2 3 4 5 6 7 8 9 10 11 | ALTER TABLE compta_journal RENAME TO compta_journal_old; ALTER TABLE compta_comptes RENAME TO compta_comptes_old; ALTER TABLE compta_categories RENAME TO compta_categories_old; ALTER TABLE compta_exercices RENAME TO compta_exercices_old; ALTER TABLE membres_operations RENAME TO membres_operations_old; DROP TABLE fichiers_compta_journal; -- Inutilisé à ce jour .read 1.0.0_schema.sql -- Migration comptes de code comme identifiant à ID unique |
︙ | ︙ | |||
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | INSERT INTO compta_categories SELECT id, type, intitule, description, (SELECT id FROM compta_comptes WHERE code = compte) FROM compta_categories_old; -- Recopie des opérations, mais le nom a changé pour "mouvements" INSERT INTO membres_mouvements SELECT * FROM membres_operations_old; DROP TABLE compta_journal_old; DROP TABLE membres_operations_old; DROP TABLE compta_categories_old; DROP TABLE compta_comptes_old; -- CREATE TABLE IF NOT EXISTS compta_comptes_soldes -- -- Soldes des comptes -- ( -- compte TEXT NOT NULL REFERENCES compta_comptes(id) ON DELETE CASCADE, -- exercice INTEGER NULL REFERENCES compta_exercices(id) ON DELETE CASCADE, -- solde INTEGER NOT NULL, | > > > > > | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | INSERT INTO compta_categories SELECT id, type, intitule, description, (SELECT id FROM compta_comptes WHERE code = compte) FROM compta_categories_old; -- Recopie des opérations, mais le nom a changé pour "mouvements" INSERT INTO membres_mouvements SELECT * FROM membres_operations_old; -- Recopie des exercices, mais la date de fin ne peut être nulle INSERT INTO compta_exercices SELECT id, libelle, debut, CASE WHEN fin IS NULL THEN date(debut, '+1 year') ELSE fin END, cloture FROM compta_exercices_old; DROP TABLE compta_journal_old; DROP TABLE membres_operations_old; DROP TABLE compta_categories_old; DROP TABLE compta_comptes_old; DROP TABLE compta_exercices_old; -- CREATE TABLE IF NOT EXISTS compta_comptes_soldes -- -- Soldes des comptes -- ( -- compte TEXT NOT NULL REFERENCES compta_comptes(id) ON DELETE CASCADE, -- exercice INTEGER NULL REFERENCES compta_exercices(id) ON DELETE CASCADE, -- solde INTEGER NOT NULL, |
︙ | ︙ |
Modified src/include/data/1.0.0_schema.sql from [4c7e56746d] to [dff2a1e0df].
︙ | ︙ | |||
181 182 183 184 185 186 187 | CREATE TABLE IF NOT EXISTS compta_exercices -- Exercices ( id INTEGER NOT NULL PRIMARY KEY, libelle TEXT NOT NULL, | | | | 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | CREATE TABLE IF NOT EXISTS compta_exercices -- Exercices ( id INTEGER NOT NULL PRIMARY KEY, libelle TEXT NOT NULL, debut TEXT NOT NULL CHECK (date(debut) IS NOT NULL AND date(debut) = debut), fin TEXT NOT NULL CHECK (date(fin) IS NOT NULL AND date(fin) = fin), cloture INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS compta_comptes -- Plan comptable |
︙ | ︙ | |||
258 259 260 261 262 263 264 | FOREIGN KEY(moyen_paiement) REFERENCES compta_moyens_paiement(code), FOREIGN KEY(id_exercice) REFERENCES compta_exercices(id), FOREIGN KEY(id_auteur) REFERENCES membres(id) ON DELETE SET NULL, FOREIGN KEY(id_categorie) REFERENCES compta_categories(id) ON DELETE SET NULL, FOREIGN KEY(id_projet) REFERENCES compta_projets(id) ON DELETE SET NULL ); | | | | > > > > > > > > > > > > > > > > > > > > > > > > | 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 | FOREIGN KEY(moyen_paiement) REFERENCES compta_moyens_paiement(code), FOREIGN KEY(id_exercice) REFERENCES compta_exercices(id), FOREIGN KEY(id_auteur) REFERENCES membres(id) ON DELETE SET NULL, FOREIGN KEY(id_categorie) REFERENCES compta_categories(id) ON DELETE SET NULL, FOREIGN KEY(id_projet) REFERENCES compta_projets(id) ON DELETE SET NULL ); CREATE INDEX IF NOT EXISTS compta_mouvements_exercice ON compta_mouvements (id_exercice); CREATE INDEX IF NOT EXISTS compta_mouvements_date ON compta_mouvements (date); CREATE INDEX IF NOT EXISTS compta_mouvements_auteur ON compta_mouvements (id_auteur); CREATE TRIGGER IF NOT EXISTS compta_mouvements_exercice_i BEFORE INSERT ON compta_mouvements BEGIN SELECT CASE WHEN (old.id_exercice IS NOT NULL AND (SELECT cloture FROM compta_exercices WHERE id = old.id_exercice) = 1) THEN RAISE(FAIL, 'Modification interdite de mouvement lié à un exercice clôturé') END; END; CREATE TRIGGER IF NOT EXISTS compta_mouvements_exercice_d BEFORE DELETE ON compta_mouvements BEGIN SELECT CASE WHEN (old.id_exercice IS NOT NULL AND (SELECT cloture FROM compta_exercices WHERE id = old.id_exercice) = 1) THEN RAISE(FAIL, 'Modification interdite de mouvement lié à un exercice clôturé') END; END; CREATE TRIGGER IF NOT EXISTS compta_mouvements_exercice_u BEFORE UPDATE ON compta_mouvements BEGIN SELECT CASE WHEN (old.id_exercice IS NOT NULL AND (SELECT cloture FROM compta_exercices WHERE id = old.id_exercice) = 1) THEN RAISE(FAIL, 'Modification interdite de mouvement lié à un exercice clôturé') END; END; CREATE TABLE IF NOT EXISTS compta_mouvements_lignes -- Écritures ( id INTEGER PRIMARY KEY NOT NULL, id_mouvement INTEGER NOT NULL REFERENCES compta_mouvements (id) ON DELETE CASCADE, |
︙ | ︙ |
Modified src/include/lib/Garradin/Compta/Exercices.php from [3bc6667d2a] to [ee673cc62e].
1 2 3 4 | <?php namespace Garradin\Compta; | > | | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php namespace Garradin\Compta; use Garradin\Entities\Exercice; use Garradin\DB; use Garradin\Utils; use Garradin\UserException; class Exercices { /** * Créer les reports à nouveau issus de l'exercice $old_id dans le nouvel exercice courant * @param integer $old_id ID de l'ancien exercice * @param integer $new_id ID du nouvel exercice * @param string $date Date Y-m-d donnée aux opérations créées * @return boolean true si succès */ |
︙ | ︙ | |||
255 256 257 258 259 260 261 262 263 | 'date' => $date, 'montant' => abs($resultat), 'compte_debit' => $resultat < 0 ? $resultat_debiteur : 890, 'compte_credit' => $resultat > 0 ? $resultat_excedent : 890, ]); } return true; } | | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < | 127 128 129 130 131 132 133 134 135 136 | 'date' => $date, 'montant' => abs($resultat), 'compte_debit' => $resultat < 0 ? $resultat_debiteur : 890, 'compte_credit' => $resultat > 0 ? $resultat_excedent : 890, ]); } return true; } } |
Added src/include/lib/Garradin/Entities/Compta/Exercice.php version [f7e29fc30f].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 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 | <?php namespace Garradin\Entities\Compta; use Garradin\Entity; use Garradin\DB; use Garradin\Utils; use Garradin\UserException; class Exercice extends Entity { const TABLE = 'compta_exercices'; protected $id; protected $libelle; protected $debut; protected $fin; protected $cloture = 0; protected $_types = [ 'id' => 'int', 'libelle' => 'string', 'debut' => 'date', 'fin' => 'date', 'cloture' => 'int', ]; protected $_validation_rules = [ 'libelle' => 'required|string|max:200', 'debut' => 'required|date|before:fin', 'fin' => 'required|date|after:debut', 'cloture' => 'int|min:0|max:1', ]; public function selfCheck() { parent::selfCheck(); $this->assert($this->debut < $this->fin, 'La date de fin doit être postérieure à la date de début'); $this->assert($this->cloture == 1 || !isset($this->_modified['cloture']), 'Il est interdit de réouvrir un exercice clôturé'); $db = DB::getInstance(); // Vérifier qu'on ne crée pas 2 exercices qui se recoupent if ($this->exists()) { $this->assert( !$db->test(self::TABLE, 'id != :id AND ((debut <= :debut AND fin >= :debut) OR (debut <= :fin AND fin >= :fin))', ['id' => $this->id(), 'debut' => $this->debut, 'fin' => $this->fin]), 'La date de début ou de fin se recoupe avec un exercice existant.' ); $this->assert( !$db->test(Mouvements::TABLE, 'id_exercice = ? AND date < ?', $this->id(), $this->debut), 'Des mouvements de cet exercice ont une date antérieure à la date de début de l\'exercice.' ); $this->assert( !$db->test(Mouvements::TABLE, 'id_exercice = ? AND date > ?', $this->id(), $this->fin), 'Des mouvements de cet exercice ont une date postérieure à la date de fin de l\'exercice.' ); } else { $this->assert( !$db->test(self::TABLE, '(debut <= :debut AND fin >= :debut) OR (debut <= :fin AND fin >= :fin)', ['debut' => $this->debut, 'fin' => $this->fin]), 'La date de début ou de fin se recoupe avec un exercice existant.' ); } } public function close() { if ($this->cloture) { throw new \LogicException('Cet exercice est déjà clôturé'); } $this->set('cloture', 1); } public function delete() { $db = DB::getInstance(); // Ne pas supprimer un compte qui est utilisé ! if ($db->test(Mouvements::TABLE, $db->where('id_exercice', $this->id()))) { throw new UserException('Cet exercice ne peut être supprimé car des mouvements y sont liés.'); } parent::delete(); } } |