28 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
38 public $element =
'accountingbookkeeping';
43 public $table_element =
'accounting_bookkeeping';
53 public $lines = array();
68 public $date_lim_reglement;
93 public $thirdparty_code;
98 public $subledger_account;
103 public $subledger_label;
108 public $numero_compte;
113 public $label_compte;
118 public $label_operation;
150 public $fk_user_author;
160 public $code_journal;
165 public $journal_label;
175 public $date_validation;
185 public $picto =
'generic';
207 global $conf, $langs;
214 if (isset($this->doc_type)) {
215 $this->doc_type = trim($this->doc_type);
217 if (isset($this->doc_ref)) {
218 $this->doc_ref = trim($this->doc_ref);
220 if (isset($this->fk_doc)) {
221 $this->fk_doc = (int) $this->fk_doc;
223 if (isset($this->fk_docdet)) {
224 $this->fk_docdet = (int) $this->fk_docdet;
226 if (isset($this->thirdparty_code)) {
227 $this->thirdparty_code = trim($this->thirdparty_code);
229 if (isset($this->subledger_account)) {
230 $this->subledger_account = trim($this->subledger_account);
232 if (isset($this->subledger_label)) {
233 $this->subledger_label = trim($this->subledger_label);
235 if (isset($this->numero_compte)) {
236 $this->numero_compte = trim($this->numero_compte);
238 if (isset($this->label_compte)) {
239 $this->label_compte = trim($this->label_compte);
241 if (isset($this->label_operation)) {
242 $this->label_operation = trim($this->label_operation);
244 if (isset($this->debit)) {
245 $this->debit = (
float) $this->debit;
247 if (isset($this->credit)) {
248 $this->credit = (
float) $this->credit;
250 if (isset($this->montant)) {
251 $this->montant = (
float) $this->montant;
253 if (isset($this->amount)) {
254 $this->amount = (
float) $this->amount;
256 if (isset($this->sens)) {
257 $this->sens = trim($this->sens);
259 if (isset($this->import_key)) {
260 $this->import_key = trim($this->import_key);
262 if (isset($this->code_journal)) {
263 $this->code_journal = trim($this->code_journal);
265 if (isset($this->journal_label)) {
266 $this->journal_label = trim($this->journal_label);
268 if (isset($this->piece_num)) {
269 $this->piece_num = trim($this->piece_num);
271 if (empty($this->debit)) {
274 if (empty($this->credit)) {
279 if (($this->numero_compte ==
"") || $this->numero_compte ==
'-1' || $this->numero_compte ==
'NotDefined') {
280 $langs->loadLangs(array(
"errors"));
281 if (in_array($this->doc_type, array(
'bank',
'expense_report'))) {
282 $this->errors[] = $langs->trans(
'ErrorFieldAccountNotDefinedForBankLine', $this->fk_docdet, $this->doc_type);
285 $mesg = $this->doc_ref.
', '.$langs->trans(
"AccountAccounting").
': '.$this->numero_compte;
286 if ($this->subledger_account && $this->subledger_account != $this->numero_compte) {
287 $mesg .=
', '.$langs->trans(
"SubledgerAccount").
': '.$this->subledger_account;
289 $this->errors[] = $langs->trans(
'ErrorFieldAccountNotDefinedForLine', $mesg);
297 $this->piece_num = 0;
304 $sql =
"SELECT count(*) as nb";
305 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
306 $sql .=
" WHERE doc_type = '".$this->db->escape($this->doc_type).
"'";
307 $sql .=
" AND fk_doc = ".((int) $this->fk_doc);
308 if (!empty($conf->global->ACCOUNTANCY_ENABLE_FKDOCDET)) {
310 $sql .=
" AND fk_docdet = ".((int) $this->fk_docdet);
312 $sql .=
" AND numero_compte = '".$this->db->escape($this->numero_compte).
"'";
313 $sql .=
" AND label_operation = '".$this->db->escape($this->label_operation).
"'";
314 $sql .=
" AND entity = ".$conf->entity;
319 $row = $this->
db->fetch_object(
$resql);
322 $sqlnum =
"SELECT piece_num";
323 $sqlnum .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
324 $sqlnum .=
" WHERE doc_type = '".$this->db->escape($this->doc_type).
"'";
325 $sqlnum .=
" AND fk_doc = ".((int) $this->fk_doc);
326 if (!empty($conf->global->ACCOUNTANCY_ENABLE_FKDOCDET)) {
328 $sqlnum .=
" AND fk_docdet = ".((int) $this->fk_docdet);
330 $sqlnum .=
" AND doc_ref = '".$this->db->escape($this->doc_ref).
"'";
331 $sqlnum .=
" AND entity = ".$conf->entity;
333 dol_syslog(get_class($this).
":: create sqlnum=".$sqlnum, LOG_DEBUG);
334 $resqlnum = $this->
db->query($sqlnum);
336 $objnum = $this->
db->fetch_object($resqlnum);
337 $this->piece_num = $objnum->piece_num;
340 dol_syslog(get_class($this).
":: create this->piece_num=".$this->piece_num, LOG_DEBUG);
341 if (empty($this->piece_num)) {
342 $sqlnum =
"SELECT MAX(piece_num)+1 as maxpiecenum";
343 $sqlnum .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
344 $sqlnum .=
" WHERE entity = " . ((int) $conf->entity);
346 $resqlnum = $this->
db->query($sqlnum);
348 $objnum = $this->
db->fetch_object($resqlnum);
349 $this->piece_num = $objnum->maxpiecenum;
351 dol_syslog(get_class($this).
":: create now this->piece_num=".$this->piece_num, LOG_DEBUG);
353 if (empty($this->piece_num)) {
354 $this->piece_num = 1;
359 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.$this->table_element.
" (";
361 $sql .=
", date_lim_reglement";
362 $sql .=
", doc_type";
365 $sql .=
", fk_docdet";
366 $sql .=
", thirdparty_code";
367 $sql .=
", subledger_account";
368 $sql .=
", subledger_label";
369 $sql .=
", numero_compte";
370 $sql .=
", label_compte";
371 $sql .=
", label_operation";
376 $sql .=
", fk_user_author";
377 $sql .=
", date_creation";
378 $sql .=
", code_journal";
379 $sql .=
", journal_label";
380 $sql .=
", piece_num";
382 $sql .=
") VALUES (";
383 $sql .=
"'".$this->db->idate($this->doc_date).
"'";
384 $sql .=
", ".(!isset($this->date_lim_reglement) ||
dol_strlen($this->date_lim_reglement) == 0 ?
'NULL' :
"'".$this->db->idate($this->date_lim_reglement).
"'");
385 $sql .=
", '".$this->db->escape($this->doc_type).
"'";
386 $sql .=
", '".$this->db->escape($this->doc_ref).
"'";
387 $sql .=
", ".((int) $this->fk_doc);
388 $sql .=
", ".((int) $this->fk_docdet);
389 $sql .=
", ".(!empty($this->thirdparty_code) ? (
"'".$this->db->escape($this->thirdparty_code).
"'") :
"NULL");
390 $sql .=
", ".(!empty($this->subledger_account) ? (
"'".$this->db->escape($this->subledger_account).
"'") :
"NULL");
391 $sql .=
", ".(!empty($this->subledger_label) ? (
"'".$this->db->escape($this->subledger_label).
"'") :
"NULL");
392 $sql .=
", '".$this->db->escape($this->numero_compte).
"'";
393 $sql .=
", ".(!empty($this->label_compte) ? (
"'".$this->db->escape($this->label_compte).
"'") :
"NULL");
394 $sql .=
", '".$this->db->escape($this->label_operation).
"'";
395 $sql .=
", ".((float) $this->debit);
396 $sql .=
", ".((float) $this->credit);
397 $sql .=
", ".((float) $this->montant);
398 $sql .=
", ".(!empty($this->sens) ? (
"'".$this->db->escape($this->sens).
"'") :
"NULL");
399 $sql .=
", '".$this->db->escape($this->fk_user_author).
"'";
400 $sql .=
", '".$this->db->idate($now).
"'";
401 $sql .=
", '".$this->db->escape($this->code_journal).
"'";
402 $sql .=
", ".(!empty($this->journal_label) ? (
"'".$this->db->escape($this->journal_label).
"'") :
"NULL");
403 $sql .=
", ".((int) $this->piece_num);
404 $sql .=
", ".(!isset($this->entity) ? $conf->entity : $this->entity);
409 $id = $this->
db->last_insert_id(MAIN_DB_PREFIX.$this->table_element);
417 $this->errors[] =
'Error Create Error '.$result.
' lecture ID';
418 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
423 $this->errors[] =
'Error '.$this->db->lasterror();
424 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
429 $this->error =
'BookkeepingRecordAlreadyExists';
430 dol_syslog(__METHOD__.
' '.$this->error, LOG_WARNING);
435 $this->errors[] =
'Error '.$this->db->lasterror();
436 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
451 $this->
db->rollback();
469 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
471 global $db, $conf, $langs;
472 global $dolibarr_main_authentication, $dolibarr_main_demo;
473 global $menumanager, $hookmanager;
475 if (!empty($conf->dol_no_mouse_hover)) {
482 $label =
'<u>'.$langs->trans(
"Transaction").
'</u>';
484 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->piece_num;
486 $url = DOL_URL_ROOT.
'/accountancy/bookkeeping/card.php?piece_num='.$this->piece_num;
488 if ($option !=
'nolink') {
490 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
491 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
492 $add_save_lastsearch_values = 1;
494 if ($add_save_lastsearch_values) {
495 $url .=
'&save_lastsearch_values=1';
500 if (empty($notooltip)) {
501 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
502 $label = $langs->trans(
"ShowTransaction");
503 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
505 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
506 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
508 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
511 $linkstart =
'<a href="'.$url.
'"';
512 $linkstart .= $linkclose.
'>';
515 $result .= $linkstart;
517 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
519 if ($withpicto != 2) {
520 $result .= $this->piece_num;
526 $hookmanager->initHooks(array($this->element .
'dao'));
527 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
528 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
530 $result = $hookmanager->resPrint;
532 $result .= $hookmanager->resPrint;
547 global $conf, $langs;
549 $langs->loadLangs(array(
"accountancy",
"bills",
"compta"));
556 if (isset($this->doc_type)) {
557 $this->doc_type = trim($this->doc_type);
559 if (isset($this->doc_ref)) {
560 $this->doc_ref = trim($this->doc_ref);
562 if (isset($this->fk_doc)) {
563 $this->fk_doc = (int) $this->fk_doc;
565 if (isset($this->fk_docdet)) {
566 $this->fk_docdet = (int) $this->fk_docdet;
568 if (isset($this->thirdparty_code)) {
569 $this->thirdparty_code = trim($this->thirdparty_code);
571 if (isset($this->subledger_account)) {
572 $this->subledger_account = trim($this->subledger_account);
574 if (isset($this->subledger_label)) {
575 $this->subledger_label = trim($this->subledger_label);
577 if (isset($this->numero_compte)) {
578 $this->numero_compte = trim($this->numero_compte);
580 if (isset($this->label_compte)) {
581 $this->label_compte = trim($this->label_compte);
583 if (isset($this->label_operation)) {
584 $this->label_operation = trim($this->label_operation);
586 if (isset($this->debit)) {
587 $this->debit = trim($this->debit);
589 if (isset($this->credit)) {
590 $this->credit = trim($this->credit);
592 if (isset($this->montant)) {
593 $this->montant = trim($this->montant);
595 if (isset($this->amount)) {
596 $this->amount = trim($this->amount);
598 if (isset($this->sens)) {
599 $this->sens = trim($this->sens);
601 if (isset($this->import_key)) {
602 $this->import_key = trim($this->import_key);
604 if (isset($this->code_journal)) {
605 $this->code_journal = trim($this->code_journal);
607 if (isset($this->journal_label)) {
608 $this->journal_label = trim($this->journal_label);
610 if (isset($this->piece_num)) {
611 $this->piece_num = trim($this->piece_num);
613 if (empty($this->debit)) {
616 if (empty($this->credit)) {
619 if (empty($this->montant)) {
623 $this->debit =
price2num($this->debit,
'MT');
624 $this->credit =
price2num($this->credit,
'MT');
625 $this->montant =
price2num($this->montant,
'MT');
630 $this->journal_label = $langs->trans($this->journal_label);
633 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element.$mode.
' (';
635 $sql .=
'date_lim_reglement,';
639 $sql .=
'fk_docdet,';
640 $sql .=
'thirdparty_code,';
641 $sql .=
'subledger_account,';
642 $sql .=
'subledger_label,';
643 $sql .=
'numero_compte,';
644 $sql .=
'label_compte,';
645 $sql .=
'label_operation,';
650 $sql .=
'fk_user_author,';
651 $sql .=
'date_creation,';
652 $sql .=
'code_journal,';
653 $sql .=
'journal_label,';
654 $sql .=
'piece_num,';
656 $sql .=
') VALUES (';
657 $sql .=
' '.(!isset($this->doc_date) ||
dol_strlen($this->doc_date) == 0 ?
'NULL' :
"'".$this->db->idate($this->doc_date).
"'").
',';
658 $sql .=
' '.(!isset($this->date_lim_reglement) ||
dol_strlen($this->date_lim_reglement) == 0 ?
'NULL' :
"'".$this->db->idate($this->date_lim_reglement).
"'").
',';
659 $sql .=
' '.(!isset($this->doc_type) ?
'NULL' :
"'".$this->db->escape($this->doc_type).
"'").
',';
660 $sql .=
' '.(!isset($this->doc_ref) ?
'NULL' :
"'".$this->db->escape($this->doc_ref).
"'").
',';
661 $sql .=
' '.(empty($this->fk_doc) ?
'0' : (int) $this->fk_doc).
',';
662 $sql .=
' '.(empty($this->fk_docdet) ?
'0' : (int) $this->fk_docdet).
',';
663 $sql .=
' '.(!isset($this->thirdparty_code) ?
'NULL' :
"'".$this->db->escape($this->thirdparty_code).
"'").
',';
664 $sql .=
' '.(!isset($this->subledger_account) ?
'NULL' :
"'".$this->db->escape($this->subledger_account).
"'").
',';
665 $sql .=
' '.(!isset($this->subledger_label) ?
'NULL' :
"'".$this->db->escape($this->subledger_label).
"'").
',';
666 $sql .=
' '.(!isset($this->numero_compte) ?
'NULL' :
"'".$this->db->escape($this->numero_compte).
"'").
',';
667 $sql .=
' '.(!isset($this->label_compte) ?
'NULL' :
"'".$this->db->escape($this->label_compte).
"'").
',';
668 $sql .=
' '.(!isset($this->label_operation) ?
'NULL' :
"'".$this->db->escape($this->label_operation).
"'").
',';
669 $sql .=
' '.(!isset($this->debit) ?
'NULL' : $this->debit).
',';
670 $sql .=
' '.(!isset($this->credit) ?
'NULL' : $this->credit).
',';
671 $sql .=
' '.(!isset($this->montant) ?
'NULL' : $this->montant).
',';
672 $sql .=
' '.(!isset($this->sens) ?
'NULL' :
"'".$this->db->escape($this->sens).
"'").
',';
673 $sql .=
' '.((int) $user->id).
',';
674 $sql .=
' '.
"'".$this->
db->idate($now).
"',";
675 $sql .=
' '.(empty($this->code_journal) ?
'NULL' :
"'".$this->db->escape($this->code_journal).
"'").
',';
676 $sql .=
' '.(empty($this->journal_label) ?
'NULL' :
"'".$this->db->escape($this->journal_label).
"'").
',';
677 $sql .=
' '.(empty($this->piece_num) ?
'NULL' : $this->
db->escape($this->piece_num)).
',';
678 $sql .=
' '.(!isset($this->entity) ? $conf->entity : $this->entity);
686 $this->errors[] =
'Error '.$this->db->lasterror();
687 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
691 $this->
id = $this->
db->last_insert_id(MAIN_DB_PREFIX.$this->table_element.$mode);
706 $this->
db->rollback();
725 public function fetch($id, $ref =
null, $mode =
'')
733 $sql .=
" t.doc_date,";
734 $sql .=
" t.date_lim_reglement,";
735 $sql .=
" t.doc_type,";
736 $sql .=
" t.doc_ref,";
737 $sql .=
" t.fk_doc,";
738 $sql .=
" t.fk_docdet,";
739 $sql .=
" t.thirdparty_code,";
740 $sql .=
" t.subledger_account,";
741 $sql .=
" t.subledger_label,";
742 $sql .=
" t.numero_compte,";
743 $sql .=
" t.label_compte,";
744 $sql .=
" t.label_operation,";
746 $sql .=
" t.credit,";
747 $sql .=
" t.montant as amount,";
749 $sql .=
" t.fk_user_author,";
750 $sql .=
" t.import_key,";
751 $sql .=
" t.code_journal,";
752 $sql .=
" t.journal_label,";
753 $sql .=
" t.piece_num,";
754 $sql .=
" t.date_creation,";
756 if ($mode !=
"_tmp") {
757 $sql .=
" t.date_export,";
759 $sql .=
" t.date_validated as date_validation";
760 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.$mode.
' as t';
761 $sql .=
' WHERE 1 = 1';
762 $sql .=
" AND entity = " . ((int) $conf->entity);
764 $sql .=
" AND t.ref = '".$this->db->escape($ref).
"'";
766 $sql .=
' AND t.rowid = '.((int) $id);
771 $numrows = $this->
db->num_rows(
$resql);
773 $obj = $this->
db->fetch_object(
$resql);
775 $this->
id = $obj->rowid;
777 $this->doc_date = $this->
db->jdate($obj->doc_date);
778 $this->date_lim_reglement = $this->
db->jdate($obj->date_lim_reglement);
779 $this->doc_type = $obj->doc_type;
780 $this->doc_ref = $obj->doc_ref;
781 $this->fk_doc = $obj->fk_doc;
782 $this->fk_docdet = $obj->fk_docdet;
783 $this->thirdparty_code = $obj->thirdparty_code;
784 $this->subledger_account = $obj->subledger_account;
785 $this->subledger_label = $obj->subledger_label;
786 $this->numero_compte = $obj->numero_compte;
787 $this->label_compte = $obj->label_compte;
788 $this->label_operation = $obj->label_operation;
789 $this->debit = $obj->debit;
790 $this->credit = $obj->credit;
791 $this->montant = $obj->amount;
792 $this->amount = $obj->amount;
793 $this->sens = $obj->sens;
794 $this->fk_user_author = $obj->fk_user_author;
795 $this->import_key = $obj->import_key;
796 $this->code_journal = $obj->code_journal;
797 $this->journal_label = $obj->journal_label;
798 $this->piece_num = $obj->piece_num;
799 $this->date_creation = $this->
db->jdate($obj->date_creation);
800 $this->date_export = $this->
db->jdate($obj->date_export);
801 $this->date_validation = isset($obj->date_validated) ? $this->
db->jdate($obj->date_validated) :
'';
811 $this->errors[] =
'Error '.$this->db->lasterror();
812 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
832 public function fetchAllByAccount($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND', $option = 0, $countonly = 0)
838 $this->lines = array();
843 $sql .=
' COUNT(t.rowid) as nb';
846 $sql .=
" t.doc_date,";
847 $sql .=
" t.doc_type,";
848 $sql .=
" t.doc_ref,";
849 $sql .=
" t.fk_doc,";
850 $sql .=
" t.fk_docdet,";
851 $sql .=
" t.thirdparty_code,";
852 $sql .=
" t.subledger_account,";
853 $sql .=
" t.subledger_label,";
854 $sql .=
" t.numero_compte,";
855 $sql .=
" t.label_compte,";
856 $sql .=
" t.label_operation,";
858 $sql .=
" t.credit,";
859 $sql .=
" t.montant as amount,";
861 $sql .=
" t.multicurrency_amount,";
862 $sql .=
" t.multicurrency_code,";
863 $sql .=
" t.lettering_code,";
864 $sql .=
" t.date_lettering,";
865 $sql .=
" t.fk_user_author,";
866 $sql .=
" t.import_key,";
867 $sql .=
" t.code_journal,";
868 $sql .=
" t.journal_label,";
869 $sql .=
" t.piece_num,";
870 $sql .=
" t.date_creation,";
871 $sql .=
" t.date_export,";
872 $sql .=
" t.date_validated as date_validation,";
873 $sql .=
" t.import_key";
877 if (count($filter) > 0) {
878 foreach ($filter as $key => $value) {
879 if ($key ==
't.doc_date') {
880 $sqlwhere[] = $key.
'=\''.$this->
db->idate($value).
'\'';
881 } elseif ($key ==
't.doc_date>=' || $key ==
't.doc_date<=') {
882 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
883 } elseif ($key ==
't.numero_compte>=' || $key ==
't.numero_compte<=' || $key ==
't.subledger_account>=' || $key ==
't.subledger_account<=') {
884 $sqlwhere[] = $key.
'\''.$this->
db->escape($value).
'\'';
885 } elseif ($key ==
't.fk_doc' || $key ==
't.fk_docdet' || $key ==
't.piece_num') {
886 $sqlwhere[] = $key.
'='.$value;
887 } elseif ($key ==
't.subledger_account' || $key ==
't.numero_compte') {
888 $sqlwhere[] = $key.
' LIKE \''.$this->
db->escapeforlike($this->
db->escape($value)).
'%\'';
889 } elseif ($key ==
't.date_creation>=' || $key ==
't.date_creation<=') {
890 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
891 } elseif ($key ==
't.date_export>=' || $key ==
't.date_export<=') {
892 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
893 } elseif ($key ==
't.date_validated>=' || $key ==
't.date_validated<=') {
894 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
895 } elseif ($key ==
't.credit' || $key ==
't.debit') {
897 } elseif ($key ==
't.reconciled_option') {
898 $sqlwhere[] =
't.lettering_code IS NULL';
899 } elseif ($key ==
't.code_journal' && !empty($value)) {
900 if (is_array($value)) {
901 $sqlwhere[] =
natural_search(
"t.code_journal", join(
',', $value), 3, 1);
905 } elseif ($key ==
't.search_accounting_code_in' && !empty($value)) {
906 $sqlwhere[] =
't.numero_compte IN ('.$this->db->sanitize($value, 1).
')';
912 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
913 $sql .=
' WHERE entity = ' . ((int) $conf->entity);
914 if (count($sqlwhere) > 0) {
915 $sql .=
" AND ".implode(
" ".$filtermode.
" ", $sqlwhere);
918 if (!empty($option)) {
919 $sql .=
" AND t.subledger_account IS NOT NULL";
920 $sql .=
" AND t.subledger_account <> ''";
921 $sortfield =
't.subledger_account'.($sortfield ?
','.$sortfield :
'');
922 $sortorder =
'ASC'.($sortfield ?
','.$sortfield :
'');
924 $sortfield =
't.numero_compte'.($sortfield ?
','.$sortfield :
'');
925 $sortorder =
'ASC'.($sortorder ?
','.$sortorder :
'');
929 $sql .= $this->
db->order($sortfield, $sortorder);
930 if (!empty($limit)) {
931 $sql .= $this->
db->plimit($limit + 1, $offset);
938 $obj = $this->
db->fetch_object(
$resql);
946 while (($obj = $this->
db->fetch_object(
$resql)) && (empty($limit) || $i < min($limit, $num))) {
949 $line->id = $obj->rowid;
951 $line->doc_date = $this->
db->jdate($obj->doc_date);
952 $line->doc_type = $obj->doc_type;
953 $line->doc_ref = $obj->doc_ref;
954 $line->fk_doc = $obj->fk_doc;
955 $line->fk_docdet = $obj->fk_docdet;
956 $line->thirdparty_code = $obj->thirdparty_code;
957 $line->subledger_account = $obj->subledger_account;
958 $line->subledger_label = $obj->subledger_label;
959 $line->numero_compte = $obj->numero_compte;
960 $line->label_compte = $obj->label_compte;
961 $line->label_operation = $obj->label_operation;
962 $line->debit = $obj->debit;
963 $line->credit = $obj->credit;
964 $line->montant = $obj->amount;
965 $line->amount = $obj->amount;
966 $line->sens = $obj->sens;
967 $line->multicurrency_amount = $obj->multicurrency_amount;
968 $line->multicurrency_code = $obj->multicurrency_code;
969 $line->lettering_code = $obj->lettering_code;
970 $line->date_lettering = $obj->date_lettering;
971 $line->fk_user_author = $obj->fk_user_author;
972 $line->import_key = $obj->import_key;
973 $line->code_journal = $obj->code_journal;
974 $line->journal_label = $obj->journal_label;
975 $line->piece_num = $obj->piece_num;
976 $line->date_creation = $this->
db->jdate($obj->date_creation);
977 $line->date_export = $this->
db->jdate($obj->date_export);
978 $line->date_validation = $this->
db->jdate($obj->date_validation);
979 $line->import_key = $obj->import_key;
981 $this->lines[] = $line;
990 $this->errors[] =
'Error '.$this->db->lasterror();
991 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1009 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND', $showAlreadyExportMovements = 1)
1016 $sql .=
' t.rowid,';
1017 $sql .=
" t.doc_date,";
1018 $sql .=
" t.doc_type,";
1019 $sql .=
" t.doc_ref,";
1020 $sql .=
" t.fk_doc,";
1021 $sql .=
" t.fk_docdet,";
1022 $sql .=
" t.thirdparty_code,";
1023 $sql .=
" t.subledger_account,";
1024 $sql .=
" t.subledger_label,";
1025 $sql .=
" t.numero_compte,";
1026 $sql .=
" t.label_compte,";
1027 $sql .=
" t.label_operation,";
1028 $sql .=
" t.debit,";
1029 $sql .=
" t.credit,";
1030 $sql .=
" t.lettering_code,";
1031 $sql .=
" t.date_lettering,";
1032 $sql .=
" t.montant as amount,";
1034 $sql .=
" t.fk_user_author,";
1035 $sql .=
" t.import_key,";
1036 $sql .=
" t.code_journal,";
1037 $sql .=
" t.journal_label,";
1038 $sql .=
" t.piece_num,";
1039 $sql .=
" t.date_creation,";
1040 $sql .=
" t.date_lim_reglement,";
1041 $sql .=
" t.tms as date_modification,";
1042 $sql .=
" t.date_export,";
1043 $sql .=
" t.date_validated as date_validation";
1044 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
1046 $sqlwhere = array();
1047 if (count($filter) > 0) {
1048 foreach ($filter as $key => $value) {
1049 if ($key ==
't.doc_date') {
1050 $sqlwhere[] = $key.
'=\''.$this->
db->idate($value).
'\'';
1051 } elseif ($key ==
't.doc_date>=' || $key ==
't.doc_date<=') {
1052 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
1053 } elseif ($key ==
't.numero_compte>=' || $key ==
't.numero_compte<=' || $key ==
't.subledger_account>=' || $key ==
't.subledger_account<=') {
1054 $sqlwhere[] = $key.
'\''.$this->
db->escape($value).
'\'';
1055 } elseif ($key ==
't.fk_doc' || $key ==
't.fk_docdet' || $key ==
't.piece_num') {
1056 $sqlwhere[] = $key.
'='.((int) $value);
1057 } elseif ($key ==
't.subledger_account' || $key ==
't.numero_compte') {
1058 $sqlwhere[] = $key.
' LIKE \''.$this->
db->escape($value).
'%\'';
1059 } elseif ($key ==
't.date_creation>=' || $key ==
't.date_creation<=') {
1060 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
1061 } elseif ($key ==
't.tms>=' || $key ==
't.tms<=') {
1062 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
1063 } elseif ($key ==
't.date_export>=' || $key ==
't.date_export<=') {
1064 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
1065 } elseif ($key ==
't.date_validated>=' || $key ==
't.date_validated<=') {
1066 $sqlwhere[] = $key.
'\''.$this->
db->idate($value).
'\'';
1067 } elseif ($key ==
't.credit' || $key ==
't.debit') {
1069 } elseif ($key ==
't.code_journal' && !empty($value)) {
1070 if (is_array($value)) {
1071 $sqlwhere[] =
natural_search(
"t.code_journal", join(
',', $value), 3, 1);
1080 $sql .=
' WHERE t.entity = ' . ((int) $conf->entity);
1081 if ($showAlreadyExportMovements == 0) {
1082 $sql .=
" AND t.date_export IS NULL";
1084 if (count($sqlwhere) > 0) {
1085 $sql .=
' AND '.implode(
" ".$filtermode.
" ", $sqlwhere);
1087 if (!empty($sortfield)) {
1088 $sql .= $this->
db->order($sortfield, $sortorder);
1090 if (!empty($limit)) {
1091 $sql .= $this->
db->plimit($limit + 1, $offset);
1093 $this->lines = array();
1097 $num = $this->
db->num_rows(
$resql);
1100 while (($obj = $this->
db->fetch_object(
$resql)) && (empty($limit) || $i < min($limit, $num))) {
1103 $line->id = $obj->rowid;
1105 $line->doc_date = $this->
db->jdate($obj->doc_date);
1106 $line->doc_type = $obj->doc_type;
1107 $line->doc_ref = $obj->doc_ref;
1108 $line->fk_doc = $obj->fk_doc;
1109 $line->fk_docdet = $obj->fk_docdet;
1110 $line->thirdparty_code = $obj->thirdparty_code;
1111 $line->subledger_account = $obj->subledger_account;
1112 $line->subledger_label = $obj->subledger_label;
1113 $line->numero_compte = $obj->numero_compte;
1114 $line->label_compte = $obj->label_compte;
1115 $line->label_operation = $obj->label_operation;
1116 $line->debit = $obj->debit;
1117 $line->credit = $obj->credit;
1118 $line->montant = $obj->amount;
1119 $line->amount = $obj->amount;
1120 $line->sens = $obj->sens;
1121 $line->lettering_code = $obj->lettering_code;
1122 $line->date_lettering = $obj->date_lettering;
1123 $line->fk_user_author = $obj->fk_user_author;
1124 $line->import_key = $obj->import_key;
1125 $line->code_journal = $obj->code_journal;
1126 $line->journal_label = $obj->journal_label;
1127 $line->piece_num = $obj->piece_num;
1128 $line->date_creation = $this->
db->jdate($obj->date_creation);
1129 $line->date_lim_reglement = $this->
db->jdate($obj->date_lim_reglement);
1130 $line->date_modification = $this->
db->jdate($obj->date_modification);
1131 $line->date_export = $this->
db->jdate($obj->date_export);
1132 $line->date_validation = $this->
db->jdate($obj->date_validation);
1134 $this->lines[] = $line;
1142 $this->errors[] =
'Error '.$this->db->lasterror();
1143 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1159 public function fetchAllBalance($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND')
1163 $this->lines = array();
1168 $sql .=
" t.numero_compte,";
1169 $sql .=
" SUM(t.debit) as debit,";
1170 $sql .=
" SUM(t.credit) as credit";
1171 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
1173 $sqlwhere = array();
1174 if (count($filter) > 0) {
1175 foreach ($filter as $key => $value) {
1176 if ($key ==
't.doc_date') {
1177 $sqlwhere[] = $key.
" = '".$this->
db->idate($value).
"'";
1178 } elseif ($key ==
't.doc_date>=' || $key ==
't.doc_date<=' || $key ==
't.doc_date>' || $key ==
't.doc_date<') {
1179 $sqlwhere[] = $key.
"'".$this->
db->idate($value).
"'";
1180 } elseif ($key ==
't.numero_compte>=' || $key ==
't.numero_compte<=' || $key ==
't.subledger_account>=' || $key ==
't.subledger_account<=') {
1181 $sqlwhere[] = $key.
"'".$this->
db->escape($value).
"'";
1182 } elseif ($key ==
't.fk_doc' || $key ==
't.fk_docdet' || $key ==
't.piece_num') {
1183 $sqlwhere[] = $key.
" = ".((int) $value);
1184 } elseif ($key ==
't.subledger_account' || $key ==
't.numero_compte') {
1185 $sqlwhere[] = $key.
" LIKE '".$this->
db->escape($value).
"%'";
1186 } elseif ($key ==
't.subledger_label') {
1187 $sqlwhere[] = $key.
" LIKE '".$this->
db->escape($value).
"%'";
1188 } elseif ($key ==
't.code_journal' && !empty($value)) {
1189 if (is_array($value)) {
1190 $sqlwhere[] =
natural_search(
"t.code_journal", join(
',', $value), 3, 1);
1195 $sqlwhere[] = $key.
" LIKE '%".$this->
db->escape($value).
"%'";
1199 $sql .=
' WHERE entity = ' . ((int) $conf->entity);
1200 if (count($sqlwhere) > 0) {
1201 $sql .=
" AND ".implode(
" ".$filtermode.
" ", $sqlwhere);
1204 $sql .=
' GROUP BY t.numero_compte';
1206 if (!empty($sortfield)) {
1207 $sql .= $this->
db->order($sortfield, $sortorder);
1209 if (!empty($limit)) {
1210 $sql .= $this->
db->plimit($limit + 1, $offset);
1215 $num = $this->
db->num_rows(
$resql);
1218 while (($obj = $this->
db->fetch_object(
$resql)) && (empty($limit) || $i < min($limit, $num))) {
1221 $line->numero_compte = $obj->numero_compte;
1222 $line->debit = $obj->debit;
1223 $line->credit = $obj->credit;
1225 $this->lines[] = $line;
1233 $this->errors[] =
'Error '.$this->db->lasterror();
1234 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1248 public function update(
User $user, $notrigger =
false, $mode =
'')
1255 if (isset($this->doc_type)) {
1256 $this->doc_type = trim($this->doc_type);
1258 if (isset($this->doc_ref)) {
1259 $this->doc_ref = trim($this->doc_ref);
1261 if (isset($this->fk_doc)) {
1262 $this->fk_doc = (int) $this->fk_doc;
1264 if (isset($this->fk_docdet)) {
1265 $this->fk_docdet = (int) $this->fk_docdet;
1267 if (isset($this->thirdparty_code)) {
1268 $this->thirdparty_code = trim($this->thirdparty_code);
1270 if (isset($this->subledger_account)) {
1271 $this->subledger_account = trim($this->subledger_account);
1273 if (isset($this->subledger_label)) {
1274 $this->subledger_label = trim($this->subledger_label);
1276 if (isset($this->numero_compte)) {
1277 $this->numero_compte = trim($this->numero_compte);
1279 if (isset($this->label_compte)) {
1280 $this->label_compte = trim($this->label_compte);
1282 if (isset($this->label_operation)) {
1283 $this->label_operation = trim($this->label_operation);
1285 if (isset($this->debit)) {
1286 $this->debit = trim($this->debit);
1288 if (isset($this->credit)) {
1289 $this->credit = trim($this->credit);
1291 if (isset($this->amount)) {
1292 $this->amount = trim($this->amount);
1294 if (isset($this->sens)) {
1295 $this->sens = trim($this->sens);
1297 if (isset($this->import_key)) {
1298 $this->import_key = trim($this->import_key);
1300 if (isset($this->code_journal)) {
1301 $this->code_journal = trim($this->code_journal);
1303 if (isset($this->journal_label)) {
1304 $this->journal_label = trim($this->journal_label);
1306 if (isset($this->piece_num)) {
1307 $this->piece_num = trim($this->piece_num);
1310 $this->debit =
price2num($this->debit,
'MT');
1311 $this->credit =
price2num($this->credit,
'MT');
1317 $sql =
'UPDATE '.MAIN_DB_PREFIX.$this->table_element.$mode.
' SET';
1318 $sql .=
' doc_date = '.(!isset($this->doc_date) ||
dol_strlen($this->doc_date) != 0 ?
"'".$this->db->idate($this->doc_date).
"'" :
'null').
',';
1319 $sql .=
' doc_type = '.(isset($this->doc_type) ?
"'".$this->db->escape($this->doc_type).
"'" :
"null").
',';
1320 $sql .=
' doc_ref = '.(isset($this->doc_ref) ?
"'".$this->db->escape($this->doc_ref).
"'" :
"null").
',';
1321 $sql .=
' fk_doc = '.(isset($this->fk_doc) ? $this->fk_doc :
"null").
',';
1322 $sql .=
' fk_docdet = '.(isset($this->fk_docdet) ? $this->fk_docdet :
"null").
',';
1323 $sql .=
' thirdparty_code = '.(isset($this->thirdparty_code) ?
"'".$this->db->escape($this->thirdparty_code).
"'" :
"null").
',';
1324 $sql .=
' subledger_account = '.(isset($this->subledger_account) ?
"'".$this->db->escape($this->subledger_account).
"'" :
"null").
',';
1325 $sql .=
' subledger_label = '.(isset($this->subledger_label) ?
"'".$this->db->escape($this->subledger_label).
"'" :
"null").
',';
1326 $sql .=
' numero_compte = '.(isset($this->numero_compte) ?
"'".$this->db->escape($this->numero_compte).
"'" :
"null").
',';
1327 $sql .=
' label_compte = '.(isset($this->label_compte) ?
"'".$this->db->escape($this->label_compte).
"'" :
"null").
',';
1328 $sql .=
' label_operation = '.(isset($this->label_operation) ?
"'".$this->db->escape($this->label_operation).
"'" :
"null").
',';
1329 $sql .=
' debit = '.(isset($this->debit) ? $this->debit :
"null").
',';
1330 $sql .=
' credit = '.(isset($this->credit) ? $this->credit :
"null").
',';
1331 $sql .=
' montant = '.(isset($this->montant) ? $this->montant :
"null").
',';
1332 $sql .=
' sens = '.(isset($this->sens) ?
"'".$this->db->escape($this->sens).
"'" :
"null").
',';
1333 $sql .=
' fk_user_author = '.(isset($this->fk_user_author) ? $this->fk_user_author :
"null").
',';
1334 $sql .=
' import_key = '.(isset($this->import_key) ?
"'".$this->db->escape($this->import_key).
"'" :
"null").
',';
1335 $sql .=
' code_journal = '.(isset($this->code_journal) ?
"'".$this->db->escape($this->code_journal).
"'" :
"null").
',';
1336 $sql .=
' journal_label = '.(isset($this->journal_label) ?
"'".$this->db->escape($this->journal_label).
"'" :
"null").
',';
1337 $sql .=
' piece_num = '.(isset($this->piece_num) ? $this->piece_num :
"null");
1338 $sql .=
' WHERE rowid='.((int) $this->
id);
1345 $this->errors[] =
'Error '.$this->db->lasterror();
1346 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1361 $this->
db->rollback();
1365 $this->
db->commit();
1380 public function updateByMvt($piece_num =
'', $field =
'', $value =
'', $mode =
'')
1386 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.$mode;
1387 $sql .=
" SET ".$field.
" = ".(is_numeric($value) ? ((
float) $value) :
"'".$this->db->escape($value).
"'");
1388 $sql .=
" WHERE piece_num = ".((int) $piece_num);
1394 $this->errors[] =
'Error '.$this->db->lasterror();
1395 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1398 $this->
db->rollback();
1402 $this->
db->commit();
1416 public function delete(
User $user, $notrigger =
false, $mode =
'')
1435 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.$mode;
1436 $sql .=
' WHERE rowid='.((int) $this->
id);
1441 $this->errors[] =
'Error '.$this->db->lasterror();
1442 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1448 $this->
db->rollback();
1452 $this->
db->commit();
1470 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
1471 $sql .=
" WHERE import_key = '".$this->db->escape($importkey).
"'";
1476 $this->errors[] =
"Error ".$this->db->lasterror();
1477 dol_syslog(get_class($this).
"::delete Error ".$this->
db->lasterror(), LOG_ERR);
1478 $this->
db->rollback();
1482 $this->
db->commit();
1497 global $conf, $langs;
1499 if (empty($delyear) && empty($journal)) {
1500 $this->error =
'ErrorOneFieldRequired';
1503 if (!empty($delmonth) && empty($delyear)) {
1504 $this->error =
'YearRequiredIfMonthDefined';
1512 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
1513 $sql .=
" WHERE 1 = 1";
1515 if (!empty($journal)) {
1516 $sql .=
" AND code_journal = '".$this->db->escape($journal).
"'";
1518 $sql .=
" AND entity = " . ((int) $conf->entity);
1520 $sql .=
" AND date_validated IS NULL";
1527 $this->errors[] =
"Error ".$this->db->lasterror();
1528 foreach ($this->errors as $errmsg) {
1529 dol_syslog(get_class($this).
"::delete ".$errmsg, LOG_ERR);
1530 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1532 $this->
db->rollback();
1536 $this->
db->commit();
1554 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
1555 $sql .=
" WHERE piece_num = ".(int) $piecenum;
1556 $sql .=
" AND date_validated IS NULL";
1557 $sql .=
" AND entity = " . ((int) $conf->entity);
1562 $this->errors[] =
"Error ".$this->db->lasterror();
1563 foreach ($this->errors as $errmsg) {
1564 dol_syslog(get_class($this).
"::delete ".$errmsg, LOG_ERR);
1565 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1567 $this->
db->rollback();
1571 $this->
db->commit();
1592 $object->fetch($fromid);
1600 $object->context[
'createfromclone'] =
'createfromclone';
1601 $result = $object->create($user);
1606 $this->errors = $object->errors;
1607 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1610 unset($object->context[
'createfromclone']);
1614 $this->
db->commit();
1618 $this->
db->rollback();
1637 $this->doc_date = $now;
1638 $this->doc_type =
'';
1639 $this->doc_ref =
'';
1641 $this->fk_docdet = 0;
1642 $this->thirdparty_code =
'CU001';
1643 $this->subledger_account =
'41100001';
1644 $this->subledger_label =
'My customer company';
1645 $this->numero_compte =
'411';
1646 $this->label_compte =
'Customer';
1647 $this->label_operation =
'Sales of pea';
1648 $this->debit = 99.9;
1649 $this->credit = 0.0;
1650 $this->amount = 0.0;
1652 $this->fk_user_author = $user->id;
1653 $this->import_key =
'20201027';
1654 $this->code_journal =
'VT';
1655 $this->journal_label =
'Journal de vente';
1656 $this->piece_num = 1234;
1657 $this->date_creation = $now;
1671 $sql =
"SELECT piece_num, doc_date,code_journal, journal_label, doc_ref, doc_type,";
1672 $sql .=
" date_creation, tms as date_modification, date_validated as date_validation";
1674 if ($mode !=
"_tmp") {
1675 $sql .=
", date_export";
1677 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
1678 $sql .=
" WHERE piece_num = ".((int) $piecenum);
1679 $sql .=
" AND entity = " . ((int) $conf->entity);
1682 $result = $this->
db->query($sql);
1684 $obj = $this->
db->fetch_object($result);
1686 $this->piece_num = $obj->piece_num;
1687 $this->code_journal = $obj->code_journal;
1688 $this->journal_label = $obj->journal_label;
1689 $this->doc_date = $this->
db->jdate($obj->doc_date);
1690 $this->doc_ref = $obj->doc_ref;
1691 $this->doc_type = $obj->doc_type;
1692 $this->date_creation = $this->
db->jdate($obj->date_creation);
1693 $this->date_modification = $this->
db->jdate($obj->date_modification);
1694 if ($mode !=
"_tmp") {
1695 $this->date_export = $this->
db->jdate($obj->date_export);
1697 $this->date_validation = $this->
db->jdate($obj->date_validation);
1699 $this->error =
"Error ".$this->db->lasterror();
1700 dol_syslog(__METHOD__.$this->error, LOG_ERR);
1717 $sql =
"SELECT MAX(piece_num)+1 as max FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
1718 $sql .=
" WHERE entity = " . ((int) $conf->entity);
1720 dol_syslog(get_class($this).
"::getNextNumMvt", LOG_DEBUG);
1722 $result = $this->
db->query($sql);
1725 $obj = $this->
db->fetch_object($result);
1727 $result = $obj->max;
1729 if (empty($result)) {
1734 $this->error =
"Error ".$this->db->lasterror();
1735 dol_syslog(get_class($this).
"::getNextNumMvt ".$this->error, LOG_ERR);
1751 $sql =
"SELECT rowid, doc_date, doc_type,";
1752 $sql .=
" doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,";
1753 $sql .=
" numero_compte, label_compte, label_operation, debit, credit,";
1754 $sql .=
" montant as amount, sens, fk_user_author, import_key, code_journal, journal_label, piece_num,";
1755 $sql .=
" date_creation, tms as date_modification, date_validated as date_validation";
1757 if ($mode !=
"_tmp") {
1758 $sql .=
", date_export";
1760 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.$mode;
1761 $sql .=
" WHERE piece_num = ".((int) $piecenum);
1762 $sql .=
" AND entity = " . ((int) $conf->entity);
1765 $result = $this->
db->query($sql);
1767 while ($obj = $this->
db->fetch_object($result)) {
1770 $line->id = $obj->rowid;
1772 $line->doc_date = $this->
db->jdate($obj->doc_date);
1773 $line->doc_type = $obj->doc_type;
1774 $line->doc_ref = $obj->doc_ref;
1775 $line->fk_doc = $obj->fk_doc;
1776 $line->fk_docdet = $obj->fk_docdet;
1777 $line->thirdparty_code = $obj->thirdparty_code;
1778 $line->subledger_account = $obj->subledger_account;
1779 $line->subledger_label = $obj->subledger_label;
1780 $line->numero_compte = $obj->numero_compte;
1781 $line->label_compte = $obj->label_compte;
1782 $line->label_operation = $obj->label_operation;
1783 $line->debit = $obj->debit;
1784 $line->credit = $obj->credit;
1785 $line->montant = $obj->amount;
1786 $line->amount = $obj->amount;
1787 $line->sens = $obj->sens;
1788 $line->code_journal = $obj->code_journal;
1789 $line->journal_label = $obj->journal_label;
1790 $line->piece_num = $obj->piece_num;
1791 $line->date_creation = $obj->date_creation;
1792 $line->date_modification = $obj->date_modification;
1793 if ($mode !=
"_tmp") {
1794 $line->date_export = $obj->date_export;
1796 $line->date_validation = $obj->date_validation;
1798 $this->linesmvt[] = $line;
1801 $this->error =
"Error ".$this->db->lasterror();
1802 dol_syslog(__METHOD__.$this->error, LOG_ERR);
1821 $sql =
"SELECT rowid, doc_date, doc_type,";
1822 $sql .=
" doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,";
1823 $sql .=
" numero_compte, label_compte, label_operation, debit, credit,";
1824 $sql .=
" montant as amount, sens, fk_user_author, import_key, code_journal, piece_num,";
1825 $sql .=
" date_validated as date_validation";
1826 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element;
1827 $sql .=
" WHERE entity = " . ((int) $conf->entity);
1829 dol_syslog(get_class($this).
"::export_bookkeeping", LOG_DEBUG);
1834 $this->linesexport = array();
1836 $num = $this->
db->num_rows(
$resql);
1837 while ($obj = $this->
db->fetch_object(
$resql)) {
1840 $line->id = $obj->rowid;
1842 $line->doc_date = $this->
db->jdate($obj->doc_date);
1843 $line->doc_type = $obj->doc_type;
1844 $line->doc_ref = $obj->doc_ref;
1845 $line->fk_doc = $obj->fk_doc;
1846 $line->fk_docdet = $obj->fk_docdet;
1847 $line->thirdparty_code = $obj->thirdparty_code;
1848 $line->subledger_account = $obj->subledger_account;
1849 $line->subledger_label = $obj->subledger_label;
1850 $line->numero_compte = $obj->numero_compte;
1851 $line->label_compte = $obj->label_compte;
1852 $line->label_operation = $obj->label_operation;
1853 $line->debit = $obj->debit;
1854 $line->credit = $obj->credit;
1855 $line->montant = $obj->amount;
1856 $line->amount = $obj->amount;
1857 $line->sens = $obj->sens;
1858 $line->code_journal = $obj->code_journal;
1859 $line->piece_num = $obj->piece_num;
1860 $line->date_validation = $obj->date_validation;
1862 $this->linesexport[] = $line;
1868 $this->error =
"Error ".$this->db->lasterror();
1869 dol_syslog(get_class($this).
"::export_bookkeeping ".$this->error, LOG_ERR);
1889 if ($direction == 0) {
1893 if ($next_piecenum < 0) {
1899 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.
'_tmp WHERE piece_num = '.((int) $piece_num).
' AND entity = ' .((int) $conf->entity).
" AND numero_compte IS NULL AND debit = 0 AND credit = 0";
1903 $this->errors[] =
'Error '.$this->db->lasterror();
1904 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1909 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element.
' (doc_date, doc_type,';
1910 $sql .=
' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,';
1911 $sql .=
' numero_compte, label_compte, label_operation, debit, credit,';
1912 $sql .=
' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num, date_creation)';
1913 $sql .=
' SELECT doc_date, doc_type,';
1914 $sql .=
' doc_ref, fk_doc, fk_docdet, entity, thirdparty_code, subledger_account, subledger_label,';
1915 $sql .=
' numero_compte, label_compte, label_operation, debit, credit,';
1916 $sql .=
' montant, sens, fk_user_author, import_key, code_journal, journal_label, '.((int) $next_piecenum).
", '".$this->
db->idate($now).
"'";
1917 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
'_tmp WHERE piece_num = '.((int) $piece_num).
' AND numero_compte IS NOT NULL AND entity = ' .((int) $conf->entity);
1921 $this->errors[] =
'Error '.$this->db->lasterror();
1922 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1927 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.
'_tmp WHERE piece_num = '.((int) $piece_num).
' AND entity = ' .((int) $conf->entity);
1931 $this->errors[] =
'Error '.$this->db->lasterror();
1932 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1935 } elseif ($direction == 1) {
1937 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.
'_tmp WHERE piece_num = '.((int) $piece_num).
' AND entity = ' .((int) $conf->entity);
1941 $this->errors[] =
'Error '.$this->db->lasterror();
1942 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1947 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.$this->table_element.
'_tmp (doc_date, doc_type,';
1948 $sql .=
' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,';
1949 $sql .=
' numero_compte, label_compte, label_operation, debit, credit,';
1950 $sql .=
' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num)';
1951 $sql .=
' SELECT doc_date, doc_type,';
1952 $sql .=
' doc_ref, fk_doc, fk_docdet, thirdparty_code, subledger_account, subledger_label,';
1953 $sql .=
' numero_compte, label_compte, label_operation, debit, credit,';
1954 $sql .=
' montant, sens, fk_user_author, import_key, code_journal, journal_label, piece_num';
1955 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' WHERE piece_num = '.((int) $piece_num).
' AND entity = ' .((int) $conf->entity);
1959 $this->errors[] =
'Error '.$this->db->lasterror();
1960 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1965 $sql =
'DELETE FROM '.MAIN_DB_PREFIX.$this->table_element.
'_tmp WHERE piece_num = '.((int) $piece_num).
' AND entity = ' .((int) $conf->entity);
1969 $this->errors[] =
'Error '.$this->db->lasterror();
1970 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
1975 $this->
db->commit();
1978 $this->
db->rollback();
2006 public function select_account($selectid, $htmlname =
'account', $showempty = 0, $event = array(), $select_in = 0, $select_out = 0, $aabase =
'')
2011 require_once DOL_DOCUMENT_ROOT.
'/core/lib/accounting.lib.php';
2013 $pcgver = $conf->global->CHARTOFACCOUNTS;
2015 $sql =
"SELECT DISTINCT ab.numero_compte as account_number, aa.label as label, aa.rowid as rowid, aa.fk_pcg_version";
2016 $sql .=
" FROM ".MAIN_DB_PREFIX.
"accounting_bookkeeping as ab";
2017 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as aa ON aa.account_number = ab.numero_compte";
2018 $sql .=
" AND aa.active = 1";
2019 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
2020 $sql .=
" AND asy.rowid = ".((int) $pcgver);
2021 $sql .=
" AND ab.entity = " . ((int) $conf->entity);
2022 $sql .=
" ORDER BY account_number ASC";
2024 dol_syslog(get_class($this).
"::select_account", LOG_DEBUG);
2028 $this->error =
"Error ".$this->db->lasterror();
2029 dol_syslog(get_class($this).
"::select_account ".$this->error, LOG_ERR);
2038 while ($obj = $this->
db->fetch_object(
$resql)) {
2041 $select_value_in = $obj->rowid;
2042 $select_value_out = $obj->rowid;
2044 if ($select_in == 1) {
2045 $select_value_in = $obj->account_number;
2047 if ($select_out == 1) {
2048 $select_value_out = $obj->account_number;
2053 if (($selectid !=
'') && $selectid == $select_value_in) {
2054 $selected = $select_value_out;
2057 $options[$select_value_out] = $label;
2060 $out .=
Form::selectarray($htmlname, $options, $selected, $showempty, 0, 0,
'', 0, 0, 0,
'',
'maxwidth300');
2075 $pcgver = $conf->global->CHARTOFACCOUNTS;
2077 $sql =
"SELECT root.rowid, root.account_number, root.label as label,";
2078 $sql .=
" parent.rowid as parent_rowid, parent.account_number as parent_account_number, parent.label as parent_label";
2079 $sql .=
" FROM ".MAIN_DB_PREFIX.
"accounting_account as aa";
2080 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
2081 $sql .=
" AND asy.rowid = ".((int) $pcgver);
2082 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as parent ON aa.account_parent = parent.rowid AND parent.active = 1";
2083 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"accounting_account as root ON parent.account_parent = root.rowid AND root.active = 1";
2084 $sql .=
" WHERE aa.account_number = '".$this->db->escape($account).
"'";
2085 $sql .=
" AND aa.entity = " . ((int) $conf->entity);
2087 dol_syslog(get_class($this).
"::select_account", LOG_DEBUG);
2092 $obj = $this->
db->fetch_object(
$resql);
2095 $result = array(
'id'=>$obj->rowid,
'account_number'=>$obj->account_number,
'label'=>$obj->label);
2098 $this->error =
"Error ".$this->db->lasterror();
2099 dol_syslog(__METHOD__.
" ".$this->error, LOG_ERR);
2117 $pcgver = $conf->global->CHARTOFACCOUNTS;
2118 $sql =
"SELECT aa.account_number, aa.label, aa.rowid, aa.fk_pcg_version, cat.label as category";
2119 $sql .=
" FROM ".MAIN_DB_PREFIX.
"accounting_account as aa ";
2120 $sql .=
" INNER JOIN ".MAIN_DB_PREFIX.
"accounting_system as asy ON aa.fk_pcg_version = asy.pcg_version";
2121 $sql .=
" AND aa.account_number = '".$this->db->escape($account).
"'";
2122 $sql .=
" AND asy.rowid = ".((int) $pcgver);
2123 $sql .=
" AND aa.active = 1";
2124 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"c_accounting_category as cat ON aa.fk_accounting_category = cat.rowid";
2125 $sql .=
" WHERE aa.entity = " . ((int) $conf->entity);
2127 dol_syslog(get_class($this).
"::select_account", LOG_DEBUG);
2132 $obj = $this->
db->fetch_object(
$resql);
2134 if (empty($obj->category)) {
2137 return $obj->label.
' ('.$obj->category.
')';
2140 $this->error =
"Error ".$this->db->lasterror();
2141 dol_syslog(__METHOD__.
" ".$this->error, LOG_ERR);
2157 public $doc_date =
'';
2171 public $thirdparty_code;
2172 public $subledger_account;
2173 public $subledger_label;
2174 public $numero_compte;
2175 public $label_compte;
2176 public $label_operation;
2194 public $multicurrency_amount;
2199 public $multicurrency_code;
2205 public $lettering_code;
2206 public $date_lettering;
2211 public $fk_user_author;
2214 public $code_journal;
2215 public $journal_label;
2221 public $date_creation;
2226 public $date_modification;
2231 public $date_export;
2236 public $date_validation;
2241 public $date_lim_reglement;
length_accountg($account)
Return General accounting account with defined length (used for product and miscellaneous)
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Class to manage Ledger (General Ledger and Subledger)
create(User $user, $notrigger=false)
Create object into database.
createStd(User $user, $notrigger=false, $mode='')
Create object into database.
deleteByImportkey($importkey)
Delete bookkeeping by importkey.
getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionally the picto)
select_account($selectid, $htmlname='account', $showempty=0, $event=array(), $select_in=0, $select_out=0, $aabase='')
Return list of accounts with label by chart of accounts.
update(User $user, $notrigger=false, $mode='')
Update object into database.
getNextNumMvt($mode='')
Return next number movement.
get_compte_desc($account=null)
Description of accounting account.
__construct(DoliDB $db)
Constructor.
createFromClone(User $user, $fromid)
Load an object from its id and create a new one in database.
getRootAccount($account=null)
Return id and description of a root accounting account.
transformTransaction($direction=0, $piece_num='')
Transform transaction.
fetchPerMvt($piecenum, $mode='')
Load an accounting document into memory from database.
updateByMvt($piece_num='', $field='', $value='', $mode='')
Update accounting movement.
fetchAllBalance($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter=array(), $filtermode='AND')
Load object in memory from the database.
deleteMvtNum($piecenum)
Delete bookkeeping by piece number.
deleteByYearAndJournal($delyear=0, $journal='', $mode='', $delmonth=0)
Delete bookkeeping by year.
fetchAllByAccount($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter=array(), $filtermode='AND', $option=0, $countonly=0)
Load object in memory from the database in ->lines.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
fetch($id, $ref=null, $mode='')
Load object in memory from the database.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter=array(), $filtermode='AND', $showAlreadyExportMovements=1)
Load object in memory from the database.
fetchAllPerMvt($piecenum, $mode='')
Load all informations of accountancy document.
export_bookkeeping($model='ebp')
Export bookkeeping.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
Class to manage Dolibarr database access.
Class to manage Dolibarr users.
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.
dolSqlDateFilter($datefield, $day_date, $month_date, $year_date, $excludefirstand=0, $gm=false)
Generate a SQL string to make a filter into a range (for second of date until last second of date).
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
natural_search($fields, $value, $mode=0, $nofirstand=0)
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
div float
Buy price without taxes.
$conf db
API class for accounts.