30require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
31require_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 ";
396 $sql .=
"description = '".$this->db->escape($this->
description).
"'";
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;
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';
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) $this->entity);
597 $sql .=
" AND fk_statut = 0";
599 dol_syslog(get_class($this).
"::setValid", LOG_DEBUG);
600 $resql = $this->db->query($sql);
606 if (!$error && !$notrigger) {
608 $result = $this->
call_trigger(
'FICHINTER_VALIDATE', $user);
616 $this->oldref = $this->ref;
619 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
620 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
623 $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).
"'";
624 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'ficheinter/".$this->db->escape($this->
ref).
"' and entity = ".((int) $this->entity);
625 $resql = $this->db->query($sql);
627 $error++; $this->error = $this->db->lasterror();
629 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'ficheinter/".$this->db->escape($this->newref).
"'";
630 $sql .=
" WHERE filepath = 'ficheinter/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
631 $resql = $this->db->query($sql);
633 $error++; $this->error = $this->db->lasterror();
639 $dirsource = $conf->ficheinter->dir_output.
'/'.$oldref;
640 $dirdest = $conf->ficheinter->dir_output.
'/'.$newref;
641 if (!$error && file_exists($dirsource)) {
642 dol_syslog(get_class($this).
"::setValid rename dir ".$dirsource.
" into ".$dirdest);
644 if (@rename($dirsource, $dirdest)) {
647 $listoffiles =
dol_dir_list($conf->ficheinter->dir_output.
'/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
648 foreach ($listoffiles as $fileentry) {
649 $dirsource = $fileentry[
'name'];
650 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
651 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
652 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
653 @rename($dirsource, $dirdest);
664 $this->brouillon = 0;
665 $this->date_validation = $now;
669 $this->db->rollback();
670 dol_syslog(get_class($this).
"::setValid ".$this->error, LOG_ERR);
689 $this->author =
new User($db);
690 $this->author->fetch($this->user_creation);
692 $thm = $this->author->thm;
694 foreach ($this->lines as $line) {
695 $amount += ($line->duration / 60 / 60 * $thm);
713 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
717 $outputlangs->load(
"interventions");
722 if (!empty($this->model_pdf)) {
723 $modele = $this->model_pdf;
724 } elseif (!empty($this->modelpdf)) {
725 $modele = $this->modelpdf;
726 } elseif (!empty($conf->global->FICHEINTER_ADDON_PDF)) {
727 $modele = $conf->global->FICHEINTER_ADDON_PDF;
731 $modelpath =
"core/modules/fichinter/doc/";
733 return $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
759 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
761 $langs->load(
"fichinter");
765 $this->labelStatus[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
769 $this->labelStatusShort[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
773 $statuscode =
'status'.$status;
774 if ($status == self::STATUS_BILLED || $status == self::STATUS_CLOSED) {
775 $statuscode =
'status6';
777 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statuscode, $mode);
789 global $conf, $langs;
791 $langs->load(
'fichinter');
794 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Intervention").
'</u>';
795 if (isset($this->status)) {
796 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
798 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
813 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $save_lastsearch_value = -1, $morecss =
'')
815 global $conf, $langs, $hookmanager;
817 if (!empty($conf->dol_no_mouse_hover)) {
824 'objecttype' => $this->element,
827 $classfortooltip =
'classfortooltip';
830 $classfortooltip =
'classforajaxtooltip';
831 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
837 $url = DOL_URL_ROOT.
'/fichinter/card.php?id='.$this->id;
839 if ($option !==
'nolink') {
841 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
842 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
843 $add_save_lastsearch_values = 1;
845 if ($add_save_lastsearch_values) {
846 $url .=
'&save_lastsearch_values=1';
851 if (empty($notooltip)) {
852 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
853 $label = $langs->trans(
"ShowIntervention");
854 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
856 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
857 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
859 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
862 if ($option ==
'nolink' || empty($url)) {
863 $linkstart =
'<span';
865 $linkstart =
'<a href="'.$url.
'"';
867 $linkstart .= $linkclose.
'>';
868 if ($option ==
'nolink' || empty($url)) {
869 $linkend =
'</span>';
874 $result .= $linkstart;
876 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'"'), 0, 0, $notooltip ? 0 : 1);
879 if ($withpicto != 2) {
880 $result .= $this->ref;
886 $hookmanager->initHooks(array(
'interventiondao'));
887 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
888 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
890 $result = $hookmanager->resPrint;
892 $result .= $hookmanager->resPrint;
908 global $conf, $db, $langs;
909 $langs->load(
"interventions");
911 if (!empty($conf->global->FICHEINTER_ADDON)) {
914 $file =
"mod_".$conf->global->FICHEINTER_ADDON.
".php";
915 $classname =
"mod_".$conf->global->FICHEINTER_ADDON;
918 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
920 foreach ($dirmodels as $reldir) {
924 $mybool |= @include_once $dir.$file;
927 if ($mybool ===
false) {
932 $obj =
new $classname();
934 $numref = $obj->getNextValue($soc, $this);
943 $langs->load(
"errors");
944 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_FICHEINTER_ADDON_NotDefined");
957 $sql =
"SELECT f.rowid,";
959 $sql .=
" f.tms as date_modification,";
960 $sql .=
" f.date_valid as datev,";
961 $sql .=
" f.fk_user_author,";
962 $sql .=
" f.fk_user_modif as fk_user_modification,";
963 $sql .=
" f.fk_user_valid";
964 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as f";
965 $sql .=
" WHERE f.rowid = ".((int) $id);
967 $resql = $this->db->query($sql);
969 if ($this->db->num_rows($resql)) {
970 $obj = $this->db->fetch_object($resql);
972 $this->
id = $obj->rowid;
974 $this->date_creation = $this->db->jdate($obj->datec);
975 $this->date_modification = $this->db->jdate($obj->date_modification);
976 $this->date_validation = $this->db->jdate($obj->datev);
978 $cuser =
new User($this->db);
979 $cuser->fetch($obj->fk_user_author);
980 $this->user_creation = $cuser;
982 if ($obj->fk_user_valid) {
983 $vuser =
new User($this->db);
984 $vuser->fetch($obj->fk_user_valid);
985 $this->user_validation = $vuser;
987 if ($obj->fk_user_modification) {
988 $muser =
new User($this->db);
989 $muser->fetch($obj->fk_user_modification);
990 $this->user_modification = $muser;
993 $this->db->free($resql);
1006 public function delete(
User $user, $notrigger = 0)
1008 global $conf, $langs;
1009 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1015 if (!$error && !$notrigger) {
1017 $result = $this->
call_trigger(
'FICHINTER_DELETE', $user);
1019 $error++; $this->db->rollback();
return -1;
1036 $this->error =
'ErrorFailToDeleteLinkedContact';
1042 $main = MAIN_DB_PREFIX.
'fichinterdet';
1043 $ef = $main.
"_extrafields";
1044 $sql =
"DELETE FROM $ef WHERE fk_object IN (SELECT rowid FROM $main WHERE fk_fichinter = ".((int) $this->
id).
")";
1046 $resql = $this->db->query($sql);
1053 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1054 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1056 $resql = $this->db->query($sql);
1072 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinter";
1073 $sql .=
" WHERE rowid = ".((int) $this->
id);
1076 $resql = $this->db->query($sql);
1088 if ($conf->ficheinter->dir_output) {
1089 $dir = $conf->ficheinter->dir_output.
"/".$fichinterref;
1090 $file = $conf->ficheinter->dir_output.
"/".$fichinterref.
"/".$fichinterref.
".pdf";
1091 if (file_exists($file)) {
1095 $langs->load(
"errors");
1096 $this->error = $langs->trans(
"ErrorFailToDeleteFile", $file);
1100 if (file_exists($dir)) {
1102 $langs->load(
"errors");
1103 $this->error = $langs->trans(
"ErrorFailToDeleteDir", $dir);
1111 $this->db->commit();
1114 $this->db->rollback();
1130 if ($user->rights->ficheinter->creer) {
1131 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1132 $sql .=
" SET datei = '".$this->db->idate($date_delivery).
"'";
1133 $sql .=
" WHERE rowid = ".((int) $this->
id);
1134 $sql .=
" AND fk_statut = 0";
1136 if ($this->db->query($sql)) {
1137 $this->date_delivery = $date_delivery;
1140 $this->error = $this->db->error();
1141 dol_syslog(
"Fichinter::set_date_delivery Erreur SQL");
1160 if ($user->rights->ficheinter->creer) {
1161 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1162 $sql .=
" SET description = '".$this->db->escape($description).
"',";
1163 $sql .=
" fk_user_modif = ".$user->id;
1164 $sql .=
" WHERE rowid = ".((int) $this->
id);
1166 if ($this->db->query($sql)) {
1170 $this->error = $this->db->error();
1171 dol_syslog(
"Fichinter::set_description Erreur SQL");
1191 if ($user->rights->ficheinter->creer) {
1192 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1193 $sql .=
" SET fk_contrat = ".((int) $contractid);
1194 $sql .=
" WHERE rowid = ".((int) $this->
id);
1196 if ($this->db->query($sql)) {
1197 $this->fk_contrat = $contractid;
1200 $this->error = $this->db->error();
1219 global $hookmanager;
1226 foreach ($this->lines as $line) {
1227 $line->fetch_optionals();
1231 $objFrom = clone $this;
1234 if (!empty($socid) && $socid != $this->socid) {
1235 $objsoc =
new Societe($this->db);
1237 if ($objsoc->fetch($socid) > 0) {
1238 $this->socid = $objsoc->id;
1241 $this->fk_project =
'';
1242 $this->fk_delivery_address =
'';
1253 $this->user_author_id = $user->id;
1254 $this->user_valid = 0;
1255 $this->date_creation =
'';
1256 $this->date_validation =
'';
1257 $this->ref_client =
'';
1260 $this->context[
'createfromclone'] =
'createfromclone';
1261 $result = $this->
create($user);
1268 foreach ($this->lines as $line) {
1269 $this->
addline($user, $this->
id, $line->desc, $line->datei, $line->duration, $line->array_options);
1273 if (is_object($hookmanager)) {
1274 $parameters = array(
'objFrom'=>$objFrom);
1276 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $this, $action);
1284 unset($this->context[
'createfromclone']);
1288 $this->db->commit();
1291 $this->db->rollback();
1308 public function addline($user, $fichinterid, $desc, $date_intervention, $duration, $array_options =
'')
1310 dol_syslog(get_class($this).
"::addline $fichinterid, $desc, $date_intervention, $duration");
1312 if ($this->
statut == self::STATUS_DRAFT) {
1318 $line->fk_fichinter = $fichinterid;
1319 $line->desc = $desc;
1320 $line->date = $date_intervention;
1321 $line->datei = $date_intervention;
1322 $line->duration = $duration;
1324 if (is_array($array_options) && count($array_options) > 0) {
1325 $line->array_options = $array_options;
1328 $result = $line->insert($user);
1331 $this->db->commit();
1334 $this->error = $this->db->error();
1335 $this->db->rollback();
1359 $this->
ref =
'SPECIMEN';
1360 $this->ref_client =
'SPECIMEN CLIENT';
1361 $this->specimen = 1;
1363 $this->datec = $now;
1364 $this->note_private =
'Private note';
1365 $this->note_public =
'SPECIMEN';
1366 $this->duration = 0;
1369 while ($xnbp < $nbp) {
1371 $line->desc = $langs->trans(
"Description").
" ".$xnbp;
1372 $line->date = ($now - 3600 * (1 + $xnbp));
1373 $line->datei = ($now - 3600 * (1 + $xnbp));
1374 $line->duration = 600;
1375 $line->fk_fichinter = 0;
1376 $this->lines[$xnbp] = $line;
1379 $this->duration += $line->duration;
1392 $this->lines = array();
1394 $sql =
"SELECT rowid, fk_fichinter, description, duree, date, rang";
1395 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1396 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1397 $sql .=
" ORDER BY rang ASC, date ASC";
1399 dol_syslog(get_class($this).
"::fetch_lines", LOG_DEBUG);
1401 $resql = $this->db->query($sql);
1403 $num = $this->db->num_rows($resql);
1406 $objp = $this->db->fetch_object($resql);
1409 $line->id = $objp->rowid;
1410 $line->fk_fichinter = $objp->fk_fichinter;
1411 $line->desc = $objp->description;
1412 $line->duration = $objp->duree;
1414 $line->qty = round($objp->duree / 3600, 2);
1415 $line->date = $this->db->jdate($objp->date);
1416 $line->datei = $this->db->jdate($objp->date);
1417 $line->rang = $objp->rang;
1418 $line->product_type = 1;
1419 $line->fetch_optionals();
1421 $this->lines[$i] = $line;
1424 $this->db->free($resql);
1428 $this->error = $this->db->error();
1461 if (!empty($user->rights->ficheinter->creer)) {
1468 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ref_client = ".(empty($ref_client) ?
'NULL' :
"'".$this->db->escape($ref_client).
"'");
1469 $sql .=
" WHERE rowid = ".((int) $this->
id);
1471 dol_syslog(__METHOD__.
' $this->id='.$this->id.
', ref_client='.$ref_client, LOG_DEBUG);
1472 $resql = $this->db->query($sql);
1474 $this->errors[] = $this->db->error();
1479 $this->ref_client = $ref_client;
1482 if (!$notrigger && empty($error)) {
1484 $result = $this->
call_trigger(
'FICHINTER_MODIFY', $user);
1492 $this->db->commit();
1495 foreach ($this->errors as $errmsg) {
1496 dol_syslog(__METHOD__.
' Error: '.$errmsg, LOG_ERR);
1497 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1499 $this->db->rollback();
1518 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1520 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1521 $return .=
'<div class="info-box info-box-sm">';
1522 $return .=
'<span class="info-box-icon bg-infobox-action">';
1524 $return .=
'</span>';
1525 $return .=
'<div class="info-box-content">';
1526 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
1527 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1528 if (!empty($arraydata[
'thirdparty'])) {
1529 $tmpthirdparty = $arraydata[
'thirdparty'];
1530 $return .=
'<br><span class="info-box-label">'.$tmpthirdparty->getNomUrl(1).
'</span>';
1532 if (property_exists($this,
'duration')) {
1533 $return .=
'<br><span class="info-box-label ">'.$langs->trans(
"Duration").
' : '.
convertSecondToTime($this->duration,
'allhourmin').
'</span>';
1535 if (method_exists($this,
'getLibStatut')) {
1536 $return .=
'<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).
'</div>';
1538 $return .=
'</div>';
1539 $return .=
'</div>';
1540 $return .=
'</div>';
1564 public $fk_fichinter;
1586 public $element =
'fichinterdet';
1591 public $table_element =
'fichinterdet';
1596 public $fk_element =
'fk_fichinter';
1618 dol_syslog(
"FichinterLigne::fetch", LOG_DEBUG);
1620 $sql =
'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang, ft.date';
1621 $sql .=
' FROM '.MAIN_DB_PREFIX.
'fichinterdet as ft';
1622 $sql .=
' WHERE ft.rowid = '.((int) $rowid);
1624 $resql = $this->db->query($sql);
1626 $objp = $this->db->fetch_object($resql);
1627 $this->
rowid = $objp->rowid;
1628 $this->
id = $objp->rowid;
1629 $this->fk_fichinter = $objp->fk_fichinter;
1630 $this->date = $this->db->jdate($objp->date);
1631 $this->datei = $this->db->jdate($objp->date);
1632 $this->desc = $objp->description;
1633 $this->duration = $objp->duree;
1634 $this->rang = $objp->rang;
1636 $this->db->free($resql);
1642 $this->error = $this->db->error().
' sql='.$sql;
1654 public function insert($user, $notrigger = 0)
1658 dol_syslog(
"FichinterLigne::insert rang=".$this->rang);
1660 if (empty($this->date) && !empty($this->datei)) {
1661 $this->date = $this->datei;
1666 $rangToUse = $this->rang;
1667 if ($rangToUse == -1) {
1669 $sql =
'SELECT max(rang) as max FROM '.MAIN_DB_PREFIX.
'fichinterdet';
1670 $sql .=
' WHERE fk_fichinter = '.((int) $this->fk_fichinter);
1671 $resql = $this->db->query($sql);
1673 $obj = $this->db->fetch_object($resql);
1674 $rangToUse = $obj->max + 1;
1677 $this->db->rollback();
1683 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'fichinterdet';
1684 $sql .=
' (fk_fichinter, description, date, duree, rang)';
1685 $sql .=
" VALUES (".((int) $this->fk_fichinter).
",";
1686 $sql .=
" '".$this->db->escape($this->desc).
"',";
1687 $sql .=
" '".$this->db->idate($this->date).
"',";
1688 $sql .=
" ".((int) $this->duration).
",";
1689 $sql .=
' '.((int) $rangToUse);
1692 dol_syslog(
"FichinterLigne::insert", LOG_DEBUG);
1693 $resql = $this->db->query($sql);
1695 $this->
id = $this->db->last_insert_id(MAIN_DB_PREFIX.
'fichinterdet');
1696 $this->
rowid = $this->id;
1709 $this->rang = $rangToUse;
1713 $result = $this->
call_trigger(
'LINEFICHINTER_CREATE', $user);
1722 $this->db->commit();
1725 $this->db->rollback();
1729 $this->error = $this->db->error().
" sql=".$sql;
1730 $this->db->rollback();
1743 public function update($user, $notrigger = 0)
1747 if (empty($this->date) && !empty($this->datei)) {
1748 $this->date = $this->datei;
1754 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinterdet SET";
1755 $sql .=
" description = '".$this->db->escape($this->desc).
"',";
1756 $sql .=
" date = '".$this->db->idate($this->date).
"',";
1757 $sql .=
" duree = ".((int) $this->duration).
",";
1758 $sql .=
" rang = ".((int) $this->rang);
1759 $sql .=
" WHERE rowid = ".((int) $this->
id);
1761 dol_syslog(
"FichinterLigne::update", LOG_DEBUG);
1762 $resql = $this->db->query($sql);
1775 $result = $this->
call_trigger(
'LINEFICHINTER_MODIFY', $user);
1784 $this->db->commit();
1787 $this->error = $this->db->lasterror();
1788 $this->db->rollback();
1792 $this->error = $this->db->lasterror();
1793 $this->db->rollback();
1811 $sql =
"SELECT SUM(duree) as total_duration, min(date) as dateo, max(date) as datee ";
1812 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1813 $sql .=
" WHERE fk_fichinter=".((int) $this->fk_fichinter);
1815 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1816 $resql = $this->db->query($sql);
1818 $obj = $this->db->fetch_object($resql);
1819 $total_duration = 0;
1820 if (!empty($obj->total_duration)) {
1821 $total_duration = $obj->total_duration;
1824 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
1825 $sql .=
" SET duree = ".((int) $total_duration);
1826 $sql .=
" , dateo = ".(!empty($obj->dateo) ?
"'".$this->db->escape($obj->dateo).
"'" :
"null");
1827 $sql .=
" , datee = ".(!empty($obj->datee) ?
"'".$this->db->escape($obj->datee).
"'" :
"null");
1828 $sql .=
" WHERE rowid = ".((int) $this->fk_fichinter);
1830 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1831 $resql = $this->db->query($sql);
1833 $this->db->commit();
1836 $this->error = $this->db->error();
1837 $this->db->rollback();
1841 $this->error = $this->db->error();
1842 $this->db->rollback();
1856 global $langs, $conf;
1860 if ($this->
statut == 0) {
1861 dol_syslog(get_class($this).
"::deleteline lineid=".$this->
id);
1867 $this->db->rollback();
1871 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet WHERE rowid = ".((int) $this->
id);
1872 $resql = $this->db->query($sql);
1879 $result = $this->
call_trigger(
'LINEFICHINTER_DELETE', $user);
1881 $error++; $this->db->rollback();
return -1;
1886 $this->db->commit();
1889 $this->db->rollback();
1893 $this->error = $this->db->error().
" sql=".$sql;
1894 $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.
print $langs trans("Ref").' m m m statut
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 $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
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 =...
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.
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall right right takeposterminal SELECT e rowid