Doublon dans la liste des demandeurs d'un ticket

Forum Général sur les questions que vous vous posez sur le logiciel.
Répondre
JoshuaSign_
Gsup LEVEL 1
Messages : 19
Enregistré le : lun. 6 mai 2019 16:17

Bonjour,

Je suis tombé sur un cas de figure particulier : lorsque l'on est sur un ticket qui a été importé, mais dont le demandeur n'a pas été trouvé en base, le ticket est alors créé pour le user (demandeur) id:0 "Aucun"
Alors, dans la "liste des demandeurs", l'option "Aucun" appaît 2 fois. Je suis dans le cas ou ticket_user_company != 0 (le nom de la société apparait dans la liste)

De mon point de vue l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 : le code php étant une série de if (sans else if), cela peut produire 2 fois la meme option (on le constate dans le code source de la page).

D'autre part, en analysant de plus pres la requete qui est faite, j'ai l'impression qu'un DISTINCT a été ajouté (sans doute pour gérer ce cas de figure) mais pour autant, comme tuser.* est appelé, ce DISTINCT ne fera jamais rien : les clé primaire sont récupérées et donc chaque ligne est déjà distincte.

J'ai préféré ajouter le nom de la company dans le select, permettant ainsi d'élliminer la requete suivante qui récupère le nom de la company pour chaque tuser.
Il me semble que cette façon sera plus rapide à l'execution (nous avons actuellement 40 000 demandeurs potentiels et prévoyons d'en avoir 100 000 à terme)

Voici la modification que j'ai apportée :
fichier ticket.php - dans la section "<!-- START sender list part -->"

Code : Tout sélectionner

//define order of user list in case with company prefix
if($rright['ticket_user_company']!=0) {
        $query = $db->query("SELECT tusers.id as id
		, tusers.lastname as lastname
		, tusers.firstname as firstname
		, tusers.disable as disable
		, tusers.company as company
		, tcompany.name as user_company
		FROM `tusers` 
		LEFT JOIN tcompany ON tusers.company=tcompany.id 
		WHERE (tusers.lastname!='' OR tusers.firstname!='')  
		ORDER BY tcompany.name, tusers.lastname, tusers.firstname");
} else {
        $query = $db->query("SELECT tusers.id as id
		, tusers.lastname as lastname
		, tusers.firstname as firstname
		, tusers.disable as disable 
		FROM `tusers` 
		WHERE (lastname!='' OR firstname!='')  
		ORDER BY lastname ASC, firstname ASC");
}
//display user list and keep selected an disable user
while ($row = $query->fetch()) {
        if($rright['ticket_user_company']!=0 && $row['company']!=0)
        {
                $user_company='['.$row['user_company'].'] ';
        } else {
		$user_company='';
	}

        if ( $_POST['user']==$row['id'] || ( $_POST['user']=='' && $globalrow['user']==$row['id'] ) ) {
		$selected='selected';
	} else {
		$selected='';
	}

        if ($row['id']==0) { //case no user
		echo '<option '.$selected.' value="'.$row['id'].'">'.T_(" $row[lastname]").' '.$row['firstname'].'</option>';
	} else  if ($row['disable']==0) { //all enable users and technician
		echo '<option '.$selected.' value="'.$row['id'].'">'.$user_company.$row['lastname'].' '.$row['firstname'].'</option>';
	} else if ($row['disable']==1 && $selected=='selected') { //case disable user always attached to this ticket
		echo '<option '.$selected.' value="'.$row['id'].'">'.$row['lastname'].' '.$row['firstname'].'</option>';
	} 
}
GestSup 3.1.38 - Debian 8.11 - Apache/2.4.10 - Php 5.6.40-0+deb8u2 - MySQL 5.5.62-0+deb8u1
Avatar du membre
Flox
Administrateur du site
Messages : 9436
Enregistré le : jeu. 21 juin 2012 19:00

Bonjour,

je n'arrive pas à reproduire le problème de mon côté, pouvez vous le reproduire sur la webdemo, et indiquer les étapes réalisées ?
2019-05-09 17_13_58-screenshot-zensoft.png
2019-05-09 17_13_58-screenshot-zensoft.png (6.5 Kio) Vu 6520 fois
L'optimisation SQL à été intégrée dans la version 3.1.41, Merci.


Cdt
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.59 | MariaDB: 11.5.2 | PHP: 8.3.12 | https://doc.gestsup.fr/
JoshuaSign_
Gsup LEVEL 1
Messages : 19
Enregistré le : lun. 6 mai 2019 16:17

Exact !

Mon erreur etait ici : " l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 " -> c'est faux, en principe Aucun doit etre en disable = 1

Ce user avait été supprimé, par erreur sans doute, et lorsque nous l'avons recréé nous avons oublié de le mettre en disable = 1, du coup il apparaissait en double.

Désolé pour cette erreur et Merci pour l'intégration de la partie SQL.
GestSup 3.1.38 - Debian 8.11 - Apache/2.4.10 - Php 5.6.40-0+deb8u2 - MySQL 5.5.62-0+deb8u1
Avatar du membre
Flox
Administrateur du site
Messages : 9436
Enregistré le : jeu. 21 juin 2012 19:00

Très bien,merci pour votre retour.

bonne journée
GestSup: 3.2.47 | Debian: 12 | Apache: 2.4.59 | MariaDB: 11.5.2 | PHP: 8.3.12 | https://doc.gestsup.fr/
amekassa90
Gsup LEVEL 0
Messages : 1
Enregistré le : sam. 17 août 2019 01:57

JoshuaSign_ a écrit : jeu. 9 mai 2019 18:17 Exact !

Mon erreur etait ici : " l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 " -> c'est faux, en principe Aucun doit etre en disable = 1

Ce user avait été supprimé, par erreur sans doute, et lorsque nous l'avons recréé nous avons oublié de le mettre en disable = 1, du coup il apparaissait en double.

Désolé pour cette erreur et Merci pour l'intégration de la partie SQL.
Je suis tombé sur un cas de figure particulier : lorsque l'on est sur un ticket qui a été importé, mais dont le demandeur n'a pas été trouvé en base, le ticket est alors créé pour le user (demandeur) id:0 "Aucun"
JoshuaSign_
Gsup LEVEL 1
Messages : 19
Enregistré le : lun. 6 mai 2019 16:17

c'est le fonctionnement normal... imho
GestSup 3.1.38 - Debian 8.11 - Apache/2.4.10 - Php 5.6.40-0+deb8u2 - MySQL 5.5.62-0+deb8u1
Répondre