25 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
35 public $module =
'asset';
40 public $element =
'asset';
45 public $table_element =
'asset';
51 public $ismultientitymanaged = 1;
56 public $isextrafieldmanaged = 1;
61 public $picto =
'asset';
63 const STATUS_DRAFT = 0;
64 const STATUS_DISPOSED = 9;
98 'rowid' => array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>
'1',
'position'=>1,
'notnull'=>1,
'visible'=>0,
'noteditable'=>
'1',
'index'=>1,
'css'=>
'left',
'comment'=>
"Id"),
99 'ref' => array(
'type'=>
'varchar(128)',
'label'=>
'Ref',
'enabled'=>
'1',
'position'=>20,
'notnull'=>1,
'visible'=>1,
'noteditable'=>
'0',
'index'=>1,
'searchall'=>1,
'showoncombobox'=>
'1',
'validate'=>
'1',
'comment'=>
"Reference of object"),
100 'label' => array(
'type'=>
'varchar(255)',
'label'=>
'Label',
'enabled'=>
'1',
'position'=>30,
'notnull'=>1,
'visible'=>1,
'searchall'=>1,
'css'=>
'minwidth300',
'cssview'=>
'wordbreak',
'showoncombobox'=>
'2',
'validate'=>
'1',),
101 'fk_asset_model' => array(
'type'=>
'integer:AssetModel:asset/class/assetmodel.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)',
'label'=>
'AssetModel',
'enabled'=>
'1',
'position'=>40,
'notnull'=>0,
'visible'=>1,
'index'=>1,
'validate'=>
'1',),
102 'qty' => array(
'type'=>
'real',
'label'=>
'Qty',
'enabled'=>
'1',
'position'=>50,
'notnull'=>1,
'visible'=>0,
'default'=>
'1',
'isameasure'=>
'1',
'css'=>
'maxwidth75imp',
'validate'=>
'1',),
103 'acquisition_type' => array(
'type'=>
'smallint',
'label'=>
'AssetAcquisitionType',
'enabled'=>
'1',
'position'=>60,
'notnull'=>1,
'visible'=>1,
'arrayofkeyval'=>array(
'0'=>
'AssetAcquisitionTypeNew',
'1'=>
'AssetAcquisitionTypeOccasion'),
'validate'=>
'1',),
104 'asset_type' => array(
'type'=>
'smallint',
'label'=>
'AssetType',
'enabled'=>
'1',
'position'=>70,
'notnull'=>1,
'visible'=>1,
'arrayofkeyval'=>array(
'0'=>
'AssetTypeIntangible',
'1'=>
'AssetTypeTangible',
'2'=>
'AssetTypeInProgress',
'3'=>
'AssetTypeFinancial'),
'validate'=>
'1',),
105 'not_depreciated' => array(
'type'=>
'boolean',
'label'=>
'AssetNotDepreciated',
'enabled'=>
'1',
'position'=>80,
'notnull'=>0,
'default'=>
'0',
'visible'=>1,
'validate'=>
'1',),
106 'date_acquisition' => array(
'type'=>
'date',
'label'=>
'AssetDateAcquisition',
'enabled'=>
'1',
'position'=>90,
'notnull'=>1,
'visible'=>1,),
107 'date_start' => array(
'type'=>
'date',
'label'=>
'AssetDateStart',
'enabled'=>
'1',
'position'=>100,
'notnull'=>0,
'visible'=>-1,),
108 'acquisition_value_ht' => array(
'type'=>
'price',
'label'=>
'AssetAcquisitionValueHT',
'enabled'=>
'1',
'position'=>110,
'notnull'=>1,
'visible'=>1,
'isameasure'=>
'1',
'validate'=>
'1',),
109 'recovered_vat' => array(
'type'=>
'price',
'label'=>
'AssetRecoveredVAT',
'enabled'=>
'1',
'position'=>120,
'notnull'=>0,
'visible'=>1,
'isameasure'=>
'1',
'validate'=>
'1',),
110 'reversal_date' => array(
'type'=>
'date',
'label'=>
'AssetReversalDate',
'enabled'=>
'1',
'position'=>130,
'notnull'=>0,
'visible'=>1,),
111 'reversal_amount_ht' => array(
'type'=>
'price',
'label'=>
'AssetReversalAmountHT',
'enabled'=>
'1',
'position'=>140,
'notnull'=>0,
'visible'=>1,
'isameasure'=>
'1',
'validate'=>
'1',),
112 'disposal_date' => array(
'type'=>
'date',
'label'=>
'AssetDisposalDate',
'enabled'=>
'1',
'position'=>200,
'notnull'=>0,
'visible'=>-2,),
113 'disposal_amount_ht' => array(
'type'=>
'price',
'label'=>
'AssetDisposalAmount',
'enabled'=>
'1',
'position'=>210,
'notnull'=>0,
'visible'=>-2,
'default'=>
'0',
'isameasure'=>
'1',
'validate'=>
'1',),
114 'fk_disposal_type' => array(
'type'=>
'sellist:c_asset_disposal_type:label:rowid::active=1',
'label'=>
'AssetDisposalType',
'enabled'=>
'1',
'position'=>220,
'notnull'=>0,
'visible'=>-2,
'index'=>1,
'validate'=>
'1',),
115 'disposal_depreciated' => array(
'type'=>
'boolean',
'label'=>
'AssetDisposalDepreciated',
'enabled'=>
'1',
'position'=>230,
'notnull'=>0,
'default'=>
'0',
'visible'=>-2,
'validate'=>
'1',),
116 'disposal_subject_to_vat' => array(
'type'=>
'boolean',
'label'=>
'AssetDisposalSubjectToVat',
'enabled'=>
'1',
'position'=>240,
'notnull'=>0,
'default'=>
'0',
'visible'=>-2,
'validate'=>
'1',),
117 'note_public' => array(
'type'=>
'html',
'label'=>
'NotePublic',
'enabled'=>
'1',
'position'=>300,
'notnull'=>0,
'visible'=>0,
'validate'=>
'1',),
118 'note_private' => array(
'type'=>
'html',
'label'=>
'NotePrivate',
'enabled'=>
'1',
'position'=>301,
'notnull'=>0,
'visible'=>0,
'validate'=>
'1',),
119 'date_creation' => array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>
'1',
'position'=>500,
'notnull'=>1,
'visible'=>-2,),
120 'tms' => array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>
'1',
'position'=>501,
'notnull'=>0,
'visible'=>-2,),
121 'fk_user_creat' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserAuthor',
'enabled'=>
'1',
'position'=>510,
'notnull'=>1,
'visible'=>-2,
'foreignkey'=>
'user.rowid',),
122 'fk_user_modif' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>
'1',
'position'=>511,
'notnull'=>-1,
'visible'=>-2,),
123 'last_main_doc' => array(
'type'=>
'varchar(255)',
'label'=>
'LastMainDoc',
'enabled'=>
'1',
'position'=>600,
'notnull'=>0,
'visible'=>0,),
124 'import_key' => array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>
'1',
'position'=>1000,
'notnull'=>-1,
'visible'=>-2,),
125 'model_pdf' => array(
'type'=>
'varchar(255)',
'label'=>
'Model pdf',
'enabled'=>
'1',
'position'=>1010,
'notnull'=>-1,
'visible'=>0,),
126 'status' => array(
'type'=>
'smallint',
'label'=>
'Status',
'enabled'=>
'1',
'position'=>1000,
'notnull'=>1,
'default'=>
'0',
'visible'=>2,
'index'=>1,
'arrayofkeyval'=>array(
'0'=>
'Draft',
'1'=>
'Validated',
'9'=>
'Canceled'),
'validate'=>
'1',),
131 public $fk_asset_model;
132 public $reversal_amount_ht;
133 public $acquisition_value_ht;
134 public $recovered_vat;
135 public $reversal_date;
136 public $date_acquisition;
139 public $acquisition_type;
141 public $not_depreciated;
142 public $disposal_date;
143 public $disposal_amount_ht;
144 public $fk_disposal_type;
145 public $disposal_depreciated;
146 public $disposal_subject_to_vat;
147 public $supplier_invoice_id;
149 public $note_private;
150 public $date_creation;
152 public $fk_user_creat;
153 public $fk_user_modif;
154 public $last_main_doc;
158 public $user_cloture_id;
178 public $asset_depreciation_options;
182 public $depreciation_lines = array();
191 global $conf, $langs;
195 if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields[
'rowid'])) {
196 $this->fields[
'rowid'][
'visible'] = 0;
198 if (!
isModEnabled(
'multicompany') && isset($this->fields[
'entity'])) {
199 $this->fields[
'entity'][
'enabled'] = 0;
203 foreach ($this->fields as $key => $val) {
204 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
205 unset($this->fields[$key]);
210 if (is_object($langs)) {
211 foreach ($this->fields as $key => $val) {
212 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
213 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
214 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
230 if (!isset($this->date_start) || $this->date_start ===
"") $this->date_start = $this->date_acquisition;
234 $result = $result_create = $this->
createCommon($user, $notrigger);
235 if ($result > 0 && $this->fk_asset_model > 0) $result = $this->
setDataFromAssetModel($user, $notrigger);
237 if ($this->supplier_invoice_id > 0) $this->
add_object_linked(
'invoice_supplier', $this->supplier_invoice_id);
241 $this->
db->rollback();
246 return $result > 0 ? $result_create : $result;
258 global $langs, $extrafields;
356 public function fetch($id, $ref =
null)
360 if (!empty($this->table_element_line)) $this->
fetchLines();
365 } elseif ($res > 0) {
366 $this->fields[
'date_acquisition'][
'noteditable'] =
'1';
367 $this->fields[
'date_start'][
'noteditable'] =
'1';
368 $this->fields[
'acquisition_value_ht'][
'noteditable'] =
'1';
369 $this->fields[
'recovered_vat'][
'noteditable'] =
'1';
370 $this->fields[
'reversal_date'][
'noteditable'] =
'1';
371 $this->fields[
'reversal_amount_ht'][
'noteditable'] =
'1';
384 $this->lines = array();
401 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND')
411 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
412 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
413 $sql .=
" WHERE t.entity IN (".getEntity($this->table_element).
")";
415 $sql .=
" WHERE 1 = 1";
419 if (count($filter) > 0) {
420 foreach ($filter as $key => $value) {
421 if ($key ==
't.rowid') {
422 $sqlwhere[] = $key.
" = ".((int) $value);
423 } elseif (in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
424 $sqlwhere[] = $key.
" = '".$this->
db->idate($value).
"'";
425 } elseif ($key ==
'customsql') {
426 $sqlwhere[] = $value;
427 } elseif (strpos($value,
'%') ===
false) {
428 $sqlwhere[] = $key.
" IN (".$this->
db->sanitize($this->
db->escape($value)).
")";
430 $sqlwhere[] = $key.
" LIKE '%".$this->
db->escape($value).
"%'";
434 if (count($sqlwhere) > 0) {
435 $sql .=
" AND (".implode(
" ".$filtermode.
" ", $sqlwhere).
")";
438 if (!empty($sortfield)) {
439 $sql .= $this->
db->order($sortfield, $sortorder);
441 if (!empty($limit)) {
442 $sql .= $this->
db->plimit($limit, $offset);
449 while ($i < ($limit ? min($limit, $num) : $num)) {
450 $obj = $this->
db->fetch_object(
$resql);
452 $record =
new self($this->db);
453 $record->setVarsFromFetchObj($obj);
455 $records[$record->id] = $record;
463 $this->errors[] =
'Error '.$this->db->lasterror();
464 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
479 if (!isset($this->date_start) || $this->date_start ===
"") $this->date_start = $this->date_acquisition;
484 if ($result > 0 && $this->fk_asset_model > 0 && $this->fk_asset_model != $this->oldcopy->fk_asset_model) {
488 $this->date_start != $this->oldcopy->date_start ||
489 $this->acquisition_value_ht != $this->oldcopy->acquisition_value_ht ||
490 $this->reversal_date != $this->oldcopy->reversal_date ||
491 $this->reversal_amount_ht != $this->oldcopy->reversal_amount_ht ||
492 ($this->fk_asset_model > 0 && $this->fk_asset_model != $this->oldcopy->fk_asset_model)
499 $this->
db->rollback();
514 public function delete(
User $user, $notrigger =
false)
530 $langs->load(
'assets');
533 $this->
id = $this->
id > 0 ? $this->id : 0;
534 $this->fk_asset_model = $this->fk_asset_model > 0 ? $this->fk_asset_model : 0;
538 if (empty($this->
id)) {
539 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Asset") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
542 if (empty($this->fk_asset_model)) {
543 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AssetModel") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
554 require_once DOL_DOCUMENT_ROOT .
'/asset/class/assetdepreciationoptions.class.php';
556 $result = $options_model->fetchDeprecationOptions(0, $this->fk_asset_model);
558 $this->error = $options_model->error;
559 $this->errors = $options_model->errors;
561 } elseif ($result > 0) {
563 $result = $options->fetchDeprecationOptions($this->
id);
565 $this->error = $options->error;
566 $this->errors = $options->errors;
571 foreach ($options_model->deprecation_options as $mode_key => $fields) {
572 foreach ($fields as $field_key => $value) {
573 $options->deprecation_options[$mode_key][$field_key] = $value;
577 $result = $options->updateDeprecationOptions($user, $this->
id, 0, $notrigger);
579 $this->error = $options->error;
580 $this->errors = $options->errors;
589 require_once DOL_DOCUMENT_ROOT .
'/asset/class/assetaccountancycodes.class.php';
591 $result = $accountancy_codes_model->fetchAccountancyCodes(0, $this->fk_asset_model);
593 $this->error = $accountancy_codes_model->error;
594 $this->errors = $accountancy_codes_model->errors;
596 } elseif ($result > 0) {
598 $result = $accountancy_codes->fetchAccountancyCodes($this->
id);
600 $this->error = $accountancy_codes->error;
601 $this->errors = $accountancy_codes->errors;
606 foreach ($accountancy_codes_model->accountancy_codes as $mode_key => $fields) {
607 foreach ($fields as $field_key => $value) {
608 $accountancy_codes->accountancy_codes[$mode_key][$field_key] = $value;
612 $result = $accountancy_codes->updateAccountancyCodes($user, $this->
id, 0, $notrigger);
614 $this->error = $accountancy_codes->error;
615 $this->errors = $accountancy_codes->errors;
623 $this->
db->rollback();
639 $langs->load(
'assets');
640 $this->depreciation_lines = array();
643 $this->
id = $this->
id > 0 ? $this->id : 0;
647 if (empty($this->
id)) {
648 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Asset") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
670 $sql =
"SELECT ad.rowid, ad.depreciation_mode, ad.ref, ad.depreciation_date, ad.depreciation_ht, ad.cumulative_depreciation_ht";
671 $sql .=
", " . $this->
db->ifsql(
'iab.fk_docdet IS NOT NULL', 1, 0) .
" AS bookkeeping";
672 $sql .=
" FROM " . MAIN_DB_PREFIX .
"asset_depreciation AS ad";
673 $sql .=
" LEFT JOIN (SELECT DISTINCT fk_docdet FROM " . MAIN_DB_PREFIX .
"accounting_bookkeeping WHERE doc_type = 'asset') AS iab ON iab.fk_docdet = ad.rowid";
674 $sql .=
" WHERE ad.fk_asset = " . (int) $this->
id;
675 $sql .=
" ORDER BY ad.depreciation_date ASC";
679 $this->errors[] = $langs->trans(
'AssetErrorFetchDepreciationLines') .
': ' . $this->
db->lasterror();
683 while ($obj = $this->
db->fetch_object(
$resql)) {
684 if (!isset($this->depreciation_lines[$obj->depreciation_mode])) $this->depreciation_lines[$obj->depreciation_mode] = array();
685 $this->depreciation_lines[$obj->depreciation_mode][] = array(
688 'depreciation_date' => $this->db->jdate($obj->depreciation_date),
689 'depreciation_ht' => $obj->depreciation_ht,
690 'cumulative_depreciation_ht' => $obj->cumulative_depreciation_ht,
691 'bookkeeping' => $obj->bookkeeping,
706 $langs->load(
'assets');
709 $this->
id = $this->
id > 0 ? $this->id : 0;
713 if (empty($this->
id)) {
714 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Asset") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
735 $sql =
"SELECT COUNT(*) AS has_bookkeeping";
736 $sql .=
" FROM " . MAIN_DB_PREFIX .
"asset_depreciation AS ad";
737 $sql .=
" LEFT JOIN (SELECT DISTINCT fk_docdet FROM " . MAIN_DB_PREFIX .
"accounting_bookkeeping WHERE doc_type = 'asset') AS iab ON iab.fk_docdet = ad.rowid";
738 $sql .=
" WHERE ad.fk_asset = " . (int) $this->
id;
739 $sql .=
" AND iab.fk_docdet IS NOT NULL";
743 $this->errors[] = $langs->trans(
'AssetErrorFetchDepreciationLines') .
': ' . $this->
db->lasterror();
747 if ($obj = $this->
db->fetch_object(
$resql)) {
748 return $obj->has_bookkeeping > 0 ? 1 : 0;
766 public function addDepreciationLine($mode, $ref, $depreciation_date, $depreciation_ht, $cumulative_depreciation_ht, $accountancy_code_debit, $accountancy_code_credit)
769 $langs->load(
'assets');
772 $this->
id = $this->
id > 0 ? $this->id : 0;
773 $mode = strtolower(trim($mode));
775 $accountancy_code_debit = trim($accountancy_code_debit);
776 $accountancy_code_credit = trim($accountancy_code_credit);
780 if (empty($this->
id)) {
781 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Asset") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
788 $sql =
"INSERT INTO " . MAIN_DB_PREFIX .
"asset_depreciation(fk_asset, depreciation_mode, ref, depreciation_date, depreciation_ht, cumulative_depreciation_ht, accountancy_code_debit, accountancy_code_credit)";
789 $sql .=
" VALUES ( ";
790 $sql .=
" " . (int) $this->
id;
791 $sql .=
", '" . $this->
db->escape($mode) .
"'";
792 $sql .=
", '" . $this->
db->escape($ref) .
"'";
793 $sql .=
", '" . $this->
db->idate($depreciation_date) .
"'";
794 $sql .=
", " . (double) $depreciation_ht;
795 $sql .=
", " . (double) $cumulative_depreciation_ht;
796 $sql .=
", '" . $this->
db->escape($accountancy_code_debit) .
"'";
797 $sql .=
", '" . $this->
db->escape($accountancy_code_credit) .
"'";
802 $this->errors[] = $langs->trans(
'AssetErrorAddDepreciationLine') .
': ' . $this->
db->lasterror();
816 global $conf, $langs;
817 $langs->load(
'assets');
820 $this->
id = $this->
id > 0 ? $this->id : 0;
824 if (empty($this->
id)) {
825 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Asset") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
834 require_once DOL_DOCUMENT_ROOT .
'/asset/class/assetdepreciationoptions.class.php';
836 $result = $options->fetchDeprecationOptions($this->
id);
838 $this->error = $options->error;
839 $this->errors = $options->errors;
845 require_once DOL_DOCUMENT_ROOT .
'/asset/class/assetaccountancycodes.class.php';
847 $result = $accountancy_codes->fetchAccountancyCodes($this->
id);
849 $this->error = $accountancy_codes->error;
850 $this->errors = $accountancy_codes->errors;
858 foreach ($options->deprecation_options as $mode_key => $fields) {
859 $modes[$mode_key] = $this->
db->escape($mode_key);
861 $sql =
"DELETE FROM " . MAIN_DB_PREFIX .
"asset_depreciation";
862 $sql .=
" WHERE fk_asset = " . (int) $this->
id;
863 $sql .=
" AND depreciation_mode NOT IN ('" . $this->
db->sanitize(implode(
"', '", $modes)) .
"')";
867 $this->errors[] = $langs->trans(
'AssetErrorClearDepreciationLines') .
': ' . $this->
db->lasterror();
873 require_once DOL_DOCUMENT_ROOT .
'/core/lib/date.lib.php';
874 require_once DOL_DOCUMENT_ROOT .
'/core/lib/accounting.lib.php';
876 $init_fiscal_period_start = $dates[
'date_start'];
877 $init_fiscal_period_end = $dates[
'date_end'];
878 if (empty($init_fiscal_period_start) || empty($init_fiscal_period_end)) {
879 $pastmonthyear = $dates[
'pastmonthyear'];
880 $pastmonth = $dates[
'pastmonth'];
881 $init_fiscal_period_start =
dol_get_first_day($pastmonthyear, $pastmonth,
false);
882 $init_fiscal_period_end =
dol_get_last_day($pastmonthyear, $pastmonth,
false);
885 foreach ($options->deprecation_options as $mode_key => $fields) {
906 $sql =
"SELECT ad.depreciation_date, ad.cumulative_depreciation_ht";
907 $sql .=
" FROM " . MAIN_DB_PREFIX .
"asset_depreciation AS ad";
908 $sql .=
" LEFT JOIN (SELECT DISTINCT fk_docdet FROM " . MAIN_DB_PREFIX .
"accounting_bookkeeping WHERE doc_type = 'asset') AS iab ON iab.fk_docdet = ad.rowid";
909 $sql .=
" WHERE ad.fk_asset = " . (int) $this->
id;
910 $sql .=
" AND ad.depreciation_mode = '" . $this->
db->escape($mode_key) .
"'";
911 $sql .=
" AND iab.fk_docdet IS NOT NULL";
912 $sql .=
" ORDER BY ad.depreciation_date DESC";
917 $this->errors[] = $langs->trans(
'AssetErrorFetchMaxDepreciationDateForMode', $mode_key) .
': ' . $this->
db->lasterror();
921 $last_depreciation_date =
'';
922 $last_cumulative_depreciation_ht = $this->reversal_amount_ht;
923 if ($obj = $this->
db->fetch_object(
$resql)) {
924 $last_depreciation_date = $this->
db->jdate($obj->depreciation_date);
925 $last_cumulative_depreciation_ht = $obj->cumulative_depreciation_ht;
929 $sql =
"UPDATE " . MAIN_DB_PREFIX . $options->deprecation_options_fields[$mode_key][
'table'];
930 $sql .=
" SET total_amount_last_depreciation_ht = " . (empty($last_cumulative_depreciation_ht) ? 0 : $last_cumulative_depreciation_ht);
931 $sql .=
" WHERE fk_asset = " . (int) $this->
id;
934 $this->errors[] = $langs->trans(
'AssetErrorSetLastCumulativeDepreciation') .
': ' . $this->
db->lasterror();
940 $sql =
"DELETE " . MAIN_DB_PREFIX .
"asset_depreciation FROM " . MAIN_DB_PREFIX .
"asset_depreciation";
941 $sql .=
" LEFT JOIN " . MAIN_DB_PREFIX .
"accounting_bookkeeping as ab ON ab.doc_type = 'asset' AND ab.fk_docdet = " . MAIN_DB_PREFIX .
"asset_depreciation.rowid";
942 $sql .=
" WHERE " . MAIN_DB_PREFIX .
"asset_depreciation.fk_asset = " . (int) $this->
id;
943 $sql .=
" AND " . MAIN_DB_PREFIX .
"asset_depreciation.depreciation_mode = '" . $this->
db->escape($mode_key) .
"'";
944 $sql .=
" AND ab.fk_docdet IS NULL";
945 if ($last_depreciation_date !==
"") $sql .=
" AND " . MAIN_DB_PREFIX .
"asset_depreciation.ref != ''";
948 $this->errors[] = $langs->trans(
'AssetErrorClearDepreciationLines') .
': ' . $this->
db->lasterror();
954 $depreciation_date_start = $this->date_start > $this->date_acquisition ? $this->date_start : $this->date_acquisition;
955 $depreciation_date_end =
dol_time_plus_duree($depreciation_date_start, $fields[
'duration'], $fields[
'duration_type'] == 1 ?
'm' : ($fields[
'duration_type'] == 2 ?
'd' :
'y'));
956 $depreciation_amount = $fields[
'amount_base_depreciation_ht'];
957 if ($fields[
'duration_type'] == 2) {
958 $fiscal_period_start = $depreciation_date_start;
959 $fiscal_period_end = $depreciation_date_start;
960 } elseif ($fields[
'duration_type'] == 1) {
961 $date_temp =
dol_getdate($depreciation_date_start);
962 $fiscal_period_start =
dol_get_first_day($date_temp[
'year'], $date_temp[
'mon'],
false);
963 $fiscal_period_end =
dol_get_last_day($date_temp[
'year'], $date_temp[
'mon'],
false);
965 $fiscal_period_start = $init_fiscal_period_start;
966 $fiscal_period_end = $init_fiscal_period_end;
968 $cumulative_depreciation_ht = $last_cumulative_depreciation_ht;
969 $depreciation_period_amount = $depreciation_amount - $this->reversal_amount_ht;
970 $start_date = $depreciation_date_start;
971 $disposal_date = isset($this->disposal_date) && $this->disposal_date !==
"" ? $this->disposal_date :
"";
972 $finish_date = $disposal_date !==
"" ? $disposal_date : $depreciation_date_end;
973 $accountancy_code_depreciation_debit_key = $accountancy_codes->accountancy_codes_fields[$mode_key][
'depreciation_debit'];
974 $accountancy_code_depreciation_debit = $accountancy_codes->accountancy_codes[$mode_key][$accountancy_code_depreciation_debit_key];
975 $accountancy_code_depreciation_credit_key = $accountancy_codes->accountancy_codes_fields[$mode_key][
'depreciation_credit'];
976 $accountancy_code_credit = $accountancy_codes->accountancy_codes[$mode_key][$accountancy_code_depreciation_credit_key];
980 if ($last_depreciation_date ===
"" && ($depreciation_date_start < $fiscal_period_start || is_numeric($this->reversal_date))) {
981 if (is_numeric($this->reversal_date)) {
982 if ($this->reversal_date < $fiscal_period_start) {
983 $this->errors[] = $langs->trans(
'AssetErrorReversalDateNotGreaterThanCurrentBeginFiscalDateForMode', $mode_key);
988 if (empty($this->reversal_amount_ht)) {
989 $this->errors[] = $langs->trans(
'AssetErrorReversalAmountNotProvidedForMode', $mode_key);
994 $start_date = $this->reversal_date;
995 $result = $this->
addDepreciationLine($mode_key,
'', $start_date, $this->reversal_amount_ht, $this->reversal_amount_ht, $accountancy_code_depreciation_debit, $accountancy_code_credit);
1001 $this->errors[] = $langs->trans(
'AssetErrorReversalDateNotProvidedForMode', $mode_key);
1009 $nb_days_in_year = !empty($conf->global->ASSET_DEPRECIATION_DURATION_PER_YEAR) ? $conf->global->ASSET_DEPRECIATION_DURATION_PER_YEAR : 365;
1010 $nb_days_in_month = !empty($conf->global->ASSET_DEPRECIATION_DURATION_PER_MONTH) ? $conf->global->ASSET_DEPRECIATION_DURATION_PER_MONTH : 30;
1011 $period_amount = (double)
price2num($depreciation_period_amount / $fields[
'duration'],
'MT');
1012 $first_period_found =
false;
1013 $first_period_date = isset($begin_period) && $begin_period > $fiscal_period_start ? $begin_period : $fiscal_period_start;
1015 $ref_date_format =
"%Y" . ($fields[
'duration_type'] == 1 || $fields[
'duration_type'] == 2 ?
'-%m' :
'') . ($fields[
'duration_type'] == 2 ?
'-%d' :
'');
1019 $max_loop = $fields[
'duration'] + 2;
1023 if ($idx_loop > $max_loop)
break;
1025 if ($last_depreciation_date < $fiscal_period_end && ($first_period_date <= $start_date || $first_period_found)) {
1027 if ($fiscal_period_start <= $disposal_date && $disposal_date <= $fiscal_period_end && empty($this->disposal_depreciated)) {
1031 $first_period_found =
true;
1033 $period_begin =
dol_print_date($fiscal_period_start, $ref_date_format);
1034 $period_end =
dol_print_date($fiscal_period_end, $ref_date_format);
1035 $ref = $period_begin . ($period_begin != $period_end ?
' - ' . $period_end :
'');
1036 if ($fiscal_period_start <= $disposal_date && $disposal_date <= $fiscal_period_end) {
1037 $ref .=
' - ' . $langs->transnoentitiesnoconv(
'AssetDisposal');
1040 $begin_date = $fiscal_period_start < $start_date && $start_date <= $fiscal_period_end ? $start_date : $fiscal_period_start;
1041 $end_date = $fiscal_period_start < $finish_date && $finish_date <= $fiscal_period_end ? $finish_date : $fiscal_period_end;
1042 if ($fields[
'duration_type'] == 2) {
1043 $depreciation_ht = $period_amount;
1044 } elseif ($fields[
'duration_type'] == 1) {
1045 $nb_days = min($nb_days_in_month,
num_between_day($begin_date, $end_date, 1));
1046 if ($nb_days >= 28) {
1048 if ($date_temp[
'mon'] == 2) {
1052 $depreciation_ht = (double)
price2num($period_amount * $nb_days / $nb_days_in_month,
'MT');
1054 $nb_days = min($nb_days_in_year,
num_between_day($begin_date, $end_date, 1));
1055 $depreciation_ht = (double)
price2num($period_amount * $nb_days / $nb_days_in_year,
'MT');
1058 if ($fiscal_period_start <= $depreciation_date_end && $depreciation_date_end <= $fiscal_period_end) {
1059 $depreciation_ht = (double)
price2num($depreciation_amount - $cumulative_depreciation_ht,
'MT');
1060 $cumulative_depreciation_ht = $depreciation_amount;
1062 $cumulative_depreciation_ht += $depreciation_ht;
1065 $result = $this->
addDepreciationLine($mode_key, $ref, $fiscal_period_end, $depreciation_ht, $cumulative_depreciation_ht, $accountancy_code_depreciation_debit, $accountancy_code_credit);
1074 if ($fields[
'duration_type'] == 2) {
1075 $fiscal_period_end = $fiscal_period_start;
1076 } elseif ($fields[
'duration_type'] == 1) {
1081 $last_period_date = $disposal_date !==
"" && $disposal_date < $depreciation_date_end ? $disposal_date : $depreciation_date_end;
1082 }
while ($fiscal_period_start < $last_period_date);
1091 $this->
db->rollback();
1094 $this->
db->commit();
1108 $langs->load(
'assets');
1111 $asset_depreciation_id = $asset_depreciation_id > 0 ? $asset_depreciation_id : 0;
1115 if (empty($asset_depreciation_id)) {
1116 $this->errors[] = $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"AssetDepreciation") .
' (' . $langs->transnoentitiesnoconv(
"TechnicalID") .
')');
1125 require_once DOL_DOCUMENT_ROOT .
'/asset/class/assetdepreciationoptions.class.php';
1130 $sql =
"SELECT fk_asset, depreciation_mode, cumulative_depreciation_ht";
1131 $sql .=
" FROM " . MAIN_DB_PREFIX .
"asset_depreciation";
1132 $sql .=
" WHERE rowid = " . (int) $asset_depreciation_id;
1135 $this->errors[] = $langs->trans(
'AssetErrorFetchCumulativeDepreciation') .
': ' . $this->
db->lasterror();
1138 if ($obj = $this->
db->fetch_object(
$resql)) {
1139 $mode_key = $obj->depreciation_mode;
1140 if (!empty($options->deprecation_options_fields[$mode_key])) {
1141 $sql =
"UPDATE " . MAIN_DB_PREFIX . $options->deprecation_options_fields[$mode_key][
'table'];
1142 $sql .=
" SET total_amount_last_depreciation_ht = " . $obj->cumulative_depreciation_ht;
1143 $sql .=
" WHERE fk_asset = " . (int) $obj->fk_asset;
1144 $resql = $this->db->query($sql);
1146 $this->errors[] = $langs->trans(
'AssetErrorSetLastCumulativeDepreciation') .
': ' . $this->
db->lasterror();
1154 $this->
db->rollback();
1157 $this->
db->commit();
1170 public function dispose($user, $disposal_invoice_id, $notrigger = 0)
1172 global $conf, $langs;
1175 if ($this->status != self::STATUS_DRAFT || $this->status == self::STATUS_DISPOSED) {
1181 $required_fields = array(
'disposal_date',
'disposal_date',
'fk_disposal_type');
1182 foreach ($required_fields as $field) {
1183 $this->fields[$field][
'notnull'] = 1;
1185 $result = $this->
update($user, 1);
1186 foreach ($required_fields as $field) {
1187 $this->fields[$field][
'notnull'] = 0;
1190 if ($disposal_invoice_id > 0) $this->
add_object_linked(
'facture', $disposal_invoice_id);
1191 $result = $this->
setStatusCommon($user, self::STATUS_DISPOSED, $notrigger,
'ASSET_DISPOSED');
1196 $this->
db->rollback();
1198 $this->
db->commit();
1202 if ($result > 0 && empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1203 if (method_exists($this,
'generateDocument')) {
1204 global $hidedetails, $hidedesc, $hideref;
1205 $outputlangs = $langs;
1208 $newlang =
GETPOST(
'lang_id',
'aZ09');
1211 $newlang = $this->thirdparty->default_lang;
1213 if (!empty($newlang)) {
1214 $outputlangs =
new Translate(
"", $conf);
1215 $outputlangs->setDefaultLang($newlang);
1217 $model = $this->model_pdf;
1218 $ret = $this->
fetch($this->
id);
1220 $this->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1234 public function reopen($user, $notrigger = 0)
1236 global $conf, $langs;
1239 if ($this->status != self::STATUS_DISPOSED || $this->status == self::STATUS_DRAFT) {
1246 $this->disposal_date =
null;
1247 $this->disposal_amount_ht =
null;
1248 $this->fk_disposal_type =
null;
1249 $this->disposal_depreciated =
null;
1250 $this->disposal_subject_to_vat =
null;
1251 $result = $this->
update($user, 1);
1254 $result = $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'ASSET_REOPEN');
1259 $this->
db->rollback();
1261 $this->
db->commit();
1265 if ($result > 0 && empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
1266 if (method_exists($this,
'generateDocument')) {
1267 global $hidedetails, $hidedesc, $hideref;
1268 $outputlangs = $langs;
1271 $newlang =
GETPOST(
'lang_id',
'aZ09');
1274 $newlang = $this->thirdparty->default_lang;
1276 if (!empty($newlang)) {
1277 $outputlangs =
new Translate(
"", $conf);
1278 $outputlangs->setDefaultLang($newlang);
1280 $model = $this->model_pdf;
1281 $ret = $this->
fetch($this->
id);
1283 $this->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
1301 public function getNomUrl($withpicto = 0, $option =
'', $maxlen = 0, $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
1303 global $db, $conf, $langs, $hookmanager;
1304 global $dolibarr_main_authentication, $dolibarr_main_demo;
1305 global $menumanager;
1307 if (!empty($conf->dol_no_mouse_hover)) {
1313 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Asset").
'</u>';
1314 if (isset($this->status)) {
1315 $label .=
' '.$this->getLibStatut(5);
1318 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
1320 $url =
dol_buildpath(
'/asset/card.php', 1).
'?id='.$this->id;
1322 if ($option !=
'nolink') {
1324 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
1325 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
1326 $add_save_lastsearch_values = 1;
1328 if ($add_save_lastsearch_values) {
1329 $url .=
'&save_lastsearch_values=1';
1334 if (empty($notooltip)) {
1335 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
1336 $label = $langs->trans(
"ShowAsset");
1337 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
1339 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
1340 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
1342 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1345 if ($option ==
'nolink') {
1346 $linkstart =
'<span';
1348 $linkstart =
'<a href="'.$url.
'"';
1350 $linkstart .= $linkclose.
'>';
1351 if ($option ==
'nolink') {
1352 $linkend =
'</span>';
1357 $result .= $linkstart;
1359 if (empty($this->showphoto_on_popup)) {
1361 $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);
1365 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1367 list($class, $module) = explode(
'@', $this->picto);
1370 $filename = $filearray[0][
'name'];
1371 if (!empty($filename)) {
1372 $pospoint = strpos($filearray[0][
'name'],
'.');
1374 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
1375 if (empty($conf->global->{strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS'})) {
1376 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref"><img class="photo'.$module.
'" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div></div>';
1378 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div>';
1381 $result .=
'</div>';
1383 $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);
1388 if ($withpicto != 2) {
1390 if ($option ==
'label') $name = $this->label;
1391 elseif ($option ==
'with_label') $name .= ' - ' . $this->label;
1395 $result .= $linkend;
1399 $hookmanager->initHooks(array($this->element . 'dao'));
1400 $parameters = array('
id'=>$this->
id, 'getnomurl' => &$result);
1401 $reshook = $hookmanager->executeHooks('
getNomUrl', $parameters, $this, $action);
1403 $result = $hookmanager->resPrint;
1405 $result .= $hookmanager->resPrint;
1418 return $this->
LibStatut($this->status, $mode);
1429 return $this->
LibStatut($this->status, $mode);
1443 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
1446 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'AssetInProgress');
1447 $this->labelStatus[self::STATUS_DISPOSED] = $langs->transnoentitiesnoconv(
'AssetDisposed');
1448 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'AssetInProgress');
1449 $this->labelStatusShort[self::STATUS_DISPOSED] = $langs->transnoentitiesnoconv(
'AssetDisposed');
1452 $statusType =
'status4';
1453 if ($status == self::STATUS_DISPOSED) {
1454 $statusType =
'status6';
1457 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
1468 $sql =
"SELECT rowid, date_creation as datec, tms as datem,";
1469 $sql .=
" fk_user_creat, fk_user_modif";
1470 $sql .=
" FROM ".MAIN_DB_PREFIX.$this->table_element.
" as t";
1471 $sql .=
" WHERE t.rowid = ".((int) $id);
1473 $result = $this->
db->query($sql);
1475 if ($this->
db->num_rows($result)) {
1476 $obj = $this->
db->fetch_object($result);
1477 $this->
id = $obj->rowid;
1479 $this->user_creation_id = $obj->fk_user_author;
1480 $this->user_validation_id = $obj->fk_user_valid;
1481 $this->user_cloture_id = $obj->fk_user_cloture;
1482 $this->date_creation = $this->
db->jdate($obj->datec);
1483 $this->date_modification = $this->
db->jdate($obj->datem);
1484 $this->date_validation = $this->
db->jdate($obj->datev);
1487 $this->
db->free($result);
1515 $this->lines = array();
1517 return $this->lines;
1527 global $langs, $conf;
1528 $langs->load(
"asset@asset");
1530 if (empty($conf->global->ASSET_ASSET_ADDON)) {
1531 $conf->global->ASSET_ASSET_ADDON =
'mod_asset_standard';
1534 if (!empty($conf->global->ASSET_ASSET_ADDON)) {
1537 $file = $conf->global->ASSET_ASSET_ADDON.
".php";
1538 $classname = $conf->global->ASSET_ASSET_ADDON;
1541 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1542 foreach ($dirmodels as $reldir) {
1546 $mybool |= @include_once $dir.$file;
1549 if ($mybool ===
false) {
1554 if (class_exists($classname)) {
1555 $obj =
new $classname();
1556 $numref = $obj->getNextValue($this);
1558 if ($numref !=
'' && $numref !=
'-1') {
1561 $this->error = $obj->error;
1566 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1570 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
getDefaultDatesForTransfer()
Return Default dates for transfer based on periodicity option in accountancy setup.
Class for AssetAccountancyCodes.
Class for AssetDepreciationOptions.
create(User $user, $notrigger=false)
Create object into database.
getNomUrl($withpicto=0, $option='', $maxlen=0, $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionaly the picto)
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, array $filter=array(), $filtermode='AND')
Load list of objects in memory from the database.
hasDepreciationLinesInBookkeeping()
If has depreciation lines in bookkeeping.
getLinesArray()
Create an array of lines.
dispose($user, $disposal_invoice_id, $notrigger=0)
Set dispose status.
createFromClone(User $user, $fromid)
Clone an object into another one.
calculationDepreciation()
Calculation depreciation lines (reversal and future) for each mode.
fetchLines()
Load object lines in memory from the database.
__construct(DoliDB $db)
Constructor.
info($id)
Load the info information in the object.
getLabelStatus($mode=0)
Return the label of the status.
update(User $user, $notrigger=false)
Update object into database.
fetch($id, $ref=null)
Load object in memory from the database.
LibStatut($status, $mode=0)
Return the status.
reopen($user, $notrigger=0)
Set back to validated status.
getLibStatut($mode=0)
Return the label of the status.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
addDepreciationLine($mode, $ref, $depreciation_date, $depreciation_ht, $cumulative_depreciation_ht, $accountancy_code_debit, $accountancy_code_credit)
Add depreciation line for a mode.
fetchDepreciationLines()
Fetch depreciation lines for each mode in $this->depreciation_lines (sort by depreciation date)
setLastCumulativeDepreciation($asset_depreciation_id)
Set last cumulative depreciation for each mode.
setDataFromAssetModel(User $user, $notrigger=false)
Set asset model.
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module.
Parent class of all other business classes (invoices, contracts, proposals, orders,...
add_object_linked($origin=null, $origin_id=null, $f_user=null, $notrigger=0)
Add an object link into llx_element_element.
getFieldList($alias='')
Function to concat keys of fields.
fetchCommon($id, $ref=null, $morewhere='')
Load object in memory from the database.
createCommon(User $user, $notrigger=false)
Create object into database.
deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid='', $f_user=null, $notrigger=0)
Delete all links between an object $this.
deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
Delete object in database.
setStatusCommon($user, $status, $notrigger=0, $triggercode='')
Set to a status.
initAsSpecimenCommon()
Initialise object with example values Id must be 0 if object instance is a specimen.
updateCommon(User $user, $notrigger=false)
Update object into database.
Class to manage Dolibarr database access.
Class to manage translations.
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.
dol_get_first_day($year, $month=1, $gm=false)
Return GMT time for first day of a month or year.
num_between_day($timestampStart, $timestampEnd, $lastday=0)
Function to return number of days between two dates (date must be UTC date !) Example: 2012-01-01 201...
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
dol_get_last_day($year, $month=12, $gm=false)
Return GMT time for last day of a month or year.
dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
getDolGlobalInt($key, $default=0)
Return dolibarr global constant int value.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
isModEnabled($module)
Is Dolibarr module enabled.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_getdate($timestamp, $fast=false, $forcetimezone='')
Return an array with locale date info.
if(!defined( 'CSRFCHECK_WITH_TOKEN'))
$conf db
API class for accounts.