29require
'../main.inc.php';
38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
41require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
42require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
43require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
44require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
45require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
47require_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
48require_once DOL_DOCUMENT_ROOT.
'/mrp/lib/mrp_mo.lib.php';
51$langs->loadLangs(array(
"mrp",
"stocks",
"other"));
56$action =
GETPOST(
'action',
'aZ09');
57$confirm =
GETPOST(
'confirm',
'alpha');
59$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'mostockmovement';
60$backtopage =
GETPOST(
'backtopage',
'alpha');
61$optioncss =
GETPOST(
'optioncss',
'aZ');
62$massaction =
GETPOST(
'massaction',
'aZ09');
70$search_ref =
GETPOST(
'search_ref',
'alpha');
71$search_movement =
GETPOST(
"search_movement",
'alpha');
72$search_product_ref = trim(
GETPOST(
"search_product_ref",
'alpha'));
73$search_product = trim(
GETPOST(
"search_product",
'alpha'));
74$search_warehouse = trim(
GETPOST(
"search_warehouse",
'alpha'));
75$search_inventorycode = trim(
GETPOST(
"search_inventorycode",
'alpha'));
76$search_user = trim(
GETPOST(
"search_user",
'alpha'));
77$search_batch = trim(
GETPOST(
"search_batch",
'alpha'));
78$search_qty = trim(
GETPOST(
"search_qty",
'alpha'));
79$search_type_mouvement =
GETPOST(
'search_type_mouvement',
"intcomma");
83$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
84$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
85if (empty($page) || $page == -1) {
88$offset = $limit * $page;
90 $sortfield =
"m.datem";
98$diroutputmassaction =
$conf->mrp->dir_output.
'/temp/massgeneration/'.$user->id;
99$hookmanager->initHooks(array(
'mocard',
'globalcard',
'mocardmovelist' ));
102$extrafields->fetch_name_optionals_label(
$object->table_element);
104$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
107$search_all = trim(
GETPOST(
"search_all",
'alpha'));
109foreach (
$object->fields as $key => $val) {
110 if (
GETPOST(
'search_'.$key,
'alpha')) {
111 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
115if (empty($action) && empty($id) && empty($ref)) {
120include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
125$isdraft = ((
$object->status == $object::STATUS_DRAFT) ? 1 : 0);
132 'm.rowid' => array(
'label' =>
"Ref",
'checked' =>
'1',
'position' => 1),
133 'm.datem' => array(
'label' =>
"Date",
'checked' =>
'1',
'position' => 2),
134 'p.ref' => array(
'label' =>
"ProductRef",
'checked' =>
'1',
'css' =>
'maxwidth100',
'position' => 3),
135 'p.label' => array(
'label' =>
"ProductLabel",
'checked' =>
'0',
'position' => 5),
136 'm.batch' => array(
'label' =>
"BatchNumberShort",
'checked' =>
'1',
'position' => 8,
'enabled' => (
string) (
int) (
isModEnabled(
'productbatch'))),
137 'pl.eatby' => array(
'label' =>
"EatByDate",
'checked' =>
'0',
'position' => 9,
'enabled' => (
string) (
int) (
isModEnabled(
'productbatch'))),
138 'pl.sellby' => array(
'label' =>
"SellByDate",
'checked' =>
'0',
'position' => 10,
'enabled' => (
string) (
int) (
isModEnabled(
'productbatch'))),
139 'e.ref' => array(
'label' =>
"Warehouse",
'checked' =>
'1',
'position' => 100,
'enabled' => (
string) (
int) (!($id > 0))),
140 'm.fk_user_author' => array(
'label' =>
"Author",
'checked' =>
'0',
'position' => 120),
141 'm.inventorycode' => array(
'label' =>
"InventoryCodeShort",
'checked' =>
'1',
'position' => 130),
142 'm.label' => array(
'label' =>
"MovementLabel",
'checked' =>
'1',
'position' => 140),
143 'm.type_mouvement' => array(
'label' =>
"TypeMovement",
'checked' =>
'0',
'position' => 150),
144 'origin' => array(
'label' =>
"Origin",
'checked' =>
'1',
'position' => 155),
145 'm.fk_projet' => array(
'label' =>
'Project',
'checked' =>
'0',
'position' => 180),
146 'm.value' => array(
'label' =>
"Qty",
'checked' =>
'1',
'position' => 200),
147 'm.price' => array(
'label' =>
"UnitPurchaseValue",
'checked' =>
'0',
'position' => 210)
152 unset($arrayfields[
'pl.sellby']);
155 unset($arrayfields[
'pl.eatby']);
157$objectlist->fields =
dol_sort_array($objectlist->fields,
'position');
161$permissionnote = $user->hasRight(
'mrp',
'write');
162$permissiondellink = $user->hasRight(
'mrp',
'write');
163$permissiontoadd = $user->hasRight(
'mrp',
'write');
164$permissiontodelete = $user->hasRight(
'mrp',
'delete') || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
167$permissiontoproduce = $permissiontoadd;
168$permissiontoupdatecost = $user->hasRight(
'bom',
'write');
170if ($permissiontoupdatecost) {
171 $arrayfields[
'm.price'][
'enabled'] =
'1';
174$arrayofselected = array();
181if (
GETPOST(
'cancel',
'alpha')) {
185if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
189$parameters = array();
190$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
195include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
198if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
202 $search_movement =
"";
203 $search_type_mouvement =
"";
204 $search_inventorycode =
"";
205 $search_product_ref =
"";
206 $search_product =
"";
207 $search_warehouse =
"";
213 $search_array_options = array();
216if (empty($reshook)) {
221 if (empty($backtopage) || ($cancel && empty($id))) {
223 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
224 $backtopage = $backurlforlist;
226 $backtopage = DOL_URL_ROOT.
'/mrp/mo_production.php?id='.(
$id > 0 ?
$id :
'__ID__');
229 $triggermodname =
'MO_MODIFY';
232 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
235 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
238 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
241 $triggersendname =
'MO_SENTBYMAIL';
242 $autocopy =
'MAIN_MAIL_AUTOCOPY_MO_TO';
243 $trackid =
'mo'.$object->id;
244 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
249 if ($action ==
'set_thirdparty' && $permissiontoadd) {
250 $object->setValueFrom(
'fk_soc',
GETPOSTINT(
'fk_soc'),
'',
null,
'date',
'', $user, $triggermodname);
252 if ($action ==
'classin' && $permissiontoadd) {
256 if ($action ==
'confirm_reopen' && $permissiontoadd) {
257 $result =
$object->setStatut($object::STATUS_INPROGRESS, 0,
'',
'MRP_REOPEN');
275$title = $langs->trans(
'Mo');
276$help_url =
'EN:Module_Manufacturing_Orders|FR:Module_Ordres_de_Fabrication|DE:Modul_Fertigungsauftrag';
278llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-mrp page-card_movements');
281if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
282 $res =
$object->fetch_thirdparty();
283 $res =
$object->fetch_optionals();
292 if ($action ==
'delete') {
293 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteMo'), $langs->trans(
'ConfirmDeleteMo'),
'confirm_delete',
'', 0, 1);
296 if ($action ==
'deleteline') {
297 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
300 if ($action ==
'clone') {
302 $formquestion = array();
303 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneMo',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
307 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
308 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
309 if (empty($reshook)) {
310 $formconfirm .= $hookmanager->resPrint;
311 } elseif ($reshook > 0) {
312 $formconfirm = $hookmanager->resPrint;
321 $linkback =
'<a href="'.dol_buildpath(
'/mrp/mo_list.php', 1).
'?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
323 $morehtmlref =
'<div class="refidno">';
329 if (is_object(
$object->thirdparty)) {
330 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
332 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/commande/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
337 $langs->load(
"projects");
338 if (is_object(
$object->thirdparty)) {
339 $morehtmlref .=
'<br>';
341 if ($permissiontoadd) {
342 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
343 if ($action !=
'classify') {
344 $morehtmlref .=
'<a class="editfielda" href="'.dolBuildUrl($_SERVER[
'PHP_SELF'], [
'action' =>
'classify',
'id' =>
$object->id],
true).
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
346 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid, (
string)
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
348 if (!empty(
$object->fk_project)) {
350 $proj->fetch(
$object->fk_project);
351 $morehtmlref .= $proj->getNomUrl(1);
353 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
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 (!empty($extrafields->attributes[$objectlist->table_element]) && 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').
")";
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 =
'';
496 $result =
$db->query($sql);
497 $nbtotalofrecords =
$db->num_rows($result);
498 if (($page * $limit) > (
int) $nbtotalofrecords) {
503 $sql .=
$db->plimit($limit + 1, $offset);
505 $resql =
$db->query($sql);
509 $num =
$db->num_rows($resql);
512 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
513 $param .=
'&contextpage='.urlencode($contextpage);
515 if ($limit > 0 && $limit !=
$conf->liste_limit) {
516 $param .=
'&limit='.((int) $limit);
519 $param .=
'&id='.urlencode((
string) (
$id));
521 if ($search_movement) {
522 $param .=
'&search_movement='.urlencode($search_movement);
524 if ($search_inventorycode) {
525 $param .=
'&search_inventorycode='.urlencode($search_inventorycode);
527 if ($search_type_mouvement) {
528 $param .=
'&search_type_mouvement='.urlencode($search_type_mouvement);
530 if ($search_product_ref) {
531 $param .=
'&search_product_ref='.urlencode($search_product_ref);
533 if ($search_product) {
534 $param .=
'&search_product='.urlencode($search_product);
537 $param .=
'&search_batch='.urlencode($search_batch);
539 if ($search_warehouse > 0) {
540 $param .=
'&search_warehouse='.urlencode($search_warehouse);
543 $param .=
'&search_user='.urlencode($search_user);
547 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
550 $arrayofmassactions = array(
555 if (in_array($massaction, array(
'presend',
'predelete'))) {
556 $arrayofmassactions = array();
558 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
560 print
'<form method="POST" action="'.dolBuildUrl($_SERVER[
"PHP_SELF"]).
'">';
561 if ($optioncss !=
'') {
562 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
564 print
'<input type="hidden" name="token" value="'.newToken().
'">';
565 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
566 print
'<input type="hidden" name="action" value="list">';
567 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
568 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
569 print
'<input type="hidden" name="page" value="'.$page.
'">';
570 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
572 print
'<input type="hidden" name="id" value="'.$id.
'">';
576 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'', 0,
'',
'', $limit);
578 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'generic', 0,
'',
'', $limit);
583 $parameters = array();
584 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
585 if (empty($reshook)) {
586 $moreforfilter .= $hookmanager->resPrint;
588 $moreforfilter = $hookmanager->resPrint;
591 if (!empty($moreforfilter)) {
592 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
593 print $moreforfilter;
597 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
598 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
$conf->main_checkbox_left_column);
599 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
601 print
'<div class="div-table-responsive">';
602 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
605 print
'<tr class="liste_titre_filter">';
607 if (
$conf->main_checkbox_left_column) {
608 print
'<td class="liste_titre maxwidthsearch">';
609 $searchpicto = $form->showFilterAndCheckAddButtons(0);
613 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
615 print
'<td class="liste_titre left">';
616 print
'<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
619 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
620 print
'<td class="liste_titre nowraponall">';
621 print
'<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans(
"Month")).
'" name="month" value="'.$month.
'">';
626 $syear = $year ? $year : -1;
627 print
'<input class="flat maxwidth50" type="text" maxlength="4" placeholder="'.dol_escape_htmltag($langs->trans(
"Year")).
'" name="year" value="'.($syear > 0 ? $syear :
'').
'">';
631 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
633 print
'<td class="liste_titre left">';
634 print
'<input class="flat maxwidth75" type="text" name="search_product_ref" value="'.dol_escape_htmltag($search_product_ref).
'">';
637 if (!empty($arrayfields[
'p.label'][
'checked'])) {
639 print
'<td class="liste_titre left">';
640 print
'<input class="flat maxwidth100" type="text" name="search_product" value="'.dol_escape_htmltag($search_product).
'">';
644 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
645 print
'<td class="liste_titre center"><input class="flat maxwidth75" type="text" name="search_batch" value="'.dol_escape_htmltag($search_batch).
'"></td>';
647 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
648 print
'<td class="liste_titre left">';
651 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
652 print
'<td class="liste_titre left">';
656 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
657 print
'<td class="liste_titre maxwidthonsmartphone left">';
659 print $formproduct->selectWarehouses($search_warehouse,
'search_warehouse',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'maxwidth200');
662 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
664 print
'<td class="liste_titre left">';
665 print
'<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).
'">';
668 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
670 print
'<td class="liste_titre left">';
671 print
'<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).
'">';
674 if (!empty($arrayfields[
'm.label'][
'checked'])) {
676 print
'<td class="liste_titre left">';
677 print
'<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).
'">';
680 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
682 print
'<td class="liste_titre center">';
684 print
'<select id="search_type_mouvement" name="search_type_mouvement" class="maxwidth150">';
685 print
'<option value="" '.(($search_type_mouvement ==
"") ?
'selected="selected"' :
'').
'> </option>';
686 print
'<option value="0" '.(($search_type_mouvement ==
"0") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</option>';
687 print
'<option value="1" '.(($search_type_mouvement ==
"1") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</option>';
688 print
'<option value="2" '.(($search_type_mouvement ==
"2") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecrease').
'</option>';
689 print
'<option value="3" '.(($search_type_mouvement ==
"3") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncrease').
'</option>';
696 if (!empty($arrayfields[
'origin'][
'checked'])) {
698 print
'<td class="liste_titre left">';
702 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
704 print
'<td class="liste_titre" align="left">';
708 if (!empty($arrayfields[
'm.value'][
'checked'])) {
710 print
'<td class="liste_titre right">';
711 print
'<input class="flat" type="text" size="4" name="search_qty" value="'.dol_escape_htmltag($search_qty).
'">';
714 if (!empty($arrayfields[
'm.price'][
'checked'])) {
716 print
'<td class="liste_titre left">';
723 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
726 $parameters = array(
'arrayfields' => $arrayfields);
727 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
728 print $hookmanager->resPrint;
730 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
731 print
'<td class="liste_titre">';
735 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
736 print
'<td class="liste_titre">';
740 if (!
$conf->main_checkbox_left_column) {
741 print
'<td class="liste_titre maxwidthsearch">';
742 $searchpicto = $form->showFilterAndCheckAddButtons(0);
751 print
'<tr class="liste_titre">';
753 if (
$conf->main_checkbox_left_column) {
754 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
757 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
758 print_liste_field_titre($arrayfields[
'm.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
'm.rowid',
'', $param,
'', $sortfield, $sortorder);
761 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
762 print_liste_field_titre($arrayfields[
'm.datem'][
'label'], $_SERVER[
"PHP_SELF"],
'm.datem',
'', $param,
'', $sortfield, $sortorder);
765 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
766 print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
'p.ref',
'', $param,
'', $sortfield, $sortorder);
769 if (!empty($arrayfields[
'p.label'][
'checked'])) {
770 print_liste_field_titre($arrayfields[
'p.label'][
'label'], $_SERVER[
"PHP_SELF"],
'p.label',
'', $param,
'', $sortfield, $sortorder);
773 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
774 print_liste_field_titre($arrayfields[
'm.batch'][
'label'], $_SERVER[
"PHP_SELF"],
'm.batch',
'', $param,
'', $sortfield, $sortorder,
'center ');
777 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
778 print_liste_field_titre($arrayfields[
'pl.eatby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.eatby',
'', $param,
'', $sortfield, $sortorder,
'center ');
781 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
782 print_liste_field_titre($arrayfields[
'pl.sellby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.sellby',
'', $param,
'', $sortfield, $sortorder,
'center ');
785 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
787 print_liste_field_titre($arrayfields[
'e.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"e.ref",
"", $param,
"", $sortfield, $sortorder);
790 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
791 print_liste_field_titre($arrayfields[
'm.fk_user_author'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_user_author",
"", $param,
"", $sortfield, $sortorder);
794 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
795 print_liste_field_titre($arrayfields[
'm.inventorycode'][
'label'], $_SERVER[
"PHP_SELF"],
"m.inventorycode",
"", $param,
"", $sortfield, $sortorder);
798 if (!empty($arrayfields[
'm.label'][
'checked'])) {
799 print_liste_field_titre($arrayfields[
'm.label'][
'label'], $_SERVER[
"PHP_SELF"],
"m.label",
"", $param,
"", $sortfield, $sortorder);
802 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
803 print_liste_field_titre($arrayfields[
'm.type_mouvement'][
'label'], $_SERVER[
"PHP_SELF"],
"m.type_mouvement",
"", $param,
'', $sortfield, $sortorder,
'center ');
806 if (!empty($arrayfields[
'origin'][
'checked'])) {
807 print_liste_field_titre($arrayfields[
'origin'][
'label'], $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder);
810 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
811 print_liste_field_titre($arrayfields[
'm.fk_projet'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_projet",
"", $param,
'', $sortfield, $sortorder);
814 if (!empty($arrayfields[
'm.value'][
'checked'])) {
815 print_liste_field_titre($arrayfields[
'm.value'][
'label'], $_SERVER[
"PHP_SELF"],
"m.value",
"", $param,
'', $sortfield, $sortorder,
'right ');
818 if (!empty($arrayfields[
'm.price'][
'checked'])) {
820 print_liste_field_titre($arrayfields[
'm.price'][
'label'], $_SERVER[
"PHP_SELF"],
"m.price",
"", $param,
'', $sortfield, $sortorder,
'right ');
825 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
828 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
829 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
830 print $hookmanager->resPrint;
831 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
832 print_liste_field_titre($arrayfields[
'p.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
835 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
836 print_liste_field_titre($arrayfields[
'p.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
840 if (!
$conf->main_checkbox_left_column) {
841 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
850 $imaxinloop = ($limit ? min($num, $limit) : $num);
851 while ($i < $imaxinloop) {
852 $objp =
$db->fetch_object($resql);
857 $sql =
"SELECT label";
858 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_lang";
859 $sql .=
" WHERE fk_product = ".((int) $objp->rowid);
860 $sql .=
" AND lang = '".$db->escape($langs->getDefaultLang()).
"'";
863 $result =
$db->query($sql);
865 $objtp =
$db->fetch_object($result);
866 if (!empty($objtp->label)) {
867 $objp->produit = $objtp->label;
872 $userstatic->id = $objp->fk_user_author;
873 $userstatic->login = $objp->login;
874 $userstatic->lastname = $objp->lastname;
875 $userstatic->firstname = $objp->firstname;
876 $userstatic->photo = $objp->photo;
878 $productstatic->id = $objp->rowid;
879 $productstatic->ref = $objp->product_ref;
880 $productstatic->label = $objp->produit;
881 $productstatic->type = $objp->type;
882 $productstatic->entity = $objp->entity;
883 $productstatic->status_batch = $objp->tobatch;
885 $productlot->id = $objp->lotid;
886 $productlot->batch = $objp->batch;
887 $productlot->eatby = $objp->eatby;
888 $productlot->sellby = $objp->sellby;
890 $warehousestatic->id = $objp->entrepot_id;
891 $warehousestatic->libelle = $objp->warehouse_ref;
892 $warehousestatic->label = $objp->warehouse_ref;
893 $warehousestatic->lieu = $objp->lieu;
895 if (!empty($objp->fk_origin)) {
896 $origin = $objectlist->get_origin($objp->fk_origin, $objp->origintype);
901 print
'<tr class="oddeven">';
903 if (
$conf->main_checkbox_left_column) {
904 print
'<td class="nowrap center">';
905 if ($massactionbutton || $massaction) {
907 if (in_array($objp->rowid, $arrayofselected)) {
910 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
918 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
920 print
'<td>'.dol_escape_htmltag($objp->mid).
'</td>';
922 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
924 print
'<td>'.dol_print_date(
$db->jdate($objp->datem),
'dayhour').
'</td>';
926 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
928 print
'<td class="nowraponall">';
929 print $productstatic->getNomUrl(1,
'stock', 16);
932 if (!empty($arrayfields[
'p.label'][
'checked'])) {
934 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($productstatic->label).
'">';
935 print $productstatic->label;
938 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
939 print
'<td class="center nowraponall">';
940 if ($productlot->id > 0) {
941 print $productlot->getNomUrl(1);
947 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
948 print
'<td class="center">'.dol_print_date($objp->eatby,
'day').
'</td>';
950 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
951 print
'<td class="center">'.dol_print_date($objp->sellby,
'day').
'</td>';
954 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
956 print $warehousestatic->getNomUrl(1);
960 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
961 print
'<td class="tdoverflowmax100">';
962 print $userstatic->getNomUrl(-1);
966 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
967 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($objp->inventorycode).
'">';
974 if (!empty($arrayfields[
'm.label'][
'checked'])) {
975 print
'<td class="tdoverflowmax300" title="'.dol_escape_htmltag($objp->label).
'">'.
dol_escape_htmltag($objp->label).
'</td>';
978 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
979 switch ($objp->type_mouvement) {
981 print
'<td class="center">'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</td>';
984 print
'<td class="center">'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</td>';
987 print
'<td class="center">'.$langs->trans(
'StockDecrease').
'</td>';
990 print
'<td class="center">'.$langs->trans(
'StockIncrease').
'</td>';
994 if (!empty($arrayfields[
'origin'][
'checked'])) {
996 print
'<td class="nowraponall">'.$origin.
'</td>';
998 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
1001 if ($objp->fk_project != 0) {
1002 print $objectlist->get_origin($objp->fk_project,
'project');
1006 if (!empty($arrayfields[
'm.value'][
'checked'])) {
1008 print
'<td class="right">';
1009 if ($objp->qty > 0) {
1010 print
'<span class="stockmovemententry">+'.$objp->qty.
'</span>';
1012 print
'<span class="stockmovementexit">'.$objp->qty.
'<span>';
1016 if (!empty($arrayfields[
'm.price'][
'checked'])) {
1018 print
'<td class="right">';
1019 if ($objp->price != 0) {
1020 print
'<span class="opacitymedium">'.price($objp->price).
'</span>';
1025 if (!
$conf->main_checkbox_left_column) {
1026 print
'<td class="nowrap center">';
1027 if ($massactionbutton || $massaction) {
1029 if (in_array($objp->rowid, $arrayofselected)) {
1032 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1044 print
'<tr><td colspan="'.$savnbfield.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
ajax_combobox($htmlname, $events=array(), $minLengthToAutocomplete=0, $forcefocus=0, $widthTypeOfAutocomplete='resolve', $idforemptyvalue='-1', $morecss='')
Convert a html select field into an ajax combobox.
llxFooter($comment='', $zone='private', $disabledoutputofmessages=0)
Empty footer.
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader($head='', $title='', $help_url='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='', $morecssonbody='', $replacemainareaby='', $disablenofollow=0, $disablenoindex=0)
Empty header.
Class to manage warehouses.
Class to manage stock movements.
Class to manage products or services.
Class with list of lots and properties.
Class to manage projects.
Class to manage Dolibarr users.
dolSqlDateFilter($datefield, $day_date, $month_date, $year_date, $excludefirstand=0, $gm=false)
Generate a SQL string to make a filter into a range (for second of date until last second of date).
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
print_liste_field_titre($name, $file="", $field="", $begin="", $param="", $moreattrib="", $sortfield="", $sortorder="", $prefix="", $tooltip="", $forcenowrapcolumntitle=0)
Show title line of an array.
print_barre_liste($title, $page, $file, $options='', $sortfield='', $sortorder='', $morehtmlcenter='', $num=-1, $totalnboflines='', $picto='generic', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limit=-1, $selectlimitsuffix=0, $hidenavigation=0, $pagenavastextinput=0, $morehtmlrightbeforearrow='')
Print a title with navigation controls for pagination.
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2, $allowothertags=array())
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, $morecssdiv='')
Show tabs of a record.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
natural_search($fields, $value, $mode=0, $nofirstand=0, $sqltoadd='')
Generate natural SQL search string for a criteria (this criteria can be tested on one or several fiel...
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_sort_array(&$array, $index, $order='asc', $natsort=0, $case_sensitive=0, $keepindex=0)
Advanced sort array by the value of a given key, which produces ascending (default) or descending out...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
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.
isModEnabled($module)
Is Dolibarr module enabled.
img_edit($titlealt='default', $float=0, $other='')
Show logo edit/modify fiche.
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...
moPrepareHead($object)
Prepare array of tabs for Mo.
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.