\n";
+
print ' ';
/* I keep the option/feature, but hidden to end users for the moment. If feature is used by module, no need to have users see it.
diff --git a/htdocs/core/modules/modStock.class.php b/htdocs/core/modules/modStock.class.php
index 7bdf5d1d641..bc3ba80903d 100644
--- a/htdocs/core/modules/modStock.class.php
+++ b/htdocs/core/modules/modStock.class.php
@@ -71,7 +71,9 @@ class modStock extends DolibarrModules
$this->langfiles = array("stocks");
// Constants
- $this->const = array();
+ $this->const = array(
+ 0=>array('STOCK_ALLOW_NEGATIVE_TRANSFER','chaine','1','',1)
+ );
// Boxes
$this->boxes = array();
diff --git a/htdocs/langs/en_US/stocks.lang b/htdocs/langs/en_US/stocks.lang
index d295e4b3451..c032e72e073 100644
--- a/htdocs/langs/en_US/stocks.lang
+++ b/htdocs/langs/en_US/stocks.lang
@@ -120,6 +120,8 @@ StockMustBeEnoughForShipment= Stock level must be enough to add product/service
MovementLabel=Label of movement
InventoryCode=Movement or inventory code
IsInPackage=Contained into package
+WarehouseAllowNegativeTransfer=Allow transfer even without stock
+qtyToTranferIsNotEnough=You don't have enough stock from your source warehouse
ShowWarehouse=Show warehouse
MovementCorrectStock=Stock correction for product %s
MovementTransferStock=Stock transfer of product %s into another warehouse
diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php
index a19a39beb45..2a74f885c80 100644
--- a/htdocs/product/stock/class/mouvementstock.class.php
+++ b/htdocs/product/stock/class/mouvementstock.class.php
@@ -239,7 +239,7 @@ class MouvementStock extends CommonObject
return -1;
}
}
-
+
// TODO Check qty is ok for stock move.
if (! empty($conf->productbatch->enabled) && $product->hasbatch() && ! $skip_batch)
{
@@ -249,6 +249,17 @@ class MouvementStock extends CommonObject
{
}
+
+ if (empty($conf->global->STOCK_ALLOW_NEGATIVE_TRANSFER) && in_array($type, array(1, 2)))
+ {
+ if (empty($product->stock_warehouse[$entrepot_id]->real) || $product->stock_warehouse[$entrepot_id]->real < abs($qty))
+ {
+ $this->error = $langs->trans('qtyToTranferIsNotEnough');
+ $this->errors[] = $langs->trans('qtyToTranferIsNotEnough');
+ $this->db->rollback();
+ return -8;
+ }
+ }
// Define if we must make the stock change (If product type is a service or if stock is used also for services)
$movestock=0;
diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php
index 9bc37ad5a7a..65454c04277 100644
--- a/htdocs/product/stock/product.php
+++ b/htdocs/product/stock/product.php
@@ -233,7 +233,7 @@ if ($action == "transfert_stock" && ! $cancel)
$pricesrc=0;
if (isset($object->pmp)) $pricesrc=$object->pmp;
$pricedest=$pricesrc;
-
+
if ($object->hasbatch())
{
$pdluo = new Productbatch($db);
@@ -324,6 +324,8 @@ if ($action == "transfert_stock" && ! $cancel)
if ($result2 < 0) $error++;
}
}
+
+
if (! $error && $result1 >= 0 && $result2 >= 0)
{
$db->commit();