diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index b0507c69071..d2c1b2cb382 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -34,7 +34,7 @@ StockMovementForId=Movement ID %d
ListMouvementStockProject=List of stock movements associated to project
StocksArea=Warehouses area
AllWarehouses=All warehouses
-IncludeEmptyDesiredStock=Include also undefined desired stock
+IncludeEmptyDesiredStock=Include also negative stock with undefined desired stock
IncludeAlsoDraftOrders=Include also draft orders
Location=Location
LocationSummary=Short name location
diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php
index 96b9d62c3fb..4fb8e24370c 100644
--- a/htdocs/product/stock/replenish.php
+++ b/htdocs/product/stock/replenish.php
@@ -352,7 +352,9 @@ if (dol_strlen($type)) {
if ($search_ref) $sql .= natural_search('p.ref', $search_ref);
if ($search_label) $sql .= natural_search('p.label', $search_label);
$sql .= ' AND p.tobuy = 1';
-if (!empty($canvas)) $sql .= ' AND p.canvas = "'.$db->escape($canvas).'"';
+if (empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) { // Add test to exclude products that has variants
+ $sql .= ' AND p.rowid NOT IN (SELECT pac.fk_product_parent FROM '.MAIN_DB_PREFIX.'product_attribute_combination as pac WHERE pac.entity IN ('.getEntity('product').'))';
+}
$sql .= ' GROUP BY p.rowid, p.ref, p.label, p.description, p.price';
$sql .= ', p.price_ttc, p.price_base_type,p.fk_product_type, p.tms';
$sql .= ', p.duration, p.tobuy';
@@ -538,13 +540,13 @@ if ($usevirtualstock == 1)
{
print $langs->trans("CurentSelectionMode").': ';
print ''.$langs->trans("UseVirtualStock").'';
- print ' '.$langs->trans("UsePhysicalStock").'';
+ print ' 0 ? '&fk_supplier='.$fk_supplier : '').($fk_entrepot > 0 ? '&fk_entrepot='.$fk_entrepot : '').'">'.$langs->trans("UsePhysicalStock").'';
print '
';
}
if ($usevirtualstock == 0)
{
print $langs->trans("CurentSelectionMode").': ';
- print ''.$langs->trans("UseVirtualStock").'';
+ print ' 0 ? '&fk_supplier='.$fk_supplier : '').($fk_entrepot > 0 ? '&fk_entrepot='.$fk_entrepot : '').'">'.$langs->trans("UseVirtualStock").'';
print ' '.$langs->trans("UsePhysicalStock").'';
print '
';
}
@@ -600,8 +602,8 @@ if ($search_ref || $search_label || $sall || $salert || $draftorder || GETPOST('
$filters .= '&salert='.urlencode($salert);
$filters .= '&draftorder='.urlencode($draftorder);
$filters .= '&mode='.urlencode($mode);
- $filters .= '&fk_supplier='.urlencode($fk_supplier);
- $filters .= '&fk_entrepot='.urlencode($fk_entrepot);
+ if ($fk_supplier > 0) $filters .= '&fk_supplier='.urlencode($fk_supplier);
+ if ($fk_entrepot > 0) $filters .= '&fk_entrepot='.urlencode($fk_entrepot);
} else {
$filters = '&search_ref='.urlencode($search_ref).'&search_label='.urlencode($search_label);
$filters .= '&fourn_id='.urlencode($fourn_id);
@@ -609,8 +611,8 @@ if ($search_ref || $search_label || $sall || $salert || $draftorder || GETPOST('
$filters .= '&='.urlencode($salert);
$filters .= '&draftorder='.urlencode($draftorder);
$filters .= '&mode='.urlencode($mode);
- $filters .= '&fk_supplier='.urlencode($fk_supplier);
- $filters .= '&fk_entrepot='.urlencode($fk_entrepot);
+ if ($fk_supplier > 0) $filters .= '&fk_supplier='.urlencode($fk_supplier);
+ if ($fk_entrepot > 0) $filters .= '&fk_entrepot='.urlencode($fk_entrepot);
}
if ($limit > 0 && $limit != $conf->liste_limit) {
$filters .= '&limit='.urlencode($limit);
@@ -815,67 +817,64 @@ while ($i < ($limit ? min($num, $limit) : $num))
$picto = img_picto($langs->trans("NoPendingReceptionOnSupplierOrder"), 'help');
}
- $variants = $prod->hasVariants();
- if (!$variants || !empty($conf->global->VARIANT_ALLOW_STOCK_MOVEMENT_ON_VARIANT_PARENT)) {
- print '