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();