diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php
index 55d6a518250..c5e98935ebb 100644
--- a/htdocs/admin/stock.php
+++ b/htdocs/admin/stock.php
@@ -743,6 +743,21 @@ if ($conf->use_javascript_ajax) {
}
print "\n";
print "\n";
+
+if (!empty($conf->productbatch->enabled)) {
+ print '
';
+ print '| ' . $langs->trans("ShowAllBatchByDefault") . ' | ';
+ print '';
+ if ($conf->use_javascript_ajax) {
+ print ajax_constantonoff('STOCK_SHOW_ALL_BATCH_BY_DEFAULT');
+ } else {
+ $arrval = array('0' => $langs->trans("No"), '1' => $langs->trans("Yes"));
+ print $form->selectarray("STOCK_SHOW_ALL_BATCH_BY_DEFAULT", $arrval, $conf->global->STOCK_SHOW_ALL_BATCH_BY_DEFAULT);
+ }
+ print " | \n";
+ print "
\n";
+}
+
print '';
print '';
diff --git a/htdocs/fichinter/list.php b/htdocs/fichinter/list.php
index 8ddba32a661..31fd0ea3152 100644
--- a/htdocs/fichinter/list.php
+++ b/htdocs/fichinter/list.php
@@ -244,21 +244,21 @@ if (!empty($conf->projet->enabled)) {
if (!empty($conf->contrat->enabled)) {
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."contrat as c on f.fk_contrat = c.rowid";
}
-
if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (f.rowid = ef.fk_object)";
}
if (empty($conf->global->FICHINTER_DISABLE_DETAILS) && $atleastonefieldinlines) {
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."fichinterdet as fd ON fd.fk_fichinter = f.rowid";
}
+
// Add table from hooks
$parameters = array();
$reshook = $hookmanager->executeHooks('printFieldListFrom', $parameters, $object); // Note that $action and $object may have been modified by hook
$sql .= $hookmanager->resPrint;
+
if (!$user->rights->societe->client->voir && empty($socid)) {
$sql .= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
}
-
$sql .= ", ".MAIN_DB_PREFIX."societe as s";
$sql .= " WHERE f.entity IN (".getEntity('intervention').")";
$sql .= " AND f.fk_soc = s.rowid";
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index ddb94c70279..93cf9e9e037 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -252,4 +252,6 @@ ReOpen=Reopen
ConfirmFinish=Do you confirm the closing of the inventory ? This will generate all stock movements to update your stock to the real qty you entered into the inventory.
ObjectNotFound=%s not found
MakeMovementsAndClose=Generate movements and close
-AutofillWithExpected=Fill real quantity with expected quantity
\ No newline at end of file
+AutofillWithExpected=Fill real quantity with expected quantity
+ShowAllBatchByDefault=By default, show batch details on product "stock" tab
+CollapseBatchDetailHelp=You can set batch detail default display in stocks module configuration
diff --git a/htdocs/langs/fr_FR/stocks.lang b/htdocs/langs/fr_FR/stocks.lang
index c0cd183c506..c03fe42f01e 100644
--- a/htdocs/langs/fr_FR/stocks.lang
+++ b/htdocs/langs/fr_FR/stocks.lang
@@ -91,7 +91,7 @@ NoPredefinedProductToDispatch=Pas de produits prédéfinis dans cet objet. Aucun
DispatchVerb=Ventiler
StockLimitShort=Limite pour alerte
StockLimit=Limite stock pour alerte
-StockLimitDesc=(empty) means no warning.
0 can be used to trigger a warning as soon as the stock is empty.
+StockLimitDesc=(vide) n'affichera aucune icone d'alerte.
0 peut être saisi pour afficher une alerte en cas de stock nul.
PhysicalStock=Stock physique
RealStock=Stock réel
RealStockDesc=Le stock physique ou réel est le stock présent dans les entrepôts.
@@ -255,3 +255,5 @@ ConfirmFinish=Confirmez-vous la clôture de l’inventaire? Ceci générera tous
ObjectNotFound=%s introuvable
MakeMovementsAndClose=Générer les mouvements et fermer
AutofillWithExpected=Remplir la quantité réelle avec la quantité prévue
+ShowAllBatchByDefault=Dérouler par défaut le détail des lots dans l'onglet "stock"
+CollapseBatchDetailHelp=Vous pouvez définir l'affichage par défaut du détail des lots dans la configuration du module stocks
diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php
index 883fff49123..9b8af58e347 100644
--- a/htdocs/product/stock/product.php
+++ b/htdocs/product/stock/product.php
@@ -9,6 +9,7 @@
* Copyright (C) 2014-2015 Cédric Gross
* Copyright (C) 2015 Marcos García
* Copyright (C) 2018-2019 Frédéric France
+ * Copyright (C) 2021 Gauthier VERDOL
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -530,6 +531,44 @@ if ($id > 0 || $ref) {
llxHeader('', $title, $helpurl);
+ ?>
+
+
+
+ 0) {
$head = product_prepare_head($object);
$titre = $langs->trans("CardProduct".$object->type);
@@ -868,7 +907,11 @@ if (!$variants) {
print '';
if ((!empty($conf->productbatch->enabled)) && $object->hasbatch()) {
$colspan = 3;
- print ' | ';
+ print '
';
+ print ''.img_picto('', 'folder-open', 'class="paddingright"').$langs->trans("ExpandAll").' ';
+ print ''.img_picto('', 'folder', 'class="paddingright"').$langs->trans("UndoExpandAll").' ';
+ print $form->textwithpicto('', $langs->trans('CollapseBatchDetailHelp'), 1, 'help', '');
+ print ' | ';
print ''.$langs->trans("batch_number").' | ';
if (empty($conf->global->PRODUCT_DISABLE_EATBY)) {
$colspan--;
@@ -923,7 +966,11 @@ if (!$variants) {
$stock_real = price2num($obj->reel, 'MS');
print '
';
- print '| '.$entrepotstatic->getNomUrl(1).' | ';
+ print '';
+ if (!empty($conf->productbatch->enabled)) {
+ print '' . (empty($conf->global->STOCK_SHOW_ALL_BATCH_BY_DEFAULT) ? '(+)' : '(-)') . ' ';
+ }
+ print $entrepotstatic->getNomUrl(1).' | ';
print ''.$stock_real.($stock_real < 0 ? ' '.img_warning() : '').' | ';
// PMP
print ''.(price2num($object->pmp) ? price2num($object->pmp, 'MU') : '').' | ';
@@ -993,7 +1040,7 @@ if (!$variants) {
print ' | ';
print '
';
} else {
- print "\n".'| ';
+ print "\n".' |
| ';
print ' | ';
print '';
print $product_lot_static->getNomUrl(1);
|