26 require
'../main.inc.php';
28 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
29 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
30 require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
31 require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
32 require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
33 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
34 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
35 require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
40 $langs->loadLangs(array(
"mrp",
"stocks",
"other"));
45 $action =
GETPOST(
'action',
'aZ09');
46 $confirm =
GETPOST(
'confirm',
'alpha');
47 $cancel =
GETPOST(
'cancel',
'aZ09');
48 $contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'mostockmovement';
49 $backtopage =
GETPOST(
'backtopage',
'alpha');
54 $month =
GETPOST(
"month",
'int');
55 $search_ref =
GETPOST(
'search_ref',
'alpha');
56 $search_movement =
GETPOST(
"search_movement",
'alpha');
57 $search_product_ref = trim(
GETPOST(
"search_product_ref",
'alpha'));
58 $search_product = trim(
GETPOST(
"search_product",
'alpha'));
59 $search_warehouse = trim(
GETPOST(
"search_warehouse",
'alpha'));
60 $search_inventorycode = trim(
GETPOST(
"search_inventorycode",
'alpha'));
61 $search_user = trim(
GETPOST(
"search_user",
'alpha'));
62 $search_batch = trim(
GETPOST(
"search_batch",
'alpha'));
63 $search_qty = trim(
GETPOST(
"search_qty",
'alpha'));
64 $search_type_mouvement =
GETPOST(
'search_type_mouvement',
'int');
66 $limit =
GETPOST(
'limit',
'int') ?
GETPOST(
'limit',
'int') : $conf->liste_limit;
68 $sortfield =
GETPOST(
'sortfield',
'aZ09comma');
69 $sortorder =
GETPOST(
'sortorder',
'aZ09comma');
70 if (empty($page) || $page == -1) {
73 $offset = $limit * $page;
75 $sortfield =
"m.datem";
82 $object =
new Mo($db);
84 $diroutputmassaction = $conf->mrp->dir_output.
'/temp/massgeneration/'.$user->id;
85 $hookmanager->initHooks(array(
'mocard',
'globalcard'));
88 $extrafields->fetch_name_optionals_label($object->table_element);
90 $search_array_options = $extrafields->getOptionalsFromPost($object->table_element,
'',
'search_');
93 $search_all = trim(
GETPOST(
"search_all",
'alpha'));
95 foreach ($object->fields as $key => $val) {
96 if (
GETPOST(
'search_'.$key,
'alpha')) {
97 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
101 if (empty($action) && empty($id) && empty($ref)) {
106 include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
111 $isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
112 $result =
restrictedArea($user,
'mrp', $object->id,
'mrp_mo',
'',
'fk_soc',
'rowid', $isdraft);
117 $arrayfields = array(
118 'm.rowid'=>array(
'label'=>
"Ref",
'checked'=>1,
'position'=>1),
119 'm.datem'=>array(
'label'=>
"Date",
'checked'=>1,
'position'=>2),
120 'p.ref'=>array(
'label'=>
"ProductRef",
'checked'=>1,
'css'=>
'maxwidth100',
'position'=>3),
121 'p.label'=>array(
'label'=>
"ProductLabel",
'checked'=>0,
'position'=>5),
122 'm.batch'=>array(
'label'=>
"BatchNumberShort",
'checked'=>1,
'position'=>8,
'enabled'=>(!empty($conf->productbatch->enabled))),
123 'pl.eatby'=>array(
'label'=>
"EatByDate",
'checked'=>0,
'position'=>9,
'enabled'=>(!empty($conf->productbatch->enabled))),
124 'pl.sellby'=>array(
'label'=>
"SellByDate",
'checked'=>0,
'position'=>10,
'enabled'=>(!empty($conf->productbatch->enabled))),
125 'e.ref'=>array(
'label'=>
"Warehouse",
'checked'=>1,
'position'=>100,
'enabled'=>(!($id > 0))),
126 'm.fk_user_author'=>array(
'label'=>
"Author",
'checked'=>0,
'position'=>120),
127 'm.inventorycode'=>array(
'label'=>
"InventoryCodeShort",
'checked'=>1,
'position'=>130),
128 'm.label'=>array(
'label'=>
"MovementLabel",
'checked'=>1,
'position'=>140),
129 'm.type_mouvement'=>array(
'label'=>
"TypeMovement",
'checked'=>0,
'position'=>150),
130 'origin'=>array(
'label'=>
"Origin",
'checked'=>1,
'position'=>155),
131 'm.fk_projet'=>array(
'label'=>
'Project',
'checked'=>0,
'position'=>180),
132 'm.value'=>array(
'label'=>
"Qty",
'checked'=>1,
'position'=>200),
133 'm.price'=>array(
'label'=>
"UnitPurchaseValue",
'checked'=>0,
'position'=>210)
137 if (!empty($conf->global->PRODUCT_DISABLE_SELLBY)) {
138 unset($arrayfields[
'pl.sellby']);
140 if (!empty($conf->global->PRODUCT_DISABLE_EATBY)) {
141 unset($arrayfields[
'pl.eatby']);
143 $objectlist->fields =
dol_sort_array($objectlist->fields,
'position');
146 $permissionnote = $user->rights->mrp->write;
147 $permissiondellink = $user->rights->mrp->write;
148 $permissiontoadd = $user->rights->mrp->write;
149 $permissiontodelete = $user->rights->mrp->delete || ($permissiontoadd && isset($object->status) && $object->status == $object::STATUS_DRAFT);
150 $upload_dir = $conf->mrp->multidir_output[isset($object->entity) ? $object->entity : 1];
152 $permissiontoproduce = $permissiontoadd;
153 $permissiontoupdatecost = $user->rights->bom->write;
155 if ($permissiontoupdatecost) {
156 $arrayfields[
'm.price'][
'enabled'] = 1;
159 $arrayofselected = array();
166 if (
GETPOST(
'cancel',
'alpha')) {
167 $action =
'list'; $massaction =
'';
169 if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
173 $parameters = array();
174 $reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
179 include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
182 if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
186 $search_movement =
"";
187 $search_type_mouvement =
"";
188 $search_inventorycode =
"";
189 $search_product_ref =
"";
190 $search_product =
"";
191 $search_warehouse =
"";
197 $search_array_options = array();
200 if (empty($reshook)) {
205 if (empty($backtopage) || ($cancel && empty($id))) {
207 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
208 $backtopage = $backurlforlist;
210 $backtopage = DOL_URL_ROOT.
'/mrp/mo_production.php?id='.($id > 0 ? $id :
'__ID__');
213 $triggermodname =
'MRP_MO_MODIFY';
216 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
219 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
222 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
225 $triggersendname =
'MO_SENTBYMAIL';
226 $autocopy =
'MAIN_MAIL_AUTOCOPY_MO_TO';
227 $trackid =
'mo'.$object->id;
228 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
233 if ($action ==
'set_thirdparty' && $permissiontoadd) {
234 $object->setValueFrom(
'fk_soc',
GETPOST(
'fk_soc',
'int'),
'',
'',
'date',
'', $user,
'MO_MODIFY');
236 if ($action ==
'classin' && $permissiontoadd) {
237 $object->setProject(
GETPOST(
'projectid',
'int'));
240 if ($action ==
'confirm_reopen') {
241 $result = $object->setStatut($object::STATUS_INPROGRESS, 0,
'',
'MRP_REOPEN');
254 $productstatic =
new Product($db);
255 $productlot =
new ProductLot($db);
256 $warehousestatic =
new Entrepot($db);
257 $userstatic =
new User($db);
259 $help_url =
'EN:Module_Manufacturing_Orders|FR:Module_Ordres_de_Fabrication';
264 if ($object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
265 $res = $object->fetch_thirdparty();
266 $res = $object->fetch_optionals();
270 print
dol_get_fiche_head($head,
'stockmovement', $langs->trans(
"ManufacturingOrder"), -1, $object->picto);
275 if ($action ==
'delete') {
276 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteMo'), $langs->trans(
'ConfirmDeleteMo'),
'confirm_delete',
'', 0, 1);
279 if ($action ==
'deleteline') {
280 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
283 if ($action ==
'clone') {
285 $formquestion = array();
286 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneMo', $object->ref),
'confirm_clone', $formquestion,
'yes', 1);
290 if ($action ==
'xxx') {
291 $formquestion = array();
302 $formconfirm =
$form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'XXX'), $text,
'confirm_xxx', $formquestion, 0, 1, 220);
306 $parameters = array(
'formConfirm' =>
$formconfirm,
'lineid' => $lineid);
307 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
308 if (empty($reshook)) {
310 } elseif ($reshook > 0) {
320 $linkback =
'<a href="'.dol_buildpath(
'/mrp/mo_list.php', 1).
'?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
322 $morehtmlref =
'<div class="refidno">';
328 $morehtmlref .= $langs->trans(
'ThirdParty').
' : '.(is_object($object->thirdparty) ? $object->thirdparty->getNomUrl(1) :
'');
330 if (!empty($conf->project->enabled)) {
331 $langs->load(
"projects");
332 $morehtmlref .=
'<br>'.$langs->trans(
'Project').
' ';
333 if ($permissiontoadd) {
334 if ($action !=
'classify') {
335 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> : ';
337 if ($action ==
'classify') {
339 $morehtmlref .=
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
340 $morehtmlref .=
'<input type="hidden" name="action" value="classin">';
341 $morehtmlref .=
'<input type="hidden" name="token" value="'.newToken().
'">';
342 $morehtmlref .= $formproject->select_projects($object->fk_soc, $object->fk_project,
'projectid', 0, 0, 1, 0, 1, 0, 0,
'', 1);
343 $morehtmlref .=
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
344 $morehtmlref .=
'</form>';
346 $morehtmlref .=
$form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_soc, $object->fk_project,
'none', 0, 0, 0, 1);
349 if (!empty($object->fk_project)) {
351 $proj->fetch($object->fk_project);
352 $morehtmlref .= $proj->getNomUrl();
358 $morehtmlref .=
'</div>';
361 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
364 print
'<div class="fichecenter">';
365 print
'<div class="fichehalfleft">';
366 print
'<div class="underbanner clearboth"></div>';
367 print
'<table class="border centpercent tableforfield">'.
"\n";
370 $keyforbreak =
'fk_warehouse';
371 unset($object->fields[
'fk_project']);
372 unset($object->fields[
'fk_soc']);
373 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
376 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
382 print
'<div class="clearboth"></div>';
420 $sql =
"SELECT p.rowid, p.ref as product_ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.entity,";
421 $sql .=
" e.ref as warehouse_ref, e.rowid as entrepot_id, e.lieu,";
422 $sql .=
" m.rowid as mid, m.value as qty, m.datem, m.fk_user_author, m.label, m.inventorycode, m.fk_origin, m.origintype,";
423 $sql .=
" m.batch, m.price,";
424 $sql .=
" m.type_mouvement,";
425 $sql .=
" pl.rowid as lotid, pl.eatby, pl.sellby,";
426 $sql .=
" u.login, u.photo, u.lastname, u.firstname";
428 if (!empty($extrafields->attributes[$objectlist->table_element][
'label'])) {
429 foreach ($extrafields->attributes[$objectlist->table_element][
'label'] as $key => $val) {
430 $sql .= ($extrafields->attributes[$objectlist->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
" as options_".$key :
'');
434 $parameters = array();
435 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
436 $sql .= $hookmanager->resPrint;
437 $sql .=
" FROM ".MAIN_DB_PREFIX.
"entrepot as e,";
438 $sql .=
" ".MAIN_DB_PREFIX.
"product as p,";
439 $sql .=
" ".MAIN_DB_PREFIX.
"stock_mouvement as m";
440 if (is_array($extrafields->attributes[$objectlist->table_element][
'label']) && count($extrafields->attributes[$objectlist->table_element][
'label'])) {
441 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$objectlist->table_element.
"_extrafields as ef on (m.rowid = ef.fk_object)";
443 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"user as u ON m.fk_user_author = u.rowid";
444 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product_lot as pl ON m.batch = pl.batch AND m.fk_product = pl.fk_product";
445 $sql .=
" WHERE m.fk_product = p.rowid";
446 $sql .=
" AND m.origintype = 'mo' AND m.fk_origin = ".(int) $object->id;
448 $sql .=
" AND m.rowid = ".((int) $msid);
450 $sql .=
" AND m.fk_entrepot = e.rowid";
451 $sql .=
" AND e.entity IN (".getEntity(
'stock').
")";
452 if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
453 $sql .=
" AND p.fk_product_type = 0";
456 if (!empty($search_ref)) {
459 if (!empty($search_movement)) {
462 if (!empty($search_inventorycode)) {
465 if (!empty($search_product_ref)) {
468 if (!empty($search_product)) {
471 if ($search_warehouse !=
'' && $search_warehouse !=
'-1') {
474 if (!empty($search_user)) {
475 $sql .=
natural_search(array(
'u.lastname',
'u.firstname',
'u.login'), $search_user);
477 if (!empty($search_batch)) {
480 if ($search_qty !=
'') {
483 if ($search_type_mouvement !=
'' && $search_type_mouvement !=
'-1') {
484 $sql .=
natural_search(
'm.type_mouvement', $search_type_mouvement, 2);
487 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
489 $parameters = array();
490 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
491 $sql .= $hookmanager->resPrint;
492 $sql .= $db->order($sortfield, $sortorder);
494 $nbtotalofrecords =
'';
495 if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
496 $result = $db->query($sql);
497 $nbtotalofrecords = $db->num_rows($result);
498 if (($page * $limit) > $nbtotalofrecords) {
503 $sql .= $db->plimit($limit + 1, $offset);
506 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
507 $param .=
'&contextpage='.urlencode($contextpage);
509 if ($limit > 0 && $limit != $conf->liste_limit) {
510 $param .=
'&limit='.urlencode($limit);
513 $param .=
'&id='.urlencode($id);
515 if ($search_movement) {
516 $param .=
'&search_movement='.urlencode($search_movement);
518 if ($search_inventorycode) {
519 $param .=
'&search_inventorycode='.urlencode($search_inventorycode);
521 if ($search_type_mouvement) {
522 $param .=
'&search_type_mouvement='.urlencode($search_type_mouvement);
524 if ($search_product_ref) {
525 $param .=
'&search_product_ref='.urlencode($search_product_ref);
527 if ($search_product) {
528 $param .=
'&search_product='.urlencode($search_product);
531 $param .=
'&search_batch='.urlencode($search_batch);
533 if ($search_warehouse > 0) {
534 $param .=
'&search_warehouse='.urlencode($search_warehouse);
537 $param .=
'&search_user='.urlencode($search_user);
541 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
544 $arrayofmassactions = array(
549 if (in_array($massaction, array(
'presend',
'predelete'))) {
550 $arrayofmassactions = array();
552 $massactionbutton =
$form->selectMassAction(
'', $arrayofmassactions);
554 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
555 if ($optioncss !=
'') {
556 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
558 print
'<input type="hidden" name="token" value="'.newToken().
'">';
559 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
560 print
'<input type="hidden" name="action" value="list">';
561 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
562 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
563 print
'<input type="hidden" name="page" value="'.$page.
'">';
564 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
566 print
'<input type="hidden" name="id" value="'.$id.
'">';
570 print_barre_liste($texte, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'', 0,
'',
'', $limit);
572 print_barre_liste($texte, $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'generic', 0,
'',
'', $limit);
577 $parameters = array();
578 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters);
579 if (empty($reshook)) {
580 $moreforfilter .= $hookmanager->resPrint;
582 $moreforfilter = $hookmanager->resPrint;
585 if (!empty($moreforfilter)) {
586 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
587 print $moreforfilter;
591 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
592 $selectedfields =
$form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage);
594 print
'<div class="div-table-responsive">';
595 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
598 print
'<tr class="liste_titre_filter">';
599 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
601 print
'<td class="liste_titre left">';
602 print
'<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
605 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
606 print
'<td class="liste_titre nowraponall">';
607 print
'<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans(
"Month")).
'" name="month" value="'.$month.
'">';
608 if (empty($conf->productbatch->enabled)) {
612 $syear = $year ? $year : -1;
613 print
'<input class="flat maxwidth50" type="text" maxlength="4" placeholder="'.dol_escape_htmltag($langs->trans(
"Year")).
'" name="year" value="'.($syear > 0 ? $syear :
'').
'">';
617 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
619 print
'<td class="liste_titre left">';
620 print
'<input class="flat maxwidth75" type="text" name="search_product_ref" value="'.dol_escape_htmltag($idproduct ? $product->ref : $search_product_ref).
'">';
623 if (!empty($arrayfields[
'p.label'][
'checked'])) {
625 print
'<td class="liste_titre left">';
626 print
'<input class="flat maxwidth100" type="text" name="search_product" value="'.dol_escape_htmltag($idproduct ? $product->label : $search_product).
'">';
630 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
631 print
'<td class="liste_titre center"><input class="flat maxwidth75" type="text" name="search_batch" value="'.dol_escape_htmltag($search_batch).
'"></td>';
633 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
634 print
'<td class="liste_titre left">';
637 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
638 print
'<td class="liste_titre left">';
642 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
643 print
'<td class="liste_titre maxwidthonsmartphone left">';
645 print $formproduct->selectWarehouses($search_warehouse,
'search_warehouse',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0,
null,
'maxwidth200');
648 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
650 print
'<td class="liste_titre left">';
651 print
'<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).
'">';
654 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
656 print
'<td class="liste_titre left">';
657 print
'<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).
'">';
660 if (!empty($arrayfields[
'm.label'][
'checked'])) {
662 print
'<td class="liste_titre left">';
663 print
'<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).
'">';
666 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
668 print
'<td class="liste_titre center">';
670 print
'<select id="search_type_mouvement" name="search_type_mouvement" class="maxwidth150">';
671 print
'<option value="" '.(($search_type_mouvement ==
"") ?
'selected="selected"' :
'').
'> </option>';
672 print
'<option value="0" '.(($search_type_mouvement ==
"0") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</option>';
673 print
'<option value="1" '.(($search_type_mouvement ==
"1") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</option>';
674 print
'<option value="2" '.(($search_type_mouvement ==
"2") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecrease').
'</option>';
675 print
'<option value="3" '.(($search_type_mouvement ==
"3") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncrease').
'</option>';
682 if (!empty($arrayfields[
'origin'][
'checked'])) {
684 print
'<td class="liste_titre left">';
688 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
690 print
'<td class="liste_titre" align="left">';
694 if (!empty($arrayfields[
'm.value'][
'checked'])) {
696 print
'<td class="liste_titre right">';
697 print
'<input class="flat" type="text" size="4" name="search_qty" value="'.dol_escape_htmltag($search_qty).
'">';
700 if (!empty($arrayfields[
'm.price'][
'checked'])) {
702 print
'<td class="liste_titre left">';
709 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
712 $parameters = array(
'arrayfields'=>$arrayfields);
713 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
714 print $hookmanager->resPrint;
716 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
717 print
'<td class="liste_titre">';
721 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
722 print
'<td class="liste_titre">';
726 print
'<td class="liste_titre maxwidthsearch">';
727 $searchpicto =
$form->showFilterAndCheckAddButtons(0);
732 print
'<tr class="liste_titre">';
733 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
734 print_liste_field_titre($arrayfields[
'm.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
'm.rowid',
'', $param,
'', $sortfield, $sortorder);
736 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
737 print_liste_field_titre($arrayfields[
'm.datem'][
'label'], $_SERVER[
"PHP_SELF"],
'm.datem',
'', $param,
'', $sortfield, $sortorder);
739 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
740 print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
'p.ref',
'', $param,
'', $sortfield, $sortorder);
742 if (!empty($arrayfields[
'p.label'][
'checked'])) {
743 print_liste_field_titre($arrayfields[
'p.label'][
'label'], $_SERVER[
"PHP_SELF"],
'p.label',
'', $param,
'', $sortfield, $sortorder);
745 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
746 print_liste_field_titre($arrayfields[
'm.batch'][
'label'], $_SERVER[
"PHP_SELF"],
'm.batch',
'', $param,
'', $sortfield, $sortorder,
'center ');
748 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
749 print_liste_field_titre($arrayfields[
'pl.eatby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.eatby',
'', $param,
'', $sortfield, $sortorder,
'center ');
751 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
752 print_liste_field_titre($arrayfields[
'pl.sellby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.sellby',
'', $param,
'', $sortfield, $sortorder,
'center ');
754 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
756 print_liste_field_titre($arrayfields[
'e.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"e.ref",
"", $param,
"", $sortfield, $sortorder);
758 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
759 print_liste_field_titre($arrayfields[
'm.fk_user_author'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_user_author",
"", $param,
"", $sortfield, $sortorder);
761 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
762 print_liste_field_titre($arrayfields[
'm.inventorycode'][
'label'], $_SERVER[
"PHP_SELF"],
"m.inventorycode",
"", $param,
"", $sortfield, $sortorder);
764 if (!empty($arrayfields[
'm.label'][
'checked'])) {
765 print_liste_field_titre($arrayfields[
'm.label'][
'label'], $_SERVER[
"PHP_SELF"],
"m.label",
"", $param,
"", $sortfield, $sortorder);
767 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
768 print_liste_field_titre($arrayfields[
'm.type_mouvement'][
'label'], $_SERVER[
"PHP_SELF"],
"m.type_mouvement",
"", $param,
'', $sortfield, $sortorder,
'center ');
770 if (!empty($arrayfields[
'origin'][
'checked'])) {
771 print_liste_field_titre($arrayfields[
'origin'][
'label'], $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder);
773 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
774 print_liste_field_titre($arrayfields[
'm.fk_projet'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_projet",
"", $param,
'', $sortfield, $sortorder);
776 if (!empty($arrayfields[
'm.value'][
'checked'])) {
777 print_liste_field_titre($arrayfields[
'm.value'][
'label'], $_SERVER[
"PHP_SELF"],
"m.value",
"", $param,
'', $sortfield, $sortorder,
'right ');
779 if (!empty($arrayfields[
'm.price'][
'checked'])) {
780 print_liste_field_titre($arrayfields[
'm.price'][
'label'], $_SERVER[
"PHP_SELF"],
"m.price",
"", $param,
'', $sortfield, $sortorder,
'right ');
784 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
787 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
788 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
789 print $hookmanager->resPrint;
790 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
791 print_liste_field_titre($arrayfields[
'p.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
793 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
794 print_liste_field_titre($arrayfields[
'p.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
796 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
799 $resql = $db->query($sql);
803 $num = $db->num_rows(
$resql);
805 $totalarray = array();
807 while ($i < ($limit ? min($num, $limit) : $num)) {
808 $objp = $db->fetch_object(
$resql);
811 if (!empty($conf->global->MAIN_MULTILANGS)) {
813 $sql =
"SELECT label";
814 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_lang";
815 $sql .=
" WHERE fk_product = ".((int) $objp->rowid);
816 $sql .=
" AND lang = '".$db->escape($langs->getDefaultLang()).
"'";
819 $result = $db->query($sql);
821 $objtp = $db->fetch_object($result);
822 if (!empty($objtp->label)) {
823 $objp->produit = $objtp->label;
828 $userstatic->id = $objp->fk_user_author;
829 $userstatic->login = $objp->login;
830 $userstatic->lastname = $objp->lastname;
831 $userstatic->firstname = $objp->firstname;
832 $userstatic->photo = $objp->photo;
834 $productstatic->id = $objp->rowid;
835 $productstatic->ref = $objp->product_ref;
836 $productstatic->label = $objp->produit;
837 $productstatic->type = $objp->type;
838 $productstatic->entity = $objp->entity;
839 $productstatic->status_batch = $objp->tobatch;
841 $productlot->id = $objp->lotid;
842 $productlot->batch = $objp->batch;
843 $productlot->eatby = $objp->eatby;
844 $productlot->sellby = $objp->sellby;
846 $warehousestatic->id = $objp->entrepot_id;
847 $warehousestatic->libelle = $objp->warehouse_ref;
848 $warehousestatic->label = $objp->warehouse_ref;
849 $warehousestatic->lieu = $objp->lieu;
851 if (!empty($objp->fk_origin)) {
852 $origin = $objectlist->get_origin($objp->fk_origin, $objp->origintype);
857 print
'<tr class="oddeven">';
859 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
861 print
'<td>'.dol_escape_htmltag($objp->mid).
'</td>';
863 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
865 print
'<td>'.dol_print_date($db->jdate($objp->datem),
'dayhour').
'</td>';
867 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
869 print
'<td class="nowraponall">';
870 print $productstatic->getNomUrl(1,
'stock', 16);
873 if (!empty($arrayfields[
'p.label'][
'checked'])) {
875 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($productstatic->label).
'">';
876 print $productstatic->label;
879 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
880 print
'<td class="center nowraponall">';
881 if ($productlot->id > 0) {
882 print $productlot->getNomUrl(1);
888 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
889 print
'<td class="center">'.dol_print_date($objp->eatby,
'day').
'</td>';
891 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
892 print
'<td class="center">'.dol_print_date($objp->sellby,
'day').
'</td>';
895 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
897 print $warehousestatic->getNomUrl(1);
901 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
902 print
'<td class="tdoverflowmax100">';
903 print $userstatic->getNomUrl(-1);
906 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
914 if (!empty($arrayfields[
'm.label'][
'checked'])) {
916 print
'<td class="tdoverflowmax300" title="'.dol_escape_htmltag($objp->label).
'">'.
dol_escape_htmltag($objp->label).
'</td>';
918 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
920 switch ($objp->type_mouvement) {
922 print
'<td class="center">'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</td>';
925 print
'<td class="center">'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</td>';
928 print
'<td class="center">'.$langs->trans(
'StockDecrease').
'</td>';
931 print
'<td class="center">'.$langs->trans(
'StockIncrease').
'</td>';
935 if (!empty($arrayfields[
'origin'][
'checked'])) {
937 print
'<td class="nowraponall">'.$origin.
'</td>';
939 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
942 if ($objp->fk_project != 0) {
943 print $movement->get_origin($objp->fk_project,
'project');
947 if (!empty($arrayfields[
'm.value'][
'checked'])) {
949 print
'<td class="right">';
956 if (!empty($arrayfields[
'm.price'][
'checked'])) {
958 print
'<td class="right">';
959 if ($objp->price != 0) {
960 print
price($objp->price);
965 print
'<td class="nowrap center">';
966 if ($massactionbutton || $massaction) {
968 if (in_array($obj->rowid, $arrayofselected)) {
971 print
'<input id="cb'.$obj->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
975 $totalarray[
'nbfield']++;