26require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
48 public $cache_warehouses = array();
52 public $cache_lot = array();
56 public $cache_workstations = array();
87 public function loadWarehouses($fk_product = 0, $batch =
'', $status =
'', $sumStock =
true, $exclude = array(), $stockMin =
false, $orderBy =
'e.ref')
91 if (empty($fk_product) && count($this->cache_warehouses)) {
95 $warehouseStatus = array();
97 if (preg_match(
'/warehouseclosed/', $status)) {
100 if (preg_match(
'/warehouseopen/', $status)) {
103 if (preg_match(
'/warehouseinternal/', $status)) {
107 $sql =
"SELECT e.rowid, e.ref as label, e.description, e.fk_parent";
108 if (!empty($fk_product) && $fk_product > 0) {
109 if (!empty($batch)) {
110 $sql .=
", pb.qty as stock";
112 $sql .=
", ps.reel as stock";
114 } elseif ($sumStock) {
115 $sql .=
", sum(ps.reel) as stock";
117 $sql .=
" FROM ".$this->db->prefix().
"entrepot as e";
118 $sql .=
" LEFT JOIN ".$this->db->prefix().
"product_stock as ps on ps.fk_entrepot = e.rowid";
119 if (!empty($fk_product) && $fk_product > 0) {
120 $sql .=
" AND ps.fk_product = ".((int) $fk_product);
121 if (!empty($batch)) {
122 $sql .=
" LEFT JOIN ".$this->db->prefix().
"product_batch as pb on pb.fk_product_stock = ps.rowid AND pb.batch = '".$this->db->escape($batch).
"'";
125 $sql .=
" WHERE e.entity IN (".getEntity(
'stock').
")";
126 if (count($warehouseStatus)) {
127 $sql .=
" AND e.statut IN (".$this->db->sanitize(implode(
',', $warehouseStatus)).
")";
129 $sql .=
" AND e.statut = 1";
132 if (is_array($exclude) && !empty($exclude)) {
133 $sql .=
' AND e.rowid NOT IN('.$this->db->sanitize(implode(
',', $exclude)).
')';
137 if ($stockMin !==
false) {
138 if (!empty($fk_product) && $fk_product > 0) {
139 if (!empty($batch)) {
140 $sql .=
" AND pb.qty > ".((float) $stockMin);
142 $sql .=
" AND ps.reel > ".((float) $stockMin);
147 if ($sumStock && empty($fk_product)) {
148 $sql .=
" GROUP BY e.rowid, e.ref, e.description, e.fk_parent";
151 if ($stockMin !==
false) {
152 $sql .=
" HAVING sum(ps.reel) > ".((float) $stockMin);
155 $sql .=
" ORDER BY ".$orderBy;
157 dol_syslog(get_class($this).
'::loadWarehouses', LOG_DEBUG);
158 $resql = $this->db->query($sql);
160 $num = $this->db->num_rows($resql);
163 $obj = $this->db->fetch_object($resql);
167 $this->cache_warehouses[$obj->rowid][
'id'] = $obj->rowid;
168 $this->cache_warehouses[$obj->rowid][
'label'] = $obj->label;
169 $this->cache_warehouses[$obj->rowid][
'parent_id'] = $obj->fk_parent;
170 $this->cache_warehouses[$obj->rowid][
'description'] = $obj->description;
171 $this->cache_warehouses[$obj->rowid][
'stock'] = $obj->stock;
176 foreach ($this->cache_warehouses as $obj_rowid => $tab) {
177 $this->cache_warehouses[$obj_rowid][
'full_label'] = $this->
get_parent_path($tab);
199 global
$conf, $langs;
201 if (empty($fk_product) && count($this->cache_workstations)) {
205 $sql =
"SELECT w.rowid, w.ref as ref, w.label as label, w.type, w.nb_operators_required,w.thm_operator_estimated,w.thm_machine_estimated";
206 $sql .=
" FROM ".$this->db->prefix().
"workstation_workstation as w";
207 $sql .=
" WHERE 1 = 1";
208 if (!empty($fk_product) && $fk_product > 0) {
209 $sql .=
" AND w.fk_product = ".((int) $fk_product);
211 $sql .=
" AND w.entity IN (".getEntity(
'workstation').
")";
213 if (is_array($exclude) && !empty($exclude)) {
214 $sql .=
' AND w.rowid NOT IN('.$this->db->sanitize(implode(
',', $exclude)).
')';
217 $sql .=
" ORDER BY ".$orderBy;
219 dol_syslog(get_class($this).
'::loadWorkstations', LOG_DEBUG);
220 $resql = $this->db->query($sql);
222 $num = $this->db->num_rows($resql);
225 $obj = $this->db->fetch_object($resql);
227 $this->cache_workstations[$obj->rowid][
'id'] = $obj->rowid;
228 $this->cache_workstations[$obj->rowid][
'ref'] = $obj->ref;
229 $this->cache_workstations[$obj->rowid][
'label'] = $obj->label;
230 $this->cache_workstations[$obj->rowid][
'type'] = $obj->type;
231 $this->cache_workstations[$obj->rowid][
'nb_operators_required'] = $obj->nb_operators_required;
232 $this->cache_workstations[$obj->rowid][
'thm_operator_estimated'] = $obj->thm_operator_estimated;
233 $this->cache_workstations[$obj->rowid][
'thm_machine_estimated'] = $obj->thm_machine_estimated;
258 if (empty($final_label)) {
259 $final_label = $tab[
'label'];
262 if (empty($tab[
'parent_id']) ||
getDolGlobalInt(
'MAIN_WAREHOUSE_LIST_DISPLAY_MODE') === 1) {
265 if (!empty($this->cache_warehouses[$tab[
'parent_id']])) {
266 if (
getDolGlobalInt(
'MAIN_WAREHOUSE_LIST_DISPLAY_MODE') !== 2 || (
getDolGlobalInt(
'MAIN_WAREHOUSE_LIST_DISPLAY_MODE') === 2 && empty($this->cache_warehouses[$tab[
'parent_id']][
'parent_id']))) {
267 $final_label = $this->cache_warehouses[$tab[
'parent_id']][
'label'] .
' >> ' . $final_label;
270 return $this->
get_parent_path($this->cache_warehouses[$tab[
'parent_id']], $final_label);
303 public function selectWarehouses($selected =
'', $htmlname =
'idwarehouse', $filterstatus =
'', $empty = 0, $disabled = 0, $fk_product = 0, $empty_label =
'', $showstock = 0, $forcecombo = 0, $events = array(), $morecss =
'minwidth200', $exclude = array(), $showfullpath = 1, $stockMin =
false, $orderBy =
'e.ref', $multiselect = 0)
305 global
$conf, $langs, $user, $hookmanager;
307 dol_syslog(get_class($this).
"::selectWarehouses " . (is_array($selected) ?
'selected is array' : $selected) .
", $htmlname, $filterstatus, $empty, $disabled, $fk_product, $empty_label, $showstock, $forcecombo, $morecss", LOG_DEBUG);
310 if ((!
getDolGlobalString(
'ENTREPOT_EXTRA_STATUS')) && ($filterstatus===
"warehouseinternal")) {
313 if (!empty($fk_product) && $fk_product > 0) {
314 $this->cache_warehouses = array();
317 $this->
loadWarehouses($fk_product,
'', $filterstatus,
true, $exclude, $stockMin, $orderBy);
318 $nbofwarehouses = count($this->cache_warehouses);
320 if (
$conf->use_javascript_ajax && !$forcecombo) {
321 include_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
323 $out .= $comboenhancement;
326 if (strpos($htmlname,
'search_') !== 0) {
327 if (empty($user->fk_warehouse) || $user->fk_warehouse == -1) {
328 if (is_scalar($selected) && ($selected ==
'-2' || $selected ==
'ifone') &&
getDolGlobalString(
'MAIN_DEFAULT_WAREHOUSE')) {
332 if (is_scalar($selected) && ($selected ==
'-2' || $selected ==
'ifone') &&
getDolGlobalString(
'MAIN_DEFAULT_WAREHOUSE_USER')) {
333 $selected = $user->fk_warehouse;
338 $out .=
'<!-- selectWarehouses -->';
339 $out .=
'<select '.($multiselect ?
'multiple ' :
'').
'class="flat'.($morecss ?
' '.$morecss :
'').
'"'.($disabled ?
' disabled' :
'');
340 $out .=
' id="'.$htmlname.
'" name="'.($htmlname.($multiselect ?
'[]' :
'').($disabled ?
'_disabled' :
'')).
'"';
344 $out .=
'<option value="-1">'.($empty_label ? $empty_label :
' ').
'</option>';
346 foreach ($this->cache_warehouses as
$id => $arraytypes) {
349 $label .= $arraytypes[
'full_label'];
351 $label .= $arraytypes[
'label'];
353 if (($fk_product || ($showstock > 0)) && ($arraytypes[
'stock'] != 0 || ($showstock > 0))) {
354 if ($arraytypes[
'stock'] <= 0) {
355 $label .=
' <span class="text-warning">('.$langs->trans(
"Stock").
':'.$arraytypes[
'stock'].
')</span>';
357 $label .=
' <span class="opacitymedium">('.$langs->trans(
"Stock").
':'.$arraytypes[
'stock'].
')</span>';
361 $out .=
'<option value="'.$id.
'"';
362 if (is_array($selected)) {
363 if (in_array(
$id, $selected)) {
367 if ($selected ==
$id || (!empty($selected) && preg_match(
'/^ifone/', $selected) && $nbofwarehouses == 1)) {
371 $out .=
' data-html="'.dol_escape_htmltag($label).
'"';
378 $out .=
'<input type="hidden" name="'.$htmlname.
'" value="'.(($selected > 0) ? $selected :
'').
'">';
382 'selected' => $selected,
383 'htmlname' => $htmlname,
384 'filterstatus' => $filterstatus,
386 'disabled ' => $disabled,
387 'fk_product' => $fk_product,
388 'empty_label' => $empty_label,
389 'showstock' => $showstock,
390 'forcecombo' => $forcecombo,
392 'morecss' => $morecss,
393 'exclude' => $exclude,
394 'showfullpath' => $showfullpath,
395 'stockMin' => $stockMin,
396 'orderBy' => $orderBy
399 $reshook = $hookmanager->executeHooks(
'selectWarehouses', $parameters, $this);
401 $out = $hookmanager->resPrint;
402 } elseif ($reshook == 0) {
403 $out .= $hookmanager->resPrint;
428 public function selectWorkstations($selected =
'', $htmlname =
'idworkstations', $empty = 0, $disabled = 0, $fk_product = 0, $empty_label =
'', $forcecombo = 0, $events = array(), $morecss =
'minwidth200', $exclude = array(), $showfullpath = 1, $orderBy =
'e.ref')
430 global
$conf, $langs, $user, $hookmanager;
432 dol_syslog(get_class($this).
"::selectWorkstations $selected, $htmlname, $empty, $disabled, $fk_product, $empty_label, $forcecombo, $morecss", LOG_DEBUG);
436 if (!empty($fk_product) && $fk_product > 0) {
437 $this->cache_workstations = array();
441 $nbofworkstations = count($this->cache_workstations);
443 if (
$conf->use_javascript_ajax && !$forcecombo) {
444 include_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
446 $out .= $comboenhancement;
449 if (strpos($htmlname,
'search_') !== 0) {
450 if (empty($user->fk_workstation) || $user->fk_workstation == -1) {
451 if (($selected ==
'-2' || $selected ==
'ifone') &&
getDolGlobalString(
'MAIN_DEFAULT_WORKSTATION')) {
455 if (($selected ==
'-2' || $selected ==
'ifone') &&
getDolGlobalString(
'MAIN_DEFAULT_WORKSTATION')) {
456 $selected = $user->fk_workstation;
461 $out .=
'<select class="flat'.($morecss ?
' '.$morecss :
'').
'"'.($disabled ?
' disabled' :
'').
' id="'.$htmlname.
'" name="'.($htmlname.($disabled ?
'_disabled' :
'')).
'">';
463 $out .=
'<option value="-1">'.($empty_label ? $empty_label :
' ').
'</option>';
465 foreach ($this->cache_workstations as
$id => $arraytypes) {
466 $label = $arraytypes[
'label'];
468 $out .=
'<option value="'.$id.
'"';
469 if ($selected ==
$id || (preg_match(
'/^ifone/', $selected) && $nbofworkstations == 1)) {
472 $out .=
' data-html="'.dol_escape_htmltag($label).
'"';
479 $out .=
'<input type="hidden" name="'.$htmlname.
'" value="'.(($selected > 0) ? $selected :
'').
'">';
483 'selected' => $selected,
484 'htmlname' => $htmlname,
485 'filterstatus' => $filterstatus,
487 'disabled ' => $disabled,
488 'fk_product' => $fk_product,
489 'empty_label' => $empty_label,
490 'forcecombo' => $forcecombo,
492 'morecss' => $morecss,
493 'exclude' => $exclude,
494 'showfullpath' => $showfullpath,
495 'orderBy' => $orderBy
498 $reshook = $hookmanager->executeHooks(
'selectWorkstations', $parameters, $this);
500 $out = $hookmanager->resPrint;
501 } elseif ($reshook == 0) {
502 $out .= $hookmanager->resPrint;
520 if ($htmlname !=
"none") {
521 print
'<form method="POST" action="'.$page.
'">';
522 print
'<input type="hidden" name="action" value="setwarehouse">';
523 print
'<input type="hidden" name="token" value="'.newToken().
'">';
524 print
'<table class="nobordernopadding">';
528 print
'<td class="left"><input type="submit" class="button smallpaddingimp" value="'.$langs->trans(
"Modify").
'"></td>';
529 print
'</tr></table></form>';
532 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
533 $warehousestatic =
new Entrepot($this->db);
534 $warehousestatic->fetch($selected);
535 print $warehousestatic->getNomUrl();
555 public function select_measuring_units($name =
'measuring_units', $measuring_style =
'', $selected =
'0', $adddefault = 0, $mode = 0)
573 public function selectMeasuringUnits($name =
'measuring_units', $measuring_style =
'', $selected =
'0', $adddefault = 0, $mode = 0, $morecss =
'minwidth75 maxwidth125')
577 $langs->load(
"other");
580 $placeholderID = ($mode == 2 ?
'99999999' :
'-1');
583 require_once DOL_DOCUMENT_ROOT.
'/core/class/cunits.class.php';
584 $measuringUnits =
new CUnits($db);
587 $filter[
't.active'] = 1;
588 if ($measuring_style) {
589 $filter[
't.unit_type'] = $measuring_style;
592 $result = $measuringUnits->fetchAll(
603 $return .=
'<select class="flat'.($morecss ?
' '.$morecss :
'').
'" name="'.$name.
'" id="'.$name.
'">';
604 if ($adddefault || $adddefault ===
'') {
605 $return .=
'<option value="0"'.($selected ===
'0' ?
' selected' :
'').
'>'.($adddefault ?
'('.$langs->trans(
"Default").
')' :
'').
'</option>';
608 foreach ($measuringUnits->records as $lines) {
609 $return .=
'<option value="';
611 $return .= $lines->short_label;
612 } elseif ($mode == 2) {
613 $return .= $lines->scale;
615 $return .= $lines->id;
618 if ($mode == 1 && $lines->short_label == $selected) {
619 $return .=
' selected';
620 } elseif ($mode == 2 && $lines->scale == $selected) {
621 $return .=
' selected';
622 } elseif ($mode == 0 && $lines->id == $selected) {
623 $return .=
' selected';
626 if ($measuring_style ==
'time') {
627 $return .= $langs->trans(ucfirst($lines->label));
629 $return .= $langs->trans($lines->label);
631 $return .=
'</option>';
633 $return .=
'</select>';
636 $return .=
ajax_combobox($name, [], 0, 0,
'resolve', $placeholderID);
655 $langs->load(
'products');
660 require_once DOL_DOCUMENT_ROOT.
'/core/class/cproductnature.class.php';
664 $filter[
't.active'] = 1;
666 $result = $productNature->fetchAll(
'',
'', 0, 0, $filter);
672 $return .=
'<select class="flat" name="'.$name.
'" id="'.$name.
'">';
673 if ($showempty || ($selected ==
'' || $selected ==
'-1')) {
674 $return .=
'<option value="-1"';
675 if ($selected ==
'' || $selected ==
'-1') {
676 $return .=
' selected';
678 $return .=
'></option>';
680 if (!empty($productNature->records) && is_array($productNature->records)) {
681 foreach ($productNature->records as $lines) {
682 $return .=
'<option value="';
684 $return .= $lines->label;
686 $return .= $lines->code;
691 if ($mode == 1 && $lines->label == $selected) {
692 $return .=
' selected';
693 } elseif ($lines->code == $selected) {
694 $return .=
' selected';
698 $return .= $langs->trans($lines->label);
699 $return .=
'</option>';
702 $return .=
'</select>';
728 public function selectLotStock($selected =
'', $htmlname =
'batch_id', $filterstatus =
'', $empty = 0, $disabled = 0, $fk_product = 0, $fk_entrepot = 0, $objectLines = array(), $empty_label =
'', $forcecombo = 0, $events = array(), $morecss =
'minwidth200')
730 global
$conf, $langs;
732 dol_syslog(get_class($this).
"::selectLotStock $selected, $htmlname, $filterstatus, $empty, $disabled, $fk_product, $fk_entrepot, $empty_label, $forcecombo, $morecss", LOG_DEBUG);
735 $productIdArray = array();
736 if (!is_array($objectLines) || !count($objectLines)) {
737 if (!empty($fk_product) && $fk_product > 0) {
738 $productIdArray[] = (int) $fk_product;
741 foreach ($objectLines as $line) {
742 if ($line->fk_product) {
743 $productIdArray[] = $line->fk_product;
750 if (
$conf->use_javascript_ajax && !$forcecombo) {
751 include_once DOL_DOCUMENT_ROOT.
'/core/lib/ajax.lib.php';
753 $out .= $comboenhancement;
756 $out .=
'<select class="flat'.($morecss ?
' '.$morecss :
'').
'"'.($disabled ?
' disabled' :
'').
' id="'.$htmlname.
'" name="'.($htmlname.($disabled ?
'_disabled' :
'')).
'">';
758 $out .=
'<option value="-1">'.($empty_label ? $empty_label :
' ').
'</option>';
760 if (!empty($fk_product) && $fk_product > 0) {
761 $productIdArray = array((
int) $fk_product);
763 foreach ($this->cache_lot as $key => $value) {
764 $productIdArray[] = $key;
768 foreach ($productIdArray as $productId) {
769 foreach ($this->cache_lot[$productId] as
$id => $arraytypes) {
770 if (empty($fk_entrepot) || $fk_entrepot == $arraytypes[
'entrepot_id']) {
771 $label = $arraytypes[
'entrepot_label'].
' - ';
772 $label .= $arraytypes[
'batch'];
773 if ($arraytypes[
'qty'] <= 0) {
774 $label .=
' <span class=\'text-warning\'>('.$langs->trans(
"Stock").
' '.$arraytypes[
'qty'].
')</span>';
776 $label .=
' <span class=\'opacitymedium\'>('.$langs->trans(
"Stock").
' '.$arraytypes[
'qty'].
')</span>';
779 $out .=
'<option value="'.$id.
'"';
781 if ($selected ==
$id || ($selected ==
'ifone' && $nboflot == 1)) {
784 $out .=
' data-html="'.dol_escape_htmltag($label).
'"';
793 $out .=
'<input type="hidden" name="'.$htmlname.
'" value="'.(($selected > 0) ? $selected :
'').
'">';
811 public function selectLotDataList($htmlname =
'batch_id', $empty = 0, $fk_product = 0, $fk_entrepot = 0, $objectLines = array())
813 global
$conf, $langs, $hookmanager;
815 dol_syslog(get_class($this).
"::selectLotDataList $htmlname, $empty, $fk_product, $fk_entrepot", LOG_DEBUG);
818 $productIdArray = array();
819 if (!is_array($objectLines) || !count($objectLines)) {
820 if (!empty($fk_product) && $fk_product > 0) {
821 $productIdArray[] = (int) $fk_product;
824 foreach ($objectLines as $line) {
825 if ($line->fk_product) {
826 $productIdArray[] = $line->fk_product;
833 if (!empty($fk_product) && $fk_product > 0) {
834 $productIdArray = array((
int) $fk_product);
836 foreach ($this->cache_lot as $key => $value) {
837 $productIdArray[] = $key;
841 if (empty($hookmanager)) {
842 include_once DOL_DOCUMENT_ROOT .
'/core/class/hookmanager.class.php';
845 $hookmanager->initHooks(array(
'productdao'));
846 $parameters = array(
'productIdArray' => $productIdArray,
'htmlname' => $htmlname);
847 $reshook = $hookmanager->executeHooks(
'selectLotDataList', $parameters, $this);
849 return $hookmanager->error;
850 } elseif ($reshook > 0) {
851 return $hookmanager->resPrint;
853 $out .= $hookmanager->resPrint;
856 $out .=
'<datalist id="'.$htmlname.
'" >';
857 foreach ($productIdArray as $productId) {
858 if (array_key_exists($productId, $this->cache_lot)) {
859 foreach ($this->cache_lot[$productId] as
$id => $arraytypes) {
860 if (empty($fk_entrepot) || $fk_entrepot == $arraytypes[
'entrepot_id']) {
861 $label = $arraytypes[
'entrepot_label'] .
' - ';
862 $label .= $arraytypes[
'batch'];
864 $out .=
'<option data-warehouse="'.dol_escape_htmltag($label).
'" value="' . $arraytypes[
'batch'] .
'">' . (
$conf->browser->name ===
'chrome' ?
'' : $arraytypes[
'batch']) .
' (' . $langs->trans(
'Stock Total') .
': ' . $arraytypes[
'qty'] .
')</option>';
869 $out .=
'</datalist>';
884 global
$conf, $langs;
886 $cacheLoaded =
false;
887 if (empty($productIdArray)) {
889 $this->cache_lot = array();
892 if (count($productIdArray) && count($this->cache_lot)) {
894 foreach ($productIdArray as $productId) {
895 $cacheLoaded = !empty($this->cache_lot[$productId]);
899 return count($this->cache_lot);
902 $this->cache_lot = array();
903 $productIdList = implode(
',', $productIdArray);
907 if (empty($hookmanager)) {
908 include_once DOL_DOCUMENT_ROOT .
'/core/class/hookmanager.class.php';
911 $hookmanager->initHooks(array(
'productdao'));
912 $parameters = array(
'productIdList' => $productIdList);
913 $reshook = $hookmanager->executeHooks(
'loadLotStock', $parameters, $this);
915 $this->error = $hookmanager->error;
918 if (!empty($hookmanager->resArray[
'batch_list']) && is_array($hookmanager->resArray[
'batch_list'])) {
919 $this->cache_lot = $hookmanager->resArray[
'batch_list'];
920 $batch_count = (int) $hookmanager->resArray[
'batch_count'];
926 $sql =
"SELECT pb.batch, pb.rowid, ps.fk_entrepot, pb.qty, e.ref as label, ps.fk_product";
927 $sql .=
" FROM ".$this->db->prefix().
"product_batch as pb";
928 $sql .=
" LEFT JOIN ".$this->db->prefix().
"product_stock as ps on ps.rowid = pb.fk_product_stock";
929 $sql .=
" LEFT JOIN ".$this->db->prefix().
"entrepot as e on e.rowid = ps.fk_entrepot AND e.entity IN (".
getEntity(
'stock').
")";
930 if (!empty($productIdList)) {
931 $sql .=
" WHERE ps.fk_product IN (".$this->db->sanitize($productIdList).
")";
933 $sql .=
" ORDER BY e.ref, pb.batch";
935 dol_syslog(get_class($this).
'::loadLotStock', LOG_DEBUG);
936 $resql = $this->db->query($sql);
938 $num = $this->db->num_rows($resql);
941 $obj = $this->db->fetch_object($resql);
942 $this->cache_lot[$obj->fk_product][$obj->rowid][
'id'] = $obj->rowid;
943 $this->cache_lot[$obj->fk_product][$obj->rowid][
'batch'] = $obj->batch;
944 $this->cache_lot[$obj->fk_product][$obj->rowid][
'entrepot_id'] = $obj->fk_entrepot;
945 $this->cache_lot[$obj->fk_product][$obj->rowid][
'entrepot_label'] = $obj->label;
946 $this->cache_lot[$obj->fk_product][$obj->rowid][
'qty'] = $obj->qty;
950 return $batch_count + $num;
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
Class of dictionary of nature of product (used by imports)
Class of dictionary type of thirdparty (used by imports)
Class to manage warehouses.
const STATUS_OPEN_INTERNAL
Warehouse open and only operations for stock transfers/corrections allowed (not for customer shipping...
const STATUS_OPEN_ALL
Warehouse open and any operations are allowed (customer shipping, supplier dispatch,...
const STATUS_CLOSED
Warehouse closed, inactive.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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.
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...