dolibarr  17.0.4
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
27 require_once DOL_DOCUMENT_ROOT.'/core/lib/accounting.lib.php';
28 
32 class 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) $conf->global->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) $conf->global->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 
613  public function getCatsCpts()
614  {
615  global $mysoc, $conf;
616 
617  if (empty($mysoc->country_id)) {
618  dol_print_error('', 'Call to select_accounting_account with mysoc country not yet defined');
619  exit();
620  }
621 
622  $sql = "SELECT t.rowid, t.account_number, t.label as account_label, cat.code, cat.position, cat.label as name_cat, cat.sens ";
623  $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t, ".MAIN_DB_PREFIX."c_accounting_category as cat";
624  $sql .= " WHERE t.fk_accounting_category IN ( SELECT c.rowid ";
625  $sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
626  $sql .= " WHERE c.active = 1";
627  $sql .= " AND c.entity = ".$conf->entity;
628  $sql .= " AND (c.fk_country = ".((int) $mysoc->country_id)." OR c.fk_country = 0)";
629  $sql .= " AND cat.rowid = t.fk_accounting_category";
630  $sql .= " AND t.entity = ".$conf->entity;
631  $sql .= " ORDER BY cat.position ASC";
632 
633  $resql = $this->db->query($sql);
634  if ($resql) {
635  $i = 0;
636  $obj = '';
637  $num = $this->db->num_rows($resql);
638  $data = array();
639  if ($num) {
640  while ($obj = $this->db->fetch_object($resql)) {
641  $name_cat = $obj->name_cat;
642  $data[$name_cat][$i] = array(
643  'id' => $obj->rowid,
644  'code' => $obj->code,
645  'position' => $obj->position,
646  'account_number' => $obj->account_number,
647  'account_label' => $obj->account_label,
648  'sens' => $obj->sens
649  );
650  $i++;
651  }
652  }
653  return $data;
654  } else {
655  $this->error = "Error ".$this->db->lasterror();
656  dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
657 
658  return -1;
659  }
660  }
661 
674  public function getSumDebitCredit($cpt, $date_start, $date_end, $sens, $thirdparty_code = 'nofilter', $month = 0, $year = 0)
675  {
676  global $conf;
677 
678  $this->sdc = 0;
679  $this->sdcpermonth = array();
680 
681  if (is_array($cpt)) {
682  $listofaccount = '';
683  foreach ($cpt as $cptcursor) {
684  if (! is_null($cptcursor)) {
685  if ($listofaccount) {
686  $listofaccount .= ",";
687  }
688  $listofaccount .= "'".$cptcursor."'";
689  }
690  }
691  if (empty($listofaccount)) {
692  // List of account is empty, so we do no try sql request, we can say result is empty.
693  return 0;
694  }
695  }
696 
697  $sql = "SELECT SUM(t.debit) as debit, SUM(t.credit) as credit";
698  if (is_array($cpt)) {
699  $sql .= ", t.numero_compte as accountancy_account";
700  }
701  $sql .= " FROM ".MAIN_DB_PREFIX."accounting_bookkeeping as t";
702  //if (in_array($this->db->type, array('mysql', 'mysqli'))) $sql.=' USE INDEX idx_accounting_bookkeeping_doc_date';
703  $sql .= " WHERE t.entity = ".((int) $conf->entity);
704  if (is_array($cpt)) {
705  $sql .= " AND t.numero_compte IN (".$this->db->sanitize($listofaccount, 1).")";
706  } else {
707  $sql .= " AND t.numero_compte = '".$this->db->escape($cpt)."'";
708  }
709  if (!empty($date_start) && !empty($date_end) && (empty($month) || empty($year))) { // If month/year provided, it is stronger than filter date_start/date_end
710  $sql .= " AND (t.doc_date BETWEEN '".$this->db->idate($date_start)."' AND '".$this->db->idate($date_end)."')";
711  }
712  if (!empty($month) && !empty($year)) {
713  $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))."')";
714  }
715  if ($thirdparty_code != 'nofilter') {
716  $sql .= " AND t.thirdparty_code = '".$this->db->escape($thirdparty_code)."'";
717  }
718  if (is_array($cpt)) {
719  $sql .= " GROUP BY t.numero_compte";
720  }
721 
722  $resql = $this->db->query($sql);
723  if ($resql) {
724  $num = $this->db->num_rows($resql);
725  if ($num) {
726  $i = 0;
727  while ($i < $num) {
728  $obj = $this->db->fetch_object($resql);
729  if ($obj) {
730  if ($sens == 1) {
731  $this->sdc = $obj->debit - $obj->credit;
732  } else {
733  $this->sdc = $obj->credit - $obj->debit;
734  }
735  if (is_array($cpt)) {
736  $this->sdcperaccount[$obj->accountancy_account] = $this->sdc;
737  }
738  }
739  $i++;
740  }
741  }
742 
743  return $num;
744  } else {
745  $this->error = "Error ".$this->db->lasterror();
746  $this->errors[] = $this->error;
747  dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
748  return -1;
749  }
750  }
751 
759  public function getCats($categorytype = -1, $active = 1)
760  {
761  global $conf, $mysoc;
762 
763  if (empty($mysoc->country_id)) {
764  dol_print_error('', 'Call to select_accounting_account with mysoc country not yet defined');
765  exit();
766  }
767 
768  $sql = "SELECT c.rowid, c.code, c.label, c.formula, c.position, c.category_type, c.sens";
769  $sql .= " FROM ".MAIN_DB_PREFIX."c_accounting_category as c";
770  $sql .= " WHERE c.active = " . (int) $active;
771  $sql .= " AND c.entity = ".$conf->entity;
772  if ($categorytype >= 0) {
773  $sql .= " AND c.category_type = 1";
774  }
775  $sql .= " AND (c.fk_country = ".((int) $mysoc->country_id)." OR c.fk_country = 0)";
776  $sql .= " ORDER BY c.position ASC";
777 
778  $resql = $this->db->query($sql);
779  if ($resql) {
780  $i = 0;
781  $obj = '';
782  $num = $this->db->num_rows($resql);
783  $data = array();
784  if ($num) {
785  while ($i < $num) {
786  $obj = $this->db->fetch_object($resql);
787 
788  $data[] = array(
789  'rowid' => $obj->rowid,
790  'code' => $obj->code,
791  'label' => $obj->label,
792  'formula' => $obj->formula,
793  'position' => $obj->position,
794  'category_type' => $obj->category_type,
795  'bc' => $obj->sens
796  );
797  $i++;
798  }
799  }
800  return $data;
801  } else {
802  $this->error = "Error ".$this->db->lasterror();
803  $this->errors[] = $this->error;
804  dol_syslog(__METHOD__." ".implode(',', $this->errors), LOG_ERR);
805 
806  return -1;
807  }
808  }
809 
810 
819  public function getCptsCat($cat_id, $predefinedgroupwhere = '')
820  {
821  global $conf, $mysoc;
822  $sql = '';
823 
824  if (empty($mysoc->country_id) && empty($mysoc->country_code)) {
825  dol_print_error('', 'Call to select_accounting_account with mysoc country not yet defined');
826  exit();
827  }
828 
829  $pcgverid = $conf->global->CHARTOFACCOUNTS;
830  $pcgvercode = dol_getIdFromCode($this->db, $pcgverid, 'accounting_system', 'rowid', 'pcg_version');
831  if (empty($pcgvercode)) {
832  $pcgvercode = $pcgverid;
833  }
834 
835  if (!empty($cat_id)) {
836  $sql = "SELECT t.rowid, t.account_number, t.label as account_label";
837  $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t";
838  $sql .= " WHERE t.fk_accounting_category = ".((int) $cat_id);
839  $sql .= " AND t.entity = ".$conf->entity;
840  $sql .= " AND t.active = 1";
841  $sql .= " AND t.fk_pcg_version = '".$this->db->escape($pcgvercode)."'";
842  $sql .= " ORDER BY t.account_number";
843  } else {
844  $sql = "SELECT t.rowid, t.account_number, t.label as account_label";
845  $sql .= " FROM ".MAIN_DB_PREFIX."accounting_account as t";
846  $sql .= " WHERE ".$predefinedgroupwhere;
847  $sql .= " AND t.entity = ".$conf->entity;
848  $sql .= ' AND t.active = 1';
849  $sql .= " AND t.fk_pcg_version = '".$this->db->escape($pcgvercode)."'";
850  $sql .= " ORDER BY t.account_number";
851  }
852 
853  $resql = $this->db->query($sql);
854  if ($resql) {
855  $i = 0;
856  $obj = '';
857  $num = $this->db->num_rows($resql);
858  $data = array();
859  if ($num) {
860  while ($obj = $this->db->fetch_object($resql)) {
861  $data[] = array(
862  'id' => $obj->rowid,
863  'account_number' => $obj->account_number,
864  'account_label' => $obj->account_label,
865  );
866  $i++;
867  }
868  }
869  return $data;
870  } else {
871  $this->error = "Error ".$this->db->lasterror();
872  dol_syslog(__METHOD__." ".$this->error, LOG_ERR);
873 
874  return -1;
875  }
876  }
877 }
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
Class to manage categories of an accounting account.
getCatsCpts()
Function to know all custom groupd from an accounting account.
getCptsCat($cat_id, $predefinedgroupwhere='')
Get all accounting account of a 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.
fetch($id, $code='', $label='')
Load object in memory from database.
deleteCptCat($cpt_id)
Function to delete an accounting account from an accounting category.
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.
display($id)
Function to select into ->lines_display all accounting accounts for a given custom accounting group.
if(isModEnabled('facture') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
Definition: index.php:745
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
Definition: date.lib.php:575
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
Definition: date.lib.php:594
print *****$script_file(".$version.") pid c cd cd cd description as p label as s rowid
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
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.
$conf db
API class for accounts.
Definition: inc.php:41
print *****$script_file(".$version.") pid code
! Closing after partial payment: discount_vat, badcustomer or badsupplier, bankcharge,...