From 0211ad64eed4de33aec6bf0e966cbf449aca96eb Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Sat, 17 Oct 2015 12:28:47 +0200
Subject: [PATCH] FIX Total in summary was not same than into detail on the
 referrer page.

Conflicts:
	htdocs/product/stats/facture.php
---
 htdocs/product/stats/commande.php             |  4 ++--
 htdocs/product/stats/commande_fournisseur.php |  4 ++--
 htdocs/product/stats/facture.php              | 24 +++++++++++--------
 htdocs/product/stats/facture_fournisseur.php  |  2 +-
 htdocs/product/stats/propal.php               |  2 +-
 5 files changed, 20 insertions(+), 16 deletions(-)

diff --git a/htdocs/product/stats/commande.php b/htdocs/product/stats/commande.php
index 9491b18da1e..42925a704ec 100644
--- a/htdocs/product/stats/commande.php
+++ b/htdocs/product/stats/commande.php
@@ -128,9 +128,9 @@ if ($id > 0 || ! empty($ref))
 
 		if ($user->rights->commande->lire)
 		{
-			$sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client, c.rowid, d.total_ht as total_ht, c.ref,";
+			$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, c.rowid, d.total_ht as total_ht, c.ref,";
 			$sql .= " c.ref_client,";
-			$sql.= " c.date_commande, c.fk_statut as statut, c.facture, c.rowid as commandeid, d.qty";
+			$sql.= " c.date_commande, c.fk_statut as statut, c.facture, c.rowid as commandeid, d.rowid, d.qty";
 			if (!$user->rights->societe->client->voir && !$socid) $sql.= ", sc.fk_soc, sc.fk_user ";
 			$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
 			$sql.= ", ".MAIN_DB_PREFIX."commande as c";
diff --git a/htdocs/product/stats/commande_fournisseur.php b/htdocs/product/stats/commande_fournisseur.php
index e7a803c299c..0516163b2a1 100644
--- a/htdocs/product/stats/commande_fournisseur.php
+++ b/htdocs/product/stats/commande_fournisseur.php
@@ -135,9 +135,9 @@ if ($id > 0 || ! empty($ref)) {
 		print '</div>';
 
 		if ($user->rights->fournisseur->commande->lire) {
-			$sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client,";
+			$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,";
 			$sql .= " c.rowid, d.total_ht as total_ht, c.ref,";
-			$sql .= " c.date_commande, c.fk_statut as statut, c.rowid as commandeid, d.qty";
+			$sql .= " c.date_commande, c.fk_statut as statut, c.rowid as commandeid, d.rowid, d.qty";
 			if (! $user->rights->societe->client->voir && ! $socid)
 				$sql .= ", sc.fk_soc, sc.fk_user ";
 			$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
diff --git a/htdocs/product/stats/facture.php b/htdocs/product/stats/facture.php
index 2a79b97e399..9c400dcdeaa 100644
--- a/htdocs/product/stats/facture.php
+++ b/htdocs/product/stats/facture.php
@@ -128,10 +128,11 @@ if ($id > 0 || ! empty($ref))
 		print '</div>';
 
 
-        if ($user->rights->facture->lire) {
-            $sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client,";
-            $sql.= " f.facnumber, d.total_ht as total_ht,";
-            $sql.= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid, d.qty";
+        if ($user->rights->facture->lire) 
+        {
+            $sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client,";
+            $sql.= " f.facnumber, f.datef, f.paye, f.fk_statut as statut, f.rowid as facid,";
+            $sql.= " d.rowid, d.total_ht as total_ht, d.qty";           // We must keep the d.rowid here to not loose record because of the distinct used to ignore duplicate line when link on societe_commerciaux is used
             if (!$user->rights->societe->client->voir && !$socid) $sql.= ", sc.fk_soc, sc.fk_user ";
             $sql.= " FROM ".MAIN_DB_PREFIX."societe as s";
             $sql.= ", ".MAIN_DB_PREFIX."facture as f";
@@ -147,24 +148,27 @@ if ($id > 0 || ! empty($ref))
             	$sql.= ' AND YEAR(f.datef) IN (' . $search_year . ')';
             if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;
             if ($socid) $sql.= " AND f.fk_soc = ".$socid;
-            $sql.= " ORDER BY $sortfield $sortorder ";
+            $sql.= $db->order($sortfield, $sortorder);
 
             //Calcul total qty and amount for global if full scan list
             $total_ht=0;
             $total_qty=0;
 			$totalrecords=0;
-            if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {
+            if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) 
+            {
             	$result = $db->query($sql);
-            	if ($result) {
+            	if ($result) 
+            	{
             		$totalrecords = $db->num_rows($result);
-            		while ($objp = $db->fetch_object($result)) {
+            		while ($objp = $db->fetch_object($result)) 
+            		{
             			$total_ht+=$objp->total_ht;
             			$total_qty+=$objp->qty;
             		}
             	}
             }
 
-            $sql.= $db->plimit($conf->liste_limit +1, $offset);
+            $sql.= $db->plimit($conf->liste_limit + 1, $offset);
 
             $result = $db->query($sql);
             if ($result)
@@ -214,7 +218,7 @@ if ($id > 0 || ! empty($ref))
                 if ($num > 0)
 				{
                     $var=True;
-                    while ($i < $num && $i < $conf->liste_limit)
+                    while ($i < min($num,$conf->liste_limit))
 					{
                         $objp = $db->fetch_object($result);
                         $var=!$var;
diff --git a/htdocs/product/stats/facture_fournisseur.php b/htdocs/product/stats/facture_fournisseur.php
index 9b56cee7552..5ce40658d0d 100644
--- a/htdocs/product/stats/facture_fournisseur.php
+++ b/htdocs/product/stats/facture_fournisseur.php
@@ -130,7 +130,7 @@ if ($id > 0 || ! empty($ref))
 
 		if ($user->rights->fournisseur->facture->lire)
 		{
-			$sql = "SELECT distinct s.nom as name, s.rowid as socid, s.code_client, f.ref, d.total_ht as total_ht,";
+			$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, s.code_client, f.ref, d.rowid, d.total_ht as total_ht,";
 			$sql .= " f.datef, f.paye, f.fk_statut as statut, f.rowid as facid, d.qty";
 			if (! $user->rights->societe->client->voir && ! $socid)
 				$sql .= ", sc.fk_soc, sc.fk_user ";
diff --git a/htdocs/product/stats/propal.php b/htdocs/product/stats/propal.php
index 690f9c8c421..84d1ba72a80 100644
--- a/htdocs/product/stats/propal.php
+++ b/htdocs/product/stats/propal.php
@@ -129,7 +129,7 @@ if ($id > 0 || ! empty($ref))
 		if ($user->rights->propale->lire) {
 			$sql = "SELECT DISTINCT s.nom as name, s.rowid as socid, p.rowid as propalid, p.ref, d.total_ht as amount,";
 			$sql .= " p.ref_client,";
-			$sql .= "p.datep, p.fk_statut as statut, d.qty";
+			$sql .= "p.datep, p.fk_statut as statut, d.rowid, d.qty";
 			if (! $user->rights->societe->client->voir && ! $socid)
 				$sql .= ", sc.fk_soc, sc.fk_user ";
 			$sql .= " FROM " . MAIN_DB_PREFIX . "societe as s";
-- 
GitLab