29require
'../main.inc.php';
30require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
31require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
32require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
33require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
34require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
35require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/entrepot.class.php';
36require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/mouvementstock.class.php';
37require_once DOL_DOCUMENT_ROOT.
'/product/stock/class/productlot.class.php';
39require_once DOL_DOCUMENT_ROOT.
'/mrp/class/mo.class.php';
40require_once DOL_DOCUMENT_ROOT.
'/mrp/lib/mrp_mo.lib.php';
43$langs->loadLangs(array(
"mrp",
"stocks",
"other"));
48$action =
GETPOST(
'action',
'aZ09');
49$confirm =
GETPOST(
'confirm',
'alpha');
50$cancel =
GETPOST(
'cancel',
'aZ09');
51$contextpage =
GETPOST(
'contextpage',
'aZ') ?
GETPOST(
'contextpage',
'aZ') :
'mostockmovement';
52$backtopage =
GETPOST(
'backtopage',
'alpha');
53$optioncss =
GETPOST(
'optioncss',
'aZ');
54$massaction =
GETPOST(
'massaction',
'aZ09');
62$search_ref =
GETPOST(
'search_ref',
'alpha');
63$search_movement =
GETPOST(
"search_movement",
'alpha');
64$search_product_ref = trim(
GETPOST(
"search_product_ref",
'alpha'));
65$search_product = trim(
GETPOST(
"search_product",
'alpha'));
66$search_warehouse = trim(
GETPOST(
"search_warehouse",
'alpha'));
67$search_inventorycode = trim(
GETPOST(
"search_inventorycode",
'alpha'));
68$search_user = trim(
GETPOST(
"search_user",
'alpha'));
69$search_batch = trim(
GETPOST(
"search_batch",
'alpha'));
70$search_qty = trim(
GETPOST(
"search_qty",
'alpha'));
71$search_type_mouvement =
GETPOST(
'search_type_mouvement',
"intcomma");
75$sortfield =
GETPOST(
'sortfield',
'aZ09comma');
76$sortorder =
GETPOST(
'sortorder',
'aZ09comma');
77if (empty($page) || $page == -1) {
80$offset = $limit * $page;
82 $sortfield =
"m.datem";
91$diroutputmassaction = $conf->mrp->dir_output.
'/temp/massgeneration/'.$user->id;
92$hookmanager->initHooks(array(
'mocard',
'globalcard'));
95$extrafields->fetch_name_optionals_label(
$object->table_element);
97$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
100$search_all = trim(
GETPOST(
"search_all",
'alpha'));
102foreach (
$object->fields as $key => $val) {
103 if (
GETPOST(
'search_'.$key,
'alpha')) {
104 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
108if (empty($action) && empty($id) && empty($ref)) {
113include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
118$isdraft = ((
$object->status == $object::STATUS_DRAFT) ? 1 : 0);
125 'm.rowid' => array(
'label' =>
"Ref",
'checked' => 1,
'position' => 1),
126 'm.datem' => array(
'label' =>
"Date",
'checked' => 1,
'position' => 2),
127 'p.ref' => array(
'label' =>
"ProductRef",
'checked' => 1,
'css' =>
'maxwidth100',
'position' => 3),
128 'p.label' => array(
'label' =>
"ProductLabel",
'checked' => 0,
'position' => 5),
129 'm.batch' => array(
'label' =>
"BatchNumberShort",
'checked' => 1,
'position' => 8,
'enabled' => (isModEnabled(
'productbatch'))),
130 'pl.eatby' => array(
'label' =>
"EatByDate",
'checked' => 0,
'position' => 9,
'enabled' => (isModEnabled(
'productbatch'))),
131 'pl.sellby' => array(
'label' =>
"SellByDate",
'checked' => 0,
'position' => 10,
'enabled' => (isModEnabled(
'productbatch'))),
132 'e.ref' => array(
'label' =>
"Warehouse",
'checked' => 1,
'position' => 100,
'enabled' => (!($id > 0))),
133 'm.fk_user_author' => array(
'label' =>
"Author",
'checked' => 0,
'position' => 120),
134 'm.inventorycode' => array(
'label' =>
"InventoryCodeShort",
'checked' => 1,
'position' => 130),
135 'm.label' => array(
'label' =>
"MovementLabel",
'checked' => 1,
'position' => 140),
136 'm.type_mouvement' => array(
'label' =>
"TypeMovement",
'checked' => 0,
'position' => 150),
137 'origin' => array(
'label' =>
"Origin",
'checked' => 1,
'position' => 155),
138 'm.fk_projet' => array(
'label' =>
'Project',
'checked' => 0,
'position' => 180),
139 'm.value' => array(
'label' =>
"Qty",
'checked' => 1,
'position' => 200),
140 'm.price' => array(
'label' =>
"UnitPurchaseValue",
'checked' => 0,
'position' => 210)
145 unset($arrayfields[
'pl.sellby']);
148 unset($arrayfields[
'pl.eatby']);
150$objectlist->fields =
dol_sort_array($objectlist->fields,
'position');
154$permissionnote = $user->hasRight(
'mrp',
'write');
155$permissiondellink = $user->hasRight(
'mrp',
'write');
156$permissiontoadd = $user->hasRight(
'mrp',
'write');
157$permissiontodelete = $user->hasRight(
'mrp',
'delete') || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
158$upload_dir = $conf->mrp->multidir_output[isset(
$object->entity) ?
$object->entity : 1];
160$permissiontoproduce = $permissiontoadd;
161$permissiontoupdatecost = $user->hasRight(
'bom',
'write');
163if ($permissiontoupdatecost) {
164 $arrayfields[
'm.price'][
'enabled'] = 1;
167$arrayofselected = array();
174if (
GETPOST(
'cancel',
'alpha')) {
178if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
182$parameters = array();
183$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
188include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
191if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
195 $search_movement =
"";
196 $search_type_mouvement =
"";
197 $search_inventorycode =
"";
198 $search_product_ref =
"";
199 $search_product =
"";
200 $search_warehouse =
"";
206 $search_array_options = array();
209if (empty($reshook)) {
214 if (empty($backtopage) || ($cancel && empty($id))) {
216 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
217 $backtopage = $backurlforlist;
219 $backtopage = DOL_URL_ROOT.
'/mrp/mo_production.php?id='.(
$id > 0 ?
$id :
'__ID__');
222 $triggermodname =
'MO_MODIFY';
225 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
228 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
231 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
234 $triggersendname =
'MO_SENTBYMAIL';
235 $autocopy =
'MAIN_MAIL_AUTOCOPY_MO_TO';
236 $trackid =
'mo'.$object->id;
237 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
242 if ($action ==
'set_thirdparty' && $permissiontoadd) {
243 $object->setValueFrom(
'fk_soc',
GETPOSTINT(
'fk_soc'),
'',
null,
'date',
'', $user, $triggermodname);
245 if ($action ==
'classin' && $permissiontoadd) {
249 if ($action ==
'confirm_reopen') {
250 $result =
$object->setStatut($object::STATUS_INPROGRESS, 0,
'',
'MRP_REOPEN');
260$form =
new Form($db);
263$productstatic =
new Product($db);
265$warehousestatic =
new Entrepot($db);
266$userstatic =
new User($db);
268$title = $langs->trans(
'Mo');
269$help_url =
'EN:Module_Manufacturing_Orders|FR:Module_Ordres_de_Fabrication|DE:Modul_Fertigungsauftrag';
271llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-mrp page-card_movements');
274if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
275 $res =
$object->fetch_thirdparty();
276 $res =
$object->fetch_optionals();
285 if ($action ==
'delete') {
286 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteMo'), $langs->trans(
'ConfirmDeleteMo'),
'confirm_delete',
'', 0, 1);
289 if ($action ==
'deleteline') {
290 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
293 if ($action ==
'clone') {
295 $formquestion = array();
296 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneMo',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
300 if ($action ==
'xxx') {
301 $formquestion = array();
312 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'XXX'), $text,
'confirm_xxx', $formquestion, 0, 1, 220);
316 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
317 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
318 if (empty($reshook)) {
319 $formconfirm .= $hookmanager->resPrint;
320 } elseif ($reshook > 0) {
321 $formconfirm = $hookmanager->resPrint;
330 $linkback =
'<a href="'.dol_buildpath(
'/mrp/mo_list.php', 1).
'?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
332 $morehtmlref =
'<div class="refidno">';
338 if (is_object(
$object->thirdparty)) {
339 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
341 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/commande/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
345 if (isModEnabled(
'project')) {
346 $langs->load(
"projects");
347 if (is_object(
$object->thirdparty)) {
348 $morehtmlref .=
'<br>';
350 if ($permissiontoadd) {
351 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
352 if ($action !=
'classify') {
353 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
355 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
357 if (!empty(
$object->fk_project)) {
359 $proj->fetch(
$object->fk_project);
360 $morehtmlref .= $proj->getNomUrl(1);
362 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
367 $morehtmlref .=
'</div>';
370 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
373 print
'<div class="fichecenter">';
374 print
'<div class="fichehalfleft">';
375 print
'<div class="underbanner clearboth"></div>';
376 print
'<table class="border centpercent tableforfield">'.
"\n";
379 $keyforbreak =
'fk_warehouse';
380 unset(
$object->fields[
'fk_project']);
381 unset(
$object->fields[
'fk_soc']);
382 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
385 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
391 print
'<div class="clearboth"></div>';
429 $sql =
"SELECT p.rowid, p.ref as product_ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.entity,";
430 $sql .=
" e.ref as warehouse_ref, e.rowid as entrepot_id, e.lieu,";
431 $sql .=
" m.rowid as mid, m.value as qty, m.datem, m.fk_user_author, m.label, m.inventorycode, m.fk_origin, m.origintype,";
432 $sql .=
" m.batch, m.price,";
433 $sql .=
" m.type_mouvement,";
434 $sql .=
" pl.rowid as lotid, pl.eatby, pl.sellby,";
435 $sql .=
" u.login, u.photo, u.lastname, u.firstname";
437 if (!empty($extrafields->attributes[$objectlist->table_element][
'label'])) {
438 foreach ($extrafields->attributes[$objectlist->table_element][
'label'] as $key => $val) {
439 $sql .= ($extrafields->attributes[$objectlist->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
" as options_".$key :
'');
443 $parameters = array();
444 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
445 $sql .= $hookmanager->resPrint;
446 $sql .=
" FROM ".MAIN_DB_PREFIX.
"entrepot as e,";
447 $sql .=
" ".MAIN_DB_PREFIX.
"product as p,";
448 $sql .=
" ".MAIN_DB_PREFIX.
"stock_mouvement as m";
449 if (!empty($extrafields->attributes[$objectlist->table_element]) && is_array($extrafields->attributes[$objectlist->table_element][
'label']) && count($extrafields->attributes[$objectlist->table_element][
'label'])) {
450 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$objectlist->table_element.
"_extrafields as ef on (m.rowid = ef.fk_object)";
452 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"user as u ON m.fk_user_author = u.rowid";
453 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product_lot as pl ON m.batch = pl.batch AND m.fk_product = pl.fk_product";
454 $sql .=
" WHERE m.fk_product = p.rowid";
455 $sql .=
" AND m.origintype = 'mo' AND m.fk_origin = ".(int)
$object->id;
457 $sql .=
" AND m.rowid = ".((int) $msid);
459 $sql .=
" AND m.fk_entrepot = e.rowid";
460 $sql .=
" AND e.entity IN (".getEntity(
'stock').
")";
462 $sql .=
" AND p.fk_product_type = 0";
465 if (!empty($search_ref)) {
468 if (!empty($search_movement)) {
471 if (!empty($search_inventorycode)) {
474 if (!empty($search_product_ref)) {
477 if (!empty($search_product)) {
480 if ($search_warehouse !=
'' && $search_warehouse !=
'-1') {
483 if (!empty($search_user)) {
484 $sql .=
natural_search(array(
'u.lastname',
'u.firstname',
'u.login'), $search_user);
486 if (!empty($search_batch)) {
489 if ($search_qty !=
'') {
492 if ($search_type_mouvement !=
'' && $search_type_mouvement !=
'-1') {
493 $sql .=
natural_search(
'm.type_mouvement', $search_type_mouvement, 2);
496 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
498 $parameters = array();
499 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
500 $sql .= $hookmanager->resPrint;
501 $sql .= $db->order($sortfield, $sortorder);
503 $nbtotalofrecords =
'';
505 $result = $db->query($sql);
506 $nbtotalofrecords = $db->num_rows($result);
507 if (($page * $limit) > $nbtotalofrecords) {
512 $sql .= $db->plimit($limit + 1, $offset);
514 $resql = $db->query($sql);
518 $num = $db->num_rows($resql);
521 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
522 $param .=
'&contextpage='.urlencode($contextpage);
524 if ($limit > 0 && $limit != $conf->liste_limit) {
525 $param .=
'&limit='.((int) $limit);
528 $param .=
'&id='.urlencode((
string) (
$id));
530 if ($search_movement) {
531 $param .=
'&search_movement='.urlencode($search_movement);
533 if ($search_inventorycode) {
534 $param .=
'&search_inventorycode='.urlencode($search_inventorycode);
536 if ($search_type_mouvement) {
537 $param .=
'&search_type_mouvement='.urlencode($search_type_mouvement);
539 if ($search_product_ref) {
540 $param .=
'&search_product_ref='.urlencode($search_product_ref);
542 if ($search_product) {
543 $param .=
'&search_product='.urlencode($search_product);
546 $param .=
'&search_batch='.urlencode($search_batch);
548 if ($search_warehouse > 0) {
549 $param .=
'&search_warehouse='.urlencode($search_warehouse);
552 $param .=
'&search_user='.urlencode($search_user);
556 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
559 $arrayofmassactions = array(
564 if (in_array($massaction, array(
'presend',
'predelete'))) {
565 $arrayofmassactions = array();
567 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
569 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
570 if ($optioncss !=
'') {
571 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
573 print
'<input type="hidden" name="token" value="'.newToken().
'">';
574 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
575 print
'<input type="hidden" name="action" value="list">';
576 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
577 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
578 print
'<input type="hidden" name="page" value="'.$page.
'">';
579 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
581 print
'<input type="hidden" name="id" value="'.$id.
'">';
585 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'', 0,
'',
'', $limit);
587 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'generic', 0,
'',
'', $limit);
592 $parameters = array();
593 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
594 if (empty($reshook)) {
595 $moreforfilter .= $hookmanager->resPrint;
597 $moreforfilter = $hookmanager->resPrint;
600 if (!empty($moreforfilter)) {
601 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
602 print $moreforfilter;
606 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
607 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
608 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
610 print
'<div class="div-table-responsive">';
611 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
614 print
'<tr class="liste_titre_filter">';
617 print
'<td class="liste_titre maxwidthsearch">';
618 $searchpicto = $form->showFilterAndCheckAddButtons(0);
622 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
624 print
'<td class="liste_titre left">';
625 print
'<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
628 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
629 print
'<td class="liste_titre nowraponall">';
630 print
'<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans(
"Month")).
'" name="month" value="'.$month.
'">';
631 if (!isModEnabled(
'productbatch')) {
635 $syear = $year ? $year : -1;
636 print
'<input class="flat maxwidth50" type="text" maxlength="4" placeholder="'.dol_escape_htmltag($langs->trans(
"Year")).
'" name="year" value="'.($syear > 0 ? $syear :
'').
'">';
640 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
642 print
'<td class="liste_titre left">';
643 print
'<input class="flat maxwidth75" type="text" name="search_product_ref" value="'.dol_escape_htmltag($search_product_ref).
'">';
646 if (!empty($arrayfields[
'p.label'][
'checked'])) {
648 print
'<td class="liste_titre left">';
649 print
'<input class="flat maxwidth100" type="text" name="search_product" value="'.dol_escape_htmltag($search_product).
'">';
653 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
654 print
'<td class="liste_titre center"><input class="flat maxwidth75" type="text" name="search_batch" value="'.dol_escape_htmltag($search_batch).
'"></td>';
656 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
657 print
'<td class="liste_titre left">';
660 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
661 print
'<td class="liste_titre left">';
665 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
666 print
'<td class="liste_titre maxwidthonsmartphone left">';
668 print $formproduct->selectWarehouses($search_warehouse,
'search_warehouse',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'maxwidth200');
671 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
673 print
'<td class="liste_titre left">';
674 print
'<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).
'">';
677 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
679 print
'<td class="liste_titre left">';
680 print
'<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).
'">';
683 if (!empty($arrayfields[
'm.label'][
'checked'])) {
685 print
'<td class="liste_titre left">';
686 print
'<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).
'">';
689 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
691 print
'<td class="liste_titre center">';
693 print
'<select id="search_type_mouvement" name="search_type_mouvement" class="maxwidth150">';
694 print
'<option value="" '.(($search_type_mouvement ==
"") ?
'selected="selected"' :
'').
'> </option>';
695 print
'<option value="0" '.(($search_type_mouvement ==
"0") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</option>';
696 print
'<option value="1" '.(($search_type_mouvement ==
"1") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</option>';
697 print
'<option value="2" '.(($search_type_mouvement ==
"2") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecrease').
'</option>';
698 print
'<option value="3" '.(($search_type_mouvement ==
"3") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncrease').
'</option>';
705 if (!empty($arrayfields[
'origin'][
'checked'])) {
707 print
'<td class="liste_titre left">';
711 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
713 print
'<td class="liste_titre" align="left">';
717 if (!empty($arrayfields[
'm.value'][
'checked'])) {
719 print
'<td class="liste_titre right">';
720 print
'<input class="flat" type="text" size="4" name="search_qty" value="'.dol_escape_htmltag($search_qty).
'">';
723 if (!empty($arrayfields[
'm.price'][
'checked'])) {
725 print
'<td class="liste_titre left">';
732 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
735 $parameters = array(
'arrayfields' => $arrayfields);
736 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
737 print $hookmanager->resPrint;
739 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
740 print
'<td class="liste_titre">';
744 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
745 print
'<td class="liste_titre">';
750 print
'<td class="liste_titre maxwidthsearch">';
751 $searchpicto = $form->showFilterAndCheckAddButtons(0);
757 $totalarray = array();
758 $totalarray[
'nbfield'] = 0;
760 print
'<tr class="liste_titre">';
763 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
764 $totalarray[
'nbfield']++;
766 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
767 print_liste_field_titre($arrayfields[
'm.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
'm.rowid',
'', $param,
'', $sortfield, $sortorder);
768 $totalarray[
'nbfield']++;
770 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
771 print_liste_field_titre($arrayfields[
'm.datem'][
'label'], $_SERVER[
"PHP_SELF"],
'm.datem',
'', $param,
'', $sortfield, $sortorder);
772 $totalarray[
'nbfield']++;
774 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
775 print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
'p.ref',
'', $param,
'', $sortfield, $sortorder);
776 $totalarray[
'nbfield']++;
778 if (!empty($arrayfields[
'p.label'][
'checked'])) {
779 print_liste_field_titre($arrayfields[
'p.label'][
'label'], $_SERVER[
"PHP_SELF"],
'p.label',
'', $param,
'', $sortfield, $sortorder);
780 $totalarray[
'nbfield']++;
782 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
783 print_liste_field_titre($arrayfields[
'm.batch'][
'label'], $_SERVER[
"PHP_SELF"],
'm.batch',
'', $param,
'', $sortfield, $sortorder,
'center ');
784 $totalarray[
'nbfield']++;
786 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
787 print_liste_field_titre($arrayfields[
'pl.eatby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.eatby',
'', $param,
'', $sortfield, $sortorder,
'center ');
788 $totalarray[
'nbfield']++;
790 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
791 print_liste_field_titre($arrayfields[
'pl.sellby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.sellby',
'', $param,
'', $sortfield, $sortorder,
'center ');
792 $totalarray[
'nbfield']++;
794 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
796 print_liste_field_titre($arrayfields[
'e.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"e.ref",
"", $param,
"", $sortfield, $sortorder);
797 $totalarray[
'nbfield']++;
799 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
800 print_liste_field_titre($arrayfields[
'm.fk_user_author'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_user_author",
"", $param,
"", $sortfield, $sortorder);
801 $totalarray[
'nbfield']++;
803 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
804 print_liste_field_titre($arrayfields[
'm.inventorycode'][
'label'], $_SERVER[
"PHP_SELF"],
"m.inventorycode",
"", $param,
"", $sortfield, $sortorder);
805 $totalarray[
'nbfield']++;
807 if (!empty($arrayfields[
'm.label'][
'checked'])) {
808 print_liste_field_titre($arrayfields[
'm.label'][
'label'], $_SERVER[
"PHP_SELF"],
"m.label",
"", $param,
"", $sortfield, $sortorder);
809 $totalarray[
'nbfield']++;
811 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
812 print_liste_field_titre($arrayfields[
'm.type_mouvement'][
'label'], $_SERVER[
"PHP_SELF"],
"m.type_mouvement",
"", $param,
'', $sortfield, $sortorder,
'center ');
813 $totalarray[
'nbfield']++;
815 if (!empty($arrayfields[
'origin'][
'checked'])) {
816 print_liste_field_titre($arrayfields[
'origin'][
'label'], $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder);
817 $totalarray[
'nbfield']++;
819 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
820 print_liste_field_titre($arrayfields[
'm.fk_projet'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_projet",
"", $param,
'', $sortfield, $sortorder);
821 $totalarray[
'nbfield']++;
823 if (!empty($arrayfields[
'm.value'][
'checked'])) {
824 print_liste_field_titre($arrayfields[
'm.value'][
'label'], $_SERVER[
"PHP_SELF"],
"m.value",
"", $param,
'', $sortfield, $sortorder,
'right ');
825 $totalarray[
'nbfield']++;
827 if (!empty($arrayfields[
'm.price'][
'checked'])) {
829 print_liste_field_titre($arrayfields[
'm.price'][
'label'], $_SERVER[
"PHP_SELF"],
"m.price",
"", $param,
'', $sortfield, $sortorder,
'right ');
830 $totalarray[
'nbfield']++;
834 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
837 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
838 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
839 print $hookmanager->resPrint;
840 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
841 print_liste_field_titre($arrayfields[
'p.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
842 $totalarray[
'nbfield']++;
844 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
845 print_liste_field_titre($arrayfields[
'p.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
846 $totalarray[
'nbfield']++;
850 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
851 $totalarray[
'nbfield']++;
856 $savnbfield = $totalarray[
'nbfield'];
857 $totalarray = array();
858 $totalarray[
'nbfield'] = 0;
859 $imaxinloop = ($limit ? min($num, $limit) : $num);
860 while ($i < $imaxinloop) {
861 $objp = $db->fetch_object($resql);
866 $sql =
"SELECT label";
867 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_lang";
868 $sql .=
" WHERE fk_product = ".((int) $objp->rowid);
869 $sql .=
" AND lang = '".$db->escape($langs->getDefaultLang()).
"'";
872 $result = $db->query($sql);
874 $objtp = $db->fetch_object($result);
875 if (!empty($objtp->label)) {
876 $objp->produit = $objtp->label;
881 $userstatic->id = $objp->fk_user_author;
882 $userstatic->login = $objp->login;
883 $userstatic->lastname = $objp->lastname;
884 $userstatic->firstname = $objp->firstname;
885 $userstatic->photo = $objp->photo;
887 $productstatic->id = $objp->rowid;
888 $productstatic->ref = $objp->product_ref;
889 $productstatic->label = $objp->produit;
890 $productstatic->type = $objp->type;
891 $productstatic->entity = $objp->entity;
892 $productstatic->status_batch = $objp->tobatch;
894 $productlot->id = $objp->lotid;
895 $productlot->batch = $objp->batch;
896 $productlot->eatby = $objp->eatby;
897 $productlot->sellby = $objp->sellby;
899 $warehousestatic->id = $objp->entrepot_id;
900 $warehousestatic->libelle = $objp->warehouse_ref;
901 $warehousestatic->label = $objp->warehouse_ref;
902 $warehousestatic->lieu = $objp->lieu;
904 if (!empty($objp->fk_origin)) {
905 $origin = $objectlist->get_origin($objp->fk_origin, $objp->origintype);
910 print
'<tr class="oddeven">';
913 print
'<td class="nowrap center">';
914 if ($massactionbutton || $massaction) {
916 if (in_array($objp->rowid, $arrayofselected)) {
919 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
923 $totalarray[
'nbfield']++;
927 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
929 print
'<td>'.dol_escape_htmltag($objp->mid).
'</td>';
931 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
933 print
'<td>'.dol_print_date($db->jdate($objp->datem),
'dayhour').
'</td>';
935 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
937 print
'<td class="nowraponall">';
938 print $productstatic->getNomUrl(1,
'stock', 16);
941 if (!empty($arrayfields[
'p.label'][
'checked'])) {
943 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($productstatic->label).
'">';
944 print $productstatic->label;
947 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
948 print
'<td class="center nowraponall">';
949 if ($productlot->id > 0) {
950 print $productlot->getNomUrl(1);
956 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
957 print
'<td class="center">'.dol_print_date($objp->eatby,
'day').
'</td>';
959 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
960 print
'<td class="center">'.dol_print_date($objp->sellby,
'day').
'</td>';
963 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
965 print $warehousestatic->getNomUrl(1);
969 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
970 print
'<td class="tdoverflowmax100">';
971 print $userstatic->getNomUrl(-1);
975 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
976 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($objp->inventorycode).
'">';
983 if (!empty($arrayfields[
'm.label'][
'checked'])) {
984 print
'<td class="tdoverflowmax300" title="'.dol_escape_htmltag($objp->label).
'">'.
dol_escape_htmltag($objp->label).
'</td>';
987 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
988 switch ($objp->type_mouvement) {
990 print
'<td class="center">'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</td>';
993 print
'<td class="center">'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</td>';
996 print
'<td class="center">'.$langs->trans(
'StockDecrease').
'</td>';
999 print
'<td class="center">'.$langs->trans(
'StockIncrease').
'</td>';
1003 if (!empty($arrayfields[
'origin'][
'checked'])) {
1005 print
'<td class="nowraponall">'.$origin.
'</td>';
1007 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
1010 if ($objp->fk_project != 0) {
1011 print $movement->get_origin($objp->fk_project,
'project');
1015 if (!empty($arrayfields[
'm.value'][
'checked'])) {
1017 print
'<td class="right">';
1018 if ($objp->qty > 0) {
1019 print
'<span class="stockmovemententry">+'.$objp->qty.
'</span>';
1021 print
'<span class="stockmovementexit">'.$objp->qty.
'<span>';
1025 if (!empty($arrayfields[
'm.price'][
'checked'])) {
1027 print
'<td class="right">';
1028 if ($objp->price != 0) {
1029 print
'<span class="opacitymedium">'.price($objp->price).
'</span>';
1035 print
'<td class="nowrap center">';
1036 if ($massactionbutton || $massaction) {
1038 if (in_array($objp->rowid, $arrayofselected)) {
1041 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1045 $totalarray[
'nbfield']++;
1053 print
'<tr><td colspan="'.$savnbfield.
'"><span class="opacitymedium">'.$langs->trans(
"NoRecordFound").
'</span></td></tr>';
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($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_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)
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.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
natural_search($fields, $value, $mode=0, $nofirstand=0)
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...
newToken()
Return the value of token currently saved into session with name 'newtoken'.
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.
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.
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.