dolibarr 18.0.6
accountancycategory.class.php
Go to the documentation of this file.
1<?php
2/* Copyright (C) 2016 Jamal Elbaz <jamelbaz@gmail.pro>
3 * Copyright (C) 2016-2017 Alexandre Spangaro <aspangaro@open-dsi.fr>
4 * Copyright (C) 2018-2019 Frédéric France <frederic.france@netlogic.fr>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
26// Class
27require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
28
32class AccountancyCategory // extends CommonObject
33{
37 public $db;
38
42 public $error;
43
47 public $errors = array();
48
52 public $element = 'c_accounting_category';
53
57 public $table_element = 'c_accounting_category';
58
63 public $rowid;
64
68 public $id;
69
73 public $code;
74
78 public $label;
79
83 public $range_account;
84
88 public $sens;
89
93 public $category_type;
94
98 public $formula;
99
103 public $position;
104
108 public $fk_country;
109
113 public $active;
114
118 public $lines_cptbk;
119
123 public $lines_display;
124
128 public $sdc;
129
130
131
137 public function __construct($db)
138 {
139 $this->db = $db;
140 }
141
142
150 public function create($user, $notrigger = 0)
151 {
152 global $conf, $langs;
153 $error = 0;
154
155 // Clean parameters
156 if (isset($this->code)) {
157 $this->code = trim($this->code);
158 }
159 if (isset($this->label)) {
160 $this->label = trim($this->label);
161 }
162 if (isset($this->range_account)) {
163 $this->range_account = trim($this->range_account);
164 }
165 if (isset($this->sens)) {
166 $this->sens = (int) $this->sens;
167 }
168 if (isset($this->category_type)) {
169 $this->category_type = (int) $this->category_type;
170 }
171 if (isset($this->formula)) {
172 $this->formula = trim($this->formula);
173 }
174 if (isset($this->position)) {
175 $this->position = (int) $this->position;
176 }
177 if (isset($this->fk_country)) {
178 $this->fk_country = (int) $this->fk_country;
179 }
180 if (isset($this->active)) {
181 $this->active = (int) $this->active;
182 }
183
184 // Check parameters
185 // Put here code to add control on parameters values
186
187 // Insert request
188 $sql = "INSERT INTO ".MAIN_DB_PREFIX."c_accounting_category(";
189 if ($this->rowid > 0) {
190 $sql .= "rowid, ";
191 }
192 $sql .= "code, ";
193 $sql .= "label, ";
194 $sql .= "range_account, ";
195 $sql .= "sens, ";
196 $sql .= "category_type, ";
197 $sql .= "formula, ";
198 $sql .= "position, ";
199 $sql .= "fk_country, ";
200 $sql .= "active, ";
201 $sql .= "entity";
202 $sql .= ") VALUES (";
203 if ($this->rowid > 0) {
204 $sql .= " ".((int) $this->rowid).",";
205 }
206 $sql .= " ".(!isset($this->code) ? 'NULL' : "'".$this->db->escape($this->code)."'").",";
207 $sql .= " ".(!isset($this->label) ? 'NULL' : "'".$this->db->escape($this->label)."'").",";
208 $sql .= " ".(!isset($this->range_account) ? 'NULL' : "'".$this->db->escape($this->range_account)."'").",";
209 $sql .= " ".(!isset($this->sens) ? 'NULL' : "'".$this->db->escape($this->sens)."'").",";
210 $sql .= " ".(!isset($this->category_type) ? 'NULL' : "'".$this->db->escape($this->category_type)."'").",";
211 $sql .= " ".(!isset($this->formula) ? 'NULL' : "'".$this->db->escape($this->formula)."'").",";
212 $sql .= " ".(!isset($this->position) ? 'NULL' : ((int) $this->position)).",";
213 $sql .= " ".(!isset($this->fk_country) ? 'NULL' : ((int) $this->fk_country)).",";
214 $sql .= " ".(!isset($this->active) ? 'NULL' : ((int) $this->active));
215 $sql .= ", ".((int) $conf->entity);
216 $sql .= ")";
217
218 $this->db->begin();
219
220 dol_syslog(get_class($this)."::create", LOG_DEBUG);
221 $resql = $this->db->query($sql);
222 if (!$resql) {
223 $error++; $this->errors[] = "Error ".$this->db->lasterror();
224 }
225
226 // Commit or rollback
227 if ($error) {
228 foreach ($this->errors as $errmsg) {
229 dol_syslog(get_class($this)."::create ".$errmsg, LOG_ERR);
230 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
231 }
232 $this->db->rollback();
233 return -1 * $error;
234 } else {
235 $this->db->commit();
236 return $this->id;
237 }
238 }
239
240
249 public function fetch($id, $code = '', $label = '')
250 {
251 $sql = "SELECT";
252 $sql .= " t.rowid,";
253 $sql .= " t.code,";
254 $sql .= " t.label,";
255 $sql .= " t.range_account,";
256 $sql .= " t.sens,";
257 $sql .= " t.category_type,";
258 $sql .= " t.formula,";
259 $sql .= " t.position,";
260 $sql .= " t.fk_country,";
261 $sql .= " t.active";
262 $sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as t";
263 if ($id) {
264 $sql .= " WHERE t.rowid = ".((int) $id);
265 } else {
266 $sql .= " WHERE t.entity IN (".getEntity('c_accounting_category').")"; // Don't use entity if you use rowid
267 if ($code) {
268 $sql .= " AND t.code = '".$this->db->escape($code)."'";
269 } elseif ($label) {
270 $sql .= " AND t.label = '".$this->db->escape($label)."'";
271 }
272 }
273
274 dol_syslog(get_class($this)."::fetch", LOG_DEBUG);
275 $resql = $this->db->query($sql);
276 if ($resql) {
277 if ($this->db->num_rows($resql)) {
278 $obj = $this->db->fetch_object($resql);
279
280 $this->id = $obj->rowid;
281 $this->code = $obj->code;
282 $this->label = $obj->label;
283 $this->range_account = $obj->range_account;
284 $this->sens = $obj->sens;
285 $this->category_type = $obj->category_type;
286 $this->formula = $obj->formula;
287 $this->position = $obj->position;
288 $this->fk_country = $obj->fk_country;
289 $this->active = $obj->active;
290 }
291 $this->db->free($resql);
292
293 return 1;
294 } else {
295 $this->error = "Error ".$this->db->lasterror();
296 return -1;
297 }
298 }
299
300
308 public function update($user = null, $notrigger = 0)
309 {
310 global $conf, $langs;
311 $error = 0;
312
313 // Clean parameters
314 if (isset($this->code)) {
315 $this->code = trim($this->code);
316 }
317 if (isset($this->label)) {
318 $this->label = trim($this->label);
319 }
320 if (isset($this->range_account)) {
321 $this->range_account = trim($this->range_account);
322 }
323 if (isset($this->sens)) {
324 $this->sens = (int) $this->sens;
325 }
326 if (isset($this->category_type)) {
327 $this->category_type = (int) $this->category_type;
328 }
329 if (isset($this->formula)) {
330 $this->formula = trim($this->formula);
331 }
332 if (isset($this->position)) {
333 $this->position = (int) $this->position;
334 }
335 if (isset($this->fk_country)) {
336 $this->fk_country = (int) $this->fk_country;
337 }
338 if (isset($this->active)) {
339 $this->active = (int) $this->active;
340 }
341
342
343 // Check parameters
344 // Put here code to add control on parameters values
345
346 // Update request
347 $sql = "UPDATE ".MAIN_DB_PREFIX."c_accounting_category SET";
348 $sql .= " code=".(isset($this->code) ? "'".$this->db->escape($this->code)."'" : "null").",";
349 $sql .= " label=".(isset($this->label) ? "'".$this->db->escape($this->label)."'" : "null").",";
350 $sql .= " range_account=".(isset($this->range_account) ? "'".$this->db->escape($this->range_account)."'" : "null").",";
351 $sql .= " sens=".(isset($this->sens) ? $this->sens : "null").",";
352 $sql .= " category_type=".(isset($this->category_type) ? $this->category_type : "null").",";
353 $sql .= " formula=".(isset($this->formula) ? "'".$this->db->escape($this->formula)."'" : "null").",";
354 $sql .= " position=".(isset($this->position) ? $this->position : "null").",";
355 $sql .= " fk_country=".(isset($this->fk_country) ? $this->fk_country : "null").",";
356 $sql .= " active=".(isset($this->active) ? $this->active : "null");
357 $sql .= " WHERE rowid=".((int) $this->id);
358
359 $this->db->begin();
360
361 dol_syslog(get_class($this)."::update", LOG_DEBUG);
362 $resql = $this->db->query($sql);
363 if (!$resql) {
364 $error++; $this->errors[] = "Error ".$this->db->lasterror();
365 }
366
367 // Commit or rollback
368 if ($error) {
369 foreach ($this->errors as $errmsg) {
370 dol_syslog(get_class($this)."::update ".$errmsg, LOG_ERR);
371 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
372 }
373 $this->db->rollback();
374 return -1 * $error;
375 } else {
376 $this->db->commit();
377 return 1;
378 }
379 }
380
381
389 public function delete($user, $notrigger = 0)
390 {
391 global $conf, $langs;
392 $error = 0;
393
394 $sql = "DELETE FROM ".MAIN_DB_PREFIX."c_accounting_category";
395 $sql .= " WHERE rowid=".((int) $this->id);
396
397 $this->db->begin();
398
399 dol_syslog(get_class($this)."::delete", LOG_DEBUG);
400 $resql = $this->db->query($sql);
401 if (!$resql) {
402 $error++; $this->errors[] = "Error ".$this->db->lasterror();
403 }
404
405 // Commit or rollback
406 if ($error) {
407 foreach ($this->errors as $errmsg) {
408 dol_syslog(get_class($this)."::delete ".$errmsg, LOG_ERR);
409 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
410 }
411 $this->db->rollback();
412 return -1 * $error;
413 } else {
414 $this->db->commit();
415 return 1;
416 }
417 }
418
419
426 public function display($id)
427 {
428 global $conf;
429 $sql = "SELECT t.rowid, t.account_number, t.label";
430 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t";
431 $sql .= " WHERE t.fk_accounting_category = ".((int) $id);
432 $sql .= " AND t.entity = ".$conf->entity;
433
434 $this->lines_display = array();
435
436 dol_syslog(__METHOD__, LOG_DEBUG);
437 $resql = $this->db->query($sql);
438 if ($resql) {
439 $num = $this->db->num_rows($resql);
440 if ($num) {
441 while ($obj = $this->db->fetch_object($resql)) {
442 $this->lines_display[] = $obj;
443 }
444 }
445 return $num;
446 } else {
447 $this->error = "Error ".$this->db->lasterror();
448 $this->errors[] = $this->error;
449 dol_syslog(__METHOD__." ".implode(',', $this->errors), LOG_ERR);
450
451 return -1;
452 }
453 }
454
461 public function getAccountsWithNoCategory($id)
462 {
463 global $conf;
464
465 $sql = "SELECT aa.account_number as numero_compte, aa.label as label_compte";
466 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
467 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
468 $sql .= " WHERE (aa.fk_accounting_category <> ".((int) $id)." OR aa.fk_accounting_category IS NULL)";
469 $sql .= " AND asy.rowid = ".((int) getDolGlobalInt('CHARTOFACCOUNTS'));
470 $sql .= " AND aa.active = 1";
471 $sql .= " AND aa.entity = ".$conf->entity;
472 $sql .= " GROUP BY aa.account_number, aa.label";
473 $sql .= " ORDER BY aa.account_number, aa.label";
474
475 $this->lines_cptbk = array();
476
477 dol_syslog(__METHOD__, LOG_DEBUG);
478 $resql = $this->db->query($sql);
479 if ($resql) {
480 $num = $this->db->num_rows($resql);
481 if ($num) {
482 while ($obj = $this->db->fetch_object($resql)) {
483 $this->lines_cptbk[] = $obj;
484 }
485 }
486
487 return $num;
488 } else {
489 $this->error = "Error ".$this->db->lasterror();
490 $this->errors[] = $this->error;
491 dol_syslog(__METHOD__." ".implode(',', $this->errors), LOG_ERR);
492
493 return -1;
494 }
495 }
496
505 public function updateAccAcc($id_cat, $cpts = array())
506 {
507 global $conf;
508 $error = 0;
509
510 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
511
512 $sql = "SELECT aa.rowid, aa.account_number";
513 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as aa";
514 $sql .= " INNER JOIN ".MAIN_DB_PREFIX."accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
515 $sql .= " AND asy.rowid = ".((int) getDolGlobalInt('CHARTOFACCOUNTS'));
516 $sql .= " AND aa.active = 1";
517 $sql .= " AND aa.entity = ".$conf->entity;
518 $sql .= " ORDER BY LENGTH(aa.account_number) DESC;"; // LENGTH is ok with mysql and postgresql
519
520 $this->db->begin();
521
522 dol_syslog(__METHOD__, LOG_DEBUG);
523 $resql = $this->db->query($sql);
524 if (!$resql) {
525 $error++;
526 $this->errors[] = "Error ".$this->db->lasterror();
527 $this->db->rollback();
528 return -1;
529 }
530
531 $accountincptsadded = array();
532 while ($obj = $this->db->fetch_object($resql)) {
533 $account_number_formated = length_accountg($obj->account_number);
534 if (!empty($accountincptsadded[$account_number_formated])) {
535 continue;
536 }
537
538 if (array_key_exists($account_number_formated, $cpts)) {
539 $accountincptsadded[$account_number_formated] = 1;
540 // We found an account number that is in list $cpts of account to add
541 $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account";
542 $sql .= " SET fk_accounting_category=".((int) $id_cat);
543 $sql .= " WHERE rowid=".((int) $obj->rowid);
544 dol_syslog(__METHOD__, LOG_DEBUG);
545 $resqlupdate = $this->db->query($sql);
546 if (!$resqlupdate) {
547 $error++;
548 $this->errors[] = "Error ".$this->db->lasterror();
549 }
550 }
551 }
552
553 // Commit or rollback
554 if ($error) {
555 foreach ($this->errors as $errmsg) {
556 dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
557 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
558 }
559 $this->db->rollback();
560
561 return -1 * $error;
562 } else {
563 $this->db->commit();
564
565 return 1;
566 }
567 }
568
576 public function deleteCptCat($cpt_id)
577 {
578 $error = 0;
579
580 $sql = "UPDATE ".MAIN_DB_PREFIX."accounting_account as aa";
581 $sql .= " SET fk_accounting_category= 0";
582 $sql .= " WHERE aa.rowid = ".((int) $cpt_id);
583 $this->db->begin();
584
585 dol_syslog(__METHOD__, LOG_DEBUG);
586 $resql = $this->db->query($sql);
587 if (!$resql) {
588 $error++;
589 $this->errors[] = "Error ".$this->db->lasterror();
590 }
591
592 // Commit or rollback
593 if ($error) {
594 foreach ($this->errors as $errmsg) {
595 dol_syslog(__METHOD__." ".$errmsg, LOG_ERR);
596 $this->error .= ($this->error ? ', '.$errmsg : $errmsg);
597 }
598 $this->db->rollback();
599
600 return -1 * $error;
601 } else {
602 $this->db->commit();
603
604 return 1;
605 }
606 }
607
620 public function getSumDebitCredit($cpt, $date_start, $date_end, $sens, $thirdparty_code = 'nofilter', $month = 0, $year = 0)
621 {
622 global $conf;
623
624 $this->sdc = 0;
625 $this->sdcpermonth = array();
626
627 if (is_array($cpt)) {
628 $listofaccount = '';
629 foreach ($cpt as $cptcursor) {
630 if (! is_null($cptcursor)) {
631 if ($listofaccount) {
632 $listofaccount .= ",";
633 }
634 $listofaccount .= "'".$cptcursor."'";
635 }
636 }
637 if (empty($listofaccount)) {
638 // List of account is empty, so we do no try sql request, we can say result is empty.
639 return 0;
640 }
641 }
642
643 $sql = "SELECT SUM(t.debit) as debit, SUM(t.credit) as credit";
644 if (is_array($cpt)) {
645 $sql .= ", t.numero_compte as accountancy_account";
646 }
647 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as t";
648 //if (in_array($this->db->type, array('mysql', 'mysqli'))) $sql.=' USE INDEX idx_accounting_bookkeeping_doc_date';
649 $sql .= " WHERE t.entity = ".((int) $conf->entity);
650 if (is_array($cpt)) {
651 $sql .= " AND t.numero_compte IN (".$this->db->sanitize($listofaccount, 1).")";
652 } else {
653 $sql .= " AND t.numero_compte = '".$this->db->escape($cpt)."'";
654 }
655 if (!empty($date_start) && !empty($date_end) && (empty($month) || empty($year))) { // If month/year provided, it is stronger than filter date_start/date_end
656 $sql .= " AND (t.doc_date BETWEEN '".$this->db->idate($date_start)."' AND '".$this->db->idate($date_end)."')";
657 }
658 if (!empty($month) && !empty($year)) {
659 $sql .= " AND (t.doc_date BETWEEN '".$this->db->idate(dol_get_first_day($year, $month))."' AND '".$this->db->idate(dol_get_last_day($year, $month))."')";
660 }
661 if ($thirdparty_code != 'nofilter') {
662 $sql .= " AND t.thirdparty_code = '".$this->db->escape($thirdparty_code)."'";
663 }
664 if (is_array($cpt)) {
665 $sql .= " GROUP BY t.numero_compte";
666 }
667
668 $resql = $this->db->query($sql);
669 if ($resql) {
670 $num = $this->db->num_rows($resql);
671 if ($num) {
672 $i = 0;
673 while ($i < $num) {
674 $obj = $this->db->fetch_object($resql);
675 if ($obj) {
676 if ($sens == 1) {
677 $this->sdc = $obj->debit - $obj->credit;
678 } else {
679 $this->sdc = $obj->credit - $obj->debit;
680 }
681 if (is_array($cpt)) {
682 $this->sdcperaccount[$obj->accountancy_account] = $this->sdc;
683 }
684 }
685 $i++;
686 }
687 }
688
689 return $num;
690 } else {
691 $this->error = "Error ".$this->db->lasterror();
692 $this->errors[] = $this->error;
693 dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
694 return -1;
695 }
696 }
697
705 public function getCatsCpts($catid = 0)
706 {
707 global $mysoc, $conf;
708
709 if (empty($mysoc->country_id)) {
710 $this->error = "Error ".$this->db->lasterror();
711 dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
712 return -1;
713 }
714
715 $sql = "SELECT t.rowid, t.account_number, t.label as account_label,";
716 $sql .= " cat.code, cat.position, cat.label as name_cat, cat.sens, cat.category_type, cat.formula";
717 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t, ".MAIN_DB_PREFIX."c_accounting_category as cat";
718 $sql .= " WHERE t.fk_accounting_category IN (SELECT c.rowid";
719 $sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
720 $sql .= " WHERE c.active = 1";
721 $sql .= " AND c.entity = ".$conf->entity;
722 $sql .= " AND (c.fk_country = ".((int) $mysoc->country_id)." OR c.fk_country = 0)";
723 $sql .= " AND cat.rowid = t.fk_accounting_category";
724 $sql .= " AND t.entity = ".$conf->entity;
725 if ($catid > 0) {
726 $sql .= " AND cat.rowid = ".((int) $catid);
727 }
728 $sql .= " ORDER BY cat.position ASC";
729
730 $resql = $this->db->query($sql);
731 if ($resql) {
732 $obj = '';
733 $num = $this->db->num_rows($resql);
734 $data = array();
735 if ($num) {
736 while ($obj = $this->db->fetch_object($resql)) {
737 $name_cat = $obj->name_cat;
738 $data[$name_cat][$obj->rowid] = array(
739 'id' => $obj->rowid,
740 'code' => $obj->code,
741 'label' => $obj->label,
742 'position' => $obj->position,
743 'category_type' => $obj->category_type,
744 'formula' => $obj->formula,
745 'sens' => $obj->sens,
746 'account_number' => $obj->account_number,
747 'account_label' => $obj->account_label
748 );
749 }
750 }
751 return $data;
752 } else {
753 $this->error = "Error ".$this->db->lasterror();
754 dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
755 return -1;
756 }
757 }
758
768 public function getCats($categorytype = -1, $active = 1)
769 {
770 global $conf, $mysoc;
771
772 if (empty($mysoc->country_id)) {
773 dol_print_error('', 'Call to select_accounting_account with mysoc country not yet defined');
774 exit();
775 }
776
777 $sql = "SELECT c.rowid, c.code, c.label, c.formula, c.position, c.category_type, c.sens";
778 $sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
779 $sql .= " WHERE c.active = " . (int) $active;
780 $sql .= " AND c.entity = ".$conf->entity;
781 if ($categorytype >= 0) {
782 $sql .= " AND c.category_type = 1";
783 }
784 $sql .= " AND (c.fk_country = ".((int) $mysoc->country_id)." OR c.fk_country = 0)";
785 $sql .= " ORDER BY c.position ASC";
786
787 $resql = $this->db->query($sql);
788 if ($resql) {
789 $i = 0;
790 $obj = '';
791 $num = $this->db->num_rows($resql);
792 $data = array();
793 if ($num) {
794 while ($i < $num) {
795 $obj = $this->db->fetch_object($resql);
796
797 $data[] = array(
798 'rowid' => $obj->rowid,
799 'code' => $obj->code,
800 'label' => $obj->label,
801 'position' => $obj->position,
802 'category_type' => $obj->category_type,
803 'formula' => $obj->formula,
804 'sens' => $obj->sens,
805 'bc' => $obj->sens
806 );
807 $i++;
808 }
809 }
810 return $data;
811 } else {
812 $this->error = "Error ".$this->db->lasterror();
813 $this->errors[] = $this->error;
814 dol_syslog(__METHOD__." ".implode(',', $this->errors), LOG_ERR);
815
816 return -1;
817 }
818 }
819
820
832 public function getCptsCat($cat_id, $predefinedgroupwhere = '')
833 {
834 global $conf, $mysoc;
835 $sql = '';
836
837 if (empty($mysoc->country_id) && empty($mysoc->country_code)) {
838 dol_print_error('', 'Call to select_accounting_account with mysoc country not yet defined');
839 exit();
840 }
841
842 $pcgverid = getDolGlobalInt('CHARTOFACCOUNTS');
843 $pcgvercode = dol_getIdFromCode($this->db, $pcgverid, 'accounting_system', 'rowid', 'pcg_version');
844 if (empty($pcgvercode)) {
845 $pcgvercode = $pcgverid;
846 }
847
848 if (!empty($cat_id)) {
849 $sql = "SELECT t.rowid, t.account_number, t.label as account_label";
850 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t";
851 $sql .= " WHERE t.fk_accounting_category = ".((int) $cat_id);
852 $sql .= " AND t.entity = ".$conf->entity;
853 $sql .= " AND t.active = 1";
854 $sql .= " AND t.fk_pcg_version = '".$this->db->escape($pcgvercode)."'";
855 $sql .= " ORDER BY t.account_number";
856 } else {
857 $sql = "SELECT t.rowid, t.account_number, t.label as account_label";
858 $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t";
859 $sql .= " WHERE ".$predefinedgroupwhere;
860 $sql .= " AND t.entity = ".$conf->entity;
861 $sql .= ' AND t.active = 1';
862 $sql .= " AND t.fk_pcg_version = '".$this->db->escape($pcgvercode)."'";
863 $sql .= " ORDER BY t.account_number";
864 }
865
866 $resql = $this->db->query($sql);
867 if ($resql) {
868 $i = 0;
869 $obj = '';
870 $num = $this->db->num_rows($resql);
871 $data = array();
872 if ($num) {
873 while ($obj = $this->db->fetch_object($resql)) {
874 $data[] = array(
875 'id' => $obj->rowid,
876 'account_number' => $obj->account_number,
877 'account_label' => $obj->account_label,
878 );
879 $i++;
880 }
881 }
882 return $data;
883 } else {
884 $this->error = "Error ".$this->db->lasterror();
885 dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
886
887 return -1;
888 }
889 }
890}
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
Class to manage categories of an accounting account.
getCptsCat($cat_id, $predefinedgroupwhere='')
Get all accounting account of a given custom group (or a list of custom groups).
update($user=null, $notrigger=0)
Update object into database.
getAccountsWithNoCategory($id)
Function to fill ->lines_cptbk with accounting account (defined in chart of account) and not yet into...
create($user, $notrigger=0)
Create object into database.
getCats($categorytype=-1, $active=1)
Return list of custom groups.
getCatsCpts($catid=0)
Function to get an array of all active custom groups (llx_c_accunting_categories) with their accounts...
fetch($id, $code='', $label='')
Load object in memory from database.
deleteCptCat($cpt_id)
Function to delete an accounting account from an accounting category.
display($id)
Function to select into ->lines_display all accounting accounts for a given custom accounting group.
getSumDebitCredit($cpt, $date_start, $date_end, $sens, $thirdparty_code='nofilter', $month=0, $year=0)
Function to show result of an accounting account from the ledger with a direction and a period.
updateAccAcc($id_cat, $cpts=array())
Function to add an accounting account in an accounting category.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition date.lib.php:577
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition date.lib.php:596
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
dol_getIdFromCode($db, $key, $tablename, $fieldkey='code', $fieldid='id', $entityfilter=0, $filters='')
Return an id or code from a code or id.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
rtl background position
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall right right takeposterminal SELECT e rowid
Definition invoice.php:1632