Эх сурвалжийг харах

v2 - Intégration complète des infobulles

Guichen 4 жил өмнө
parent
commit
957b91d087
1 өөрчлөгдсөн 71 нэмэгдсэн , 6 устгасан
  1. 71 6
      index.php

+ 71 - 6
index.php

@@ -123,7 +123,7 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 			</div>
 		</div>
 		<i>Utiliser Ctrl/Command + Clic pour (dé)sélectionner plusieurs options sur PC/Mac</i> <br>
-		<button type="submit" class="btn btn-info rounded-pill col-sm-2" >Envoyer</button>
+		<button type="submit" class="btn btn-info rounded-pill col-sm-2" >Envoyer !</button>
 	</form>
 	
 	<?php if ($isClassementValid) : ?>
@@ -149,7 +149,7 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 	
 		<?php
 		// $html = "<h2>Résultats</h2>";
-		$html = "<br><br><br>";
+		$html = "<br><br>";
 		
 		// On va récupérer tous les rangs limited dispo triés par idChoix
 		//Mysql
@@ -163,13 +163,55 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 		//////////////////////////////////
 		// Calcul et affichage des données
 		//////////////////////////////////
-		// v2. Conversion du filtre spé/ville de l'utilisateur
+		// v2.A Conversion du filtre spé/ville de l'utilisateur
 		// On croise l'array source de données avec les id sélectionnés via le GET (ce qui sécurise les données en plus)
 		// array_intersect_key(array_source, clés_à_garder)
+		// Si pas de filtre sélectionné, bah on prend toutes les spé/villes disponibles
 		$cityDataset = ($isTriVilleValid === TRUE) ? array_intersect_key($citySourceDataset, array_flip($_GET["v"])) : $citySourceDataset;
 		$specialityDatasetAbrev = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDatasetAbrev, array_flip($_GET["s"])) : $specialitySourceDatasetAbrev;
 		$specialityDataset = ($isTriSpeValid === TRUE) ? array_intersect_key($specialitySourceDataset, array_flip($_GET['s'])) : $specialitySourceDataset;
 		
