Ajout d'un filtre "semaine" dans les statistiques

Contribuer au projet de part vos connaissances: PHP, HTML, CSS, SQL, JS ....
Répondre
MrFranck
Gsup LEVEL 1
Messages : 19
Enregistré le : mar. 19 juil. 2016 23:17

Bonjour,

Je viens vous demander de l'aide car j'aimerais pouvoir afficher mes statistiques sur une semaine (et non sur un mois)

J'ai commencé a me pencher sur le sujet

J' ai ajouté une fonction dans stat.php qui retourne la date de début et fin de semaine:
Source: http://stackoverflow.com/questions/4861 ... weeknumber

Code : Tout sélectionner

function getStartAndEndDate($fweek, $fyear)
{
    $time = strtotime("1 January $fyear", time());
    $day = date('w', $time);
    $time += ((7*$fweek)+1-$day)*24*3600;
    $return[0] = date('Y-n-j', $time);
    $time += 6*24*3600;
    $return[1] = date('Y-n-j', $time);
    return $return;
}
Ainsi que la variable "semaine"

Code : Tout sélectionner

if ($_POST['week']=="") $_POST['week']=date('W');
J'ai ajouté dans ticket_stat.php le menu déroulant semaines (en me basant sur le modèle du menu mois):

Code : Tout sélectionner

<select name="week" onchange=submit()>
   <option value="%" <?php if ($_POST['week'] == '%')echo "selected" ?>>Toutes les semaines</option>
   <option value="01"<?php if ($_POST['week'] == '1')echo "selected" ?>>Semaine 01</option>
   <option value="02"<?php if ($_POST['week'] == '2')echo "selected" ?>>Semaine 02</option>
   <option value="03"<?php if ($_POST['week'] == '3')echo "selected" ?>>Semaine 03</option>
   ...
   <option value="52"<?php if ($_POST['week'] == '52')echo "selected" ?>>Semaine 52</option>
Et je me suis attaqué au premier graphe:

Dans line_tickets.php

J'ai d'abord changé les conditions des autres recherches pour qu'elles prennent en compte le nouveau menu (semaine):

Code : Tout sélectionner

//query for year selection
if (($_POST['week'] == '%') && ($_POST['month'] == '%') && ($_POST['year']!=='%'))

Code : Tout sélectionner

//query for month selection
else if (($_POST['week'] == '%') && ($_POST['month']!='%'))
Puis j'ai crée la condition de recherche sur la semaine

Code : Tout sélectionner

// MODIFICATION: recherche sur la semaine
else if ($_POST['week']!='%')
Elle ressemble beaucoup a celle sur le mois, voici les points que j ai modifiés:
Je définis mes deux dates (debut et fin de la semaine):

Code : Tout sélectionner

$dateDebut = getStartAndEndDate($_POST['week'], $_POST['year'])[0];
$dateFin = getStartAndEndDate($_POST['week'], $_POST['year'])[1];
Pour les insérer dans la requete sql :

Code : Tout sélectionner

$query1=$db->query("SELECT day(date_create) as x,count(*) as y FROM `tincidents` WHERE technician LIKE '$_POST[tech]' and criticality like '$_POST[criticality]' and type LIKE '$_POST[type]' and category LIKE '$_POST[category]' and date_create not like '0000-00-00 00:00:00'  and (date_create BETWEEN '$dateDebut' AND '$dateFin' ) AND disable='0' group by x ");
	$query2=$db->query("SELECT day(date_res) as x,count(*) as y FROM `tincidents` WHERE technician LIKE '$_POST[tech]' and criticality like '$_POST[criticality]' and type LIKE '$_POST[type]' and category LIKE '$_POST[category]' and date_res not like '0000-00-00 00:00:00' and (date_res BETWEEN '$dateDebut' AND '$dateFin') AND disable='0' group by x ");
J'ai encore quelques problèmes pour insérer le numéro de semaine dans le titre du graphe, mais sinon, ca fait le taf.

J'aimerais avoir quand même vos avis avant de modifier les graphes suivants :)

Si quelqu'un a des critiques, des suggestions ou alors une idée pour mieux faire, je suis preneur! :mrgreen:

Merci d'avance

Franck
Serveur: GestSup: 3.1.9 | OS: Debian 3.16.0.4 | Apache: 2.4.10 | MySQL: 5.5.49-0| PHP: 5.6.23-0
anna
Gsup LEVEL 0
Messages : 3
Enregistré le : mar. 30 août 2016 18:39
Contact :

C'est une très bonne idée, je viens de faire la modification et ça marche, merci pour le partage
Serveur: GestSup: 3.1.9 | OS: Debian 3.16.0.4 | Apache: 2.4.17 | MySQL: 5.7.9 | PHP: 7.0.0
massivity
Gsup LEVEL 2
Messages : 35
Enregistré le : mar. 27 sept. 2016 15:23

Salut,

Je ne comprends pas cette parti :
Elle ressemble beaucoup a celle sur le mois, voici les points que j ai modifiés:
Je définis mes deux dates (debut et fin de la semaine):

Code : Tout sélectionner

$dateDebut = getStartAndEndDate($_POST['week'], $_POST['year'])[0];
$dateFin = getStartAndEndDate($_POST['week'], $_POST['year'])[1];
Peut tu me l'expliquer ?

Cordialement,
Massivity
Serveur: GestSup: 3.2.31 | Nginx : 1.20.2 | MariaDB : 10.5.10 | PHP : 8.1.13
Répondre