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) $conf->entity);
596 $sql .=
" AND fk_statut = 0";
598 dol_syslog(get_class($this).
"::setValid", LOG_DEBUG);
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;
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);
680 $this->author =
new User($db);
681 $this->author->fetch($this->user_creation);
683 $thm = $this->author->thm;
685 foreach ($this->lines as $line) {
686 $amount += ($line->duration / 60 / 60 * $thm);
704 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
708 $outputlangs->load(
"interventions");
713 if (!empty($this->model_pdf)) {
714 $modele = $this->model_pdf;
715 } elseif (!empty($this->modelpdf)) {
716 $modele = $this->modelpdf;
717 } elseif (!empty($conf->global->FICHEINTER_ADDON_PDF)) {
718 $modele = $conf->global->FICHEINTER_ADDON_PDF;
722 $modelpath =
"core/modules/fichinter/doc/";
724 return $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
735 return $this->
LibStatut((isset($this->statut) ? $this->statut : $this->status), $mode);
750 if (empty($this->statuts) || empty($this->statuts_short) || empty($this->statuts_logo)) {
752 $langs->load(
"fichinter");
756 $this->statuts[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
760 $this->statuts_short[
self::STATUS_BILLED] = $langs->transnoentitiesnoconv(
'StatusInterInvoiced');
768 return dolGetStatus($this->statuts[$status], $this->statuts_short[$status],
'', $this->statuts_logo[$status], $mode);
780 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $save_lastsearch_value = -1)
782 global $conf, $langs, $hookmanager;
786 $label =
img_picto(
'', $this->picto).
' <u class="paddingrightonly">'.$langs->trans(
"Intervention").
'</u>';
787 if (isset($this->status)) {
788 $label .=
' '.$this->getLibStatut(5);
790 $label .=
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
792 $url = DOL_URL_ROOT.
'/fichinter/card.php?id='.$this->id;
794 if ($option !==
'nolink') {
796 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
797 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
798 $add_save_lastsearch_values = 1;
800 if ($add_save_lastsearch_values) {
801 $url .=
'&save_lastsearch_values=1';
806 if (empty($notooltip)) {
807 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
808 $label = $langs->trans(
"ShowIntervention");
809 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
811 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
812 $linkclose .=
' class="classfortooltip"';
822 $linkstart =
'<a href="'.$url.
'"';
823 $linkstart .= $linkclose.
'>';
826 $result .= $linkstart;
828 $result .=
img_object(($notooltip ?
'' : $label), $this->picto, ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
830 if ($withpicto != 2) {
831 $result .= $this->ref;
836 $hookmanager->initHooks(array(
'interventiondao'));
837 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
838 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
840 $result = $hookmanager->resPrint;
842 $result .= $hookmanager->resPrint;
858 global $conf, $db, $langs;
859 $langs->load(
"interventions");
861 if (!empty($conf->global->FICHEINTER_ADDON)) {
864 $file =
"mod_".$conf->global->FICHEINTER_ADDON.
".php";
865 $classname =
"mod_".$conf->global->FICHEINTER_ADDON;
868 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
870 foreach ($dirmodels as $reldir) {
874 $mybool |= @include_once $dir.$file;
877 if ($mybool ===
false) {
882 $obj =
new $classname();
884 $numref = $obj->getNextValue($soc, $this);
893 $langs->load(
"errors");
894 print $langs->trans(
"Error").
" ".$langs->trans(
"Error_FICHEINTER_ADDON_NotDefined");
909 $sql =
"SELECT f.rowid,";
911 $sql .=
" f.tms as date_modification,";
912 $sql .=
" f.date_valid as datev,";
913 $sql .=
" f.fk_user_author,";
914 $sql .=
" f.fk_user_modif as fk_user_modification,";
915 $sql .=
" f.fk_user_valid";
916 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinter as f";
917 $sql .=
" WHERE f.rowid = ".((int) $id);
922 $obj = $this->
db->fetch_object(
$resql);
924 $this->
id = $obj->rowid;
926 $this->date_creation = $this->
db->jdate($obj->datec);
927 $this->date_modification = $this->
db->jdate($obj->date_modification);
928 $this->date_validation = $this->
db->jdate($obj->datev);
930 $cuser =
new User($this->
db);
931 $cuser->fetch($obj->fk_user_author);
932 $this->user_creation = $cuser;
934 if ($obj->fk_user_valid) {
935 $vuser =
new User($this->
db);
936 $vuser->fetch($obj->fk_user_valid);
937 $this->user_validation = $vuser;
939 if ($obj->fk_user_modification) {
940 $muser =
new User($this->
db);
941 $muser->fetch($obj->fk_user_modification);
942 $this->user_modification = $muser;
958 public function delete($user, $notrigger = 0)
960 global $conf, $langs;
961 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
967 if (!$error && !$notrigger) {
969 $result = $this->
call_trigger(
'FICHINTER_DELETE', $user);
971 $error++; $this->
db->rollback();
return -1;
988 $this->error =
'ErrorFailToDeleteLinkedContact';
994 $main = MAIN_DB_PREFIX.
'fichinterdet';
995 $ef = $main.
"_extrafields";
996 $sql =
"DELETE FROM $ef WHERE fk_object IN (SELECT rowid FROM $main WHERE fk_fichinter = ".((int) $this->
id).
")";
1005 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1006 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1024 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinter";
1025 $sql .=
" WHERE rowid = ".((int) $this->
id);
1040 if ($conf->ficheinter->dir_output) {
1041 $dir = $conf->ficheinter->dir_output.
"/".$fichinterref;
1042 $file = $conf->ficheinter->dir_output.
"/".$fichinterref.
"/".$fichinterref.
".pdf";
1043 if (file_exists($file)) {
1047 $langs->load(
"errors");
1048 $this->error = $langs->trans(
"ErrorFailToDeleteFile", $file);
1052 if (file_exists($dir)) {
1054 $langs->load(
"errors");
1055 $this->error = $langs->trans(
"ErrorFailToDeleteDir", $dir);
1063 $this->
db->commit();
1066 $this->
db->rollback();
1084 if ($user->rights->ficheinter->creer) {
1085 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1086 $sql .=
" SET datei = '".$this->db->idate($date_delivery).
"'";
1087 $sql .=
" WHERE rowid = ".((int) $this->
id);
1088 $sql .=
" AND fk_statut = 0";
1090 if ($this->
db->query($sql)) {
1091 $this->date_delivery = $date_delivery;
1094 $this->error = $this->
db->error();
1095 dol_syslog(
"Fichinter::set_date_delivery Erreur SQL");
1114 if ($user->rights->ficheinter->creer) {
1115 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1116 $sql .=
" SET description = '".$this->db->escape($description).
"',";
1117 $sql .=
" fk_user_modif = ".$user->id;
1118 $sql .=
" WHERE rowid = ".((int) $this->
id);
1120 if ($this->
db->query($sql)) {
1124 $this->error = $this->
db->error();
1125 dol_syslog(
"Fichinter::set_description Erreur SQL");
1145 if ($user->rights->ficheinter->creer) {
1146 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter ";
1147 $sql .=
" SET fk_contrat = ".((int) $contractid);
1148 $sql .=
" WHERE rowid = ".((int) $this->
id);
1150 if ($this->
db->query($sql)) {
1151 $this->fk_contrat = $contractid;
1154 $this->error = $this->
db->error();
1172 global $hookmanager;
1179 foreach ($this->lines as $line) {
1180 $line->fetch_optionals();
1184 $objFrom = clone $this;
1187 if (!empty($socid) && $socid != $this->socid) {
1190 if ($objsoc->fetch($socid) > 0) {
1191 $this->socid = $objsoc->id;
1194 $this->fk_project =
'';
1195 $this->fk_delivery_address =
'';
1206 $this->user_author_id = $user->id;
1207 $this->user_valid = 0;
1208 $this->date_creation =
'';
1209 $this->date_validation =
'';
1210 $this->ref_client =
'';
1213 $this->context[
'createfromclone'] =
'createfromclone';
1214 $result = $this->
create($user);
1221 foreach ($this->lines as $line) {
1222 $this->
addline($user, $this->
id, $line->desc, $line->datei, $line->duration, $line->array_options);
1226 if (is_object($hookmanager)) {
1227 $parameters = array(
'objFrom'=>$objFrom);
1229 $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $this, $action);
1231 $this->errors += $hookmanager->errors;
1232 $this->error = $hookmanager->error;
1238 unset($this->context[
'createfromclone']);
1242 $this->
db->commit();
1245 $this->
db->rollback();
1262 public function addline($user, $fichinterid, $desc, $date_intervention, $duration, $array_options =
'')
1264 dol_syslog(get_class($this).
"::addline $fichinterid, $desc, $date_intervention, $duration");
1266 if ($this->statut == 0) {
1272 $line->fk_fichinter = $fichinterid;
1273 $line->desc = $desc;
1274 $line->date = $date_intervention;
1275 $line->datei = $date_intervention;
1276 $line->duration = $duration;
1278 if (is_array($array_options) && count($array_options) > 0) {
1279 $line->array_options = $array_options;
1282 $result = $line->insert($user);
1285 $this->
db->commit();
1288 $this->error = $this->
db->error();
1289 $this->
db->rollback();
1305 global $user, $langs, $conf;
1311 $this->
ref =
'SPECIMEN';
1312 $this->ref_client =
'SPECIMEN CLIENT';
1313 $this->specimen = 1;
1315 $this->datec = $now;
1316 $this->note_private =
'Private note';
1317 $this->note_public =
'SPECIMEN';
1318 $this->duration = 0;
1321 while ($xnbp < $nbp) {
1323 $line->desc = $langs->trans(
"Description").
" ".$xnbp;
1324 $line->date = ($now - 3600 * (1 + $xnbp));
1325 $line->datei = ($now - 3600 * (1 + $xnbp));
1326 $line->duration = 600;
1327 $line->fk_fichinter = 0;
1328 $this->lines[$xnbp] = $line;
1331 $this->duration += $line->duration;
1344 $this->lines = array();
1346 $sql =
"SELECT rowid, fk_fichinter, description, duree, date, rang";
1347 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1348 $sql .=
" WHERE fk_fichinter = ".((int) $this->
id);
1349 $sql .=
" ORDER BY rang ASC, date ASC";
1351 dol_syslog(get_class($this).
"::fetch_lines", LOG_DEBUG);
1355 $num = $this->
db->num_rows(
$resql);
1358 $objp = $this->
db->fetch_object(
$resql);
1361 $line->id = $objp->rowid;
1362 $line->fk_fichinter = $objp->fk_fichinter;
1363 $line->desc = $objp->description;
1364 $line->duration = $objp->duree;
1366 $line->qty = round($objp->duree / 3600, 2);
1367 $line->date = $this->
db->jdate($objp->date);
1368 $line->datei = $this->
db->jdate($objp->date);
1369 $line->rang = $objp->rang;
1370 $line->product_type = 1;
1371 $line->fetch_optionals();
1373 $this->lines[$i] = $line;
1380 $this->error = $this->
db->error();
1413 if (!empty($user->rights->ficheinter->creer)) {
1420 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element.
" SET ref_client = ".(empty($ref_client) ?
'NULL' :
"'".$this->db->escape($ref_client).
"'");
1421 $sql .=
" WHERE rowid = ".((int) $this->
id);
1423 dol_syslog(__METHOD__.
' $this->id='.$this->id.
', ref_client='.$ref_client, LOG_DEBUG);
1426 $this->errors[] = $this->
db->error();
1431 $this->ref_client = $ref_client;
1434 if (!$notrigger && empty($error)) {
1436 $result = $this->
call_trigger(
'FICHINTER_MODIFY', $user);
1444 $this->
db->commit();
1447 foreach ($this->errors as $errmsg) {
1448 dol_syslog(__METHOD__.
' Error: '.$errmsg, LOG_ERR);
1449 $this->error .= ($this->error ?
', '.$errmsg : $errmsg);
1451 $this->
db->rollback();
1479 public $fk_fichinter;
1501 public $element =
'fichinterdet';
1506 public $table_element =
'fichinterdet';
1511 public $fk_element =
'fk_fichinter';
1533 $sql =
'SELECT ft.rowid, ft.fk_fichinter, ft.description, ft.duree, ft.rang, ft.date';
1534 $sql .=
' FROM '.MAIN_DB_PREFIX.
'fichinterdet as ft';
1535 $sql .=
' WHERE ft.rowid = '.((int) $rowid);
1537 dol_syslog(
"FichinterLigne::fetch", LOG_DEBUG);
1538 $result = $this->
db->query($sql);
1540 $objp = $this->
db->fetch_object($result);
1541 $this->
rowid = $objp->rowid;
1542 $this->
id = $objp->rowid;
1543 $this->fk_fichinter = $objp->fk_fichinter;
1544 $this->date = $this->
db->jdate($objp->date);
1545 $this->datei = $this->
db->jdate($objp->date);
1546 $this->desc = $objp->description;
1547 $this->duration = $objp->duree;
1548 $this->rang = $objp->rang;
1550 $this->
db->free($result);
1553 $this->error = $this->
db->error().
' sql='.$sql;
1565 public function insert($user, $notrigger = 0)
1567 global $langs, $conf;
1571 dol_syslog(
"FichinterLigne::insert rang=".$this->rang);
1573 if (empty($this->date) && !empty($this->datei)) {
1574 $this->date = $this->datei;
1579 $rangToUse = $this->rang;
1580 if ($rangToUse == -1) {
1582 $sql =
'SELECT max(rang) as max FROM '.MAIN_DB_PREFIX.
'fichinterdet';
1583 $sql .=
' WHERE fk_fichinter = '.((int) $this->fk_fichinter);
1586 $obj = $this->
db->fetch_object(
$resql);
1587 $rangToUse = $obj->max + 1;
1590 $this->
db->rollback();
1596 $sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'fichinterdet';
1597 $sql .=
' (fk_fichinter, description, date, duree, rang)';
1598 $sql .=
" VALUES (".((int) $this->fk_fichinter).
",";
1599 $sql .=
" '".$this->db->escape($this->desc).
"',";
1600 $sql .=
" '".$this->db->idate($this->date).
"',";
1601 $sql .=
" ".((int) $this->duration).
",";
1602 $sql .=
' '.((int) $rangToUse);
1605 dol_syslog(
"FichinterLigne::insert", LOG_DEBUG);
1608 $this->
id = $this->
db->last_insert_id(MAIN_DB_PREFIX.
'fichinterdet');
1609 $this->
rowid = $this->id;
1622 $this->rang = $rangToUse;
1626 $result = $this->
call_trigger(
'LINEFICHINTER_CREATE', $user);
1635 $this->
db->commit();
1638 $this->
db->rollback();
1642 $this->error = $this->
db->error().
" sql=".$sql;
1643 $this->
db->rollback();
1656 public function update($user, $notrigger = 0)
1658 global $langs, $conf;
1662 if (empty($this->date) && !empty($this->datei)) {
1663 $this->date = $this->datei;
1669 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinterdet SET";
1670 $sql .=
" description = '".$this->db->escape($this->desc).
"',";
1671 $sql .=
" date = '".$this->db->idate($this->date).
"',";
1672 $sql .=
" duree = ".((int) $this->duration).
",";
1673 $sql .=
" rang = ".((int) $this->rang);
1674 $sql .=
" WHERE rowid = ".((int) $this->
id);
1676 dol_syslog(
"FichinterLigne::update", LOG_DEBUG);
1690 $result = $this->
call_trigger(
'LINEFICHINTER_MODIFY', $user);
1699 $this->
db->commit();
1702 $this->error = $this->
db->lasterror();
1703 $this->
db->rollback();
1707 $this->error = $this->
db->lasterror();
1708 $this->
db->rollback();
1726 $sql =
"SELECT SUM(duree) as total_duration, min(date) as dateo, max(date) as datee ";
1727 $sql .=
" FROM ".MAIN_DB_PREFIX.
"fichinterdet";
1728 $sql .=
" WHERE fk_fichinter=".((int) $this->fk_fichinter);
1730 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1733 $obj = $this->
db->fetch_object(
$resql);
1734 $total_duration = 0;
1735 if (!empty($obj->total_duration)) {
1736 $total_duration = $obj->total_duration;
1739 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"fichinter";
1740 $sql .=
" SET duree = ".((int) $total_duration);
1741 $sql .=
" , dateo = ".(!empty($obj->dateo) ?
"'".$this->db->escape($obj->dateo).
"'" :
"null");
1742 $sql .=
" , datee = ".(!empty($obj->datee) ?
"'".$this->db->escape($obj->datee).
"'" :
"null");
1743 $sql .=
" WHERE rowid = ".((int) $this->fk_fichinter);
1745 dol_syslog(
"FichinterLigne::update_total", LOG_DEBUG);
1748 $this->
db->commit();
1751 $this->error = $this->
db->error();
1752 $this->
db->rollback();
1756 $this->error = $this->
db->error();
1757 $this->
db->rollback();
1771 global $langs, $conf;
1775 if ($this->statut == 0) {
1776 dol_syslog(get_class($this).
"::deleteline lineid=".$this->
id);
1782 $this->
db->rollback();
1786 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"fichinterdet WHERE rowid = ".((int) $this->
id);
1794 $result = $this->
call_trigger(
'LINEFICHINTER_DELETE', $user);
1796 $error++; $this->
db->rollback();
return -1;
1801 $this->
db->commit();
1804 $this->
db->rollback();
1808 $this->error = $this->
db->error().
" sql=".$sql;
1809 $this->
db->rollback();