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'=>
'$conf->societe->enabled',
'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 'fk_statut' =>array(
'type'=>
'smallint(6)',
'label'=>
'Fk statut',
'enabled'=>1,
'visible'=>-1,
'position'=>500),
56 'dateo' =>array(
'type'=>
'date',
'label'=>
'Dateo',
'enabled'=>1,
'visible'=>-1,
'position'=>85),
57 'datee' =>array(
'type'=>
'date',
'label'=>
'Datee',
'enabled'=>1,
'visible'=>-1,
'position'=>90),
58 'datet' =>array(
'type'=>
'date',
'label'=>
'Datet',
'enabled'=>1,
'visible'=>-1,
'position'=>95),
59 'duree' =>array(
'type'=>
'double',
'label'=>
'Duree',
'enabled'=>1,
'visible'=>-1,
'position'=>100),
60 'description' =>array(
'type'=>
'text',
'label'=>
'Description',
'enabled'=>1,
'visible'=>-1,
'position'=>105,
'showoncombobox'=>2),
61 'note_private' =>array(
'type'=>
'text',
'label'=>
'NotePrivate',
'enabled'=>1,
'visible'=>0,
'position'=>110),
62 'note_public' =>array(
'type'=>
'text',
'label'=>
'NotePublic',
'enabled'=>1,
'visible'=>0,
'position'=>115),
63 'model_pdf' =>array(
'type'=>
'varchar(255)',
'label'=>
'Model pdf',
'enabled'=>1,
'visible'=>0,
'position'=>120),
64 'last_main_doc' =>array(
'type'=>
'varchar(255)',
'label'=>
'Last main doc',
'enabled'=>1,
'visible'=>-1,
'position'=>125),
65 'import_key' =>array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>1,
'visible'=>-2,
'position'=>130),
66 'extraparams' =>array(
'type'=>
'varchar(255)',
'label'=>
'Extraparams',
'enabled'=>1,
'visible'=>-1,
'position'=>135),
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').
")";
223 while ($obj = $this->
db->fetch_object(
$resql)) {
224 $this->nb[
"interventions"] = $obj->nb;
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);
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);
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;
505 $this->error = $this->
db->lasterror();
518 global $langs, $conf;
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);
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) $this->entity);
597 $sql .=
" AND fk_statut = 0";
599 dol_syslog(get_class($this).
"::setValid", LOG_DEBUG);
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);
627 $error++; $this->error = $this->
db->lasterror();
633 $dirsource = $conf->ficheinter->dir_output.
'/'.$oldref;
634 $dirdest = $conf->ficheinter->dir_output.
'/'.$newref;
635 if (!$error && file_exists($dirsource)) {
636 dol_syslog(get_class($this).
"::setValid rename dir ".$dirsource.
" into ".$dirdest);
638 if (@rename($dirsource, $dirdest)) {
641 $listoffiles =
dol_dir_list($conf->ficheinter->dir_output.
'/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
642 foreach ($listoffiles as $fileentry) {
643 $dirsource = $fileentry[
'name'];
644 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
645 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
646 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
647 @rename($dirsource, $dirdest);
658 $this->brouillon = 0;
659 $this->date_validation = $now;
663 $this->
db->rollback();
664 dol_syslog(get_class($this).
"::setValid ".$this->error, LOG_ERR);
681 $this->author =
new User($db);
682 $this->author->fetch($this->user_creation);
684 $thm = $this->author->thm;
686 foreach ($this->lines as $line) {
687 $amount += ($line->duration / 60 / 60 * $thm);
705 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
709 $outputlangs->load(
"interventions");
714 if (!empty($this->model_pdf)) {
715 $modele = $this->model_pdf;
716 } elseif (!empty($this->modelpdf)) {
717 $modele = $this->modelpdf;
718 } elseif (!empty($conf->global->FICHEINTER_ADDON_PDF)) {
719 $modele = $conf->global->FICHEINTER_ADDON_PDF;
723 $modelpath =
"core/modules/fichinter/doc/";
725 return $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
736 return $this->
LibStatut((isset($this->statut) ? $this->statut : $this->status), $mode);
751 if (empty($this->statuts) || empty($this->statuts_short) || empty($this->statuts_logo)) {
753 $langs->load(
"fichinter");
757 $this->statuts[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
761 $this->statuts_short[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
769 return dolGetStatus($this->statuts[$status], $this->statuts_short[$status],
'', $this->statuts_logo[$status], $mode);
781 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $save_lastsearch_value = -1)
783 global $conf, $langs, $hookmanager;
787 $label =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Intervention").
'</u>';
788 if (isset($this->status)) {
789 $label .=
' '.$this->getLibStatut(5);
791 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
793 $url = DOL_URL_ROOT.
'/fichinter/card.php?id='.$this->id;
795 if ($option !==
'nolink') {
797 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
798 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
799 $add_save_lastsearch_values = 1;
801 if ($add_save_lastsearch_values) {
802 $url .=
'&save_lastsearch_values=1';
807 if (empty($notooltip)) {
808 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
809 $label = $langs->trans(
"ShowIntervention");
810 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
812 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
813 $linkclose .=
' class="classfortooltip"';
823 $linkstart =
'<a href="'.$url.
'"';
824 $linkstart .= $linkclose.
'>';
827 $result .= $linkstart;
829 $result .=
img_object(($notooltip ?
'' : $label), $this->picto, ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
831 if ($withpicto != 2) {
832 $result .= $this->ref;
837 $hookmanager->initHooks(array(
'interventiondao'));
838 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
839 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
841 $result = $hookmanager->resPrint;
843 $result .= $hookmanager->resPrint;
859 global $conf, $db, $langs;
860 $langs->load(
"interventions");
862 if (!empty($conf->global->FICHEINTER_ADDON)) {
865 $file =
"mod_".$conf->global->FICHEINTER_ADDON.
".php";
866 $classname =
"mod_".$conf->global->FICHEINTER_ADDON;
869 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
871 foreach ($dirmodels as $reldir) {
875 $mybool |= @include_once $dir.$file;
878 if ($mybool ===
false) {
883 $obj =
new $classname();
885 $numref = $obj->getNextValue($soc, $this);
894 $langs->load(
"errors");
895 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_FICHEINTER_ADDON_NotDefined");
910 $sql =
"SELECT f.rowid,";
912 $sql .=
" f.tms as date_modification,";
913 $sql .=
" f.date_valid as datev,";
914 $sql .=
" f.fk_user_author,";
915 $sql .=
" f.fk_user_modif as fk_user_modification,";
916 $sql .=
" f.fk_user_valid";
917 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as f";
918 $sql .=
" WHERE f.rowid = ".((int) $id);
923 $obj = $this->
db->fetch_object(
$resql);
925 $this->
id = $obj->rowid;
927 $this->date_creation = $this->
db->jdate($obj->datec);
928 $this->date_modification = $this->
db->jdate($obj->date_modification);
929 $this->date_validation = $this->
db->jdate($obj->datev);
931 $cuser =
new User($this->
db);
932 $cuser->fetch($obj->fk_user_author);
933 $this->user_creation = $cuser;
935 if ($obj->fk_user_valid) {
936 $vuser =
new User($this->
db);
937 $vuser->fetch($obj->fk_user_valid);
938 $this->user_validation = $vuser;
940 if ($obj->fk_user_modification) {
941 $muser =
new User($this->
db);
942 $muser->fetch($obj->fk_user_modification);
943 $this->user_modification = $muser;
959 public function delete($user, $notrigger = 0)
961 global $conf, $langs;
962 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
968 if (!$error && !$notrigger) {
970 $result = $this->
call_trigger(
'FICHINTER_DELETE', $user);
972 $error++; $this->
db->rollback();
return -1;
989 $this->error =
'ErrorFailToDeleteLinkedContact';
995 $main = MAIN_DB_PREFIX.
'fichinterdet';
996 $ef = $main.
"_extrafields";
997 $sql =
"DELETE FROM $ef WHERE fk_object IN (SELECT rowid FROM $main WHERE fk_fichinter = ".((int) $this->
id).
")";
1006 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1007 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1025 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinter";
1026 $sql .=
" WHERE rowid = ".((int) $this->
id);
1041 if ($conf->ficheinter->dir_output) {
1042 $dir = $conf->ficheinter->dir_output.
"/".$fichinterref;
1043 $file = $conf->ficheinter->dir_output.
"/".$fichinterref.
"/".$fichinterref.
".pdf";
1044 if (file_exists($file)) {
1048 $langs->load(
"errors");
1049 $this->error = $langs->trans(
"ErrorFailToDeleteFile", $file);
1053 if (file_exists($dir)) {
1055 $langs->load(
"errors");
1056 $this->error = $langs->trans(
"ErrorFailToDeleteDir", $dir);
1064 $this->
db->commit();
1067 $this->
db->rollback();
1085 if ($user->rights->ficheinter->creer) {
1086 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1087 $sql .=
" SET datei = '".$this->db->idate($date_delivery).
"'";
1088 $sql .=
" WHERE rowid = ".((int) $this->
id);
1089 $sql .=
" AND fk_statut = 0";
1091 if ($this->
db->query($sql)) {
1092 $this->date_delivery = $date_delivery;
1095 $this->error = $this->
db->error();
1096 dol_syslog(
"Fichinter::set_date_delivery Erreur SQL");
1115 if ($user->rights->ficheinter->creer) {
1116 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1117 $sql .=
" SET description = '".$this->db->escape($description).
"',";
1118 $sql .=
" fk_user_modif = ".$user->id;
1119 $sql .=
" WHERE rowid = ".((int) $this->
id);
1121 if ($this->
db->query($sql)) {
1125 $this->error = $this->
db->error();
1126 dol_syslog(
"Fichinter::set_description Erreur SQL");
1146 if ($user->rights->ficheinter->creer) {
1147 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1148 $sql .=
" SET fk_contrat = ".((int) $contractid);
1149 $sql .=
" WHERE rowid = ".((int) $this->
id);
1151 if ($this->
db->query($sql)) {
1152 $this->fk_contrat = $contractid;
1155 $this->error = $this->
db->error();
1173 global $hookmanager;
1180 foreach ($this->lines as $line) {
1181 $line->fetch_optionals();
1185 $objFrom = clone $this;
1188 if (!empty($socid) && $socid != $this->socid) {
1191 if ($objsoc->fetch($socid) > 0) {
1192 $this->socid = $objsoc->id;
1195 $this->fk_project =
'';
1196 $this->fk_delivery_address =
'';
1207 $this->user_author_id = $user->id;
1208 $this->user_valid = 0;
1209 $this->date_creation =
'';
1210 $this->date_validation =
'';
1211 $this->ref_client =
'';
1214 $this->context[
'createfromclone'] =
'createfromclone';
1215 $result = $this->
create($user);
1222 foreach ($this->lines as $line) {
1223 $this->
addline($user, $this->
id, $line->desc, $line->datei, $line->duration, $line->array_options);
1227 if (is_object($hookmanager)) {
1228 $parameters = array(
'objFrom'=>$objFrom);
1230 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $this, $action);
1232 $this->errors += $hookmanager->errors;
1233 $this->error = $hookmanager->error;
1239 unset($this->context[
'createfromclone']);
1243 $this->
db->commit();
1246 $this->
db->rollback();
1263 public function addline($user, $fichinterid, $desc, $date_intervention, $duration, $array_options =
'')
1265 dol_syslog(get_class($this).
"::addline $fichinterid, $desc, $date_intervention, $duration");
1267 if ($this->statut == 0) {
1273 $line->fk_fichinter = $fichinterid;
1274 $line->desc = $desc;
1275 $line->date = $date_intervention;
1276 $line->datei = $date_intervention;
1277 $line->duration = $duration;
1279 if (is_array($array_options) && count($array_options) > 0) {
1280 $line->array_options = $array_options;
1283 $result = $line->insert($user);
1286 $this->
db->commit();
1289 $this->error = $this->
db->error();
1290 $this->
db->rollback();
1306 global $user, $langs, $conf;
1312 $this->
ref =
'SPECIMEN';
1313 $this->ref_client =
'SPECIMEN CLIENT';
1314 $this->specimen = 1;
1316 $this->datec = $now;
1317 $this->note_private =
'Private note';
1318 $this->note_public =
'SPECIMEN';
1319 $this->duration = 0;
1322 while ($xnbp < $nbp) {
1324 $line->desc = $langs->trans(
"Description").
" ".$xnbp;
1325 $line->date = ($now - 3600 * (1 + $xnbp));
1326 $line->datei = ($now - 3600 * (1 + $xnbp));
1327 $line->duration = 600;
1328 $line->fk_fichinter = 0;
1329 $this->lines[$xnbp] = $line;
1332 $this->duration += $line->duration;
1345 $this->lines = array();
1347 $sql =
"SELECT rowid, fk_fichinter, description, duree, date, rang";
1348 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1349 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1350 $sql .=
" ORDER BY rang ASC, date ASC";
1352 dol_syslog(get_class($this).
"::fetch_lines", LOG_DEBUG);
1356 $num = $this->
db->num_rows(
$resql);
1359 $objp = $this->
db->fetch_object(
$resql);
1362 $line->id = $objp->rowid;
1363 $line->fk_fichinter = $objp->fk_fichinter;
1364 $line->desc = $objp->description;
1365 $line->duration = $objp->duree;
1367 $line->qty = round($objp->duree / 3600, 2);
1368 $line->date = $this->
db->jdate($objp->date);
1369 $line->datei = $this->
db->jdate($objp->date);
1370 $line->rang = $objp->rang;
1371 $line->product_type = 1;
1372 $line->fetch_optionals();
1374 $this->lines[$i] = $line;
1381 $this->error = $this->
db->error();
1414 if (!empty($user->rights->ficheinter->creer)) {
1421 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ref_client = ".(empty($ref_client) ?
'NULL' :
"'".$this->db->escape($ref_client).
"'");
1422 $sql .=
" WHERE rowid = ".((int) $this->
id);
1424 dol_syslog(__METHOD__.
' $this->id='.$this->id.
', ref_client='.$ref_client, LOG_DEBUG);
1427 $this->errors[] = $this->
db->error();
1432 $this->ref_client = $ref_client;
1435 if (!$notrigger && empty($error)) {
1437 $result = $this->
call_trigger(
'FICHINTER_MODIFY', $user);
1445 $this->
db->commit();
1448 foreach ($this->errors as $errmsg) {
1449 dol_syslog(__METHOD__.
' Error: '.$errmsg, LOG_ERR);
1450 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1452 $this->
db->rollback();
1480 public $fk_fichinter;
1502 public $element =
'fichinterdet';
1507 public $table_element =
'fichinterdet';
1512 public $fk_element =
'fk_fichinter';
1534 $sql =
'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang, ft.date';
1535 $sql .=
' FROM '.MAIN_DB_PREFIX.
'fichinterdet as ft';
1536 $sql .=
' WHERE ft.rowid = '.((int) $rowid);
1538 dol_syslog(
"FichinterLigne::fetch", LOG_DEBUG);
1539 $result = $this->
db->query($sql);
1541 $objp = $this->
db->fetch_object($result);
1542 $this->
rowid = $objp->rowid;
1543 $this->
id = $objp->rowid;
1544 $this->fk_fichinter = $objp->fk_fichinter;
1545 $this->date = $this->
db->jdate($objp->date);
1546 $this->datei = $this->
db->jdate($objp->date);
1547 $this->desc = $objp->description;
1548 $this->duration = $objp->duree;
1549 $this->rang = $objp->rang;
1551 $this->
db->free($result);
1554 $this->error = $this->
db->error().
' sql='.$sql;
1566 public function insert($user, $notrigger = 0)
1568 global $langs, $conf;
1572 dol_syslog(
"FichinterLigne::insert rang=".$this->rang);
1574 if (empty($this->date) && !empty($this->datei)) {
1575 $this->date = $this->datei;
1580 $rangToUse = $this->rang;
1581 if ($rangToUse == -1) {
1583 $sql =
'SELECT max(rang) as max FROM '.MAIN_DB_PREFIX.
'fichinterdet';
1584 $sql .=
' WHERE fk_fichinter = '.((int) $this->fk_fichinter);
1587 $obj = $this->
db->fetch_object(
$resql);
1588 $rangToUse = $obj->max + 1;
1591 $this->
db->rollback();
1597 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'fichinterdet';
1598 $sql .=
' (fk_fichinter, description, date, duree, rang)';
1599 $sql .=
" VALUES (".((int) $this->fk_fichinter).
",";
1600 $sql .=
" '".$this->db->escape($this->desc).
"',";
1601 $sql .=
" '".$this->db->idate($this->date).
"',";
1602 $sql .=
" ".((int) $this->duration).
",";
1603 $sql .=
' '.((int) $rangToUse);
1606 dol_syslog(
"FichinterLigne::insert", LOG_DEBUG);
1609 $this->
id = $this->
db->last_insert_id(MAIN_DB_PREFIX.
'fichinterdet');
1610 $this->
rowid = $this->id;
1623 $this->rang = $rangToUse;
1627 $result = $this->
call_trigger(
'LINEFICHINTER_CREATE', $user);
1636 $this->
db->commit();
1639 $this->
db->rollback();
1643 $this->error = $this->
db->error().
" sql=".$sql;
1644 $this->
db->rollback();
1657 public function update($user, $notrigger = 0)
1659 global $langs, $conf;
1663 if (empty($this->date) && !empty($this->datei)) {
1664 $this->date = $this->datei;
1670 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinterdet SET";
1671 $sql .=
" description = '".$this->db->escape($this->desc).
"',";
1672 $sql .=
" date = '".$this->db->idate($this->date).
"',";
1673 $sql .=
" duree = ".((int) $this->duration).
",";
1674 $sql .=
" rang = ".((int) $this->rang);
1675 $sql .=
" WHERE rowid = ".((int) $this->
id);
1677 dol_syslog(
"FichinterLigne::update", LOG_DEBUG);
1691 $result = $this->
call_trigger(
'LINEFICHINTER_MODIFY', $user);
1700 $this->
db->commit();
1703 $this->error = $this->
db->lasterror();
1704 $this->
db->rollback();
1708 $this->error = $this->
db->lasterror();
1709 $this->
db->rollback();
1727 $sql =
"SELECT SUM(duree) as total_duration, min(date) as dateo, max(date) as datee ";
1728 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1729 $sql .=
" WHERE fk_fichinter=".((int) $this->fk_fichinter);
1731 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1734 $obj = $this->
db->fetch_object(
$resql);
1735 $total_duration = 0;
1736 if (!empty($obj->total_duration)) {
1737 $total_duration = $obj->total_duration;
1740 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
1741 $sql .=
" SET duree = ".((int) $total_duration);
1742 $sql .=
" , dateo = ".(!empty($obj->dateo) ?
"'".$this->db->escape($obj->dateo).
"'" :
"null");
1743 $sql .=
" , datee = ".(!empty($obj->datee) ?
"'".$this->db->escape($obj->datee).
"'" :
"null");
1744 $sql .=
" WHERE rowid = ".((int) $this->fk_fichinter);
1746 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1749 $this->
db->commit();
1752 $this->error = $this->
db->error();
1753 $this->
db->rollback();
1757 $this->error = $this->
db->error();
1758 $this->
db->rollback();
1772 global $langs, $conf;
1776 if ($this->statut == 0) {
1777 dol_syslog(get_class($this).
"::deleteline lineid=".$this->
id);
1783 $this->
db->rollback();
1787 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet WHERE rowid = ".((int) $this->
id);
1795 $result = $this->
call_trigger(
'LINEFICHINTER_DELETE', $user);
1797 $error++; $this->
db->rollback();
return -1;
1802 $this->
db->commit();
1805 $this->
db->rollback();
1809 $this->error = $this->
db->error().
" sql=".$sql;
1810 $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.
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 $db, $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.
static replaceThirdparty(DoliDB $db, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
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.
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.
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.
getNomUrl($withpicto=0, $option='', $notooltip=0, $save_lastsearch_value=-1)
Return clicable name (with picto eventually)
LibStatut($status, $mode=0)
Returns the label of a status.
setValid($user, $notrigger=0)
Validate a intervention.
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') &&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur') &&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD) && $user->hasRight("fournisseur", "facture", "lire"))||(isModEnabled('supplier_invoice') && $user->hasRight("supplier_invoice", "lire"))) if(isModEnabled('don') &&!empty($user->rights->don->lire)) if(isModEnabled('tax') &&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture') &&isModEnabled('commande') && $user->hasRight("commande", "lire") &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
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.
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.
$conf db
API class for accounts.