init
[garradin.git] / include / class.compta_categories.php
1 <?php
2
3 namespace Garradin;
4
5 class Compta_Categories
6 {
7 const DEPENSES = -1;
8 const RECETTES = 1;
9 const AUTRES = 0;
10
11 public function importCategories()
12 {
13 $db = DB::getInstance();
14 $db->exec(file_get_contents(ROOT . '/include/data/categories_comptables.sql'));
15 }
16
17 public function add($data)
18 {
19 $this->_checkFields($data);
20
21 $db = DB::getInstance();
22
23 if (empty($data['compte']) || !trim($data['compte']))
24 {
25 throw new UserException('Le compte associé ne peut rester vide.');
26 }
27
28 $data['compte'] = trim($data['compte']);
29
30 if (!$db->simpleQuerySingle('SELECT 1 FROM compta_comptes WHERE id = ?;', false, $data['compte']))
31 {
32 throw new UserException('Le compte associé n\'existe pas.');
33 }
34
35 if (!isset($data['type']) ||
36 ($data['type'] != self::DEPENSES && $data['type'] != self::RECETTES))
37 {
38 // Catégories "autres" pas possibles pour le moment
39 throw new UserException('Type de catégorie inconnu.');
40 }
41
42 $db->simpleInsert('compta_categories', [
43 'intitule' => $data['intitule'],
44 'description'=> $data['description'],
45 'compte' => $data['compte'],
46 'type' => (int)$data['type'],
47 ]);
48
49 return $db->lastInsertRowId();
50 }
51
52 public function edit($id, $data)
53 {
54 $this->_checkFields($data);
55
56 $db = DB::getInstance();
57
58 $db->simpleUpdate('compta_categories',
59 [
60 'intitule' => $data['intitule'],
61 'description'=> $data['description'],
62 ],
63 'id = \''.$db->escapeString(trim($id)).'\'');
64
65 return true;
66 }
67
68 public function delete($id)
69 {
70 $db = DB::getInstance();
71
72 // Ne pas supprimer une catégorie qui est utilisée !
73 if ($db->simpleQuerySingle('SELECT 1 FROM compta_journal WHERE id_categorie = ? LIMIT 1;', false, $id))
74 {
75 throw new UserException('Cette catégorie ne peut être supprimée car des opérations comptables y sont liées.');
76 }
77
78 $db->simpleExec('DELETE FROM compta_categories WHERE id = ?;', $id);
79
80 return true;
81 }
82
83 public function get($id)
84 {
85 $db = DB::getInstance();
86 return $db->simpleQuerySingle('SELECT * FROM compta_categories WHERE id = ?;', true, (int)$id);
87 }
88
89 public function getList($type = null)
90 {
91 $db = DB::getInstance();
92 $type = is_null($type) ? '' : 'cat.type = '.(int)$type;
93 return $db->simpleStatementFetchAssocKey('
94 SELECT cat.id, cat.*, cc.libelle AS compte_libelle
95 FROM compta_categories AS cat INNER JOIN compta_comptes AS cc
96 ON cc.id = cat.compte
97 WHERE '.$type.' ORDER BY cat.intitule;', SQLITE3_ASSOC);
98 }
99
100 public function listMoyensPaiement()
101 {
102 $db = DB::getInstance();
103 return $db->simpleStatementFetchAssocKey('SELECT code, nom FROM compta_moyens_paiement ORDER BY nom COLLATE NOCASE;');
104 }
105
106 public function getMoyenPaiement($code)
107 {
108 $db = DB::getInstance();
109 return $db->simpleQuerySingle('SELECT nom FROM compta_moyens_paiement WHERE code = ?;', false, $code);
110 }
111
112 protected function _checkFields(&$data)
113 {
114 if (empty($data['intitule']) || !trim($data['intitule']))
115 {
116 throw new UserException('L\'intitulé ne peut rester vide.');
117 }
118
119 $data['intitule'] = trim($data['intitule']);
120 $data['description'] = isset($data['description']) ? trim($data['description']) : '';
121
122 return true;
123 }
124 }
125
126 ?>