From 967ae720ef5671db991b0d3f829696d444100dab Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 4 Mar 2016 15:51:34 +0100 Subject: [PATCH 1/3] Fix: compatibility with multicompany transversal mode --- htdocs/societe/class/societe.class.php | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index 72c93fa4b65..d31a240d2e4 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2004 Eric Seigne * Copyright (C) 2003 Brian Fraval * Copyright (C) 2006 Andre Cianfarani - * Copyright (C) 2005-2012 Regis Houssin + * Copyright (C) 2005-2016 Regis Houssin * Copyright (C) 2008 Patrick Raguin * Copyright (C) 2010-2014 Juanjo Menent * Copyright (C) 2013 Florian Henry @@ -1660,10 +1660,19 @@ class Societe extends CommonObject $reparray=array(); - $sql = "SELECT u.rowid, u.lastname, u.firstname, u.email"; + $sql = "SELECT DISTINCT u.rowid, u.lastname, u.firstname, u.email"; $sql.= " FROM ".MAIN_DB_PREFIX."societe_commerciaux as sc, ".MAIN_DB_PREFIX."user as u"; - $sql.= " WHERE u.rowid = sc.fk_user AND sc.fk_soc =".$this->id; - $sql.= " AND entity in (0, ".$conf->entity.")"; + if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) + { + $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ug"; + $sql.= " WHERE (ug.fk_user = u.rowid"; + $sql.= " AND ug.entity = ".$conf->entity.")"; + $sql.= " OR u.admin = 1"; + } + else + $sql.= " WHERE entity in (0, ".$conf->entity.")"; + + $sql.= " AND u.rowid = sc.fk_user AND sc.fk_soc =".$this->id; $resql = $this->db->query($sql); if ($resql) From 735a1c075edfddeb6709c3705a07bc15495cc58b Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 4 Mar 2016 16:48:53 +0100 Subject: [PATCH 2/3] Fix: best sql request --- htdocs/societe/class/societe.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/societe/class/societe.class.php b/htdocs/societe/class/societe.class.php index d31a240d2e4..864820602c8 100644 --- a/htdocs/societe/class/societe.class.php +++ b/htdocs/societe/class/societe.class.php @@ -1665,9 +1665,9 @@ class Societe extends CommonObject if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) { $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql.= " WHERE (ug.fk_user = u.rowid"; + $sql.= " WHERE ((ug.fk_user = sc.fk_user"; $sql.= " AND ug.entity = ".$conf->entity.")"; - $sql.= " OR u.admin = 1"; + $sql.= " OR u.admin = 1)"; } else $sql.= " WHERE entity in (0, ".$conf->entity.")"; From 5292920a84ccb06ad71c8c717bf508cb695e95bd Mon Sep 17 00:00:00 2001 From: Regis Houssin Date: Fri, 4 Mar 2016 17:10:42 +0100 Subject: [PATCH 3/3] Fix: don't see the sales representative of anothers entities --- htdocs/societe/commerciaux.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/htdocs/societe/commerciaux.php b/htdocs/societe/commerciaux.php index 245626752e4..436dfc5926c 100644 --- a/htdocs/societe/commerciaux.php +++ b/htdocs/societe/commerciaux.php @@ -160,12 +160,24 @@ if (! empty($socid)) print ''.$langs->trans("SalesRepresentatives").''; print ''; - $sql = "SELECT u.rowid, u.lastname, u.firstname"; + $sql = "SELECT DISTINCT u.rowid, u.lastname, u.firstname"; $sql .= " FROM ".MAIN_DB_PREFIX."user as u"; $sql .= " , ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql .= " WHERE sc.fk_soc =".$soc->id; + if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) + $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ug"; + $sql .= " WHERE sc.fk_soc = ".$soc->id; $sql .= " AND sc.fk_user = u.rowid"; + if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) + { + $sql.= " AND ((ug.fk_user = sc.fk_user"; + $sql.= " AND ug.entity = ".$conf->entity.")"; + $sql.= " OR u.admin = 1)"; + } + else + $sql.= " AND u.entity IN (0,".$conf->entity.")"; + $sql .= " ORDER BY u.lastname ASC "; + dol_syslog('societe/commerciaux.php::list salesman sql = '.$sql,LOG_DEBUG); $resql = $db->query($sql); if ($resql) @@ -227,9 +239,9 @@ if (! empty($socid)) if (! empty($conf->multicompany->enabled) && ! empty($conf->multicompany->transverse_mode)) { $sql.= ", ".MAIN_DB_PREFIX."usergroup_user as ug"; - $sql.= " WHERE (ug.fk_user = u.rowid"; + $sql.= " WHERE ((ug.fk_user = u.rowid"; $sql.= " AND ug.entity = ".$conf->entity.")"; - $sql.= " OR u.admin = 1"; + $sql.= " OR u.admin = 1)"; } else $sql.= " WHERE u.entity IN (0,".$conf->entity.")";