5 class Compta_Comptes_Bancaires
extends Compta_Comptes
7 const NUMERO_PARENT_COMPTES
= 512;
9 public function add($data)
11 $db = DB
::getInstance();
13 $data['parent'] = self
::NUMERO_PARENT_COMPTES
;
16 $this->_checkBankFields($data);
18 $new_id = parent
::add($data);
20 $db->simpleInsert('compta_comptes_bancaires', [
22 'banque' => $data['banque'],
23 'iban' => $data['iban'],
24 'bic' => $data['bic'],
30 public function edit($id, $data)
32 $db = DB
::getInstance();
34 if (!$db->simpleQuerySingle('SELECT 1 FROM compta_comptes_bancaires WHERE id = ?;', false, $id))
36 throw new UserException('Ce compte n\'est pas un compte bancaire.');
39 $this->_checkBankFields($data);
40 $result = parent
::edit($id, $data);
47 $db->simpleUpdate('compta_comptes_bancaires', [
48 'banque' => $data['banque'],
49 'iban' => $data['iban'],
50 'bic' => $data['bic'],
51 ], 'id = \''.$db->escapeString(trim($id)).'\'');
57 * Supprime un compte bancaire
58 * La suppression sera refusée si le compte est utilisé dans l'exercice en cours
59 * ou dans une catégorie.
60 * Le compte bancaire sera supprimé et le compte au plan comptable seulement désactivé
61 * si le compte est utilisé dans un exercice précédent.
63 * La désactivation d'un compte fait qu'il n'est plus utilisable dans l'exercice courant
64 * ou les exercices suivants, mais il est possible de le réactiver.
65 * @param string $id Numéro du compte
66 * @return boolean TRUE si la suppression ou désactivation a été effectuée, une exception ou FALSE sinon
68 public function delete($id)
70 $db = DB
::getInstance();
71 if (!$db->simpleQuerySingle('SELECT 1 FROM compta_comptes_bancaires WHERE id = ?;', false, trim($id)))
73 throw new UserException('Ce compte n\'est pas un compte bancaire.');
76 // Ne pas supprimer/désactiver un compte qui est utilisé dans l'exercice courant
77 if ($db->simpleQuerySingle('SELECT 1 FROM compta_journal
78 LEFT JOIN compta_flux ON compta_journal.id = compta_flux.id_journal
79 WHERE id_exercice = (SELECT id FROM compta_exercices WHERE cloture = 0 LIMIT 1)
80 AND compte = ? LIMIT 1;', false, $id))
82 throw new UserException('Ce compte ne peut être supprimé car des écritures y sont liées sur l\'exercice courant. '
83 . 'Il faut supprimer ou ré-attribuer ces écritures avant de pouvoir supprimer le compte.');
86 // Il n'est pas possible de supprimer ou désactiver un compte qui est lié à des catégories
87 if ($db->simpleQuerySingle('SELECT 1 FROM compta_categories WHERE compte = ? LIMIT 1;', false, $id))
89 throw new UserException('Ce compte ne peut être supprimé car des catégories y sont liées. '
90 . 'Merci de supprimer ou modifier les catégories liées avant de le supprimer.');
93 $db->simpleExec('DELETE FROM compta_comptes_bancaires WHERE id = ?;', trim($id));
96 $return = parent
::delete($id);
98 catch (UserException
$e) {
99 // Impossible de supprimer car des opérations y sont encore liées
100 // sur les exercices précédents, alors on le désactive
101 $return = parent
::disable($id);
107 public function get($id)
109 $db = DB
::getInstance();
110 return $db->simpleQuerySingle('SELECT * FROM compta_comptes AS c
111 INNER JOIN compta_comptes_bancaires AS cc
113 WHERE c.id = ?;', true, $id);
116 public function getList($parent = false)
118 $db = DB
::getInstance();
119 return $db->simpleStatementFetchAssocKey('SELECT c.id AS id, * FROM compta_comptes AS c
120 INNER JOIN compta_comptes_bancaires AS cc ON c.id = cc.id
121 WHERE c.parent = '.self
::NUMERO_PARENT_COMPTES
.' ORDER BY c.id;');
124 protected function _checkBankFields(&$data)
126 if (empty($data['banque']) ||
!trim($data['banque']))
128 throw new UserException('Le nom de la banque ne peut rester vide.');
131 if (empty($data['bic']))
137 $data['bic'] = trim(strtoupper($data['bic']));
138 $data['bic'] = preg_replace('![^\dA-Z]!', '', $data['bic']);
140 if (!utils
::checkBIC($data['bic']))
142 throw new UserException('Code BIC/SWIFT invalide.');
146 if (empty($data['iban']))
152 $data['iban'] = trim(strtoupper($data['iban']));
153 $data['iban'] = preg_replace('![^\dA-Z]!', '', $data['iban']);
155 if (!utils
::checkIBAN($data['iban']))
157 throw new UserException('Code IBAN invalide.');