30 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
39 public $fields = array(
40 'rowid' =>array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>10),
41 'fk_soc' =>array(
'type'=>
'integer:Societe:societe/class/societe.class.php',
'label'=>
'ThirdParty',
'enabled'=>
'isModEnabled("societe")',
'visible'=>-1,
'notnull'=>1,
'position'=>15),
42 'fk_projet' =>array(
'type'=>
'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)',
'label'=>
'Fk projet',
'enabled'=>
'isModEnabled("project")',
'visible'=>-1,
'position'=>20),
43 'fk_contrat' =>array(
'type'=>
'integer',
'label'=>
'Fk contrat',
'enabled'=>
'$conf->contrat->enabled',
'visible'=>-1,
'position'=>25),
44 'ref' =>array(
'type'=>
'varchar(30)',
'label'=>
'Ref',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'showoncombobox'=>1,
'position'=>30),
45 'ref_ext' =>array(
'type'=>
'varchar(255)',
'label'=>
'Ref ext',
'enabled'=>1,
'visible'=>0,
'position'=>35),
46 'ref_client' =>array(
'type'=>
'varchar(255)',
'label'=>
'RefCustomer',
'enabled'=>1,
'visible'=>-1,
'position'=>36),
47 'entity' =>array(
'type'=>
'integer',
'label'=>
'Entity',
'default'=>1,
'enabled'=>1,
'visible'=>-2,
'notnull'=>1,
'position'=>40,
'index'=>1),
48 'tms' =>array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>1,
'visible'=>-1,
'notnull'=>1,
'position'=>45),
49 'datec' =>array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>1,
'visible'=>-1,
'position'=>50),
50 'date_valid' =>array(
'type'=>
'datetime',
'label'=>
'DateValidation',
'enabled'=>1,
'visible'=>-1,
'position'=>55),
51 'datei' =>array(
'type'=>
'date',
'label'=>
'Datei',
'enabled'=>1,
'visible'=>-1,
'position'=>60),
52 'fk_user_author' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'Fk user author',
'enabled'=>1,
'visible'=>-1,
'position'=>65),
53 'fk_user_modif' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>1,
'visible'=>-2,
'notnull'=>-1,
'position'=>70),
54 'fk_user_valid' =>array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserValidation',
'enabled'=>1,
'visible'=>-1,
'position'=>75),
55 'dateo' =>array(
'type'=>
'date',
'label'=>
'Dateo',
'enabled'=>1,
'visible'=>-1,
'position'=>85),
56 'datee' =>array(
'type'=>
'date',
'label'=>
'Datee',
'enabled'=>1,
'visible'=>-1,
'position'=>90),
57 'datet' =>array(
'type'=>
'date',
'label'=>
'Datet',
'enabled'=>1,
'visible'=>-1,
'position'=>95),
58 'duree' =>array(
'type'=>
'double',
'label'=>
'Duree',
'enabled'=>1,
'visible'=>-1,
'position'=>100),
59 'description' =>array(
'type'=>
'html',
'label'=>
'Description',
'enabled'=>1,
'visible'=>-1,
'position'=>105,
'showoncombobox'=>2),
60 'note_private' =>array(
'type'=>
'html',
'label'=>
'NotePrivate',
'enabled'=>1,
'visible'=>0,
'position'=>110),
61 'note_public' =>array(
'type'=>
'html',
'label'=>
'NotePublic',
'enabled'=>1,
'visible'=>0,
'position'=>115),
62 'model_pdf' =>array(
'type'=>
'varchar(255)',
'label'=>
'Model pdf',
'enabled'=>1,
'visible'=>0,
'position'=>120),
63 'last_main_doc' =>array(
'type'=>
'varchar(255)',
'label'=>
'Last main doc',
'enabled'=>1,
'visible'=>-1,
'position'=>125),
64 'import_key' =>array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>1,
'visible'=>-2,
'position'=>130),
65 'extraparams' =>array(
'type'=>
'varchar(255)',
'label'=>
'Extraparams',
'enabled'=>1,
'visible'=>-1,
'position'=>135),
66 'fk_statut' =>array(
'type'=>
'integer',
'label'=>
'Fk statut',
'enabled'=>1,
'visible'=>-1,
'position'=>500),
72 public $element =
'fichinter';
77 public $table_element =
'fichinter';
82 public $fk_element =
'fk_fichinter';
87 public $table_element_line =
'fichinterdet';
92 public $picto =
'intervention';
143 public $fk_contrat = 0;
148 public $fk_project = 0;
159 public $extraparams = array();
164 public $lines = array();
211 $sql =
"SELECT count(fi.rowid) as nb";
212 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as fi";
213 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe as s ON fi.fk_soc = s.rowid";
214 if (empty($user->rights->societe->client->voir) && !$user->socid) {
215 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"societe_commerciaux as sc ON s.rowid = sc.fk_soc";
216 $sql .=
" WHERE sc.fk_user = ".((int) $user->id);
219 $sql .=
" ".$clause.
" fi.entity IN (".
getEntity(
'intervention').
")";
221 $resql = $this->db->query(
$sql);
223 while ($obj = $this->db->fetch_object($resql)) {
224 $this->nb[
"interventions"] = $obj->nb;
226 $this->db->free($resql);
230 $this->error = $this->db->error();
242 public function create($user, $notrigger = 0)
244 global $conf, $langs;
251 if (!empty($this->ref)) {
254 $this->error =
'ErrorRefAlreadyExists';
255 dol_syslog(get_class($this).
"::create ".$this->error, LOG_WARNING);
256 $this->db->rollback();
260 if (!is_numeric($this->duration)) {
263 if (isset($this->ref_client)) {
264 $this->ref_client = trim($this->ref_client);
267 if ($this->socid <= 0) {
268 $this->error =
'ErrorFicheinterCompanyDoesNotExist';
269 dol_syslog(get_class($this).
"::create ".$this->error, LOG_ERR);
274 $result = $soc->fetch($this->socid);
280 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"fichinter (";
284 $sql .=
", ref_client";
286 $sql .=
", fk_user_author";
287 $sql .=
", fk_user_modif";
288 $sql .=
", description";
289 $sql .=
", model_pdf";
290 $sql .=
", fk_projet";
291 $sql .=
", fk_contrat";
292 $sql .=
", fk_statut";
293 $sql .=
", note_private";
294 $sql .=
", note_public";
297 $sql .= $this->socid;
298 $sql .=
", '".$this->db->idate($now).
"'";
299 $sql .=
", '".$this->db->escape($this->ref).
"'";
300 $sql .=
", ".($this->ref_client ?
"'".$this->db->escape($this->ref_client).
"'" :
"null");
301 $sql .=
", ".((int) $conf->entity);
302 $sql .=
", ".((int) $user->id);
303 $sql .=
", ".((int) $user->id);
304 $sql .=
", ".($this->description ?
"'".$this->db->escape($this->
description).
"'" :
"null");
305 $sql .=
", '".$this->db->escape($this->model_pdf).
"'";
306 $sql .=
", ".($this->fk_project ? ((int) $this->fk_project) : 0);
307 $sql .=
", ".($this->fk_contrat ? ((int) $this->fk_contrat) : 0);
308 $sql .=
", ".((int) $this->statut);
309 $sql .=
", ".($this->note_private ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
310 $sql .=
", ".($this->note_public ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
313 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
314 $result = $this->db->query(
$sql);
316 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
"fichinter");
319 $this->ref =
'(PROV'.$this->id.
')';
320 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"fichinter SET ref='".$this->db->escape($this->ref).
"' WHERE rowid=".((int) $this->
id);
322 dol_syslog(get_class($this).
"::create", LOG_DEBUG);
323 $resql = $this->db->query(
$sql);
337 if (!$error && $this->origin && $this->origin_id) {
345 if (!$error && !$notrigger) {
347 $result = $this->
call_trigger(
'FICHINTER_CREATE', $user);
358 $this->db->rollback();
359 $this->error = join(
',', $this->errors);
360 dol_syslog(get_class($this).
"::create ".$this->error, LOG_ERR);
364 $this->error = $this->db->error();
365 $this->db->rollback();
377 public function update($user, $notrigger = 0)
381 if (!is_numeric($this->duration)) {
385 $this->fk_project = 0;
387 if (isset($this->ref_client)) {
388 $this->ref_client = trim($this->ref_client);
395 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter SET ";
397 $sql .=
", duree = ".((int) $this->duration);
398 $sql .=
", ref_client = ".($this->ref_client ?
"'".$this->db->escape($this->ref_client).
"'" :
"null");
399 $sql .=
", fk_projet = ".((int) $this->fk_project);
400 $sql .=
", note_private = ".($this->note_private ?
"'".$this->db->escape($this->note_private).
"'" :
"null");
401 $sql .=
", note_public = ".($this->note_public ?
"'".$this->db->escape($this->note_public).
"'" :
"null");
402 $sql .=
", fk_user_modif = ".((int) $user->id);
403 $sql .=
" WHERE rowid = ".((int) $this->
id);
405 dol_syslog(get_class($this).
"::update", LOG_DEBUG);
406 if ($this->db->query(
$sql)) {
414 if (!$error && !$notrigger) {
416 $result = $this->
call_trigger(
'FICHINTER_MODIFY', $user);
418 $error++; $this->db->rollback();
return -1;
426 $this->error = $this->db->error();
427 $this->db->rollback();
439 public function fetch($rowid, $ref =
'')
441 $sql =
"SELECT f.rowid, f.ref, f.ref_client, f.description, f.fk_soc, f.fk_statut,";
442 $sql .=
" f.datec, f.dateo, f.datee, f.datet, f.fk_user_author,";
443 $sql .=
" f.date_valid as datev,";
444 $sql .=
" f.tms as datem,";
445 $sql .=
" f.duree, f.fk_projet as fk_project, f.note_public, f.note_private, f.model_pdf, f.last_main_doc, f.extraparams, fk_contrat, f.entity as entity";
446 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as f";
448 $sql .=
" WHERE f.entity IN (".getEntity(
'intervention').
")";
449 $sql .=
" AND f.ref = '".$this->db->escape($ref).
"'";
451 $sql .=
" WHERE f.rowid = ".((int) $rowid);
454 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
455 $resql = $this->db->query(
$sql);
457 if ($this->db->num_rows($resql)) {
458 $obj = $this->db->fetch_object($resql);
460 $this->
id = $obj->rowid;
461 $this->
ref = $obj->ref;
462 $this->ref_client = $obj->ref_client;
464 $this->socid = $obj->fk_soc;
465 $this->statut = $obj->fk_statut;
466 $this->duration = $obj->duree;
467 $this->datec = $this->db->jdate($obj->datec);
468 $this->dateo = $this->db->jdate($obj->dateo);
469 $this->datee = $this->db->jdate($obj->datee);
470 $this->datet = $this->db->jdate($obj->datet);
471 $this->datev = $this->db->jdate($obj->datev);
472 $this->datem = $this->db->jdate($obj->datem);
473 $this->fk_project = $obj->fk_project;
474 $this->note_public = $obj->note_public;
475 $this->note_private = $obj->note_private;
476 $this->model_pdf = $obj->model_pdf;
477 $this->modelpdf = $obj->model_pdf;
478 $this->fk_contrat = $obj->fk_contrat;
479 $this->entity = $obj->entity;
481 $this->user_creation = $obj->fk_user_author;
483 $this->extraparams = (array) json_decode($obj->extraparams,
true);
485 $this->last_main_doc = $obj->last_main_doc;
487 if ($this->statut == 0) {
488 $this->brouillon = 1;
501 $this->db->free($resql);
507 $this->error = $this->db->lasterror();
523 if ($this->statut <= self::STATUS_DRAFT) {
527 dol_syslog(get_class($this).
"::setDraft", LOG_DEBUG);
533 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
534 $sql .=
" SET fk_statut = ".self::STATUS_DRAFT;
535 $sql .=
" WHERE rowid = ".((int) $this->
id);
537 $resql = $this->db->query(
$sql);
541 $result = $this->
call_trigger(
'FICHINTER_UNVALIDATE', $user);
552 $this->db->rollback();
556 $this->db->rollback();
557 $this->error = $this->db->lasterror();
572 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
576 if ($this->statut != 1) {
582 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
589 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
590 $sql .=
" SET fk_statut = 1";
591 $sql .=
", ref = '".$this->db->escape($num).
"'";
592 $sql .=
", date_valid = '".$this->db->idate($now).
"'";
593 $sql .=
", fk_user_valid = ".($user->id > 0 ? (int) $user->id :
"null");
594 $sql .=
" WHERE rowid = ".((int) $this->
id);
595 $sql .=
" AND entity = ".((int) $conf->entity);
596 $sql .=
" AND fk_statut = 0";
598 dol_syslog(get_class($this).
"::setValid", LOG_DEBUG);
599 $resql = $this->db->query(
$sql);
605 if (!$error && !$notrigger) {
607 $result = $this->
call_trigger(
'FICHINTER_VALIDATE', $user);
615 $this->oldref = $this->ref;
618 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
619 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
622 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'ficheinter/".$this->db->escape($this->newref).
"'";
623 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'ficheinter/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
624 $resql = $this->db->query(
$sql);
626 $error++; $this->error = $this->db->lasterror();
632 $dirsource = $conf->ficheinter->dir_output.
'/'.$oldref;
633 $dirdest = $conf->ficheinter->dir_output.
'/'.$newref;
634 if (!$error && file_exists($dirsource)) {
635 dol_syslog(get_class($this).
"::setValid rename dir ".$dirsource.
" into ".$dirdest);
637 if (@rename($dirsource, $dirdest)) {
640 $listoffiles =
dol_dir_list($conf->ficheinter->dir_output.
'/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
641 foreach ($listoffiles as $fileentry) {
642 $dirsource = $fileentry[
'name'];
643 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
644 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
645 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
646 @rename($dirsource, $dirdest);
657 $this->brouillon = 0;
658 $this->date_validation = $now;
662 $this->db->rollback();
663 dol_syslog(get_class($this).
"::setValid ".$this->error, LOG_ERR);
682 $this->author =
new User($db);
683 $this->author->fetch($this->user_creation);
685 $thm = $this->author->thm;
687 foreach ($this->lines as $line) {
688 $amount += ($line->duration / 60 / 60 * $thm);
706 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
710 $outputlangs->load(
"interventions");
715 if (!empty($this->model_pdf)) {
716 $modele = $this->model_pdf;
717 } elseif (!empty($this->modelpdf)) {
718 $modele = $this->modelpdf;
719 } elseif (!empty($conf->global->FICHEINTER_ADDON_PDF)) {
720 $modele = $conf->global->FICHEINTER_ADDON_PDF;
724 $modelpath =
"core/modules/fichinter/doc/";
726 return $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
737 return $this->
LibStatut((isset($this->statut) ? $this->statut : $this->status), $mode);
752 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
754 $langs->load(
"fichinter");
758 $this->labelStatus[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
762 $this->labelStatusShort[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
766 $statuscode =
'status'.$status;
767 if ($status == self::STATUS_BILLED || $status == self::STATUS_CLOSED) {
768 $statuscode =
'status6';
770 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statuscode, $mode);
782 global $conf, $langs;
784 $langs->load(
'fichinter');
787 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Intervention").
'</u>';
788 if (isset($this->status)) {
789 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
791 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
806 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $save_lastsearch_value = -1, $morecss =
'')
808 global $conf, $langs, $hookmanager;
810 if (!empty($conf->dol_no_mouse_hover)) {
817 'objecttype' => $this->element,
820 $classfortooltip =
'classfortooltip';
823 $classfortooltip =
'classforajaxtooltip';
824 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
830 $url = DOL_URL_ROOT.
'/fichinter/card.php?id='.$this->id;
832 if ($option !==
'nolink') {
834 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
835 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
836 $add_save_lastsearch_values = 1;
838 if ($add_save_lastsearch_values) {
839 $url .=
'&save_lastsearch_values=1';
844 if (empty($notooltip)) {
845 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
846 $label = $langs->trans(
"ShowIntervention");
847 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
849 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
850 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
852 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
855 if ($option ==
'nolink' || empty($url)) {
856 $linkstart =
'<span';
858 $linkstart =
'<a href="'.$url.
'"';
860 $linkstart .= $linkclose.
'>';
861 if ($option ==
'nolink' || empty($url)) {
862 $linkend =
'</span>';
867 $result .= $linkstart;
869 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
872 if ($withpicto != 2) {
873 $result .= $this->ref;
879 $hookmanager->initHooks(array(
'interventiondao'));
880 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
881 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
883 $result = $hookmanager->resPrint;
885 $result .= $hookmanager->resPrint;
901 global $conf, $db, $langs;
902 $langs->load(
"interventions");
904 if (!empty($conf->global->FICHEINTER_ADDON)) {
907 $file =
"mod_".$conf->global->FICHEINTER_ADDON.
".php";
908 $classname =
"mod_".$conf->global->FICHEINTER_ADDON;
911 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
913 foreach ($dirmodels as $reldir) {
917 $mybool |= @include_once $dir.$file;
920 if ($mybool ===
false) {
925 $obj =
new $classname();
927 $numref = $obj->getNextValue($soc, $this);
936 $langs->load(
"errors");
937 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_FICHEINTER_ADDON_NotDefined");
950 $sql =
"SELECT f.rowid,";
952 $sql .=
" f.tms as date_modification,";
953 $sql .=
" f.date_valid as datev,";
954 $sql .=
" f.fk_user_author,";
955 $sql .=
" f.fk_user_modif as fk_user_modification,";
956 $sql .=
" f.fk_user_valid";
957 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as f";
958 $sql .=
" WHERE f.rowid = ".((int) $id);
960 $resql = $this->db->query(
$sql);
962 if ($this->db->num_rows($resql)) {
963 $obj = $this->db->fetch_object($resql);
965 $this->
id = $obj->rowid;
967 $this->date_creation = $this->db->jdate($obj->datec);
968 $this->date_modification = $this->db->jdate($obj->date_modification);
969 $this->date_validation = $this->db->jdate($obj->datev);
971 $cuser =
new User($this->db);
972 $cuser->fetch($obj->fk_user_author);
973 $this->user_creation = $cuser;
975 if ($obj->fk_user_valid) {
976 $vuser =
new User($this->db);
977 $vuser->fetch($obj->fk_user_valid);
978 $this->user_validation = $vuser;
980 if ($obj->fk_user_modification) {
981 $muser =
new User($this->db);
982 $muser->fetch($obj->fk_user_modification);
983 $this->user_modification = $muser;
986 $this->db->free($resql);
999 public function delete(
User $user, $notrigger = 0)
1001 global $conf, $langs;
1002 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1008 if (!$error && !$notrigger) {
1010 $result = $this->
call_trigger(
'FICHINTER_DELETE', $user);
1012 $error++; $this->db->rollback();
return -1;
1029 $this->error =
'ErrorFailToDeleteLinkedContact';
1035 $main = MAIN_DB_PREFIX.
'fichinterdet';
1036 $ef = $main.
"_extrafields";
1037 $sql =
"DELETE FROM $ef WHERE fk_object IN (SELECT rowid FROM $main WHERE fk_fichinter = ".((int) $this->
id).
")";
1039 $resql = $this->db->query(
$sql);
1046 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1047 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1049 $resql = $this->db->query(
$sql);
1065 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinter";
1066 $sql .=
" WHERE rowid = ".((int) $this->
id);
1069 $resql = $this->db->query(
$sql);
1081 if ($conf->ficheinter->dir_output) {
1082 $dir = $conf->ficheinter->dir_output.
"/".$fichinterref;
1083 $file = $conf->ficheinter->dir_output.
"/".$fichinterref.
"/".$fichinterref.
".pdf";
1084 if (file_exists($file)) {
1088 $langs->load(
"errors");
1089 $this->error = $langs->trans(
"ErrorFailToDeleteFile", $file);
1093 if (file_exists($dir)) {
1095 $langs->load(
"errors");
1096 $this->error = $langs->trans(
"ErrorFailToDeleteDir", $dir);
1104 $this->db->commit();
1107 $this->db->rollback();
1123 if ($user->rights->ficheinter->creer) {
1124 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1125 $sql .=
" SET datei = '".$this->db->idate($date_delivery).
"'";
1126 $sql .=
" WHERE rowid = ".((int) $this->
id);
1127 $sql .=
" AND fk_statut = 0";
1129 if ($this->db->query(
$sql)) {
1130 $this->date_delivery = $date_delivery;
1133 $this->error = $this->db->error();
1134 dol_syslog(
"Fichinter::set_date_delivery Erreur SQL");
1153 if ($user->rights->ficheinter->creer) {
1154 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1155 $sql .=
" SET description = '".$this->db->escape($description).
"',";
1156 $sql .=
" fk_user_modif = ".$user->id;
1157 $sql .=
" WHERE rowid = ".((int) $this->
id);
1159 if ($this->db->query(
$sql)) {
1163 $this->error = $this->db->error();
1164 dol_syslog(
"Fichinter::set_description Erreur SQL");
1184 if ($user->rights->ficheinter->creer) {
1185 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1186 $sql .=
" SET fk_contrat = ".((int) $contractid);
1187 $sql .=
" WHERE rowid = ".((int) $this->
id);
1189 if ($this->db->query(
$sql)) {
1190 $this->fk_contrat = $contractid;
1193 $this->error = $this->db->error();
1212 global $hookmanager;
1219 foreach ($this->lines as $line) {
1220 $line->fetch_optionals();
1224 $objFrom = clone $this;
1227 if (!empty($socid) && $socid != $this->socid) {
1228 $objsoc =
new Societe($this->db);
1230 if ($objsoc->fetch($socid) > 0) {
1231 $this->socid = $objsoc->id;
1234 $this->fk_project =
'';
1235 $this->fk_delivery_address =
'';
1246 $this->user_author_id = $user->id;
1247 $this->user_valid = 0;
1248 $this->date_creation =
'';
1249 $this->date_validation =
'';
1250 $this->ref_client =
'';
1253 $this->context[
'createfromclone'] =
'createfromclone';
1254 $result = $this->
create($user);
1261 foreach ($this->lines as $line) {
1262 $this->
addline($user, $this->
id, $line->desc, $line->datei, $line->duration, $line->array_options);
1266 if (is_object($hookmanager)) {
1267 $parameters = array(
'objFrom'=>$objFrom);
1269 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $this, $action);
1277 unset($this->context[
'createfromclone']);
1281 $this->db->commit();
1284 $this->db->rollback();
1301 public function addline($user, $fichinterid, $desc, $date_intervention, $duration, $array_options =
'')
1303 dol_syslog(get_class($this).
"::addline $fichinterid, $desc, $date_intervention, $duration");
1305 if ($this->statut == self::STATUS_DRAFT) {
1311 $line->fk_fichinter = $fichinterid;
1312 $line->desc = $desc;
1313 $line->date = $date_intervention;
1314 $line->datei = $date_intervention;
1315 $line->duration = $duration;
1317 if (is_array($array_options) && count($array_options) > 0) {
1318 $line->array_options = $array_options;
1321 $result = $line->insert($user);
1324 $this->db->commit();
1327 $this->error = $this->db->error();
1328 $this->db->rollback();
1352 $this->
ref =
'SPECIMEN';
1353 $this->ref_client =
'SPECIMEN CLIENT';
1354 $this->specimen = 1;
1356 $this->datec = $now;
1357 $this->note_private =
'Private note';
1358 $this->note_public =
'SPECIMEN';
1359 $this->duration = 0;
1362 while ($xnbp < $nbp) {
1364 $line->desc = $langs->trans(
"Description").
" ".$xnbp;
1365 $line->date = ($now - 3600 * (1 + $xnbp));
1366 $line->datei = ($now - 3600 * (1 + $xnbp));
1367 $line->duration = 600;
1368 $line->fk_fichinter = 0;
1369 $this->lines[$xnbp] = $line;
1372 $this->duration += $line->duration;
1385 $this->lines = array();
1387 $sql =
"SELECT rowid, fk_fichinter, description, duree, date, rang";
1388 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1389 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1390 $sql .=
" ORDER BY rang ASC, date ASC";
1392 dol_syslog(get_class($this).
"::fetch_lines", LOG_DEBUG);
1394 $resql = $this->db->query(
$sql);
1396 $num = $this->db->num_rows($resql);
1399 $objp = $this->db->fetch_object($resql);
1402 $line->id = $objp->rowid;
1403 $line->fk_fichinter = $objp->fk_fichinter;
1404 $line->desc = $objp->description;
1405 $line->duration = $objp->duree;
1407 $line->qty = round($objp->duree / 3600, 2);
1408 $line->date = $this->db->jdate($objp->date);
1409 $line->datei = $this->db->jdate($objp->date);
1410 $line->rang = $objp->rang;
1411 $line->product_type = 1;
1412 $line->fetch_optionals();
1414 $this->lines[$i] = $line;
1417 $this->db->free($resql);
1421 $this->error = $this->db->error();
1454 if (!empty($user->rights->ficheinter->creer)) {
1461 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ref_client = ".(empty($ref_client) ?
'NULL' :
"'".$this->db->escape($ref_client).
"'");
1462 $sql .=
" WHERE rowid = ".((int) $this->
id);
1464 dol_syslog(__METHOD__.
' $this->id='.$this->id.
', ref_client='.$ref_client, LOG_DEBUG);
1465 $resql = $this->db->query(
$sql);
1467 $this->errors[] = $this->db->error();
1472 $this->ref_client = $ref_client;
1475 if (!$notrigger && empty($error)) {
1477 $result = $this->
call_trigger(
'FICHINTER_MODIFY', $user);
1485 $this->db->commit();
1488 foreach ($this->errors as $errmsg) {
1489 dol_syslog(__METHOD__.
' Error: '.$errmsg, LOG_ERR);
1490 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1492 $this->db->rollback();
1511 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1513 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1514 $return .=
'<div class="info-box info-box-sm">';
1515 $return .=
'<span class="info-box-icon bg-infobox-action">';
1517 $return .=
'</span>';
1518 $return .=
'<div class="info-box-content">';
1519 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
1520 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1521 if (!empty($arraydata[
'thirdparty'])) {
1522 $tmpthirdparty = $arraydata[
'thirdparty'];
1523 $return .=
'<br><span class="info-box-label">'.$tmpthirdparty->getNomUrl(1).
'</span>';
1525 if (property_exists($this,
'duration')) {
1526 $return .=
'<br><span class="info-box-label ">'.$langs->trans(
"Duration").
' : '.
convertSecondToTime($this->duration,
'allhourmin').
'</span>';
1528 if (method_exists($this,
'getLibStatut')) {
1529 $return .=
'<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).
'</div>';
1531 $return .=
'</div>';
1532 $return .=
'</div>';
1533 $return .=
'</div>';
1557 public $fk_fichinter;
1579 public $element =
'fichinterdet';
1584 public $table_element =
'fichinterdet';
1589 public $fk_element =
'fk_fichinter';
1611 dol_syslog(
"FichinterLigne::fetch", LOG_DEBUG);
1613 $sql =
'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang, ft.date';
1614 $sql .=
' FROM '.MAIN_DB_PREFIX.
'fichinterdet as ft';
1615 $sql .=
' WHERE ft.rowid = '.((int) $rowid);
1617 $resql = $this->db->query(
$sql);
1619 $objp = $this->db->fetch_object($resql);
1620 $this->
rowid = $objp->rowid;
1621 $this->
id = $objp->rowid;
1622 $this->fk_fichinter = $objp->fk_fichinter;
1623 $this->date = $this->db->jdate($objp->date);
1624 $this->datei = $this->db->jdate($objp->date);
1625 $this->desc = $objp->description;
1626 $this->duration = $objp->duree;
1627 $this->rang = $objp->rang;
1629 $this->db->free($resql);
1635 $this->error = $this->db->error().
' sql='.
$sql;
1647 public function insert($user, $notrigger = 0)
1651 dol_syslog(
"FichinterLigne::insert rang=".$this->rang);
1653 if (empty($this->date) && !empty($this->datei)) {
1654 $this->date = $this->datei;
1659 $rangToUse = $this->rang;
1660 if ($rangToUse == -1) {
1662 $sql =
'SELECT max(rang) as max FROM '.MAIN_DB_PREFIX.
'fichinterdet';
1663 $sql .=
' WHERE fk_fichinter = '.((int) $this->fk_fichinter);
1664 $resql = $this->db->query(
$sql);
1666 $obj = $this->db->fetch_object($resql);
1667 $rangToUse = $obj->max + 1;
1670 $this->db->rollback();
1676 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'fichinterdet';
1677 $sql .=
' (fk_fichinter, description, date, duree, rang)';
1678 $sql .=
" VALUES (".((int) $this->fk_fichinter).
",";
1679 $sql .=
" '".$this->db->escape($this->desc).
"',";
1680 $sql .=
" '".$this->db->idate($this->date).
"',";
1681 $sql .=
" ".((int) $this->duration).
",";
1682 $sql .=
' '.((int) $rangToUse);
1685 dol_syslog(
"FichinterLigne::insert", LOG_DEBUG);
1686 $resql = $this->db->query(
$sql);
1688 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'fichinterdet');
1689 $this->
rowid = $this->id;
1702 $this->rang = $rangToUse;
1706 $result = $this->
call_trigger(
'LINEFICHINTER_CREATE', $user);
1715 $this->db->commit();
1718 $this->db->rollback();
1722 $this->error = $this->db->error().
" sql=".
$sql;
1723 $this->db->rollback();
1736 public function update($user, $notrigger = 0)
1740 if (empty($this->date) && !empty($this->datei)) {
1741 $this->date = $this->datei;
1747 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinterdet SET";
1748 $sql .=
" description = '".$this->db->escape($this->desc).
"',";
1749 $sql .=
" date = '".$this->db->idate($this->date).
"',";
1750 $sql .=
" duree = ".((int) $this->duration).
",";
1751 $sql .=
" rang = ".((int) $this->rang);
1752 $sql .=
" WHERE rowid = ".((int) $this->
id);
1754 dol_syslog(
"FichinterLigne::update", LOG_DEBUG);
1755 $resql = $this->db->query(
$sql);
1768 $result = $this->
call_trigger(
'LINEFICHINTER_MODIFY', $user);
1777 $this->db->commit();
1780 $this->error = $this->db->lasterror();
1781 $this->db->rollback();
1785 $this->error = $this->db->lasterror();
1786 $this->db->rollback();
1804 $sql =
"SELECT SUM(duree) as total_duration, min(date) as dateo, max(date) as datee ";
1805 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1806 $sql .=
" WHERE fk_fichinter=".((int) $this->fk_fichinter);
1808 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1809 $resql = $this->db->query(
$sql);
1811 $obj = $this->db->fetch_object($resql);
1812 $total_duration = 0;
1813 if (!empty($obj->total_duration)) {
1814 $total_duration = $obj->total_duration;
1817 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
1818 $sql .=
" SET duree = ".((int) $total_duration);
1819 $sql .=
" , dateo = ".(!empty($obj->dateo) ?
"'".$this->db->escape($obj->dateo).
"'" :
"null");
1820 $sql .=
" , datee = ".(!empty($obj->datee) ?
"'".$this->db->escape($obj->datee).
"'" :
"null");
1821 $sql .=
" WHERE rowid = ".((int) $this->fk_fichinter);
1823 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1824 $resql = $this->db->query(
$sql);
1826 $this->db->commit();
1829 $this->error = $this->db->error();
1830 $this->db->rollback();
1834 $this->error = $this->db->error();
1835 $this->db->rollback();
1849 global $langs, $conf;
1853 if ($this->statut == 0) {
1854 dol_syslog(get_class($this).
"::deleteline lineid=".$this->
id);
1860 $this->db->rollback();
1864 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet WHERE rowid = ".((int) $this->
id);
1865 $resql = $this->db->query(
$sql);
1872 $result = $this->
call_trigger(
'LINEFICHINTER_DELETE', $user);
1874 $error++; $this->db->rollback();
return -1;
1879 $this->db->commit();
1882 $this->db->rollback();
1886 $this->error = $this->db->error().
" sql=".
$sql;
1887 $this->db->rollback();
Parent class of all other business classes (invoices, contracts, proposals, orders,...
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
deleteEcmFiles($mode=0)
Delete related files of object in database.
add_object_linked($origin=null, $origin_id=null, $f_user=null, $notrigger=0)
Add an object link into llx_element_element.
commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
Common function for all objects extending CommonObject for generating documents.
setErrorsFromObject($object)
setErrorsFromObject
static isExistingObject($element, $id, $ref='', $ref_ext='')
Check an object id/ref exists If you don't need/want to instantiate object and just need to know if o...
deleteObjectLinked($sourceid=null, $sourcetype='', $targetid=null, $targettype='', $rowid='', $f_user=null, $notrigger=0)
Delete all links between an object $this.
deleteExtraFields()
Delete all extra fields values for the current object.
static commonReplaceThirdparty(DoliDB $dbs, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
Function used to replace a thirdparty id with another one.
insertExtraFields($trigger='', $userused=null)
Add/Update all extra fields values for the current object.
delete_linked_contact($source='', $code='')
Delete all links between an object $this and all its contacts in llx_element_contact.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
Class to manage interventions.
const STATUS_BILLED
Billed.
addline($user, $fichinterid, $desc, $date_intervention, $duration, $array_options='')
Adding a line of intervention into data base.
initAsSpecimen()
Initialise an instance with random values.
getLibStatut($mode=0)
Returns the label status.
update($user, $notrigger=0)
Update an intervention.
createFromClone(User $user, $socid=0)
Load an object from its id and create a new one in database.
static replaceThirdparty(DoliDB $dbs, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
set_date_delivery($user, $date_delivery)
Defines a delivery date of intervention.
const STATUS_DRAFT
Draft status.
create($user, $notrigger=0)
Create an intervention into data base.
set_description($user, $description)
Define the label of the intervention.
getTooltipContentArray($params)
getTooltipContentArray
getKanbanView($option='', $arraydata=null)
Return clicable link of object (with eventually picto)
const STATUS_VALIDATED
Validated status.
const STATUS_CLOSED
Closed.
setDraft($user)
Set status to draft.
getNextNumRef($soc)
Returns the next non used reference of intervention depending on the module numbering assets within F...
getAmount()
Returns amount based on user thm.
fetch($rowid, $ref='')
Fetch a intervention.
setRefClient($user, $ref_client, $notrigger=0)
Set customer reference number.
set_contrat($user, $contractid)
Link intervention to a contract.
LibStatut($status, $mode=0)
Returns the label of a status.
setValid($user, $notrigger=0)
Validate a intervention.
getNomUrl($withpicto=0, $option='', $notooltip=0, $save_lastsearch_value=-1, $morecss='')
Return clicable name (with picto eventually)
load_state_board()
Load indicators into this->nb for board.
__construct($db)
Constructor.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
info($id)
Load information on object.
fetch_lines()
Load array lines ->lines.
Class to manage intervention lines.
fetch($rowid)
Retrieve the line of intervention.
update_total()
Update total duration into llx_fichinter.
update($user, $notrigger=0)
Update intervention into database.
deleteline($user, $notrigger=0)
Delete a intervention line.
__construct($db)
Constructor.
insert($user, $notrigger=0)
Insert the line into database.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
if(isModEnabled('facture') && $user->hasRight('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') && $user->hasRight('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)) $sql
Social contributions to pay.
convertSecondToTime($iSecond, $format='all', $lengthOfDay=86400, $lengthOfWeek=7)
Return, in clear text, value of a number of seconds in days, hours and minutes.
print *****$script_file(".$version.") pid cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
print *****$script_file(".$version.") pid c cd cd cd description as p label as s rowid
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
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_delete_preview($object)
Delete all preview files linked to object instance.
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_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
dol_now($mode='auto')
Return date for now.
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)
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
dolGetStatus($statusLabel='', $statusLabelShort='', $html='', $statusType='status0', $displayMode=0, $url='', $params=array())
Output the badge of a status.
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_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
getEntity($element, $shared=1, $currentobject=null)
Get list of entity id to use.