diff --git a/htdocs/install/repair.php b/htdocs/install/repair.php
index 952c22baa44..ef5fccea80b 100644
--- a/htdocs/install/repair.php
+++ b/htdocs/install/repair.php
@@ -75,8 +75,8 @@ print '
';
@@ -523,14 +523,17 @@ if ($ok && GETPOST('clean_orphelin_dir'))
// clean_linked_elements: Check and clean linked elements
if ($ok && GETPOST('clean_product_stock_batch'))
{
- print ' Clean table product_batch |
';
+ $methodtofix=GETPOST('methodtofix')?GETPOST('methodtofix'):'updatestock';
+
+ print ' Clean table product_batch, methodtofix='.$methodtofix.' (possible values: updatestock or updatebatch) |
';
$sql ="SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch";
- $sql.=" FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps, ".MAIN_DB_PREFIX."product_batch as pb";
- $sql.=" WHERE p.rowid = ps.fk_product AND ps.rowid = pb.fk_product_stock";
+ $sql.=" FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps LEFT JOIN ".MAIN_DB_PREFIX."product_batch as pb ON ps.rowid = pb.fk_product_stock";
+ $sql.=" WHERE p.rowid = ps.fk_product";
$sql.=" AND p.tobatch = 1";
$sql.=" GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel";
- $sql.=" HAVING reel != SUM(pb.qty)";
+ $sql.=" HAVING reel != SUM(pb.qty) or SUM(pb.qty) IS NULL";
+ print $sql;
$resql = $db->query($sql);
if ($resql)
{
@@ -542,13 +545,11 @@ if ($ok && GETPOST('clean_product_stock_batch'))
while ($i < $num)
{
$obj=$db->fetch_object($resql);
- print '| '.$obj->rowid.'-'.$obj->ref.'-'.$obj->fk_entrepot.' -> '.$obj->psrowid.': '.$obj->reel.' != '.$obj->reelbatch;
+ print ' |
| Product '.$obj->rowid.'-'.$obj->ref.' in warehose '.$obj->fk_entrepot.' -> '.$obj->psrowid.': '.$obj->reel.' (product_stock.reel) != '.$obj->reelbatch.' (sum product_batch)';
// Fix
if ($obj->reel != $obj->reelbatch)
{
- $methodtofix='updatestock';
-
if ($methodtofix == 'updatebatch')
{
// Method 1
@@ -570,7 +571,7 @@ if ($ok && GETPOST('clean_product_stock_batch'))
if ($methodtofix == 'updatestock')
{
// Method 2
- print ' -> Update qty of stock with qty = '.$obj->reelbatch.' for ps.rowid = '.$obj->psrowid;
+ print ' -> Update qty of product_stock with qty = '.$obj->reelbatch.' for ps.rowid = '.$obj->psrowid;
if (GETPOST('clean_product_stock_batch') == 'confirmed')
{
$error=0;
@@ -582,7 +583,7 @@ if ($ok && GETPOST('clean_product_stock_batch'))
$resql2=$db->query($sql2);
if ($resql2)
{
- // We update product stock, so we must update product.stock too.
+ // We update product_stock, so we must field stock into product too.
$sql3='UPDATE llx_product p SET p.stock= (SELECT SUM(ps.reel) FROM llx_product_stock ps WHERE ps.fk_product = p.rowid)';
$resql3=$db->query($sql3);
if (! $resql3)
@@ -608,6 +609,10 @@ if ($ok && GETPOST('clean_product_stock_batch'))
$i++;
}
}
+ else
+ {
+ print ' |
| Nothing to do |
';
+ }
}
else
{
@@ -618,6 +623,34 @@ if ($ok && GETPOST('clean_product_stock_batch'))
}
+// clean_linked_elements: Check and clean linked elements
+if ($ok && GETPOST('clean_product_stock_negative_if_batch'))
+{
+ print ' Clean table product_batch, methodtofix='.$methodtofix.' (possible values: updatestock or updatebatch) |
';
+
+ $sql ="SELECT p.rowid, p.ref, p.tobatch, ps.rowid as psrowid, ps.fk_entrepot, ps.reel, SUM(pb.qty) as reelbatch";
+ $sql.=" FROM ".MAIN_DB_PREFIX."product as p, ".MAIN_DB_PREFIX."product_stock as ps, ".MAIN_DB_PREFIX."product_batch as pb";
+ $sql.=" WHERE p.rowid = ps.fk_product AND ps.rowid = pb.fk_product_stock";
+ $sql.=" AND p.tobatch = 1";
+ $sql.=" GROUP BY p.rowid, p.ref, p.tobatch, ps.rowid, ps.fk_entrepot, ps.reel";
+ $sql.=" HAVING reel != SUM(pb.qty)";
+ $resql = $db->query($sql);
+ if ($resql)
+ {
+ $num = $db->num_rows($resql);
+
+ if ($num)
+ {
+ $i = 0;
+ while ($i < $num)
+ {
+ $obj=$db->fetch_object($resql);
+ print '| '.$obj->rowid.'-'.$obj->ref.'-'.$obj->fk_entrepot.' -> '.$obj->psrowid.': '.$obj->reel.' != '.$obj->reelbatch;
+
+ }
+ }
+ }
+}
|