simpleQuerySingle('SELECT 1 FROM compta_categories WHERE id = ?;', false, (int) $data['id_categorie_compta'])) { throw new UserException('Catégorie comptable inconnue'); } $data['id_categorie_compta'] = (int) $data['id_categorie_compta']; } } /** * Ajouter une cotisation * @param array $data Tableau des champs à insérer * @return integer ID de la cotisation créée */ public function add($data) { $db = DB::getInstance(); $this->_checkFields($data); $db->simpleInsert('cotisations', $data); $id = $db->lastInsertRowId(); return $id; } /** * Modifier une cotisation * @param integer $id ID de la cotisation à modifier * @param array $data Tableau des champs à modifier * @return bool true si succès */ public function edit($id, $data) { $db = DB::getInstance(); $this->_checkFields($data); return $db->simpleUpdate('cotisations', $data, 'id = \''.(int) $id.'\''); } /** * Supprimer une cotisation * @param integer $id ID de la cotisation à supprimer * @return integer true en cas de succès */ public function delete($id) { $db = DB::getInstance(); $db->exec('BEGIN;'); $db->simpleExec('DELETE FROM cotisations_membres WHERE id_cotisation = ?;', (int) $id); $db->simpleExec('DELETE FROM cotisations WHERE id = ?;', (int) $id); $db->exec('END;'); return true; } /** * Renvoie les infos sur une cotisation * @param integer $id Numéro de la cotisation * @return array Infos de la cotisation */ public function get($id) { $db = DB::getInstance(); return $db->simpleQuerySingle('SELECT co.*, (SELECT COUNT(DISTINCT id_membre) FROM cotisations_membres WHERE id_cotisation = co.id) AS nb_membres, (SELECT COUNT(DISTINCT id_membre) FROM cotisations_membres AS cm WHERE id_cotisation = co.id AND ((co.duree IS NOT NULL AND date(cm.date, \'+\'||co.duree||\' days\') >= date()) OR (co.fin IS NOT NULL AND co.debut <= cm.date AND co.fin >= cm.date))) AS nb_a_jour FROM cotisations AS co WHERE id = :id;', true, ['id' => (int) $id]); } public function listByName() { $db = DB::getInstance(); return $db->simpleStatementFetch('SELECT * FROM cotisations ORDER BY intitule;'); } public function listCurrent() { $db = DB::getInstance(); return $db->simpleStatementFetch('SELECT * FROM cotisations WHERE fin >= date(\'now\') OR fin IS NULL ORDER BY transliterate_to_ascii(intitule) COLLATE NOCASE;'); } public function listCurrentWithStats() { $db = DB::getInstance(); return $db->simpleStatementFetch('SELECT co.*, (SELECT COUNT(DISTINCT id_membre) FROM cotisations_membres WHERE id_cotisation = co.id) AS nb_membres, (SELECT COUNT(DISTINCT id_membre) FROM cotisations_membres AS cm WHERE id_cotisation = co.id AND ((co.duree IS NOT NULL AND date(cm.date, \'+\'||co.duree||\' days\') >= date()) OR (co.fin IS NOT NULL AND co.debut <= cm.date AND co.fin >= cm.date))) AS nb_a_jour FROM cotisations AS co WHERE fin >= date(\'now\') OR fin IS NULL ORDER BY transliterate_to_ascii(intitule) COLLATE NOCASE;'); } } ?>