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';
51$langs->loadLangs(array(
"mrp",
"stocks",
"other"));
56$action =
GETPOST(
'action',
'aZ09');
57$confirm =
GETPOST(
'confirm',
'alpha');
58$cancel =
GETPOST(
'cancel',
'aZ09');
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";
99$diroutputmassaction =
$conf->mrp->dir_output.
'/temp/massgeneration/'.$user->id;
100$hookmanager->initHooks(array(
'mocard',
'globalcard'));
103$extrafields->fetch_name_optionals_label(
$object->table_element);
105$search_array_options = $extrafields->getOptionalsFromPost(
$object->table_element,
'',
'search_');
108$search_all = trim(
GETPOST(
"search_all",
'alpha'));
110foreach (
$object->fields as $key => $val) {
111 if (
GETPOST(
'search_'.$key,
'alpha')) {
112 $search[$key] =
GETPOST(
'search_'.$key,
'alpha');
116if (empty($action) && empty($id) && empty($ref)) {
121include DOL_DOCUMENT_ROOT.
'/core/actions_fetchobject.inc.php';
126$isdraft = ((
$object->status == $object::STATUS_DRAFT) ? 1 : 0);
133 'm.rowid' => array(
'label' =>
"Ref",
'checked' => 1,
'position' => 1),
134 'm.datem' => array(
'label' =>
"Date",
'checked' => 1,
'position' => 2),
135 'p.ref' => array(
'label' =>
"ProductRef",
'checked' => 1,
'css' =>
'maxwidth100',
'position' => 3),
136 'p.label' => array(
'label' =>
"ProductLabel",
'checked' => 0,
'position' => 5),
137 'm.batch' => array(
'label' =>
"BatchNumberShort",
'checked' => 1,
'position' => 8,
'enabled' => (isModEnabled(
'productbatch'))),
138 'pl.eatby' => array(
'label' =>
"EatByDate",
'checked' => 0,
'position' => 9,
'enabled' => (isModEnabled(
'productbatch'))),
139 'pl.sellby' => array(
'label' =>
"SellByDate",
'checked' => 0,
'position' => 10,
'enabled' => (isModEnabled(
'productbatch'))),
140 'e.ref' => array(
'label' =>
"Warehouse",
'checked' => 1,
'position' => 100,
'enabled' => (!($id > 0))),
141 'm.fk_user_author' => array(
'label' =>
"Author",
'checked' => 0,
'position' => 120),
142 'm.inventorycode' => array(
'label' =>
"InventoryCodeShort",
'checked' => 1,
'position' => 130),
143 'm.label' => array(
'label' =>
"MovementLabel",
'checked' => 1,
'position' => 140),
144 'm.type_mouvement' => array(
'label' =>
"TypeMovement",
'checked' => 0,
'position' => 150),
145 'origin' => array(
'label' =>
"Origin",
'checked' => 1,
'position' => 155),
146 'm.fk_projet' => array(
'label' =>
'Project',
'checked' => 0,
'position' => 180),
147 'm.value' => array(
'label' =>
"Qty",
'checked' => 1,
'position' => 200),
148 'm.price' => array(
'label' =>
"UnitPurchaseValue",
'checked' => 0,
'position' => 210)
153 unset($arrayfields[
'pl.sellby']);
156 unset($arrayfields[
'pl.eatby']);
158$objectlist->fields =
dol_sort_array($objectlist->fields,
'position');
162$permissionnote = $user->hasRight(
'mrp',
'write');
163$permissiondellink = $user->hasRight(
'mrp',
'write');
164$permissiontoadd = $user->hasRight(
'mrp',
'write');
165$permissiontodelete = $user->hasRight(
'mrp',
'delete') || ($permissiontoadd && isset(
$object->status) &&
$object->status == $object::STATUS_DRAFT);
168$permissiontoproduce = $permissiontoadd;
169$permissiontoupdatecost = $user->hasRight(
'bom',
'write');
171if ($permissiontoupdatecost) {
172 $arrayfields[
'm.price'][
'enabled'] = 1;
175$arrayofselected = array();
182if (
GETPOST(
'cancel',
'alpha')) {
186if (!
GETPOST(
'confirmmassaction',
'alpha') && $massaction !=
'presend' && $massaction !=
'confirm_presend') {
190$parameters = array();
191$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action);
196include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
199if (
GETPOST(
'button_removefilter_x',
'alpha') ||
GETPOST(
'button_removefilter.x',
'alpha') ||
GETPOST(
'button_removefilter',
'alpha')) {
203 $search_movement =
"";
204 $search_type_mouvement =
"";
205 $search_inventorycode =
"";
206 $search_product_ref =
"";
207 $search_product =
"";
208 $search_warehouse =
"";
214 $search_array_options = array();
217if (empty($reshook)) {
222 if (empty($backtopage) || ($cancel && empty($id))) {
224 if (empty($id) && (($action !=
'add' && $action !=
'create') || $cancel)) {
225 $backtopage = $backurlforlist;
227 $backtopage = DOL_URL_ROOT.
'/mrp/mo_production.php?id='.(
$id > 0 ?
$id :
'__ID__');
230 $triggermodname =
'MO_MODIFY';
233 include DOL_DOCUMENT_ROOT.
'/core/actions_addupdatedelete.inc.php';
236 include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php';
239 include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
242 $triggersendname =
'MO_SENTBYMAIL';
243 $autocopy =
'MAIN_MAIL_AUTOCOPY_MO_TO';
244 $trackid =
'mo'.$object->id;
245 include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
250 if ($action ==
'set_thirdparty' && $permissiontoadd) {
251 $object->setValueFrom(
'fk_soc',
GETPOSTINT(
'fk_soc'),
'',
null,
'date',
'', $user, $triggermodname);
253 if ($action ==
'classin' && $permissiontoadd) {
257 if ($action ==
'confirm_reopen') {
258 $result =
$object->setStatut($object::STATUS_INPROGRESS, 0,
'',
'MRP_REOPEN');
268$form =
new Form($db);
271$productstatic =
new Product($db);
273$warehousestatic =
new Entrepot($db);
274$userstatic =
new User($db);
276$title = $langs->trans(
'Mo');
277$help_url =
'EN:Module_Manufacturing_Orders|FR:Module_Ordres_de_Fabrication|DE:Modul_Fertigungsauftrag';
279llxHeader(
'', $title, $help_url,
'', 0, 0,
'',
'',
'',
'mod-mrp page-card_movements');
282if (
$object->id > 0 && (empty($action) || ($action !=
'edit' && $action !=
'create'))) {
283 $res =
$object->fetch_thirdparty();
284 $res =
$object->fetch_optionals();
293 if ($action ==
'delete') {
294 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'DeleteMo'), $langs->trans(
'ConfirmDeleteMo'),
'confirm_delete',
'', 0, 1);
297 if ($action ==
'deleteline') {
298 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteLine'), $langs->trans(
'ConfirmDeleteLine'),
'confirm_deleteline',
'', 0, 1);
301 if ($action ==
'clone') {
303 $formquestion = array();
304 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneMo',
$object->ref),
'confirm_clone', $formquestion,
'yes', 1);
308 if ($action ==
'xxx') {
309 $formquestion = array();
320 $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.
$object->id, $langs->trans(
'XXX'), $text,
'confirm_xxx', $formquestion, 0, 1, 220);
324 $parameters = array(
'formConfirm' => $formconfirm,
'lineid' => $lineid);
325 $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action);
326 if (empty($reshook)) {
327 $formconfirm .= $hookmanager->resPrint;
328 } elseif ($reshook > 0) {
329 $formconfirm = $hookmanager->resPrint;
338 $linkback =
'<a href="'.dol_buildpath(
'/mrp/mo_list.php', 1).
'?restore_lastsearch_values=1'.(!empty($socid) ?
'&socid='.$socid :
'').
'">'.$langs->trans(
"BackToList").
'</a>';
340 $morehtmlref =
'<div class="refidno">';
346 if (is_object(
$object->thirdparty)) {
347 $morehtmlref .=
$object->thirdparty->getNomUrl(1,
'customer');
349 $morehtmlref .=
' (<a href="'.DOL_URL_ROOT.
'/commande/list.php?socid='.
$object->thirdparty->id.
'&search_societe='.urlencode(
$object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
353 if (isModEnabled(
'project')) {
354 $langs->load(
"projects");
355 if (is_object(
$object->thirdparty)) {
356 $morehtmlref .=
'<br>';
358 if ($permissiontoadd) {
359 $morehtmlref .=
img_picto($langs->trans(
"Project"),
'project',
'class="pictofixedwidth"');
360 if ($action !=
'classify') {
361 $morehtmlref .=
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.
newToken().
'&id='.
$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
363 $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.
$object->id,
$object->socid,
$object->fk_project, ($action ==
'classify' ?
'projectid' :
'none'), 0, 0, 0, 1,
'',
'maxwidth300');
365 if (!empty(
$object->fk_project)) {
367 $proj->fetch(
$object->fk_project);
368 $morehtmlref .= $proj->getNomUrl(1);
370 $morehtmlref .=
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
375 $morehtmlref .=
'</div>';
378 dol_banner_tab($object,
'ref', $linkback, 1,
'ref',
'ref', $morehtmlref);
381 print
'<div class="fichecenter">';
382 print
'<div class="fichehalfleft">';
383 print
'<div class="underbanner clearboth"></div>';
384 print
'<table class="border centpercent tableforfield">'.
"\n";
387 $keyforbreak =
'fk_warehouse';
388 unset(
$object->fields[
'fk_project']);
389 unset(
$object->fields[
'fk_soc']);
390 include DOL_DOCUMENT_ROOT.
'/core/tpl/commonfields_view.tpl.php';
393 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
399 print
'<div class="clearboth"></div>';
437 $sql =
"SELECT p.rowid, p.ref as product_ref, p.label as produit, p.tobatch, p.fk_product_type as type, p.entity,";
438 $sql .=
" e.ref as warehouse_ref, e.rowid as entrepot_id, e.lieu,";
439 $sql .=
" m.rowid as mid, m.value as qty, m.datem, m.fk_user_author, m.label, m.inventorycode, m.fk_origin, m.origintype,";
440 $sql .=
" m.batch, m.price,";
441 $sql .=
" m.type_mouvement,";
442 $sql .=
" pl.rowid as lotid, pl.eatby, pl.sellby,";
443 $sql .=
" u.login, u.photo, u.lastname, u.firstname";
445 if (!empty($extrafields->attributes[$objectlist->table_element][
'label'])) {
446 foreach ($extrafields->attributes[$objectlist->table_element][
'label'] as $key => $val) {
447 $sql .= ($extrafields->attributes[$objectlist->table_element][
'type'][$key] !=
'separate' ?
", ef.".$key.
" as options_".$key :
'');
451 $parameters = array();
452 $reshook = $hookmanager->executeHooks(
'printFieldListSelect', $parameters);
453 $sql .= $hookmanager->resPrint;
454 $sql .=
" FROM ".MAIN_DB_PREFIX.
"entrepot as e,";
455 $sql .=
" ".MAIN_DB_PREFIX.
"product as p,";
456 $sql .=
" ".MAIN_DB_PREFIX.
"stock_mouvement as m";
457 if (!empty($extrafields->attributes[$objectlist->table_element]) && is_array($extrafields->attributes[$objectlist->table_element][
'label']) && count($extrafields->attributes[$objectlist->table_element][
'label'])) {
458 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.$objectlist->table_element.
"_extrafields as ef on (m.rowid = ef.fk_object)";
460 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"user as u ON m.fk_user_author = u.rowid";
461 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product_lot as pl ON m.batch = pl.batch AND m.fk_product = pl.fk_product";
462 $sql .=
" WHERE m.fk_product = p.rowid";
463 $sql .=
" AND m.origintype = 'mo' AND m.fk_origin = ".(int)
$object->id;
465 $sql .=
" AND m.rowid = ".((int) $msid);
467 $sql .=
" AND m.fk_entrepot = e.rowid";
468 $sql .=
" AND e.entity IN (".getEntity(
'stock').
")";
470 $sql .=
" AND p.fk_product_type = 0";
473 if (!empty($search_ref)) {
476 if (!empty($search_movement)) {
479 if (!empty($search_inventorycode)) {
482 if (!empty($search_product_ref)) {
485 if (!empty($search_product)) {
488 if ($search_warehouse !=
'' && $search_warehouse !=
'-1') {
491 if (!empty($search_user)) {
492 $sql .=
natural_search(array(
'u.lastname',
'u.firstname',
'u.login'), $search_user);
494 if (!empty($search_batch)) {
497 if ($search_qty !=
'') {
500 if ($search_type_mouvement !=
'' && $search_type_mouvement !=
'-1') {
501 $sql .=
natural_search(
'm.type_mouvement', $search_type_mouvement, 2);
504 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_sql.tpl.php';
506 $parameters = array();
507 $reshook = $hookmanager->executeHooks(
'printFieldListWhere', $parameters);
508 $sql .= $hookmanager->resPrint;
509 $sql .= $db->order($sortfield, $sortorder);
511 $nbtotalofrecords =
'';
513 $result = $db->query($sql);
514 $nbtotalofrecords = $db->num_rows($result);
515 if (($page * $limit) > $nbtotalofrecords) {
520 $sql .= $db->plimit($limit + 1, $offset);
522 $resql = $db->query($sql);
526 $num = $db->num_rows($resql);
529 if (!empty($contextpage) && $contextpage != $_SERVER[
"PHP_SELF"]) {
530 $param .=
'&contextpage='.urlencode($contextpage);
532 if ($limit > 0 && $limit !=
$conf->liste_limit) {
533 $param .=
'&limit='.((int) $limit);
536 $param .=
'&id='.urlencode((
string) (
$id));
538 if ($search_movement) {
539 $param .=
'&search_movement='.urlencode($search_movement);
541 if ($search_inventorycode) {
542 $param .=
'&search_inventorycode='.urlencode($search_inventorycode);
544 if ($search_type_mouvement) {
545 $param .=
'&search_type_mouvement='.urlencode($search_type_mouvement);
547 if ($search_product_ref) {
548 $param .=
'&search_product_ref='.urlencode($search_product_ref);
550 if ($search_product) {
551 $param .=
'&search_product='.urlencode($search_product);
554 $param .=
'&search_batch='.urlencode($search_batch);
556 if ($search_warehouse > 0) {
557 $param .=
'&search_warehouse='.urlencode($search_warehouse);
560 $param .=
'&search_user='.urlencode($search_user);
564 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_param.tpl.php';
567 $arrayofmassactions = array(
572 if (in_array($massaction, array(
'presend',
'predelete'))) {
573 $arrayofmassactions = array();
575 $massactionbutton = $form->selectMassAction(
'', $arrayofmassactions);
577 print
'<form method="POST" action="'.$_SERVER[
"PHP_SELF"].
'">';
578 if ($optioncss !=
'') {
579 print
'<input type="hidden" name="optioncss" value="'.$optioncss.
'">';
581 print
'<input type="hidden" name="token" value="'.newToken().
'">';
582 print
'<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';
583 print
'<input type="hidden" name="action" value="list">';
584 print
'<input type="hidden" name="sortfield" value="'.$sortfield.
'">';
585 print
'<input type="hidden" name="sortorder" value="'.$sortorder.
'">';
586 print
'<input type="hidden" name="page" value="'.$page.
'">';
587 print
'<input type="hidden" name="contextpage" value="'.$contextpage.
'">';
589 print
'<input type="hidden" name="id" value="'.$id.
'">';
593 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'', 0,
'',
'', $limit);
595 print_barre_liste(
'', $page, $_SERVER[
"PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords,
'generic', 0,
'',
'', $limit);
600 $parameters = array();
601 $reshook = $hookmanager->executeHooks(
'printFieldPreListTitle', $parameters, $object, $action);
602 if (empty($reshook)) {
603 $moreforfilter .= $hookmanager->resPrint;
605 $moreforfilter = $hookmanager->resPrint;
608 if (!empty($moreforfilter)) {
609 print
'<div class="liste_titre liste_titre_bydiv centpercent">';
610 print $moreforfilter;
614 $varpage = empty($contextpage) ? $_SERVER[
"PHP_SELF"] : $contextpage;
615 $selectedfields = $form->multiSelectArrayWithCheckbox(
'selectedfields', $arrayfields, $varpage,
getDolGlobalString(
'MAIN_CHECKBOX_LEFT_COLUMN'));
616 $selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons(
'checkforselect', 1) :
'');
618 print
'<div class="div-table-responsive">';
619 print
'<table class="tagtable liste'.($moreforfilter ?
" listwithfilterbefore" :
"").
'">'.
"\n";
622 print
'<tr class="liste_titre_filter">';
625 print
'<td class="liste_titre maxwidthsearch">';
626 $searchpicto = $form->showFilterAndCheckAddButtons(0);
630 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
632 print
'<td class="liste_titre left">';
633 print
'<input class="flat maxwidth25" type="text" name="search_ref" value="'.dol_escape_htmltag($search_ref).
'">';
636 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
637 print
'<td class="liste_titre nowraponall">';
638 print
'<input class="flat" type="text" size="2" maxlength="2" placeholder="'.dol_escape_htmltag($langs->trans(
"Month")).
'" name="month" value="'.$month.
'">';
639 if (!isModEnabled(
'productbatch')) {
643 $syear = $year ? $year : -1;
644 print
'<input class="flat maxwidth50" type="text" maxlength="4" placeholder="'.dol_escape_htmltag($langs->trans(
"Year")).
'" name="year" value="'.($syear > 0 ? $syear :
'').
'">';
648 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
650 print
'<td class="liste_titre left">';
651 print
'<input class="flat maxwidth75" type="text" name="search_product_ref" value="'.dol_escape_htmltag($search_product_ref).
'">';
654 if (!empty($arrayfields[
'p.label'][
'checked'])) {
656 print
'<td class="liste_titre left">';
657 print
'<input class="flat maxwidth100" type="text" name="search_product" value="'.dol_escape_htmltag($search_product).
'">';
661 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
662 print
'<td class="liste_titre center"><input class="flat maxwidth75" type="text" name="search_batch" value="'.dol_escape_htmltag($search_batch).
'"></td>';
664 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
665 print
'<td class="liste_titre left">';
668 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
669 print
'<td class="liste_titre left">';
673 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
674 print
'<td class="liste_titre maxwidthonsmartphone left">';
676 print $formproduct->selectWarehouses($search_warehouse,
'search_warehouse',
'warehouseopen,warehouseinternal', 1, 0, 0,
'', 0, 0, array(),
'maxwidth200');
679 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
681 print
'<td class="liste_titre left">';
682 print
'<input class="flat" type="text" size="6" name="search_user" value="'.dol_escape_htmltag($search_user).
'">';
685 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
687 print
'<td class="liste_titre left">';
688 print
'<input class="flat" type="text" size="4" name="search_inventorycode" value="'.dol_escape_htmltag($search_inventorycode).
'">';
691 if (!empty($arrayfields[
'm.label'][
'checked'])) {
693 print
'<td class="liste_titre left">';
694 print
'<input class="flat" type="text" size="8" name="search_movement" value="'.dol_escape_htmltag($search_movement).
'">';
697 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
699 print
'<td class="liste_titre center">';
701 print
'<select id="search_type_mouvement" name="search_type_mouvement" class="maxwidth150">';
702 print
'<option value="" '.(($search_type_mouvement ==
"") ?
'selected="selected"' :
'').
'> </option>';
703 print
'<option value="0" '.(($search_type_mouvement ==
"0") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</option>';
704 print
'<option value="1" '.(($search_type_mouvement ==
"1") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</option>';
705 print
'<option value="2" '.(($search_type_mouvement ==
"2") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockDecrease').
'</option>';
706 print
'<option value="3" '.(($search_type_mouvement ==
"3") ?
'selected="selected"' :
'').
'>'.$langs->trans(
'StockIncrease').
'</option>';
713 if (!empty($arrayfields[
'origin'][
'checked'])) {
715 print
'<td class="liste_titre left">';
719 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
721 print
'<td class="liste_titre" align="left">';
725 if (!empty($arrayfields[
'm.value'][
'checked'])) {
727 print
'<td class="liste_titre right">';
728 print
'<input class="flat" type="text" size="4" name="search_qty" value="'.dol_escape_htmltag($search_qty).
'">';
731 if (!empty($arrayfields[
'm.price'][
'checked'])) {
733 print
'<td class="liste_titre left">';
740 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_input.tpl.php';
743 $parameters = array(
'arrayfields' => $arrayfields);
744 $reshook = $hookmanager->executeHooks(
'printFieldListOption', $parameters);
745 print $hookmanager->resPrint;
747 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
748 print
'<td class="liste_titre">';
752 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
753 print
'<td class="liste_titre">';
758 print
'<td class="liste_titre maxwidthsearch">';
759 $searchpicto = $form->showFilterAndCheckAddButtons(0);
765 $totalarray = array();
766 $totalarray[
'nbfield'] = 0;
768 print
'<tr class="liste_titre">';
771 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
772 $totalarray[
'nbfield']++;
774 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
775 print_liste_field_titre($arrayfields[
'm.rowid'][
'label'], $_SERVER[
"PHP_SELF"],
'm.rowid',
'', $param,
'', $sortfield, $sortorder);
776 $totalarray[
'nbfield']++;
778 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
779 print_liste_field_titre($arrayfields[
'm.datem'][
'label'], $_SERVER[
"PHP_SELF"],
'm.datem',
'', $param,
'', $sortfield, $sortorder);
780 $totalarray[
'nbfield']++;
782 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
783 print_liste_field_titre($arrayfields[
'p.ref'][
'label'], $_SERVER[
"PHP_SELF"],
'p.ref',
'', $param,
'', $sortfield, $sortorder);
784 $totalarray[
'nbfield']++;
786 if (!empty($arrayfields[
'p.label'][
'checked'])) {
787 print_liste_field_titre($arrayfields[
'p.label'][
'label'], $_SERVER[
"PHP_SELF"],
'p.label',
'', $param,
'', $sortfield, $sortorder);
788 $totalarray[
'nbfield']++;
790 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
791 print_liste_field_titre($arrayfields[
'm.batch'][
'label'], $_SERVER[
"PHP_SELF"],
'm.batch',
'', $param,
'', $sortfield, $sortorder,
'center ');
792 $totalarray[
'nbfield']++;
794 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
795 print_liste_field_titre($arrayfields[
'pl.eatby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.eatby',
'', $param,
'', $sortfield, $sortorder,
'center ');
796 $totalarray[
'nbfield']++;
798 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
799 print_liste_field_titre($arrayfields[
'pl.sellby'][
'label'], $_SERVER[
"PHP_SELF"],
'pl.sellby',
'', $param,
'', $sortfield, $sortorder,
'center ');
800 $totalarray[
'nbfield']++;
802 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
804 print_liste_field_titre($arrayfields[
'e.ref'][
'label'], $_SERVER[
"PHP_SELF"],
"e.ref",
"", $param,
"", $sortfield, $sortorder);
805 $totalarray[
'nbfield']++;
807 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
808 print_liste_field_titre($arrayfields[
'm.fk_user_author'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_user_author",
"", $param,
"", $sortfield, $sortorder);
809 $totalarray[
'nbfield']++;
811 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
812 print_liste_field_titre($arrayfields[
'm.inventorycode'][
'label'], $_SERVER[
"PHP_SELF"],
"m.inventorycode",
"", $param,
"", $sortfield, $sortorder);
813 $totalarray[
'nbfield']++;
815 if (!empty($arrayfields[
'm.label'][
'checked'])) {
816 print_liste_field_titre($arrayfields[
'm.label'][
'label'], $_SERVER[
"PHP_SELF"],
"m.label",
"", $param,
"", $sortfield, $sortorder);
817 $totalarray[
'nbfield']++;
819 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
820 print_liste_field_titre($arrayfields[
'm.type_mouvement'][
'label'], $_SERVER[
"PHP_SELF"],
"m.type_mouvement",
"", $param,
'', $sortfield, $sortorder,
'center ');
821 $totalarray[
'nbfield']++;
823 if (!empty($arrayfields[
'origin'][
'checked'])) {
824 print_liste_field_titre($arrayfields[
'origin'][
'label'], $_SERVER[
"PHP_SELF"],
"",
"", $param,
"", $sortfield, $sortorder);
825 $totalarray[
'nbfield']++;
827 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
828 print_liste_field_titre($arrayfields[
'm.fk_projet'][
'label'], $_SERVER[
"PHP_SELF"],
"m.fk_projet",
"", $param,
'', $sortfield, $sortorder);
829 $totalarray[
'nbfield']++;
831 if (!empty($arrayfields[
'm.value'][
'checked'])) {
832 print_liste_field_titre($arrayfields[
'm.value'][
'label'], $_SERVER[
"PHP_SELF"],
"m.value",
"", $param,
'', $sortfield, $sortorder,
'right ');
833 $totalarray[
'nbfield']++;
835 if (!empty($arrayfields[
'm.price'][
'checked'])) {
837 print_liste_field_titre($arrayfields[
'm.price'][
'label'], $_SERVER[
"PHP_SELF"],
"m.price",
"", $param,
'', $sortfield, $sortorder,
'right ');
838 $totalarray[
'nbfield']++;
842 include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_list_search_title.tpl.php';
845 $parameters = array(
'arrayfields' => $arrayfields,
'param' => $param,
'sortfield' => $sortfield,
'sortorder' => $sortorder);
846 $reshook = $hookmanager->executeHooks(
'printFieldListTitle', $parameters);
847 print $hookmanager->resPrint;
848 if (!empty($arrayfields[
'm.datec'][
'checked'])) {
849 print_liste_field_titre($arrayfields[
'p.datec'][
'label'], $_SERVER[
"PHP_SELF"],
"p.datec",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
850 $totalarray[
'nbfield']++;
852 if (!empty($arrayfields[
'm.tms'][
'checked'])) {
853 print_liste_field_titre($arrayfields[
'p.tms'][
'label'], $_SERVER[
"PHP_SELF"],
"p.tms",
"", $param,
'', $sortfield, $sortorder,
'center nowrap ');
854 $totalarray[
'nbfield']++;
858 print_liste_field_titre($selectedfields, $_SERVER[
"PHP_SELF"],
"",
'',
'',
'', $sortfield, $sortorder,
'center maxwidthsearch ');
859 $totalarray[
'nbfield']++;
864 $savnbfield = $totalarray[
'nbfield'];
865 $totalarray = array();
866 $totalarray[
'nbfield'] = 0;
867 $imaxinloop = ($limit ? min($num, $limit) : $num);
868 while ($i < $imaxinloop) {
869 $objp = $db->fetch_object($resql);
874 $sql =
"SELECT label";
875 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_lang";
876 $sql .=
" WHERE fk_product = ".((int) $objp->rowid);
877 $sql .=
" AND lang = '".$db->escape($langs->getDefaultLang()).
"'";
880 $result = $db->query($sql);
882 $objtp = $db->fetch_object($result);
883 if (!empty($objtp->label)) {
884 $objp->produit = $objtp->label;
889 $userstatic->id = $objp->fk_user_author;
890 $userstatic->login = $objp->login;
891 $userstatic->lastname = $objp->lastname;
892 $userstatic->firstname = $objp->firstname;
893 $userstatic->photo = $objp->photo;
895 $productstatic->id = $objp->rowid;
896 $productstatic->ref = $objp->product_ref;
897 $productstatic->label = $objp->produit;
898 $productstatic->type = $objp->type;
899 $productstatic->entity = $objp->entity;
900 $productstatic->status_batch = $objp->tobatch;
902 $productlot->id = $objp->lotid;
903 $productlot->batch = $objp->batch;
904 $productlot->eatby = $objp->eatby;
905 $productlot->sellby = $objp->sellby;
907 $warehousestatic->id = $objp->entrepot_id;
908 $warehousestatic->libelle = $objp->warehouse_ref;
909 $warehousestatic->label = $objp->warehouse_ref;
910 $warehousestatic->lieu = $objp->lieu;
912 if (!empty($objp->fk_origin)) {
913 $origin = $objectlist->get_origin($objp->fk_origin, $objp->origintype);
918 print
'<tr class="oddeven">';
921 print
'<td class="nowrap center">';
922 if ($massactionbutton || $massaction) {
924 if (in_array($objp->rowid, $arrayofselected)) {
927 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
931 $totalarray[
'nbfield']++;
935 if (!empty($arrayfields[
'm.rowid'][
'checked'])) {
937 print
'<td>'.dol_escape_htmltag($objp->mid).
'</td>';
939 if (!empty($arrayfields[
'm.datem'][
'checked'])) {
941 print
'<td>'.dol_print_date($db->jdate($objp->datem),
'dayhour').
'</td>';
943 if (!empty($arrayfields[
'p.ref'][
'checked'])) {
945 print
'<td class="nowraponall">';
946 print $productstatic->getNomUrl(1,
'stock', 16);
949 if (!empty($arrayfields[
'p.label'][
'checked'])) {
951 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($productstatic->label).
'">';
952 print $productstatic->label;
955 if (!empty($arrayfields[
'm.batch'][
'checked'])) {
956 print
'<td class="center nowraponall">';
957 if ($productlot->id > 0) {
958 print $productlot->getNomUrl(1);
964 if (!empty($arrayfields[
'pl.eatby'][
'checked'])) {
965 print
'<td class="center">'.dol_print_date($objp->eatby,
'day').
'</td>';
967 if (!empty($arrayfields[
'pl.sellby'][
'checked'])) {
968 print
'<td class="center">'.dol_print_date($objp->sellby,
'day').
'</td>';
971 if (!empty($arrayfields[
'e.ref'][
'checked'])) {
973 print $warehousestatic->getNomUrl(1);
977 if (!empty($arrayfields[
'm.fk_user_author'][
'checked'])) {
978 print
'<td class="tdoverflowmax100">';
979 print $userstatic->getNomUrl(-1);
983 if (!empty($arrayfields[
'm.inventorycode'][
'checked'])) {
984 print
'<td class="tdoverflowmax150" title="'.dol_escape_htmltag($objp->inventorycode).
'">';
991 if (!empty($arrayfields[
'm.label'][
'checked'])) {
992 print
'<td class="tdoverflowmax300" title="'.dol_escape_htmltag($objp->label).
'">'.
dol_escape_htmltag($objp->label).
'</td>';
995 if (!empty($arrayfields[
'm.type_mouvement'][
'checked'])) {
996 switch ($objp->type_mouvement) {
998 print
'<td class="center">'.$langs->trans(
'StockIncreaseAfterCorrectTransfer').
'</td>';
1001 print
'<td class="center">'.$langs->trans(
'StockDecreaseAfterCorrectTransfer').
'</td>';
1004 print
'<td class="center">'.$langs->trans(
'StockDecrease').
'</td>';
1007 print
'<td class="center">'.$langs->trans(
'StockIncrease').
'</td>';
1011 if (!empty($arrayfields[
'origin'][
'checked'])) {
1013 print
'<td class="nowraponall">'.$origin.
'</td>';
1015 if (!empty($arrayfields[
'm.fk_projet'][
'checked'])) {
1018 if ($objp->fk_project != 0) {
1019 print $movement->get_origin($objp->fk_project,
'project');
1023 if (!empty($arrayfields[
'm.value'][
'checked'])) {
1025 print
'<td class="right">';
1026 if ($objp->qty > 0) {
1027 print
'<span class="stockmovemententry">+'.$objp->qty.
'</span>';
1029 print
'<span class="stockmovementexit">'.$objp->qty.
'<span>';
1033 if (!empty($arrayfields[
'm.price'][
'checked'])) {
1035 print
'<td class="right">';
1036 if ($objp->price != 0) {
1037 print
'<span class="opacitymedium">'.price($objp->price).
'</span>';
1043 print
'<td class="nowrap center">';
1044 if ($massactionbutton || $massaction) {
1046 if (in_array($objp->rowid, $arrayofselected)) {
1049 print
'<input id="cb'.$objp->rowid.
'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$objp->rowid.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1053 $totalarray[
'nbfield']++;
1061 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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...
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.