diff --git a/htdocs/core/class/html.form.class.php b/htdocs/core/class/html.form.class.php index a15b2ef75c8..e31f1c87c73 100644 --- a/htdocs/core/class/html.form.class.php +++ b/htdocs/core/class/html.form.class.php @@ -10031,8 +10031,8 @@ class Form $ret .= ''; // gravatar need md5 hash } else { if ($nophoto == 'company') { - $ret .= '
' . img_picto('', 'company') . '
'; - $ret .= '
'; + $ret .= '
' . img_picto('', 'company') . '
'; + //$ret .= '
'; } else { $ret .= ''; } diff --git a/htdocs/core/menus/init_menu_auguria.sql b/htdocs/core/menus/init_menu_auguria.sql index d177030b841..09062838e0d 100644 --- a/htdocs/core/menus/init_menu_auguria.sql +++ b/htdocs/core/menus/init_menu_auguria.sql @@ -119,7 +119,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("societe") && isModEnabled("categorie")', __HANDLER__, 'left', 671__+MAX_llx_menu__, 'companies', '', 670__+MAX_llx_menu__, '/categories/card.php?mainmenu=companies&action=create&type=4', 'NewCategory', 1, 'categories', '$user->hasRight("categorie","creer")', '', 2, 0, __ENTITY__); -- Product - Product -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("product")', __HANDLER__, 'left', 2800__+MAX_llx_menu__, 'products', 'product', 3__+MAX_llx_menu__, '/product/index.php?mainmenu=products&leftmenu=product&type=0', 'Products', 0, 'products', '$user->rights->produit->lire', '', 2, 0, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("product")', __HANDLER__, 'left', 2800__+MAX_llx_menu__, 'products', 'product', 3__+MAX_llx_menu__, '/product/index.php?mainmenu=products&leftmenu=product', 'Products', 0, 'products', '$user->rights->produit->lire', '', 2, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("product")', __HANDLER__, 'left', 2801__+MAX_llx_menu__, 'products', '', 2800__+MAX_llx_menu__, '/product/card.php?mainmenu=products&leftmenu=product&action=create&type=0', 'NewProduct', 1, 'products', '$user->rights->produit->creer', '', 2, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("product")', __HANDLER__, 'left', 2802__+MAX_llx_menu__, 'products', '', 2800__+MAX_llx_menu__, '/product/list.php?mainmenu=products&leftmenu=product&type=0', 'List', 1, 'products', '$user->rights->produit->lire', '', 2, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("product")', __HANDLER__, 'left', 2803__+MAX_llx_menu__, 'products', '', 2800__+MAX_llx_menu__, '/product/reassort.php?mainmenu=products&type=0', 'MenuStocks', 1, 'products', '$user->rights->produit->lire && $user->rights->stock->lire', '', 2, 4, __ENTITY__); @@ -131,7 +131,7 @@ insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, left insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("propal")', __HANDLER__, 'left', 2804__+MAX_llx_menu__, 'products', '', 2800__+MAX_llx_menu__, '/product/stats/card.php?mainmenu=products&id=all&leftmenu=stats&type=0', 'Statistics', 1, 'main', '$user->rights->produit->lire', '', 2, 8, __ENTITY__); -- Product - Services -insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("service")', __HANDLER__, 'left', 2900__+MAX_llx_menu__, 'products', 'service', 3__+MAX_llx_menu__, '/product/index.php?mainmenu=products&leftmenu=service&type=1', 'Services', 0, 'products', '$user->hasRight("service","lire")', '', 2, 1, __ENTITY__); +insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("service")', __HANDLER__, 'left', 2900__+MAX_llx_menu__, 'products', 'service', 3__+MAX_llx_menu__, '/product/index.php?mainmenu=products&leftmenu=service', 'Services', 0, 'products', '$user->hasRight("service","lire")', '', 2, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("service")', __HANDLER__, 'left', 2901__+MAX_llx_menu__, 'products', '', 2900__+MAX_llx_menu__, '/product/card.php?mainmenu=products&leftmenu=service&action=create&type=1', 'NewService', 1, 'products', '$user->rights->service->creer', '', 2, 0, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("service")', __HANDLER__, 'left', 2902__+MAX_llx_menu__, 'products', '', 2900__+MAX_llx_menu__, '/product/list.php?mainmenu=products&leftmenu=service&type=1', 'List', 1, 'products', '$user->hasRight("service","lire")', '', 2, 1, __ENTITY__); insert into llx_menu (module, enabled, menu_handler, type, rowid, mainmenu, leftmenu, fk_menu, url, titre, level, langs, perms, target, usertype, position, entity) values ('', 'isModEnabled("propal")', __HANDLER__, 'left', 2903__+MAX_llx_menu__, 'products', '', 2900__+MAX_llx_menu__, '/product/stats/card.php?mainmenu=products&id=all&leftmenu=stats&type=1', 'Statistics', 1, 'main', '$user->hasRight("service","lire")', '', 2, 5, __ENTITY__); diff --git a/htdocs/core/menus/standard/eldy.lib.php b/htdocs/core/menus/standard/eldy.lib.php index 0349eef17ad..f62b0ee28f7 100644 --- a/htdocs/core/menus/standard/eldy.lib.php +++ b/htdocs/core/menus/standard/eldy.lib.php @@ -2069,7 +2069,7 @@ function get_left_menu_products($mainmenu, &$newmenu, $usemenuhider = 1, $leftme if ($mainmenu == 'products') { // Products if (isModEnabled('product')) { - $newmenu->add("/product/index.php?leftmenu=product&type=0", $langs->trans("Products"), 0, $user->hasRight('product', 'read'), '', $mainmenu, 'product', 0, '', '', '', img_picto('', 'product', 'class="paddingright pictofixedwidth"')); + $newmenu->add("/product/index.php?leftmenu=product", $langs->trans("Products"), 0, $user->hasRight('product', 'read'), '', $mainmenu, 'product', 0, '', '', '', img_picto('', 'product', 'class="paddingright pictofixedwidth"')); $newmenu->add("/product/card.php?leftmenu=product&action=create&type=0", $langs->trans("NewProduct"), 1, $user->hasRight('product', 'creer')); $newmenu->add("/product/list.php?leftmenu=product&type=0", $langs->trans("List"), 1, $user->hasRight('product', 'read')); if (isModEnabled('stock')) { @@ -2097,7 +2097,7 @@ function get_left_menu_products($mainmenu, &$newmenu, $usemenuhider = 1, $leftme // Services if (isModEnabled('service')) { - $newmenu->add("/product/index.php?leftmenu=service&type=1", $langs->trans("Services"), 0, $user->hasRight('service', 'read'), '', $mainmenu, 'service', 0, '', '', '', img_picto('', 'service', 'class="paddingright pictofixedwidth"')); + $newmenu->add("/product/index.php?leftmenu=service", $langs->trans("Services"), 0, $user->hasRight('service', 'read'), '', $mainmenu, 'service', 0, '', '', '', img_picto('', 'service', 'class="paddingright pictofixedwidth"')); $newmenu->add("/product/card.php?leftmenu=service&action=create&type=1", $langs->trans("NewService"), 1, $user->hasRight('service', 'creer')); $newmenu->add("/product/list.php?leftmenu=service&type=1", $langs->trans("List"), 1, $user->hasRight('service', 'read')); diff --git a/htdocs/product/index.php b/htdocs/product/index.php index d7fb18d737b..4f77dc909ba 100644 --- a/htdocs/product/index.php +++ b/htdocs/product/index.php @@ -78,6 +78,8 @@ if (GETPOST('addbox')) { } } +$max = getDolGlobalInt('MAIN_SIZE_SHORTLIST_LIMIT'); + /* * View @@ -304,15 +306,14 @@ if (isModEnabled('category') && getDolGlobalString('CATEGORY_GRAPHSTATS_ON_PRODU * Latest modified products */ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("produit", "lire") || $user->hasRight("service", "lire"))) { - $max = 15; $sql = "SELECT p.rowid, p.label, p.price, p.ref, p.fk_product_type, p.tosell, p.tobuy, p.tobatch, p.fk_price_expression,"; $sql .= " p.entity,"; $sql .= " p.tms as datem"; $sql .= " FROM ".MAIN_DB_PREFIX."product as p"; $sql .= " WHERE p.entity IN (".getEntity($product_static->element, 1).")"; - if ($type != '') { + /*if ($type != '') { $sql .= " AND p.fk_product_type = ".((int) $type); - } + }*/ // Add where from hooks $parameters = array(); $reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $product_static); // Note that $action and $object may have been modified by hook @@ -330,10 +331,10 @@ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("pr if ($num > 0) { $transRecordedType = $langs->trans("LastModifiedProductsAndServices", $max); - if (GETPOSTISSET("type") && GETPOST("type") == '0') { + if (!isModEnabled('service')) { $transRecordedType = $langs->trans("LastRecordedProducts", $max); } - if (GETPOSTISSET("type") && GETPOST("type") == '1') { + if (!isModEnabled('product')) { $transRecordedType = $langs->trans("LastRecordedServices", $max); } @@ -346,7 +347,15 @@ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("pr } $lastmodified .= ''.$transRecordedType.''; - $lastmodified .= ''.$langs->trans("FullList").''; + $lastmodified .= ''; + $lastmodified .= ''; + //$lastmodified .= $langs->trans("FullList"); + $lastmodified .= img_picto($langs->trans("FullList").' - '.$langs->trans("Products"), 'product'); + $lastmodified .= '   '; + $lastmodified .= ''; + //$langs->trans("FullList").''; + $lastmodified .= img_picto($langs->trans("FullList").' - '.$langs->trans("Services"), 'service'); + $lastmodified .= ''; $lastmodified .= ''; while ($i < $num) { @@ -436,6 +445,104 @@ if ((isModEnabled("product") || isModEnabled("service")) && ($user->hasRight("pr } +$latestmovement = ''; +if (isModEnabled('product')) { + $producttmp = new Product($db); + $warehouse = new Entrepot($db); + + // Latest movements + $sql = "SELECT p.rowid, p.label as produit, p.tobatch, p.tosell, p.tobuy,"; + $sql .= " e.ref as warehouse_ref, e.rowid as warehouse_id, e.ref as warehouse_label, e.lieu, e.statut as warehouse_status,"; + $sql .= " m.rowid as mid, m.value as qty, m.datem, m.batch, m.eatby, m.sellby"; + $sql .= " FROM ".MAIN_DB_PREFIX."entrepot as e"; + $sql .= ", ".MAIN_DB_PREFIX."stock_mouvement as m"; + $sql .= ", ".MAIN_DB_PREFIX."product as p"; + $sql .= " WHERE m.fk_product = p.rowid"; + $sql .= " AND m.fk_entrepot = e.rowid"; + $sql .= " AND e.entity IN (".getEntity('stock').")"; + if (!getDolGlobalString('STOCK_SUPPORTS_SERVICES')) { + $sql .= " AND p.fk_product_type = ".Product::TYPE_PRODUCT; + } + $sql .= $db->order("datem", "DESC"); + $sql .= $db->plimit($max, 0); + + dol_syslog("Index:list stock movements", LOG_DEBUG); + $resql = $db->query($sql); + if ($resql) { + $num = $db->num_rows($resql); + + $latestmovement .= '
'; + $latestmovement .= ''; + $latestmovement .= ''; + $latestmovement .= ''; + $latestmovement .= ''; + if (isModEnabled('productbatch')) { + $latestmovement .= ''; + } + $latestmovement .= ''; + $latestmovement .= ''; + $latestmovement .= "\n"; + + $tmplotstatic = new Productlot($db); + + $i = 0; + while ($i < min($num, $max)) { + $objp = $db->fetch_object($resql); + + $producttmp->id = $objp->rowid; + $producttmp->ref = $objp->produit; + $producttmp->status_batch = $objp->tobatch; + $producttmp->status_sell = $objp->tosell; + $producttmp->status_buy = $objp->tobuy; + + $warehouse->id = $objp->warehouse_id; + $warehouse->ref = $objp->warehouse_ref; + $warehouse->statut = $objp->warehouse_status; + $warehouse->label = $objp->warehouse_label; + $warehouse->lieu = $objp->lieu; + + $tmplotstatic->batch = $objp->batch; + $tmplotstatic->sellby = $objp->sellby; + $tmplotstatic->eatby = $objp->eatby; + + $latestmovement .= ''; + $latestmovement .= ''; + $latestmovement .= '\n"; + if (isModEnabled('productbatch')) { + $latestmovement .= ''; + /*if (empty($conf->global->PRODUCT_DISABLE_SELLBY)) { + print ''; + } + if (empty($conf->global->PRODUCT_DISABLE_EATBY)) { + print ''; + }*/ + } + $latestmovement .= '\n"; + $latestmovement .= ''; + $latestmovement .= "\n"; + $i++; + } + $db->free($resql); + + $latestmovement .= "
'.$langs->trans("LastMovements", min($num, $max)).''.$langs->trans("Product").''.$langs->trans("Batch").''.$langs->trans("Warehouse").''; + $latestmovement .= img_picto($langs->trans("FullList"), 'movement'); + $latestmovement .= '
'.img_picto($langs->trans("Ref").' '.$objp->mid, 'movement', 'class="pictofixedwidth"').dol_print_date($db->jdate($objp->datem), 'dayhour').''; + $latestmovement .= $producttmp->getNomUrl(1); + $latestmovement .= "'; + $latestmovement .= $tmplotstatic->getNomUrl(0, 'nolink'); + $latestmovement .= ''.dol_print_date($db->jdate($objp->sellby), 'day').''.dol_print_date($db->jdate($objp->eatby), 'day').''; + $latestmovement .= $warehouse->getNomUrl(1); + $latestmovement .= "'; + if ($objp->qty > 0) { + $latestmovement .= '+'; + } + $latestmovement .= $objp->qty.'
"; + $latestmovement .= '
'; + } else { + dol_print_error($db); + } +} + // TODO Move this into a page that should be available into menu "accountancy - report - turnover - per quarter" // Also method used for counting must provide the 2 possible methods like done by all other reports into menu "accountancy - report - turnover": // "commitment engagement" method and "cash accounting" method @@ -468,6 +575,7 @@ $boxlist .= "\n"; $boxlist .= '
'; $boxlist .= $lastmodified; +$boxlist .= $latestmovement; $boxlist .= $resultboxes['boxlistb']; $boxlist .= '
'."\n"; diff --git a/htdocs/theme/eldy/global.inc.php b/htdocs/theme/eldy/global.inc.php index 5042a1afccf..d3c134eee8b 100644 --- a/htdocs/theme/eldy/global.inc.php +++ b/htdocs/theme/eldy/global.inc.php @@ -216,6 +216,8 @@ body { font-weight: 400; background-color: var(--colorbackbody); trans("DIRECTION").";\n"; ?> + /*transform: scale(1.2); + transform-origin: 0 0;*/ } /* Style used to protect html content in output to avoid attack by replacing full page with js content */ @@ -3280,6 +3282,7 @@ span.userimg div.userphoto { width: 1.4em; height: 1.4em; padding-top: 1px; + display: inline-block; } img.userphotosmall { /* size for user photo in lists */ border-radius: 0.6em; diff --git a/htdocs/theme/md/style.css.php b/htdocs/theme/md/style.css.php index bc8c94f6f2e..767052f95f6 100644 --- a/htdocs/theme/md/style.css.php +++ b/htdocs/theme/md/style.css.php @@ -3355,6 +3355,14 @@ img.userphoto { /* size for user photo in lists */ background-size: contain; vertical-align: middle; } +span.userimg div.userphoto { + background-color: #eee; + border-radius: 0.72em; + width: 1.4em; + height: 1.4em; + padding-top: 1px; + display: inline-block; +} img.userphotosmall { /* size for user photo in lists */ border-radius: 0.6em; width: 1.2em;