+		// v2. Calcul des rangs potentiels pour chaque année simulée
+		// Requete sélectionnant le nombre de personnes ayant choisi avant le classement X
+		$sql = "SELECT idChoix, COUNT(*) as nb_perso_avant
+				FROM anciens_choix
+				WHERE classement < :classementEntre AND annee = :annee
+				GROUP BY idChoix";
+		$reqAnciensChoixPourClassementX = $db->prepare($sql);
+		// Requete sélectionnant le nombre total de personnes à chaque choix
+		$sql = "SELECT idChoix, COUNT(*) as nb_perso_total
+				FROM anciens_choix
+				WHERE annee = :annee
+				GROUP BY idChoix";
+		$reqAnciensChoixNbPostes = $db->prepare($sql);
+	
+		$nbAncienChoixParAn = [];
+		$nbPersChoixAvant = [];
+		// On détermine les années simulées : 2017 à année actuelle - 1, et on récupère les données pour les gens avant ce classement
+		for ($annee = 2017; $annee <= (int) date("Y") - 1 ; $annee++) {
+			// On formate les données pour le nombre de postes avant le classement (pour l'intégrer à tous les postes après)
+			$reqAnciensChoixPourClassementX->execute([
+					"annee" => $annee,
+					"classementEntre" => $inputClassement
+			]);
+			$nbChoixAnneeI = $reqAnciensChoixPourClassementX->fetchAll();
+			foreach ($nbChoixAnneeI as $nbPostesItem) {
+				$nbPersChoixAvant[$annee][$nbPostesItem['idChoix']] = $nbPostesItem['nb_perso_avant'];
+			}
+			
+			// On formate les données pour position dans promo et nombres de postes
+			$reqAnciensChoixNbPostes->execute(["annee" => $annee]);
+			$nbPostesRaw = $reqAnciensChoixNbPostes->fetchAll();
+			foreach ($nbPostesRaw as $choix) {
+				$nbAncienChoixParAn[$choix["idChoix"]][$annee] = [
+					"position" =>  (isset ($nbPersChoixAvant[$annee][$choix['idChoix']])) ? $nbPersChoixAvant[$annee][$choix['idChoix']] + 1 : 1,
+					"nbPostesTotal" => $choix["nb_perso_total"]
+				];
+			}
+		}
+
+		unset($reqAnciensChoixNbPostes, $reqAnciensChoixPourClassementX, $nbPersChoixAvant);
+	
 		// Affichage de la 1ère ligne = Titre des colonnes + infobulles (via BootstrapJS)
 		$html .= "<table><thead><tr><th></th>";
 		foreach ($specialityDatasetAbrev as $speId => $specialityName) {
@@ -197,6 +239,8 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 			$html .= "<tr><th scope='row'>".$cityName."</th>";
 			foreach ($specialityDatasetAbrev AS $specialityId => $specialityName) {
 				$idChoice = "0".$cityId.$specialityId;
+				$tooltip = FALSE;
+				$tooltipContent = "";
 				
 				if (!isset($rangLimites[$idChoice])) {
 					$nbAnneePropose = 0;
@@ -204,13 +248,28 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 				} else {
 					$nbAnneePropose = count($rangLimites[$idChoice]);
 					$nbPossibleAnneePropose = 0;
+					$tooltip = TRUE; // Autorise l'insertion des données de la tooltip
 					foreach ($rangLimites[$idChoice] as $rangLimite) {
-						if ((int) $rangLimite["rangLimite"] >= $inputClassement) {$nbPossibleAnneePropose++;}
+						if ((int) $rangLimite["rangLimite"] >= $inputClassement) {
+							$nbPossibleAnneePropose++;
+							
+							// Gestion du contenu de la tooltip
+							if(isset($nbAncienChoixParAn[$idChoice][$rangLimite["annee"]])) { // Cas où il reste de la place
+								$temp = $nbAncienChoixParAn[$idChoice][$rangLimite["annee"]];
+								$tooltipContent .= "ECNi ".$rangLimite["annee"]." : ".$temp["position"]."/".$temp["nbPostesTotal"] ."<br>";
+							} else { // Cas où le choix n'a pas été pourvu (donc y'a personne dans les anciens choix)
+								$tooltipContent .= "ECNi ".$rangLimite["annee"]." : Non poourvu<br>";
+							}
+						} else { // Cas où le choix était impossible cette année
+							$tooltipContent .= "ECNi ".$rangLimite["annee"]." : Impossible. <br>";
+						}
 					}
 				}
 				
 				// Affichage de la cellule
-				$html .= "<td class=\"";
+				$html .= "<td ";
+				$html .= ($tooltip === TRUE) ? "data-toggle='tooltip' data-placement='bottom' data-html='true' " : "";
+				$html .= " class=\"";
 				switch (TRUE) {
 					case ($nbPossibleAnneePropose === 0 && $nbAnneePropose === 0):
 						$html .= "never-available";
@@ -232,7 +291,9 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 						$html .= "all-choices";
 						break;
 				}
-				$html .= "\">";
+				$html .= "\" ";
+				$html .= ($tooltip === TRUE) ? "title='".$tooltipContent."'" : "";
+				$html .= ">";
 				if ($nbPossibleAnneePropose > 0) {
 					$html .= $nbPossibleAnneePropose;
 				} else if ($nbPossibleAnneePropose === 0 && $nbAnneePropose !== 0) {
@@ -252,6 +313,10 @@ $citySourceDataset = getCsvToArrayKeyValue($_SETTINGS["datasetFolder"]."/liste_v
 
 </div>
 
+<div style="text-align: center; font-weight: 700;">
+	Copyright &copy; 2021 MH2V SAS. Tous droits réservés.
+</div>
+
 <!-- Bootstrap core JS-->
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>