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 WHERE id_exercice = (SELECT id FROM compta_exercices WHERE cloture = 0 LIMIT 1)
79 AND (compte_debit = ? OR compte_debit = ?) LIMIT 1;', false, $id, $id))
81 throw new UserException('Ce compte ne peut être supprimé car des écritures y sont liées sur l\'exercice courant. '
82 . 'Il faut supprimer ou ré-attribuer ces écritures avant de pouvoir supprimer le compte.');
85 // Il n'est pas possible de supprimer ou désactiver un compte qui est lié à des catégories
86 if ($db->simpleQuerySingle('SELECT 1 FROM compta_categories WHERE compte = ? LIMIT 1;', false, $id))
88 throw new UserException('Ce compte ne peut être supprimé car des catégories y sont liées. '
89 . 'Merci de supprimer ou modifier les catégories liées avant de le supprimer.');
92 $db->simpleExec('DELETE FROM compta_comptes_bancaires WHERE id = ?;', trim($id));
95 $return = parent
::delete($id);
97 catch (UserException
$e) {
98 // Impossible de supprimer car des opérations y sont encore liées
99 // sur les exercices précédents, alors on le désactive
100 $return = parent
::disable($id);
106 public function get($id)
108 $db = DB
::getInstance();
109 return $db->simpleQuerySingle('SELECT * FROM compta_comptes AS c
110 INNER JOIN compta_comptes_bancaires AS cc
112 WHERE c.id = ?;', true, $id);
115 public function getList($parent = false)
117 $db = DB
::getInstance();
118 return $db->simpleStatementFetchAssocKey('SELECT c.id AS id, * FROM compta_comptes AS c
119 INNER JOIN compta_comptes_bancaires AS cc ON c.id = cc.id
120 WHERE c.parent = '.self
::NUMERO_PARENT_COMPTES
.' ORDER BY c.id;');
123 protected function _checkBankFields(&$data)
125 if (empty($data['banque']) ||
!trim($data['banque']))
127 throw new UserException('Le nom de la banque ne peut rester vide.');
130 if (empty($data['bic']))
136 $data['bic'] = trim(strtoupper($data['bic']));
137 $data['bic'] = preg_replace('![^\dA-Z]!', '', $data['bic']);
139 if (!utils
::checkBIC($data['bic']))
141 throw new UserException('Code BIC/SWIFT invalide.');
145 if (empty($data['iban']))
151 $data['iban'] = trim(strtoupper($data['iban']));
152 $data['iban'] = preg_replace('![^\dA-Z]!', '', $data['iban']);
154 if (!utils
::checkIBAN($data['iban']))
156 throw new UserException('Code IBAN invalide.');