34require 
'../../main.inc.php';
 
   35require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
 
   36require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
 
   37require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
 
   38require_once DOL_DOCUMENT_ROOT.
'/core/lib/stock.lib.php';
 
   39require_once DOL_DOCUMENT_ROOT.
'/core/lib/product.lib.php';
 
   40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
 
   41require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
 
   42require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
 
   43require_once DOL_DOCUMENT_ROOT.
'/categories/class/categorie.class.php';
 
   44if (isModEnabled(
'project')) {
 
   45  require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
 
   46  require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
 
   50$langs->loadLangs(array(
'products', 
'stocks', 
'companies', 
'categories'));
 
   52$action = 
GETPOST(
'action', 
'aZ09');
 
   53$cancel = 
GETPOST(
'cancel', 
'alpha');
 
   55$backtopage = 
GETPOST(
'backtopage', 
'alpha');
 
   56$backtopageforcancel = 
GETPOST(
'backtopageforcancel', 
'alpha');
 
   66$sortfield = 
GETPOST(
'sortfield', 
'aZ09comma');
 
   67$sortorder = 
GETPOST(
'sortorder', 
'aZ09comma');
 
   80$hookmanager->initHooks(array(
'warehousecard', 
'stocklist', 
'globalcard'));
 
   86$extrafields->fetch_name_optionals_label(
$object->table_element);
 
   89if ($id > 0 || !empty($ref)) {
 
   90  $ret = 
$object->fetch($id, $ref);
 
   97$usercanread = $user->hasRight(
'stock', 
'lire');
 
   98$usercancreate = $user->hasRight(
'stock', 
'creer');
 
   99$usercandelete = $user->hasRight(
'stock', 
'supprimer');
 
  108$parameters = array(
'id' => $id, 
'ref' => $ref);
 
  109$reshook = $hookmanager->executeHooks(
'doActions', $parameters, 
$object, $action); 
 
  113if (empty($reshook)) {
 
  114  $backurlforlist = DOL_URL_ROOT.
'/product/stock/list.php';
 
  116  if (empty($backtopage) || ($cancel && empty($id))) {
 
  117    if (empty($backtopage) || ($cancel && strpos($backtopage, 
'__ID__'))) {
 
  118      if (empty($id) && (($action != 
'add' && $action != 
'create') || $cancel)) {
 
  119        $backtopage = $backurlforlist;
 
  121        $backtopage = DOL_URL_ROOT.
'/product/stock/card.php?id='.((!empty($id) && $id > 0) ? $id : 
'__ID__');
 
  127    if (!empty($backtopageforcancel)) {
 
  128      header(
"Location: ".$backtopageforcancel);
 
  130    } elseif (!empty($backtopage)) {
 
  131      header(
"Location: ".$backtopage);
 
  138  if ($action == 
'add' && $user->hasRight(
'stock', 
'creer')) {
 
  155      $ret = $extrafields->setOptionalsFromPost(
null, 
$object);
 
  166          $categories = 
GETPOST(
'categories', 
'array');
 
  167          $object->setCategories($categories);
 
  168          if (!empty($backtopage)) {
 
  169            $backtopage = str_replace(
"__ID__", (
string) $id, $backtopage);
 
  170            header(
"Location: ".$backtopage);
 
  173            header(
"Location: card.php?id=".urlencode((
string) ($id)));
 
  182      setEventMessages($langs->trans(
"ErrorWarehouseRefRequired"), 
null, 
'errors');
 
  188  if ($action == 
'confirm_delete' && $confirm == 
'yes' && $user->hasRight(
'stock', 
'supprimer')) {
 
  190    $result = 
$object->delete($user);
 
  193      header(
"Location: ".DOL_URL_ROOT.
'/product/stock/list.php?restore_lastsearch_values=1');
 
  202  if ($action == 
'update' && !$cancel && $user->hasRight(
'stock', 
'creer')) {
 
  218      $ret = $extrafields->setOptionalsFromPost(
null, 
$object, 
'@GETPOSTISSET');
 
  224        $ret = 
$object->update($id, $user);
 
  234        $categories = 
GETPOST(
'categories', 
'array');
 
  235        $object->setCategories($categories);
 
  242  } elseif ($action == 
'update_extras' && $user->hasRight(
'stock', 
'creer')) {
 
  246    $ret = $extrafields->setOptionalsFromPost(
null, 
$object, 
GETPOST(
'attribute', 
'restricthtml'));
 
  251      $result = 
$object->insertExtraFields();
 
  258      $action = 
'edit_extras';
 
  260  } elseif ($action == 
'classin' && $usercancreate) {
 
  265  if ($cancel == $langs->trans(
"Cancel")) {
 
  271  $upload_dir = $conf->stock->dir_output;
 
  272  $permissiontoadd = $user->hasRight(
'stock', 
'creer');
 
  273  include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
 
  281$productstatic = 
new Product($db);
 
  282$form = 
new Form($db);
 
  286if (isModEnabled(
'project')) {
 
  290$title = $langs->trans(
"WarehouseCard");
 
  291if ($action == 
'create') {
 
  292  $title = $langs->trans(
"NewWarehouse");
 
  295$help_url = 
'EN:Module_Stocks_En|FR:Module_Stock|ES:Módulo_Stocks';
 
  296llxHeader(
"", $title, $help_url, 
'', 0, 0, 
'', 
'', 
'', 
'mod-product page-stock_card');
 
  299if ($action == 
'create') {
 
  304  print 
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="post">'.
"\n";
 
  305  print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  306  print 
'<input type="hidden" name="action" value="add">';
 
  307  print 
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
 
  311  print 
'<table class="border centpercent">';
 
  314  print 
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Ref").
'</td><td><input class="width200" name="libelle" value=""></td></tr>';
 
  316  print 
'<tr><td>'.$langs->trans(
"LocationSummary").
'</td><td><input name="lieu" size="40" value="'.(!empty(
$object->lieu) ? 
$object->lieu : 
'').
'"></td></tr>';
 
  319  print 
'<tr><td>'.$langs->trans(
"AddIn").
'</td><td>';
 
  320  print 
img_picto(
'', 
'stock').$formproduct->selectWarehouses((GETPOSTISSET(
'fk_parent') ? 
GETPOSTINT(
'fk_parent') : 
'ifone'), 
'fk_parent', 
'', 1);
 
  324  if (isModEnabled(
'project')) {
 
  325    $langs->load(
'projects');
 
  326    print 
'<tr><td>'.$langs->trans(
'Project').
'</td><td colspan="2">';
 
  327    print 
img_picto(
'', 
'project').$formproject->select_projects(($socid > 0 ? $socid : -1), $projectid, 
'projectid', 0, 0, 1, 1, 0, 0, 0, 
'', 1, 0, 
'maxwidth500');
 
  328    print 
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.$socid.
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.$socid).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
 
  333  print 
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
 
  335  require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
 
  336  $doleditor = 
new DolEditor(
'desc', (!empty(
$object->description) ? 
$object->description : 
''), 
'', 180, 
'dolibarr_notes', 
'In', false, true, isModEnabled(
'fckeditor'), ROWS_5, 
'90%');
 
  337  $doleditor->Create();
 
  340  print 
'<tr><td>'.$langs->trans(
'Address').
'</td><td><textarea name="address" class="quatrevingtpercent" rows="3" wrap="soft">';
 
  342  print 
'</textarea></td></tr>';
 
  345  print 
'<tr><td>'.$langs->trans(
'Zip').
'</td><td>';
 
  346  print $formcompany->select_ziptown((!empty(
$object->zip) ? 
$object->zip : 
''), 
'zipcode', array(
'town', 
'selectcountry_id', 
'state_id'), 6);
 
  348  print 
'<tr><td>'.$langs->trans(
'Town').
'</td><td>';
 
  349  print $formcompany->select_ziptown((!empty(
$object->town) ? 
$object->town : 
''), 
'town', array(
'zipcode', 
'selectcountry_id', 
'state_id'));
 
  353  print 
'<tr><td>'.$langs->trans(
'Country').
'</td><td>';
 
  354  print 
img_picto(
'', 
'globe-americas', 
'class="paddingright"');
 
  355  print $form->select_country((!empty(
$object->country_id) ? 
$object->country_id : $mysoc->country_code), 
'country_id');
 
  357    print 
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
 
  362  print 
'<tr><td class="titlefieldcreate">'.$form->editfieldkey(
'Phone', 
'phone', 
'', 
$object, 0).
'</td><td>';
 
  363  print 
img_picto(
'', 
'object_phoning', 
'class="paddingright"');
 
  364  print 
'<input name="phone" size="20" value="'.$object->phone.
'"></td></tr>';
 
  365  print 
'<tr><td class="titlefieldcreate">'.$form->editfieldkey(
'Fax', 
'fax', 
'', 
$object, 0).
'</td>';
 
  367  print 
img_picto(
'', 
'object_phoning_fax', 
'class="paddingright"');
 
  368  print 
'<input name="fax" size="20" value="'.$object->fax.
'"></td></tr>';
 
  376  print 
'<tr><td>'.$langs->trans(
"Status").
'</td><td>';
 
  377  print 
'<select id="warehousestatus" name="statut" class="flat minwidth100">';
 
  378  foreach (
$object->labelStatus as $key => $value) {
 
  380      print 
'<option value="'.$key.
'" selected>'.$langs->trans($value).
'</option>';
 
  382      print 
'<option value="'.$key.
'">'.$langs->trans($value).
'</option>';
 
  390  include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
 
  392  if (isModEnabled(
'category')) {
 
  394    print 
'<tr><td>'.$langs->trans(
"Categories").
'</td><td colspan="3">';
 
  395    $cate_arbo = $form->select_all_categories(Categorie::TYPE_WAREHOUSE, 
'', 
'parent', 64, 0, 3);
 
  396    print 
img_picto(
'', 
'category', 
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, 
GETPOST(
'categories', 
'array'), 
'', 0, 
'quatrevingtpercent widthcentpercentminusx', 0, 0);
 
  403  print $form->buttonsSaveCancel(
"Create");
 
  408  if ($id > 0 || $ref) {
 
  410    $result = 
$object->fetch($id, $ref);
 
  412      print 
'No record found';
 
  417    if ($action != 
'edit' && $action != 
're-edit') {
 
  425      if ($action == 
'delete') {
 
  426        $formquestion = array(
 
  427          array(
'type' => 
'other', 
'name' => 
'info', 
'label' => 
img_warning(
'').$langs->trans(
"WarningThisWIllAlsoDeleteStock"), 
'morecss' => 
'warning')
 
  429        $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
"?id=".
$object->id, $langs->trans(
"DeleteAWarehouse"), $langs->trans(
"ConfirmDeleteWarehouse", 
$object->label), 
"confirm_delete", $formquestion, 0, 2);
 
  433      $parameters = array(
'formConfirm' => $formconfirm);
 
  434      $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, 
$object, $action); 
 
  435      if (empty($reshook)) {
 
  436        $formconfirm .= $hookmanager->resPrint;
 
  437      } elseif ($reshook > 0) {
 
  438        $formconfirm = $hookmanager->resPrint;
 
  445      $linkback = 
'<a href="'.DOL_URL_ROOT.
'/product/stock/list.php?restore_lastsearch_values=1">'.$langs->trans(
"BackToList").
'</a>';
 
  447      $morehtmlref = 
'<div class="refidno">';
 
  448      $morehtmlref .= $langs->trans(
"LocationSummary").
' : '.
$object->lieu;
 
  451      if (isModEnabled(
'project')) {
 
  452        $langs->load(
"projects");
 
  453        $morehtmlref .= 
'<br>'.img_picto(
'', 
'project').
' '.$langs->trans(
'Project').
' ';
 
  454        if ($usercancreate) {
 
  455          if ($action != 
'classify') {
 
  456            $morehtmlref .= 
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> : ';
 
  458          if ($action == 
'classify') {
 
  459            $projectid = 
$object->fk_project;
 
  460            $morehtmlref .= 
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.
$object->id.
'">';
 
  461            $morehtmlref .= 
'<input type="hidden" name="action" value="classin">';
 
  462            $morehtmlref .= 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  463            $morehtmlref .= $formproject->select_projects(($socid > 0 ? $socid : -1), $projectid, 
'projectid', 0, 0, 1, 1, 0, 0, 0, 
'', 1, 0, 
'maxwidth500');
 
  464            $morehtmlref .= 
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
 
  465            $morehtmlref .= 
'</form>';
 
  467            $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id, ($socid > 0 ? $socid : -1), 
$object->fk_project, 
'none', 0, 0, 0, 1, 
'', 
'maxwidth300');
 
  470          if (!empty(
$object->fk_project)) {
 
  472            $proj->fetch(
$object->fk_project);
 
  473            $morehtmlref .= 
' : '.$proj->getNomUrl(1);
 
  475              $morehtmlref .= 
' - '.$proj->title;
 
  482      $morehtmlref .= 
'</div>';
 
  485      if ($user->socid && !in_array(
'stock', explode(
',', 
getDolGlobalString(
'MAIN_MODULES_FOR_EXTERNAL')))) {
 
  489      dol_banner_tab(
$object, 
'ref', $linkback, $shownav, 
'ref', 
'ref', $morehtmlref);
 
  491      print 
'<div class="fichecenter">';
 
  492      print 
'<div class="fichehalfleft">';
 
  493      print 
'<div class="underbanner clearboth"></div>';
 
  495      print 
'<table class="border centpercent tableforfield">';
 
  498      $parentwarehouse = 
new Entrepot($db);
 
  499      if (!empty(
$object->fk_parent) && $parentwarehouse->fetch(
$object->fk_parent) > 0) {
 
  500        print 
'<tr><td>'.$langs->trans(
"ParentWarehouse").
'</td><td>';
 
  501        print $parentwarehouse->getNomUrl(3);
 
  508      print 
'<td class="titlefield tdtop">'.$langs->trans(
"Description").
'</td><td>'.
dol_htmlentitiesbr(
$object->description).
'</td></tr>';
 
  512        $labelusagestring = 
$object->fields[
'warehouse_usage'][
'arrayofkeyval'][empty(
$object->warehouse_usage) ? 1 : 
$object->warehouse_usage];
 
  513        $labelusage = $labelusagestring ? $langs->trans($labelusagestring) : 
'Unknown';
 
  514        print 
'<td class="titlefield tdtop">'.$langs->trans(
"WarehouseUsage").
'</td><td>'.
dol_htmlentitiesbr($labelusage).
'</td></tr>';
 
  517      $calcproductsunique = 
$object->nb_different_products();
 
  518      $calcproducts = 
$object->nb_products();
 
  521      print 
'<tr><td>'.$langs->trans(
"NumberOfDifferentProducts").
'</td><td>';
 
  522      print empty($calcproductsunique[
'nb']) ? 
'0' : $calcproductsunique[
'nb'];
 
  526      print 
'<tr><td>'.$langs->trans(
"NumberOfProducts").
'</td><td>';
 
  527      $valtoshow = 
price2num($calcproducts[
'nb'], 
'MS');
 
  528      print empty($valtoshow) ? 
'0' : $valtoshow;
 
  534      print 
'<div class="fichehalfright">';
 
  535      print 
'<div class="underbanner clearboth"></div>';
 
  537      print 
'<table class="border centpercent tableforfield">';
 
  540      print 
'<tr><td class="titlefield">'.$langs->trans(
"EstimatedStockValueShort").
'</td><td>';
 
  541      print 
price((empty($calcproducts[
'value']) ? 
'0' : 
price2num($calcproducts[
'value'], 
'MT')), 0, $langs, 0, -1, -1, $conf->currency);
 
  545      if ($user->hasRight(
'stock', 
'mouvement', 
'lire')) {
 
  546        $sql = 
"SELECT max(m.datem) as datem";
 
  547        $sql .= 
" FROM ".MAIN_DB_PREFIX.
"stock_mouvement as m";
 
  548        $sql .= 
" WHERE m.fk_entrepot = ".((int) 
$object->id);
 
  549        $resqlbis = $db->query($sql);
 
  551          $obj = $db->fetch_object($resqlbis);
 
  552          $lastmovementdate = $db->jdate($obj->datem);
 
  556        print 
'<tr><td>'.$langs->trans(
"LastMovement").
'</td><td>';
 
  557        if ($lastmovementdate) {
 
  559          print 
'     ';
 
  560          print 
img_picto($langs->trans(
'LastMovement'), 
'movement', 
'class="pictofixedwidth"');
 
  561          print 
'<a href="'.DOL_URL_ROOT.
'/product/stock/movement_list.php?id='.
$object->id.
'">'.$langs->trans(
"FullList").
'</a>';
 
  563          print $langs->trans(
"None");
 
  569      include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
 
  572      if (isModEnabled(
'category')) {
 
  573        print 
'<tr><td valign="middle">'.$langs->trans(
"Categories").
'</td><td colspan="3">';
 
  574        print $form->showCategories(
$object->id, Categorie::TYPE_WAREHOUSE, 1);
 
  583      print 
'<div class="clearboth"></div>';
 
  591      print 
"<div class=\"tabsAction\">\n";
 
  593      $parameters = array();
 
  594      $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, 
$object, $action); 
 
  595      if (empty($reshook)) {
 
  596        if (empty($action) || $action == 
'classin') {
 
  597          if ($user->hasRight(
'stock', 
'creer')) {
 
  598            print 
'<a class="butAction" href="card.php?action=edit&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Modify").
'</a>';
 
  600            print 
'<a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"Modify").
'</a>';
 
  603          if ($user->hasRight(
'stock', 
'supprimer')) {
 
  604            print 
'<a class="butActionDelete" href="card.php?action=delete&token='.newToken().
'&id='.
$object->id.
'">'.$langs->trans(
"Delete").
'</a>';
 
  606            print 
'<a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"Delete").
'</a>';
 
  617      $totalarray = array();
 
  618      $totalarray[
'val'] = array();
 
  619      $totalarray[
'pos'] = array();
 
  620      $totalarray[
'type'] = array();
 
  621      $totalarray[
'nbfield'] = 0;
 
  627      print 
'<div class="div-table-responsive">';
 
  628      print 
'<table class="noborder centpercent liste">';
 
  629      print 
'<tr class="liste_titre">';
 
  630      $parameters = array(
'totalarray' => &$totalarray);
 
  631      $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters); 
 
  632      print $hookmanager->resPrint;
 
  636      print_liste_field_titre(
"NumberOfUnit", 
"", 
"ps.reel", 
"&id=".$id, 
"", 
'', $sortfield, $sortorder, 
'right ');
 
  637      $totalarray[
'nbfield'] += 3;
 
  638      $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totalunit';
 
  639      $totalarray[
'type'][$totalarray[
'nbfield']] = 
'stock';
 
  643        $totalarray[
'nbfield']++;
 
  644        $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'units';
 
  645        $totalarray[
'type'][$totalarray[
'nbfield']] = 
'string';
 
  648      print_liste_field_titre($form->textwithpicto($langs->trans(
"AverageUnitPricePMPShort"), $langs->trans(
"AverageUnitPricePMPDesc")), 
"", 
"p.pmp", 
"&id=".$id, 
"", 
'', $sortfield, $sortorder, 
'right ');
 
  649      $totalarray[
'nbfield']++;
 
  651      print_liste_field_titre(
"EstimatedStockValueShort", 
"", 
"", 
"&id=".$id, 
"", 
'', $sortfield, $sortorder, 
'right ');
 
  652      $totalarray[
'nbfield']++;
 
  653      $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totalvalue';
 
  654      $totalarray[
'type'][$totalarray[
'nbfield']] = 
'';
 
  658        print_liste_field_titre(
"SellPriceMin", 
"", 
"p.price", 
"&id=".$id, 
"", 
'', $sortfield, $sortorder, 
'right ');
 
  659        $totalarray[
'nbfield']++;
 
  662        print_liste_field_titre(
"EstimatedStockValueSellShort", 
"", 
"", 
"&id=".$id, 
"", 
'', $sortfield, $sortorder, 
'right ');
 
  663        $totalarray[
'nbfield']++;
 
  664        $totalarray[
'pos'][$totalarray[
'nbfield']] = 
'totalvaluesell';
 
  665        $totalarray[
'type'][$totalarray[
'nbfield']] = 
'';
 
  667      if ($user->hasRight(
'stock', 
'mouvement', 
'creer')) {
 
  669        $totalarray[
'nbfield']++;
 
  671      if ($user->hasRight(
'stock', 
'creer')) {
 
  673        $totalarray[
'nbfield']++;
 
  676      $parameters = array(
'sortfield' => $sortfield, 
'sortorder' => $sortorder, 
'totalarray' => &$totalarray);
 
  677      $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters); 
 
  678      print $hookmanager->resPrint;
 
  682      $totalvalue = $totalvaluesell = 0;
 
  685      $separatedPMP = 
false;
 
  687        $separatedPMP = 
true;
 
  690      $sql = 
"SELECT p.rowid as rowid, p.ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.price, p.price_ttc, p.entity,";
 
  691      $sql .= 
"p.tosell, p.tobuy,";
 
  692      $sql .= 
"p.accountancy_code_sell,";
 
  693      $sql .= 
"p.accountancy_code_sell_intra,";
 
  694      $sql .= 
"p.accountancy_code_sell_export,";
 
  695      $sql .= 
"p.accountancy_code_buy,";
 
  696      $sql .= 
"p.accountancy_code_buy_intra,";
 
  697      $sql .= 
"p.accountancy_code_buy_export,";
 
  698      $sql .= 
'p.barcode,';
 
  700        $sql .= 
" pa.pmp as ppmp,";
 
  702        $sql .= 
" p.pmp as ppmp,";
 
  704      $sql .= 
" ps.reel as value";
 
  709      $parameters = array();
 
  710      $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters); 
 
  714      $sql .= $hookmanager->resPrint;
 
  715      $sql .= 
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps, ".MAIN_DB_PREFIX.
"product as p";
 
  718        $sql .= 
", ".MAIN_DB_PREFIX.
"product_perentity as pa";
 
  721      $sql .= 
" WHERE ps.fk_product = p.rowid";
 
  722      $sql .= 
" AND ps.reel <> 0"; 
 
  723      $sql .= 
" AND ps.fk_entrepot = ".((int) 
$object->id);
 
  726        $sql .= 
" AND pa.fk_product = p.rowid AND pa.entity = ".(int) $conf->entity;
 
  729      $sql .= $db->order($sortfield, $sortorder);
 
  732      $resql = $db->query($sql);
 
  734        $num = $db->num_rows($resql);
 
  739          $objp = $db->fetch_object($resql);
 
  743            $sql = 
"SELECT label";
 
  744            $sql .= 
" FROM ".MAIN_DB_PREFIX.
"product_lang";
 
  745            $sql .= 
" WHERE fk_product = ".((int) $objp->rowid);
 
  746            $sql .= 
" AND lang = '".$db->escape($langs->getDefaultLang()).
"'";
 
  749            $result = $db->query($sql);
 
  751              $objtp = $db->fetch_object($result);
 
  752              if (isset($objtp->label) && $objtp->label != 
'') {
 
  753                $objp->produit = $objtp->label;
 
  759          print 
'<tr class="oddeven">';
 
  761          $productstatic->id = $objp->rowid;
 
  762          $productstatic->ref = $objp->ref;
 
  763          $productstatic->label = $objp->produit;
 
  764          $productstatic->type = $objp->type;
 
  765          $productstatic->entity = $objp->entity;
 
  766          $productstatic->status_batch = $objp->tobatch;
 
  768            $productstatic->fk_unit = $objp->fk_unit;
 
  770          $productstatic->status = $objp->tosell;
 
  771          $productstatic->status_buy = $objp->tobuy;
 
  772          $productstatic->barcode = $objp->barcode;
 
  773          $productstatic->accountancy_code_sell = $objp->accountancy_code_sell;
 
  774          $productstatic->accountancy_code_sell_intra = $objp->accountancy_code_sell_intra;
 
  775          $productstatic->accountancy_code_sell_export = $objp->accountancy_code_sell_export;
 
  776          $productstatic->accountancy_code_buy = $objp->accountancy_code_buy;
 
  777          $productstatic->accountancy_code_buy_intra = $objp->accountancy_code_buy_intra;
 
  778          $productstatic->accountancy_code_buy_export = $objp->accountancy_code_buy_export;
 
  782          print $productstatic->getNomUrl(1, 
'stock', 16);
 
  786          print 
'<td class="tdoverflowmax200" title="'.dol_escape_htmltag($objp->produit).
'">'.
dol_escape_htmltag($objp->produit).
'</td>';
 
  789          print 
'<td class="right">';
 
  791          print empty($valtoshow) ? 
'0' : $valtoshow;
 
  793          $totalunit += $objp->value;
 
  797            print 
'<td align="left">';
 
  798            if (is_null($productstatic->fk_unit)) {
 
  799              $productstatic->fk_unit = 1;
 
  801            print $langs->trans($productstatic->getLabelOfUnit());
 
  806          print 
'<td class="right nowraponall">'.price(
price2num($objp->ppmp, 
'MU')).
'</td>';
 
  809          print 
'<td class="right amount nowraponall">'.price(
price2num($objp->ppmp * $objp->value, 
'MT')).
'</td>';
 
  810          $totalvalue += 
price2num($objp->ppmp * $objp->value, 
'MT');
 
  814            $pricemin = $objp->price;
 
  815            print 
'<td class="right">';
 
  819            print 
'<td class="right">';
 
  823          $totalvaluesell += 
price2num($pricemin * $objp->value, 
'MT');
 
  826          if ($user->hasRight(
'stock', 
'mouvement', 
'creer')) {
 
  827            print 
'<td class="center"><a href="'.DOL_URL_ROOT.
'/product/stock/product.php?dwid='.
$object->id.
'&id='.$objp->rowid.
'&action=transfert&token='.
newToken().
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.$id).
'">';
 
  828            print 
img_picto($langs->trans(
"TransferStock"), 
'add', 
'class="hideonsmartphone pictofixedwidth" style="color: #a69944"');
 
  829            print $langs->trans(
"TransferStock");
 
  834          if ($user->hasRight(
'stock', 
'creer')) {
 
  835            print 
'<td class="center"><a href="'.DOL_URL_ROOT.
'/product/stock/product.php?dwid='.
$object->id.
'&id='.$objp->rowid.
'&action=correction&token='.
newToken().
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?id='.$id).
'">';
 
  836            print 
img_picto($langs->trans(
"CorrectStock"), 
'add', 
'class="hideonsmartphone pictofixedwidth" style="color: #a69944"');
 
  837            print $langs->trans(
"CorrectStock");
 
  841          $parameters = array(
'obj' => $objp, 
'totalarray' => &$totalarray);
 
  842          $reshook = $hookmanager->executeHooks(
'printFieldListValue', $parameters); 
 
  843          print $hookmanager->resPrint;
 
  852              $units = $productstatic->fk_unit;
 
  853            } elseif ($productstatic->fk_unit != $units) {
 
  860        $totalarray[
'val'][
'totalunit'] = $totalunit;
 
  861        $totalarray[
'val'][
'totalvalue'] = 
price2num($totalvalue, 
'MT');
 
  862        $totalarray[
'val'][
'totalvaluesell'] = 
price2num($totalvaluesell, 
'MT');
 
  863        $totalarray[
'val'][
'units'] = $langs->trans($productstatic->getLabelOfUnit());
 
  865        $parameters = array(
'totalarray' => &$totalarray);
 
  867        $reshook = $hookmanager->executeHooks(
'printFieldListTotal', $parameters, 
$object);
 
  873        include DOL_DOCUMENT_ROOT.
'/core/tpl/list_print_total.tpl.php';
 
  883    if ($action == 
'edit' || $action == 
're-edit') {
 
  884      $langs->trans(
"WarehouseEdit");
 
  886      print 
'<form action="card.php" method="POST">';
 
  887      print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  888      print 
'<input type="hidden" name="action" value="update">';
 
  889      print 
'<input type="hidden" name="id" value="'.$object->id.
'">';
 
  895      print 
'<table class="border centpercent">';
 
  898      print 
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Ref").
'</td><td><input name="libelle" size="20" value="'.
$object->label.
'"></td></tr>';
 
  900      print 
'<tr><td>'.$langs->trans(
"LocationSummary").
'</td><td><input name="lieu" class="minwidth300" value="'.
$object->lieu.
'"></td></tr>';
 
  903      print 
'<tr><td>'.$langs->trans(
"AddIn").
'</td><td>';
 
  904      print $formproduct->selectWarehouses(
$object->fk_parent, 
'fk_parent', 
'', 1);
 
  908      if (isModEnabled(
'project')) {
 
  909        $projectid = 
$object->fk_project;
 
  910        $langs->load(
'projects');
 
  911        print 
'<tr><td>'.$langs->trans(
'Project').
'</td><td colspan="2">';
 
  912        print 
img_picto(
'', 
'project').$formproject->select_projects(($socid > 0 ? $socid : -1), $projectid, 
'projectid', 0, 0, 1, 1, 0, 0, 0, 
'', 1, 0, 
'maxwidth500');
 
  913        print 
' <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.($socid > 0 ? $socid : 
"").
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create'.($socid > 0 ? 
'&socid='.$socid : 
"")).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
 
  918      print 
'<tr><td class="tdtop">'.$langs->trans(
"Description").
'</td><td>';
 
  920      require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
 
  921      $doleditor = 
new DolEditor(
'desc', 
$object->description, 
'', 180, 
'dolibarr_notes', 
'In', 
false, 
true, isModEnabled(
'fckeditor'), ROWS_5, 
'90%');
 
  922      $doleditor->Create();
 
  925      print 
'<tr><td>'.$langs->trans(
'Address').
'</td><td><textarea name="address" class="quatrevingtpercent" rows="3" wrap="soft">';
 
  927      print 
'</textarea></td></tr>';
 
  930      print 
'<tr><td>'.$langs->trans(
'Zip').
'</td><td>';
 
  931      print $formcompany->select_ziptown(
$object->zip, 
'zipcode', array(
'town', 
'selectcountry_id', 
'state_id'), 6);
 
  933      print 
'<tr><td>'.$langs->trans(
'Town').
'</td><td>';
 
  934      print $formcompany->select_ziptown(
$object->town, 
'town', array(
'zipcode', 
'selectcountry_id', 
'state_id'));
 
  938      print 
'<tr><td>'.$langs->trans(
'Country').
'</td><td>';
 
  939      print 
img_picto(
'', 
'globe-americas', 
'class="paddingright"');
 
  940      print $form->select_country(
$object->country_id ? 
$object->country_id : $mysoc->country_code, 
'country_id');
 
  942        print 
info_admin($langs->trans(
"YouCanChangeValuesForThisListFromDictionarySetup"), 1);
 
  947      print 
'<tr><td class="titlefieldcreate">'.$form->editfieldkey(
'Phone', 
'phone', 
'', 
$object, 0).
'</td><td>';
 
  948      print 
img_picto(
'', 
'object_phoning', 
'class="paddingright"');
 
  949      print 
'<input name="phone" size="20" value="'.$object->phone.
'"></td></tr>';
 
  950      print 
'<tr><td class="titlefieldcreate">'.$form->editfieldkey(
'Fax', 
'fax', 
'', 
$object, 0).
'</td><td>';
 
  951      print 
img_picto(
'', 
'object_phoning_fax', 
'class="paddingright"');
 
  952      print 
'<input name="fax" size="20" value="'.$object->fax.
'"></td></tr>';
 
  955      print 
'<tr><td>'.$langs->trans(
"Status").
'</td><td>';
 
  956      print 
'<select id="warehousestatus" name="statut" class="flat">';
 
  957      foreach (
$object->labelStatus as $key => $value) {
 
  959          print 
'<option value="'.$key.
'" selected>'.$langs->trans($value).
'</option>';
 
  961          print 
'<option value="'.$key.
'">'.$langs->trans($value).
'</option>';
 
  970      $parameters = array(
'colspan' => 
' colspan="3"', 
'cols' => 
'3');
 
  971      $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, 
$object, $action); 
 
  972      print $hookmanager->resPrint;
 
  973      if (empty($reshook)) {
 
  974        print 
$object->showOptionals($extrafields, 
'edit', $parameters);
 
  978      if (isModEnabled(
'category')) {
 
  979        print 
'<tr><td class="tdtop">'.$langs->trans(
"Categories").
'</td><td colspan="3">';
 
  980        $cate_arbo = $form->select_all_categories(Categorie::TYPE_WAREHOUSE, 
'', 
'parent', 64, 0, 3);
 
  982        $cats = $c->containing(
$object->id, Categorie::TYPE_WAREHOUSE);
 
  983        $arrayselected = array();
 
  984        foreach ($cats as $cat) {
 
  985          $arrayselected[] = $cat->id;
 
  987        print 
img_picto(
'', 
'category', 
'class="pictofixedwidth"').$form->multiselectarray(
'categories', $cate_arbo, $arrayselected, 
'', 0, 
'quatrevingtpercent widthcentpercentminusx', 0, 0);
 
  995      print $form->buttonsSaveCancel();
 
 1006$modulepart = 
'stock';
 
 1008if ($action != 
'create' && $action != 
'edit' && $action != 
'delete') {
 
 1010  print 
'<div class="fichecenter"><div class="fichehalfleft">';
 
 1011  print 
'<a name="builddoc"></a>'; 
 
 1015  $relativepath = 
$object->ref.
'/'.$objectref.
'.pdf';
 
 1016  $filedir = $conf->stock->dir_output.
'/'.$objectref;
 
 1017  $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".
$object->id;
 
 1018  $genallowed = $usercanread;
 
 1019  $delallowed = $usercancreate;
 
 1020  $modulepart = 
'stock';
 
 1022  print $formfile->showdocuments($modulepart, $objectref, $filedir, $urlsource, $genallowed, $delallowed, 
$object->model_pdf, 0, 0, 0, 28, 0, 
'', 0, 
'', 
'', 
'', 
$object);
 
 1023  $somethingshown = $formfile->numoffiles;
 
 1025  print 
'</div><div class="fichehalfright">';
 
 1029  $morehtmlcenter = 
'';
 
 1033  include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
 
 1035  $somethingshown = $formactions->showactions(
$object, 
'stock', 0, 1, 
'', $MAXEVENT, 
'', $morehtmlcenter); 
 
 1037  print 
'</div></div>';
 
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
 
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
 
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
 
Class to manage categories.
 
Class to manage a WYSIWYG editor.
 
Class to manage warehouses.
 
Class to manage products or services.
 
Class to manage projects.
 
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
 
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
 
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
 
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
 
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
 
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
 
dol_get_fiche_end($notab=0)
Return tab footer of a card.
 
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
 
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
 
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
 
dol_set_focus($selector)
Set focus onto field with selector (similar behaviour of 'autofocus' HTML5 tag)
 
newToken()
Return the value of token currently saved into session with name 'newtoken'.
 
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
 
print_liste_field_titre($name, $file="", $field="", $begin="", $moreparam="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
 
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
 
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
 
dol_htmlentitiesbr($stringtoencode, $nl2brmode=0, $pagecodefrom='UTF-8', $removelasteolbr=1)
This function is called to encode a string into a HTML string but differs from htmlentities because a...
 
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
 
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='', $picto='')
Show information in HTML for admin users or standard users.
 
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
 
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
 
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
 
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.
 
stock_prepare_head($object)
Prepare array with list of tabs.