diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php
index 067da1dd91e..9f18ebb1657 100644
--- a/htdocs/admin/stock.php
+++ b/htdocs/admin/stock.php
@@ -41,45 +41,43 @@ $action = GETPOST('action','alpha');
* Actions
*/
-if ($action == 'STOCK_USERSTOCK_AUTOCREATE')
-{
- $db->begin();
- $res = dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", GETPOST('STOCK_USERSTOCK_AUTOCREATE','alpha'),'chaine',0,'',$conf->entity);
-}
-// Mode of stock decrease
-if ($action == 'STOCK_CALCULATE_ON_BILL'
-|| $action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER'
-|| $action == 'STOCK_CALCULATE_ON_SHIPMENT')
-{
- $db->begin();
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", '','chaine',0,'',$conf->entity);
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", '','chaine',0,'',$conf->entity);
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", '','chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_BILL') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", GETPOST('STOCK_CALCULATE_ON_BILL','alpha'),'chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", GETPOST('STOCK_CALCULATE_ON_VALIDATE_ORDER','alpha'),'chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_SHIPMENT') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", GETPOST('STOCK_CALCULATE_ON_SHIPMENT','alpha'),'chaine',0,'',$conf->entity);
-}
-// Mode of stock increase
-if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_BILL'
-|| $action == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER'
-|| $action == 'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER')
-{
- $db->begin();
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", '','chaine',0,'',$conf->entity);
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", '','chaine',0,'',$conf->entity);
- $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", '','chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_BILL') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_BILL','alpha'),'chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER','alpha'),'chaine',0,'',$conf->entity);
- if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER','alpha'),'chaine',0,'',$conf->entity);
-}
-
-if($action == 'USE_VIRTUAL_STOCK') {
- $db->begin();
- $res = dolibarr_set_const($db, "USE_VIRTUAL_STOCK", GETPOST('USE_VIRTUAL_STOCK','alpha'),'chaine',0,'',$conf->entity);
-}
-
if($action)
{
+ $db->begin();
+
+ if ($action == 'STOCK_USERSTOCK_AUTOCREATE')
+ {
+ $res = dolibarr_set_const($db, "STOCK_USERSTOCK_AUTOCREATE", GETPOST('STOCK_USERSTOCK_AUTOCREATE','alpha'),'chaine',0,'',$conf->entity);
+ }
+ // Mode of stock decrease
+ if ($action == 'STOCK_CALCULATE_ON_BILL'
+ || $action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER'
+ || $action == 'STOCK_CALCULATE_ON_SHIPMENT')
+ {
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", '','chaine',0,'',$conf->entity);
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", '','chaine',0,'',$conf->entity);
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", '','chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_BILL') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_BILL", GETPOST('STOCK_CALCULATE_ON_BILL','alpha'),'chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_VALIDATE_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_VALIDATE_ORDER", GETPOST('STOCK_CALCULATE_ON_VALIDATE_ORDER','alpha'),'chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_SHIPMENT') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SHIPMENT", GETPOST('STOCK_CALCULATE_ON_SHIPMENT','alpha'),'chaine',0,'',$conf->entity);
+ }
+ // Mode of stock increase
+ if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_BILL'
+ || $action == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER'
+ || $action == 'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER')
+ {
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", '','chaine',0,'',$conf->entity);
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", '','chaine',0,'',$conf->entity);
+ $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", '','chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_BILL') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_BILL", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_BILL','alpha'),'chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER','alpha'),'chaine',0,'',$conf->entity);
+ if ($action == 'STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER') $res=dolibarr_set_const($db, "STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER", GETPOST('STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER','alpha'),'chaine',0,'',$conf->entity);
+ }
+
+ if($action == 'STOCK_USE_VIRTUAL_STOCK') {
+ $res = dolibarr_set_const($db, "STOCK_USE_VIRTUAL_STOCK", GETPOST('STOCK_USE_VIRTUAL_STOCK','alpha'),'chaine',0,'',$conf->entity);
+ }
+
if (! $res > 0) $error++;
if (! $error)
@@ -249,25 +247,34 @@ if (! empty($conf->fournisseur->enabled))
print '';
-print '
';
-print '
';
-print '';
-print " | ".$langs->trans("RuleForStockReplenishment")." | \n";
-print " | \n";
-print '
'."\n";
-$var = !$var;
-print "";
-print '| '.$langs->trans("UseVirtualStock").' | ';
-print '';
-print "';
-print " | \n";
-print "
\n";
-print '
';
+
+$virtualdiffersfromphysical=0;
+if (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT)
+ || ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)
+ ) $virtualdiffersfromphysical=1; // According to increase/decrease stock options, virtual and physical stock may differs.
+
+if ($virtualdiffersfromphysical)
+{
+ print '
';
+ print '';
+ print '';
+ print " | ".$langs->trans("RuleForStockReplenishment")." ".img_help('help',$langs->trans("VirtualDiffersFromPhysical"))." | \n";
+ print " | \n";
+ print '
'."\n";
+ $var = !$var;
+ print "";
+ print '| '.$langs->trans("UseVirtualStockByDefault").' | ';
+ print '';
+ print "';
+ print " | \n";
+ print "
\n";
+ print '
';
+}
$db->close();
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index 4d55ae663e1..032412cc322 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -94,14 +94,20 @@ DesiredStock=Desired stock
StockToBuy=To order
Replenishment=Replenishment
ReplenishmentOrders=Replenishment orders
-UseVirtualStock=Use virtual stock instead of physical stock
+VirtualDiffersFromPhysical=According to increase/decrease stock options, physical stock and virtual stock (physical + current orders) may differs
+UseVirtualStockByDefault=Use virtual stock by default, instead of physical stock, for replenishment feature
+UseVirtualStock=Use virtual stock
+UsePhysicalStock=Use physical stock
+CurentSelectionMode=Curent selection mode
+CurentlyUsingVirtualStock=Virtual stock
+CurentlyUsingPhysicalStock=Physical stock
RuleForStockReplenishment=Rule for stocks replenishment
SelectProductWithNotNullQty=Select at least one product with a qty not null and a supplier
AlertOnly= Alerts only
WarehouseForStockDecrease=The warehouse %s will be used for stock decrease
WarehouseForStockIncrease=The warehouse %s will be used for stock increase
ForThisWarehouse=For this warehouse
-ReplenishmentStatusDesc=This is list of all product with a physical stock lower than desired stock (or alert value if checkbox "alert only" is checked) and suggest you to create supplier orders to fill the difference.
+ReplenishmentStatusDesc=This is list of all product with a stock lower than desired stock (or lower than alert value if checkbox "alert only" is checked), and suggest you to create supplier orders to fill the difference.
ReplenishmentOrdersDesc=This is list of all opened supplier orders
Replenishments=Replenishments
NbOfProductBeforePeriod=Quantity of product %s in stock before selected period (< %s)
diff --git a/htdocs/product/stock/replenish.php b/htdocs/product/stock/replenish.php
index 887a23ac0bc..b1c0e4a6041 100644
--- a/htdocs/product/stock/replenish.php
+++ b/htdocs/product/stock/replenish.php
@@ -170,6 +170,19 @@ if ($action == 'order' && isset($_POST['valid']))
* View
*/
+$virtualdiffersfromphysical=0;
+if (! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT)
+ || ! empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_DISPATCH_ORDER)
+ ) $virtualdiffersfromphysical=1; // According to increase/decrease stock options, virtual and physical stock may differs.
+
+$usevirtualstock=-1;
+if ($virtualdiffersfromphysical)
+{
+ $usevirtualstock=($conf->global->STOCK_USE_VIRTUAL_STOCK?1:0);
+ if (GETPOST('mode')=='virtual') $usevirtualstock=1;
+ if (GETPOST('mode')=='physical') $usevirtualstock=0;
+}
+
$title = $langs->trans('Status');
$sql = 'SELECT p.rowid, p.ref, p.label, p.price,';
@@ -251,7 +264,20 @@ $head[1][2] = 'replenishorders';
dol_fiche_head($head, 'replenish', $langs->trans('Replenishment'), 0, 'stock');
-print $langs->trans("ReplenishmentStatusDesc").'
';
+print $langs->trans("ReplenishmentStatusDesc").'
'."\n";
+if ($usevirtualstock == 1)
+{
+ print $langs->trans("CurentSelectionMode").': ';
+ print $langs->trans("CurentlyUsingVirtualStock").' - ';
+ print ''.$langs->trans("UsePhysicalStock").'
';
+}
+if ($usevirtualstock == 0)
+{
+ print $langs->trans("CurentSelectionMode").': ';
+ print $langs->trans("CurentlyUsingPhysicalStock").' - ';
+ print ''.$langs->trans("UseVirtualStock").'
';
+}
+print '
'."\n";
if ($sref || $snom || $sall || $salert || GETPOST('search', 'alpha')) {
$filters = '&sref=' . $sref . '&snom=' . $snom;
@@ -344,14 +370,11 @@ print_liste_field_titre(
$sortfield,
$sortorder
);
-if ($conf->global->USE_VIRTUAL_STOCK)
-{
- $stocklabel = $langs->trans('VirtualStock');
-}
-else
-{
- $stocklabel = $langs->trans('PhysicalStock');
-}
+
+$stocklabel = $langs->trans('Stock');
+if ($usevirtualstock == 1) $stocklabel = $langs->trans('VirtualStock');
+if ($usevirtualstock == 0) $stocklabel = $langs->trans('PhysicalStock');
+
print_liste_field_titre(
$stocklabel,
$_SERVER["PHP_SELF"],
@@ -449,9 +472,9 @@ while ($i < min($num, $limit))
$prod->type = $objp->fk_product_type;
$ordered = ordered($prod->id);
- if ($conf->global->USE_VIRTUAL_STOCK)
+ if ($usevirtualstock)
{
- //compute virtual stock
+ // If option to increase/decrease is not on an object validation, virtual stock may differs from physical stock.
$prod->fetch($prod->id);
$result=$prod->load_stats_commande(0, '1,2');
if ($result < 0) {
@@ -609,4 +632,4 @@ function toggle(source)
llxFooter();
$db->close();
-?>
+?>
\ No newline at end of file