You are not logged in.
Bonjour,
Je souhaiterais pouvoir générer des rapports assez simple : nombre de tickets "incident" entre deux dates et par lieu.
Pour cela je me suis naivement lancer avec le pluguin reports a vouloir faire un rapport custom en editant un fichier PHP.
Cependant je ne trouve aucune documentations pour me guider et ca me dépasse un peu (beaucoup). j'ai supposé qu'il me faudrait créer une requette sur la base de donnée dans la table glpi_tickets en filtrant que les "type" 1 que les "location_id" corresspant au lieu selectionné dans la table "glpi_locations" puis en flitrant par date.
Mais je n'ai aucune idée de comment rédiger cela dans un PHP et les si les autres fichiers PHP me donnent des indications je suis tres loin de comprendre le fonctionnement.
Quelqu'un aurai des conseils ou de l'aide a m'apporter? ou un lien vers une doc qui pourrait me guider?
Sam.
Offline
je vous propose un truc comme ça
<?php
/* ----------------------------------------------------------------------
* @version : incidentbylocation.php 2024-10-10 16:08:46 ladenree
/!\ le nom dudossier doit être identique au nom du fichier attention à la casse./!\
------------------------- glpi forum ----------- */
$USEDBREPLICATE = 1;
$DBCONNECTION_REQUIRED = 1;
// Initialization of the variables
include ("../../../../inc/includes.php");
//titre du rapport dans la liste de selection, soit en dur ici, soit mettre a jour la variable dans les fichiers de traduction glpi/plugins/reports/locales/fr_FR.po puis compiler en mo ;
//ajouter 2 lignes dans les fichiers de traduction : "incidentbylocation_report_title" et "incidentbylocation"
$report = new PluginReportsAutoReport(__('incidentbylocation_report_title', 'reports'));
//critère de selection;
$date = new PluginReportsDateIntervalCriteria($report, '`glpi_tickets`.`date`',"Periode(inclus) ");
$report->displayCriteriasForm();
if ($report->criteriasValidated()) {
//Intitulés des colonnes : nom de la colonne dans la requete sql et nom affiché sur le rapport à l'ecran : mettre à jour la variable dans les fichiers de traduction;
$cols = array(new PluginReportsColumn('NATURE',__('Type')),
new PluginReportsColumn('LOCATION',__('Location')),
new PluginReportsColumninteger('NBOUVERTURE',"Nbre Ouverture ")
);
$report->setColumns($cols);
$query = "SELECT
replace (replace(`glpi_tickets`.`type`,'".Ticket::INCIDENT_TYPE."','"._('Incident')."'),'".Ticket::DEMAND_TYPE."','".__('Request')."') AS NATURE,
glpi_locations.name as LOCATION,
count(`glpi_tickets`.`id`) AS NBOUVERTURE
FROM `glpi_tickets`
JOIN glpi_locations on glpi_locations.id= `glpi_tickets`.locations_id
WHERE `glpi_tickets`.`date`>'" .$date->getStartDate() . " 00:00:00' AND `glpi_tickets`.`date`<'" .$date->getEndDate() . " 23:59:59' AND `glpi_tickets`.`is_deleted` = '0' ";
$query .=" GROUP BY NATURE,LOCATION ";
$report->setSqlRequest($query);
$report->execute();
}
else {
Html::footer();
}
?>
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Merci, mais alors vraiment un grand MERCI.
c'est exactement ce qu'il me fallait, en partant de la je vais pouvoir adapter pour les autres besoins donc c'est parfait.
Par contre pour une raison que je ne comprend pas cela ne fonctionne que en mode DEBUG actif, sinon le résultat est vide.
Une idée de ou cela peut il venir?
Offline
j'etais en mode debug quad j'ai écrit rapisement le rapport et ça marchait; je viens de tester en mode normal et ça bloque
c'est la classe TICKET qui n'est pas trouvée pourtant ça marchait il y a quelques versions, j'avais quelques rapports qui utilisaeint cette syntaxe et qui ne marchent plus
il faut remplacer TICKET::INCIDENT_TYPE par sa valeur en dur ( cad 1 ) et TICKET::DEMAND_TYPE par 2
ce qui donne
replace (replace(`glpi_tickets`.`type`,'1','Incident'),'2','Demande') AS NATURE,
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Ca y est je suis amoureux !
Merci bcp ça marche parfaitement bien
Offline
j'ai trouvé pourquoi le code ne marchait plus : le nom de la classe est sensible à la casse il fallait écrire Ticket au lieu de TICKET (corrigé)
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline