From 1d85529eda86b03f206ea627ca917551041a6c18 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Wed, 1 Jul 2015 23:24:54 +0200 Subject: [PATCH 1/9] Fix delete not used empty stock record When removing all stock from warehouse are move all stock to other warehouse, there is still an 0 stock record in in the stock table for the source warehouse, not visible in Dolibarr. --- .../stock/class/mouvementstock.class.php | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index b37384932cf..9c1e555ba3b 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -3,6 +3,7 @@ * Copyright (C) 2005-2013 Laurent Destailleur * Copyright (C) 2011 Jean Heimburger * Copyright (C) 2014 Cedric GROSS + * Copyright (C) 2015 Francis Appels * * 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 @@ -232,7 +233,37 @@ class MouvementStock extends CommonObject { $fk_product_stock = $this->db->last_insert_id(MAIN_DB_PREFIX."product_stock"); } - + + // delete empty stock record + $sql = "SELECT reel FROM ".MAIN_DB_PREFIX."product_stock"; + $sql.= " WHERE rowid = ".$fk_product_stock; + + $resql=$this->db->query($sql); + if ($resql) + { + $obj = $this->db->fetch_object($resql); + if ($obj) + { + if ($obj->reel == 0) + { + dol_syslog(get_class($this)."::_create delete 0 stock record", LOG_DEBUG); + $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_stock"; + $sql.= " WHERE rowid = ".$fk_product_stock; + $delsql=$this->db->query($sql); + if (! $delsql) + { + $this->errors[]=$this->db->lasterror(); + $error = -8; + } + } + } + $this->db->free($resql); + } + else + { + $this->errors[]=$this->db->lasterror(); + $error = -7; + } } // Update detail stock for sell-by date From 52cb9581ff0446e36300849ccfbd2470cf0d69fb Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Tue, 8 Sep 2015 16:00:13 +0200 Subject: [PATCH 2/9] Fix multientity stock management --- htdocs/product/class/html.formproduct.class.php | 2 +- htdocs/product/stock/liste.php | 2 +- htdocs/product/stock/product.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/product/class/html.formproduct.class.php b/htdocs/product/class/html.formproduct.class.php index bd302c422d9..8becd6c38ba 100644 --- a/htdocs/product/class/html.formproduct.class.php +++ b/htdocs/product/class/html.formproduct.class.php @@ -72,7 +72,7 @@ class FormProduct $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps on ps.fk_entrepot = e.rowid"; $sql.= " AND ps.fk_product = '".$fk_product."'"; } - $sql.= " WHERE e.entity = ".$conf->entity; + $sql.= " WHERE e.entity IN (".getEntity('stock',1).")"; $sql.= " AND e.statut = 1"; $sql.= " ORDER BY e.label"; diff --git a/htdocs/product/stock/liste.php b/htdocs/product/stock/liste.php index a639bd86239..a4220be092d 100644 --- a/htdocs/product/stock/liste.php +++ b/htdocs/product/stock/liste.php @@ -47,7 +47,7 @@ $offset = $limit * $page; $sql = "SELECT e.rowid, e.label as ref, e.statut, e.lieu, e.address, e.zip, e.town, e.fk_pays"; $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; -$sql.= " WHERE e.entity = ".$conf->entity; +$sql.= " WHERE e.entity IN (".getEntity('stock',1).")"; if ($sref) { $sql.= " AND e.label like '%".$db->escape($sref)."%'"; diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 0241c0d4dcf..6b08dd16ecf 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -583,7 +583,7 @@ $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e,"; $sql.= " ".MAIN_DB_PREFIX."product_stock as ps"; $sql.= " WHERE ps.reel != 0"; $sql.= " AND ps.fk_entrepot = e.rowid"; -$sql.= " AND e.entity = ".$conf->entity; +$sql.= " AND e.entity IN (".getEntity('stock',1).")"; $sql.= " AND ps.fk_product = ".$product->id; $sql.= " ORDER BY e.label"; From 63a817c3a4d368beaff46e3bd72a456409446342 Mon Sep 17 00:00:00 2001 From: Florian HENRY Date: Tue, 8 Sep 2015 16:13:15 +0200 Subject: [PATCH 3/9] Fix wahrehouse multientty management --- htdocs/product/stock/index.php | 4 ++-- htdocs/product/stock/mouvement.php | 2 +- htdocs/product/stock/valo.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/htdocs/product/stock/index.php b/htdocs/product/stock/index.php index da52a5aac58..667c32346f5 100644 --- a/htdocs/product/stock/index.php +++ b/htdocs/product/stock/index.php @@ -64,7 +64,7 @@ print "
"; $sql = "SELECT e.label, e.rowid, e.statut"; $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; $sql.= " WHERE e.statut in (0,1)"; -$sql.= " AND e.entity = ".$conf->entity; +$sql.= " AND e.entity IN (".getEntity('stock',1).")"; $sql.= $db->order('e.statut','DESC'); $sql.= $db->plimit(15, 0); @@ -119,7 +119,7 @@ $sql.= ", ".MAIN_DB_PREFIX."stock_mouvement as m"; $sql.= ", ".MAIN_DB_PREFIX."product as p"; $sql.= " WHERE m.fk_product = p.rowid"; $sql.= " AND m.fk_entrepot = e.rowid"; -$sql.= " AND e.entity = ".$conf->entity; +$sql.= " AND e.entity IN (".getEntity('stock',1).")"; if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) $sql.= " AND p.fk_product_type = 0"; $sql.= $db->order("datem","DESC"); $sql.= $db->plimit($max,0); diff --git a/htdocs/product/stock/mouvement.php b/htdocs/product/stock/mouvement.php index 8794b00137d..e94df443702 100644 --- a/htdocs/product/stock/mouvement.php +++ b/htdocs/product/stock/mouvement.php @@ -129,7 +129,7 @@ $sql.= " ".MAIN_DB_PREFIX."stock_mouvement as m)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."user as u ON m.fk_user_author = u.rowid"; $sql.= " WHERE m.fk_product = p.rowid"; $sql.= " AND m.fk_entrepot = e.rowid"; -$sql.= " AND e.entity = ".$conf->entity; +$sql.= " AND e.entity IN (".getEntity('stock',1).")"; if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) $sql.= " AND p.fk_product_type = 0"; if ($id) { diff --git a/htdocs/product/stock/valo.php b/htdocs/product/stock/valo.php index 17e23fef009..75b85af00fa 100644 --- a/htdocs/product/stock/valo.php +++ b/htdocs/product/stock/valo.php @@ -57,7 +57,7 @@ $sql.= " SUM(ps.pmp * ps.reel) as estimatedvalue, SUM(p.price * ps.reel) as sell $sql.= " FROM ".MAIN_DB_PREFIX."entrepot as e"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product_stock as ps ON e.rowid = ps.fk_entrepot"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON ps.fk_product = p.rowid"; -$sql.= " WHERE e.entity = ".$conf->entity; +$sql.= " WHERE e.entity IN (".getEntity('stock',1).")"; if ($sref) { $sql.= " AND e.ref LIKE '%".$sref."%'"; From d3f1a7d5b8113b525e2c3e69462c88bfb0de0785 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Wed, 9 Sep 2015 13:26:10 +0200 Subject: [PATCH 4/9] FIX Bad condition into invoice export request making reporting too many rows. --- htdocs/core/modules/modFacture.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index 4942619b7fb..40f3b56f636 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -222,7 +222,7 @@ class modFacture extends DolibarrModules $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'facture as f'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON f.fk_user_author = uc.rowid'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uc.rowid'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uv.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'facture_extrafields as extra ON f.rowid = extra.fk_object'; $this->export_sql_end[$r] .=' , '.MAIN_DB_PREFIX.'facturedet as fd'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'product as p on (fd.fk_product = p.rowid)'; @@ -278,7 +278,7 @@ class modFacture extends DolibarrModules $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'c_country as c on s.fk_pays = c.rowid,'; $this->export_sql_end[$r] .=' '.MAIN_DB_PREFIX.'facture as f'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uc ON f.fk_user_author = uc.rowid'; - $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uc.rowid'; + $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'user as uv ON f.fk_user_valid = uv.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'facture_extrafields as extra ON f.rowid = extra.fk_object'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid'; $this->export_sql_end[$r] .=' LEFT JOIN '.MAIN_DB_PREFIX.'paiement as p ON pf.fk_paiement = p.rowid'; From a294700cef7e253e63723e83f68199e9c88571c7 Mon Sep 17 00:00:00 2001 From: fappels Date: Thu, 10 Sep 2015 22:16:03 +0200 Subject: [PATCH 5/9] fix dispatch rounding version 1 --- htdocs/fourn/commande/dispatch.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index e62402feabb..76d09d8f3d3 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -266,7 +266,7 @@ if ($id > 0 || ! empty($ref)) { while ( $row = $db->fetch_row($resql) ) { - $products_dispatched[$row[0]] = $row[2]; + $products_dispatched[$row[0]] = price2num($row[2], 5); } $db->free($resql); } @@ -322,7 +322,7 @@ if ($id > 0 || ! empty($ref)) } else { - $remaintodispatch=($objp->qty - $products_dispatched[$objp->rowid]); // Calculation of dispatched + $remaintodispatch=(price2num($objp->qty, 5) - $products_dispatched[$objp->rowid]); // Calculation of dispatched if ($remaintodispatch < 0) $remaintodispatch=0; if ($remaintodispatch) { From 8bdfdc0127ceabb2c1af3c4003ab9dbb08d62612 Mon Sep 17 00:00:00 2001 From: fappels Date: Thu, 10 Sep 2015 23:12:27 +0200 Subject: [PATCH 6/9] Fix #3471 3.5 Rounding issue when dispatching non-integer --- htdocs/fourn/commande/dispatch.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 4bc7a22b06b..97f0cad96d8 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -229,9 +229,17 @@ if ($id > 0 || ! empty($ref)) $resql = $db->query($sql); if ($resql) { - while ( $row = $db->fetch_row($resql) ) + $num = $db->num_rows($resql); + $i = 0; + + if ($num) { - $products_dispatched[$row[0]] = $row[1]; + while ($i < $num) + { + $objd = $db->fetch_object($resql); + $products_dispatched[$objd->fk_product] = price2num($objd->qty, 5); + $i++; + } } $db->free($resql); } @@ -277,7 +285,7 @@ if ($id > 0 || ! empty($ref)) } else { - $remaintodispatch=($objp->qty - $products_dispatched[$objp->fk_product]); // Calculation of dispatched + $remaintodispatch=(price2num($objp->qty, 5) - $products_dispatched[$objp->fk_product]); // Calculation of dispatched if ($remaintodispatch < 0) $remaintodispatch=0; if ($remaintodispatch) { From 75a14e02d8e1429c5545d8785fa80792f568b153 Mon Sep 17 00:00:00 2001 From: fappels Date: Thu, 10 Sep 2015 23:29:13 +0200 Subject: [PATCH 7/9] Fix #3471 3.7 Rounding issue when dispatching non-integer --- htdocs/fourn/commande/dispatch.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php index 76d09d8f3d3..f4adaf1ba0d 100644 --- a/htdocs/fourn/commande/dispatch.php +++ b/htdocs/fourn/commande/dispatch.php @@ -264,9 +264,17 @@ if ($id > 0 || ! empty($ref)) $resql = $db->query($sql); if ($resql) { - while ( $row = $db->fetch_row($resql) ) + $num = $db->num_rows($resql); + $i = 0; + + if ($num) { - $products_dispatched[$row[0]] = price2num($row[2], 5); + while ($i < $num) + { + $objd = $db->fetch_object($resql); + $products_dispatched[$objd->rowid] = price2num($objd->qty, 5); + $i++; + } } $db->free($resql); } From c290840513b9cc6bf3ab50e5beace5e3a5aaedb0 Mon Sep 17 00:00:00 2001 From: fappels Date: Thu, 10 Sep 2015 23:31:23 +0200 Subject: [PATCH 8/9] Revert "Fix delete not used empty stock record" This reverts commit 1d85529eda86b03f206ea627ca917551041a6c18. --- .../stock/class/mouvementstock.class.php | 33 +------------------ 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/htdocs/product/stock/class/mouvementstock.class.php b/htdocs/product/stock/class/mouvementstock.class.php index 9c1e555ba3b..b37384932cf 100644 --- a/htdocs/product/stock/class/mouvementstock.class.php +++ b/htdocs/product/stock/class/mouvementstock.class.php @@ -3,7 +3,6 @@ * Copyright (C) 2005-2013 Laurent Destailleur * Copyright (C) 2011 Jean Heimburger * Copyright (C) 2014 Cedric GROSS - * Copyright (C) 2015 Francis Appels * * 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 @@ -233,37 +232,7 @@ class MouvementStock extends CommonObject { $fk_product_stock = $this->db->last_insert_id(MAIN_DB_PREFIX."product_stock"); } - - // delete empty stock record - $sql = "SELECT reel FROM ".MAIN_DB_PREFIX."product_stock"; - $sql.= " WHERE rowid = ".$fk_product_stock; - - $resql=$this->db->query($sql); - if ($resql) - { - $obj = $this->db->fetch_object($resql); - if ($obj) - { - if ($obj->reel == 0) - { - dol_syslog(get_class($this)."::_create delete 0 stock record", LOG_DEBUG); - $sql = "DELETE FROM ".MAIN_DB_PREFIX."product_stock"; - $sql.= " WHERE rowid = ".$fk_product_stock; - $delsql=$this->db->query($sql); - if (! $delsql) - { - $this->errors[]=$this->db->lasterror(); - $error = -8; - } - } - } - $this->db->free($resql); - } - else - { - $this->errors[]=$this->db->lasterror(); - $error = -7; - } + } // Update detail stock for sell-by date From c6081f0fa2063324f9b040742ab6181bd3be3ceb Mon Sep 17 00:00:00 2001 From: Maxime Kohlhaas Date: Fri, 11 Sep 2015 20:38:32 +0200 Subject: [PATCH 9/9] Fix multientity stock management (F.Henry followup) --- htdocs/product/class/product.class.php | 2 +- htdocs/product/stock/class/entrepot.class.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php index 13fc195ff06..41c73a227a4 100644 --- a/htdocs/product/class/product.class.php +++ b/htdocs/product/class/product.class.php @@ -2994,7 +2994,7 @@ class Product extends CommonObject $sql = "SELECT ps.reel, ps.fk_entrepot, ps.pmp, ps.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."product_stock as ps"; $sql.= ", ".MAIN_DB_PREFIX."entrepot as w"; - $sql.= " WHERE w.entity IN (".getEntity('warehouse', 1).")"; + $sql.= " WHERE w.entity IN (".getEntity('stock', 1).")"; $sql.= " AND w.rowid = ps.fk_entrepot"; $sql.= " AND ps.fk_product = ".$this->id; diff --git a/htdocs/product/stock/class/entrepot.class.php b/htdocs/product/stock/class/entrepot.class.php index 61c88abcaa5..b65c01f6840 100644 --- a/htdocs/product/stock/class/entrepot.class.php +++ b/htdocs/product/stock/class/entrepot.class.php @@ -358,7 +358,7 @@ class Entrepot extends CommonObject $sql = "SELECT rowid, label"; $sql.= " FROM ".MAIN_DB_PREFIX."entrepot"; - $sql.= " WHERE entity IN (".getEntity('warehouse', 1).")"; + $sql.= " WHERE entity IN (".getEntity('stock', 1).")"; $sql.= " AND statut = ".$status; $result = $this->db->query($sql);