29 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
30 require_once DOL_DOCUMENT_ROOT .
'/hrm/class/skillrank.class.php';
42 public $module =
'hrm';
47 public $element =
'evaluationdet';
52 public $table_element =
'hrm_evaluationdet';
58 public $ismultientitymanaged = 0;
63 public $isextrafieldmanaged = 1;
68 public $picto =
'evaluationdet@hrm';
71 const STATUS_DRAFT = 0;
72 const STATUS_VALIDATED = 1;
73 const STATUS_CANCELED = 9;
106 public $fields=array(
107 'rowid' => array(
'type'=>
'integer',
'label'=>
'TechnicalID',
'enabled'=>
'1',
'position'=>1,
'notnull'=>1,
'visible'=>0,
'noteditable'=>
'1',
'index'=>1,
'css'=>
'left',
'comment'=>
"Id"),
108 'date_creation' => array(
'type'=>
'datetime',
'label'=>
'DateCreation',
'enabled'=>
'1',
'position'=>500,
'notnull'=>1,
'visible'=>-2,),
109 'tms' => array(
'type'=>
'timestamp',
'label'=>
'DateModification',
'enabled'=>
'1',
'position'=>501,
'notnull'=>0,
'visible'=>-2,),
110 'fk_user_creat' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserAuthor',
'enabled'=>
'1',
'position'=>510,
'notnull'=>1,
'visible'=>-2,
'foreignkey'=>
'user.rowid',),
111 'fk_user_modif' => array(
'type'=>
'integer:User:user/class/user.class.php',
'label'=>
'UserModif',
'enabled'=>
'1',
'position'=>511,
'notnull'=>-1,
'visible'=>-2,),
112 'fk_skill' => array(
'type'=>
'integer:Skill:hrm/class/skill.class.php:1',
'label'=>
'Skill',
'enabled'=>
'1',
'position'=>3,
'notnull'=>1,
'visible'=>1,
'index'=>1,),
113 'fk_evaluation' => array(
'type'=>
'integer:Evaluation:hrm/class/evaluation.class.php:1',
'label'=>
'Evaluation',
'enabled'=>
'1',
'position'=>3,
'notnull'=>1,
'visible'=>1,
'index'=>1,),
114 'rankorder' => array(
'type'=>
'integer',
'label'=>
'Rank',
'enabled'=>
'1',
'position'=>4,
'notnull'=>1,
'visible'=>1,),
115 'required_rank' => array(
'type'=>
'integer',
'label'=>
'requiredRank',
'enabled'=>
'1',
'position'=>5,
'notnull'=>1,
'visible'=>1,),
116 'import_key' => array(
'type'=>
'varchar(14)',
'label'=>
'ImportId',
'enabled'=>
'1',
'position'=>1000,
'notnull'=>-1,
'visible'=>-2,),
119 public $date_creation;
121 public $fk_user_creat;
122 public $fk_user_modif;
124 public $fk_evaluation;
126 public $required_rank;
174 global $conf, $langs;
178 if (empty($conf->global->MAIN_SHOW_TECHNICAL_ID) && isset($this->fields[
'rowid'])) {
179 $this->fields[
'rowid'][
'visible'] = 0;
181 if (empty($conf->multicompany->enabled) && isset($this->fields[
'entity'])) {
182 $this->fields[
'entity'][
'enabled'] = 0;
192 foreach ($this->fields as $key => $val) {
193 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
194 unset($this->fields[$key]);
199 if (is_object($langs)) {
200 foreach ($this->fields as $key => $val) {
201 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
202 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
203 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
221 return $resultcreate;
233 global $langs, $extrafields;
238 $object =
new self($this->db);
243 $result = $object->fetchCommon($fromid);
244 if ($result > 0 && !empty($object->table_element_line)) {
245 $object->fetchLines();
254 unset($object->fk_user_creat);
255 unset($object->import_key);
258 if (property_exists($object,
'ref')) {
259 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
261 if (property_exists($object,
'label')) {
262 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".$object->label : $this->fields[
'label'][
'default'];
264 if (property_exists($object,
'status')) {
265 $object->status = self::STATUS_DRAFT;
267 if (property_exists($object,
'date_creation')) {
268 $object->date_creation =
dol_now();
270 if (property_exists($object,
'date_modification')) {
271 $object->date_modification = null;
275 if (is_array($object->array_options) && count($object->array_options) > 0) {
276 $extrafields->fetch_name_optionals_label($this->table_element);
277 foreach ($object->array_options as $key => $option) {
278 $shortkey = preg_replace(
'/options_/',
'', $key);
279 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
281 unset($object->array_options[$key]);
287 $object->context[
'createfromclone'] =
'createfromclone';
288 $result = $object->createCommon($user);
291 $this->error = $object->error;
292 $this->errors = $object->errors;
304 if (property_exists($this,
'fk_soc') && $this->fk_soc == $object->socid) {
311 unset($object->context[
'createfromclone']);
318 $this->
db->rollback();
330 public function fetch($id, $ref = null)
333 if ($result > 0 && !empty($this->table_element_line)) {
346 $this->lines = array();
364 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, array $filter = array(), $filtermode =
'AND')
374 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
375 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
376 $sql .=
' WHERE t.entity IN ('.getEntity($this->table_element).
')';
378 $sql .=
' WHERE 1 = 1';
382 if (count($filter) > 0) {
383 foreach ($filter as $key => $value) {
384 if ($key ==
't.rowid') {
385 $sqlwhere[] = $key.
'='.$value;
386 } elseif (in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
387 $sqlwhere[] = $key.
' = \''.$this->
db->idate($value).
'\'';
388 } elseif ($key ==
'customsql') {
389 $sqlwhere[] = $value;
390 } elseif (strpos($value,
'%') ===
false) {
391 $sqlwhere[] = $key.
' IN ('.$this->
db->sanitize($this->
db->escape($value)).
')';
393 $sqlwhere[] = $key.
' LIKE \'%'.$this->
db->escape($value).
'%\'';
397 if (count($sqlwhere) > 0) {
398 $sql .=
" AND (".implode(
" ".$filtermode.
" ", $sqlwhere).
")";
401 if (!empty($sortfield)) {
402 $sql .= $this->
db->order($sortfield, $sortorder);
404 if (!empty($limit)) {
405 $sql .=
' '.$this->db->plimit($limit, $offset);
412 while ($i < ($limit ? min($limit, $num) : $num)) {
413 $obj = $this->
db->fetch_object(
$resql);
415 $record =
new self($this->db);
416 $record->setVarsFromFetchObj($obj);
418 $records[$record->id] = $record;
426 $this->errors[] =
'Error '.$this->db->lasterror();
427 dol_syslog(__METHOD__.
' '.join(
',', $this->errors), LOG_ERR);
452 public function delete(
User $user, $notrigger =
false)
454 if ($this->fk_rank) {
456 $skillRank->fetch($this->fk_rank);
457 $skillRank->delete($user, $notrigger);
473 if ($this->status < 0) {
474 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
491 global $conf, $langs;
493 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
498 if ($this->status == self::STATUS_VALIDATED) {
499 dol_syslog(get_class($this).
"::validate action abandonned: already validated", LOG_WARNING);
516 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
521 $this->newref = $num;
525 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
526 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
527 $sql .=
" status = ".self::STATUS_VALIDATED;
528 if (!empty($this->fields[
'date_validation'])) {
529 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
531 if (!empty($this->fields[
'fk_user_valid'])) {
532 $sql .=
", fk_user_valid = ".((int) $user->id);
534 $sql .=
" WHERE rowid = ".((int) $this->
id);
536 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
540 $this->error = $this->
db->lasterror();
544 if (!$error && !$notrigger) {
546 $result = $this->
call_trigger(
'EVALUATIONLINE_VALIDATE', $user);
555 $this->oldref = $this->ref;
558 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
560 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->
db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'evaluationline/".$this->
db->escape($this->newref).
"'";
561 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'evaluationline/".$this->
db->escape($this->
ref).
"' and entity = ".$conf->entity;
564 $error++; $this->error = $this->
db->lasterror();
570 $dirsource = $conf->hrm->dir_output.
'/evaluationline/'.$oldref;
571 $dirdest = $conf->hrm->dir_output.
'/evaluationline/'.$newref;
572 if (!$error && file_exists($dirsource)) {
573 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
575 if (@rename($dirsource, $dirdest)) {
578 $listoffiles =
dol_dir_list($conf->hrm->dir_output.
'/evaluationline/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
579 foreach ($listoffiles as $fileentry) {
580 $dirsource = $fileentry[
'name'];
581 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
582 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
583 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
584 @rename($dirsource, $dirdest);
594 $this->status = self::STATUS_VALIDATED;
601 $this->
db->rollback();
617 if ($this->status <= self::STATUS_DRAFT) {
628 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'EVALUATIONLINE_UNVALIDATE');
638 public function cancel($user, $notrigger = 0)
641 if ($this->status != self::STATUS_VALIDATED) {
652 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'EVALUATIONLINE_CANCEL');
662 public function reopen($user, $notrigger = 0)
665 if ($this->status != self::STATUS_CANCELED) {
676 return $this->
setStatusCommon($user, self::STATUS_VALIDATED, $notrigger,
'EVALUATIONLINE_REOPEN');
689 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
691 global $conf, $langs, $hookmanager;
693 if (!empty($conf->dol_no_mouse_hover)) {
699 $label =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Evaluationdet").
'</u>';
700 if (isset($this->status)) {
701 $label .=
' '.$this->getLibStatut(5);
704 $label .=
'<b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
706 $url =
dol_buildpath(
'/hrm/evaluationdet_card.php', 1).
'?id='.$this->id;
708 if ($option !=
'nolink') {
710 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
711 if ($save_lastsearch_value == -1 && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
712 $add_save_lastsearch_values = 1;
714 if ($add_save_lastsearch_values) {
715 $url .=
'&save_lastsearch_values=1';
720 if (empty($notooltip)) {
721 if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
722 $label = $langs->trans(
"ShowEvaluationdet");
723 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
725 $linkclose .=
' title="'.dol_escape_htmltag($label, 1).
'"';
726 $linkclose .=
' class="classfortooltip'.($morecss ?
' '.$morecss :
'').
'"';
728 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
731 if ($option ==
'nolink') {
732 $linkstart =
'<span';
734 $linkstart =
'<a href="'.$url.
'"';
736 $linkstart .= $linkclose.
'>';
737 if ($option ==
'nolink') {
738 $linkend =
'</span>';
743 $result .= $linkstart;
745 if (empty($this->showphoto_on_popup)) {
747 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
751 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
753 list($class, $module) = explode(
'@', $this->picto);
756 $filename = $filearray[0][
'name'];
757 if (!empty($filename)) {
758 $pospoint = strpos($filearray[0][
'name'],
'.');
760 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
761 if (empty($conf->global->{strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS'})) {
762 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref"><img class="photo'.$module.
'" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div></div>';
764 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div>';
769 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') :
'class="'.(($withpicto != 2) ?
'paddingright ' :
'').
'classfortooltip"'), 0, 0, $notooltip ? 0 : 1);
774 if ($withpicto != 2) {
775 $result .= $this->ref;
781 global $action, $hookmanager;
782 $hookmanager->initHooks(array(
'evaluationlinedao'));
783 $parameters = array(
'id'=>$this->
id,
'getnomurl' => &$result);
784 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
786 $result = $hookmanager->resPrint;
788 $result .= $hookmanager->resPrint;
802 return $this->LibStatut($this->status, $mode);
816 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
819 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
820 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
821 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
822 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
823 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Enabled');
824 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Disabled');
827 $statusType =
'status'.$status;
829 if ($status == self::STATUS_CANCELED) {
830 $statusType =
'status6';
833 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
844 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
845 $sql .=
' fk_user_creat, fk_user_modif';
846 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
847 $sql .=
' WHERE t.rowid = '.((int) $id);
848 $result = $this->
db->query($sql);
850 if ($this->
db->num_rows($result)) {
851 $obj = $this->
db->fetch_object($result);
852 $this->
id = $obj->rowid;
854 $this->user_creation_id = $obj->fk_user_creat;
855 $this->user_modification_id = $obj->fk_user_modif;
856 $this->date_creation = $this->
db->jdate($obj->datec);
857 $this->date_modification = empty($obj->datem) ?
'' : $this->
db->jdate($obj->datem);
860 $this->
db->free($result);
878 $this->initAsSpecimenCommon();
888 $this->lines = array();
890 $objectline =
new EvaluationLine($this->
db);
891 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0, array(
'customsql'=>
'fk_evaluationdet = '.$this->
id));
893 if (is_numeric($result)) {
894 $this->error = $this->error;
895 $this->errors = $this->errors;
898 $this->lines = $result;
910 global $langs, $conf;
913 if (empty($conf->global->hrm_EVALUATIONLINE_ADDON)) {
914 $conf->global->hrm_EVALUATIONLINE_ADDON =
'mod_evaluationdet_standard';
917 if (!empty($conf->global->hrm_EVALUATIONLINE_ADDON)) {
920 $file = $conf->global->hrm_EVALUATIONLINE_ADDON.
".php";
921 $classname = $conf->global->hrm_EVALUATIONLINE_ADDON;
924 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
925 foreach ($dirmodels as $reldir) {
929 $mybool |= @include_once $dir.$file;
932 if ($mybool ===
false) {
937 if (class_exists($classname)) {
938 $obj =
new $classname();
939 $numref = $obj->getNextValue($this);
941 if ($numref !=
'' && $numref !=
'-1') {
944 $this->error = $obj->error;
949 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
953 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
969 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams = null)
971 global $conf, $langs;
974 $includedocgeneration = 0;
979 $modele =
'standard_evaluationdet';
981 if (!empty($this->model_pdf)) {
982 $modele = $this->model_pdf;
983 } elseif (!empty($conf->global->EVALUATIONLINE_ADDON_PDF)) {
984 $modele = $conf->global->EVALUATIONLINE_ADDON_PDF;
988 $modelpath =
"core/modules/hrm/doc/";
990 if ($includedocgeneration && !empty($modele)) {
991 $result = $this->commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1006 global $conf, $langs;
1022 $this->
db->commit();
1029 require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
fetchLines()
Load object lines in memory from the database.
deleteCommon(User $user, $notrigger=false, $forcechilddeletion=0)
Delete object in database.
info($id)
Load the info information in the object.
Class for Evaluationline.
fetchLinesCommon($morewhere= '')
Load object in memory from the database.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
$conf db
API class for accounts.
fetchAll($sortorder= '', $sortfield= '', $limit=0, $offset=0, array $filter=array(), $filtermode= 'AND')
Load list of objects in memory from the database.
dol_now($mode= 'auto')
Return date for now.
Class to manage Dolibarr users.
Class to manage Dolibarr database access.
fetch($id, $ref=null)
Load object in memory from the database.
createCommon(User $user, $notrigger=false)
Create object into database.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
reopen($user, $notrigger=0)
Set back to validated status.
__construct(DoliDB $db)
Constructor.
getLibStatut($mode=0)
Return the label of the status.
getNomUrl($withpicto=0, $option= '', $notooltip=0, $morecss= '', $save_lastsearch_value=-1)
Return a link to the object card (with optionaly the picto)
doScheduledJob()
Action executed by scheduler CAN BE A CRON TASK.
dol_strlen($string, $stringencoding= 'UTF-8')
Make a strlen call.
getFieldList($alias= '')
Function to concat keys of fields.
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_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
img_object($titlealt, $picto, $moreatt= '', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
LibStatut($status, $mode=0)
Return the status.
updateCommon(User $user, $notrigger=false)
Update object into database.
dol_sanitizeFileName($str, $newstr= '_', $unaccent=1)
Clean a string to use it as a file name.
dol_dir_list($path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0)
Scan a directory and return a list of files/directories.
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
update(User $user, $notrigger=false)
Update object into database.
if(isModEnabled('facture')&&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur')&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)&&$user->rights->fournisseur->facture->lire)||(isModEnabled('supplier_invoice')&&$user->rights->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->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
createFromClone(User $user, $fromid)
Clone an object into another one.
validate($user, $notrigger=0)
Validate object.
deleteLineCommon(User $user, $idline, $notrigger=false)
Delete a line of object in database.
copy_linked_contact($objFrom, $source= 'internal')
Copy contact from one element to current.
call_trigger($triggerName, $user)
Call trigger based on this instance.
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module...
setStatusCommon($user, $status, $notrigger=0, $triggercode= '')
Set to a status.
getLinesArray()
Create an array of lines.
dolGetStatus($statusLabel= '', $statusLabelShort= '', $html= '', $statusType= 'status0', $displayMode=0, $url= '', $params=array())
Output the badge of a status.
cancel($user, $notrigger=0)
Set cancel status.
create(User $user, $notrigger=false)
Create object into database.
setDraft($user, $notrigger=0)
Set draft status.
Parent class of all other business classes (invoices, contracts, proposals, orders, ...)
fetchCommon($id, $ref=null, $morewhere= '')
Load object in memory from the database.
deleteLine(User $user, $idline, $notrigger=false)
Delete a line of object in database.