| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- <?php
- /**
- * Classe stats
- *
- * Cette classe fournit des méthodes pour calculer des statistiques générales
- * sur les employés, y compris les répartitions par sexe, contrat, activité,
- * et les entrées par année.
- */
- class stats {
- /**
- * Calcule les statistiques générales des employés.
- *
- * Cette méthode récupère les statistiques par lieu, y compris les répartitions
- * par sexe, contrat, activité, ainsi que les entrées par année. Elle calcule
- * également les statistiques globales pour tous les lieux combinés.
- *
- * @param int $_actifOnly Indique si seules les données des employés actifs doivent être prises en compte (1 par défaut).
- * @return array Retourne un tableau contenant les statistiques globales et par lieu.
- */
- public static function countStatistiquesGenerale(int $_actifOnly = 1){
- $actif = ($_actifOnly == 1) ? " AND actif = 1" : "";
- // Récupération des lieux distincts
- $lieuxQuery = db::query("SELECT DISTINCT lieu FROM " . DB_T_SALARIES);
- $lieuxList = db::resultset($lieuxQuery);
- $lieuxStats = [];
- $globalEntrees = [];
- foreach ($lieuxList as $row) {
- $lieu = addslashes($row['lieu']);
- // Statistiques par lieu
- $sql = "SELECT "
- . "SUM(IF(sexe = 'F'{$actif} AND lieu = '{$lieu}', 1, 0)) AS Femme, "
- . "SUM(IF(sexe = 'M'{$actif} AND lieu = '{$lieu}', 1, 0)) AS Homme, "
- . "SUM(IF(contrat = 1{$actif} AND lieu = '{$lieu}', 1, 0)) AS ContratOn, "
- . "SUM(IF(contrat = 0{$actif} AND lieu = '{$lieu}', 1, 0)) AS ContratOff, "
- . "SUM(IF(actif = 1 AND lieu = '{$lieu}', 1, 0)) AS ActifOn, "
- . "SUM(IF(actif = 0 AND lieu = '{$lieu}', 1, 0)) AS ActifOff "
- . "FROM " . DB_T_SALARIES;
- db::query($sql);
- $stats = db::single();
- $totalLieu = $stats['Femme'] + $stats['Homme'];
- $stats['PourcentageFemme'] = $totalLieu > 0 ? round(($stats['Femme'] / $totalLieu) * 100, 2) : 0;
- $stats['PourcentageHomme'] = $totalLieu > 0 ? round(($stats['Homme'] / $totalLieu) * 100, 2) : 0;
- // Entrées par année pour ce lieu
- $entrees = [];
- $entreeQuery = db::query("SELECT SUBSTR(jourEntree, 1, 4) AS anEntree FROM " . DB_T_SALARIES . " WHERE lieu = '{$lieu}'" . ($_actifOnly == 1 ? " AND actif = 1" : ""));
- foreach (db::resultset() as $value) {
- $an = $value["anEntree"];
- $entrees[$an] = isset($entrees[$an]) ? $entrees[$an] + 1 : 1;
- // Comptage global
- $globalEntrees[$an] = isset($globalEntrees[$an]) ? $globalEntrees[$an] + 1 : 1;
- }
- if (empty($entrees)) {
- $entrees[date("Y")] = 0;
- } else {
- ksort($entrees);
- }
- $stats['EntreesParAnnee'] = $entrees;
- $lieuxStats[$row['lieu']] = $stats;
- }
- // Statistiques globales
- $sqlGlobal = "SELECT "
- . "SUM(IF(sexe = 'F'{$actif}, 1, 0)) AS Femme, "
- . "SUM(IF(sexe = 'M'{$actif}, 1, 0)) AS Homme, "
- . "SUM(IF(contrat = 1{$actif}, 1, 0)) AS ContratOn, "
- . "SUM(IF(contrat = 0{$actif}, 1, 0)) AS ContratOff, "
- . "SUM(IF(actif = 1, 1, 0)) AS ActifOn, "
- . "SUM(IF(actif = 0, 1, 0)) AS ActifOff "
- . "FROM " . DB_T_SALARIES;
- db::query($sqlGlobal);
- $globalStats = db::single();
- $totalGlobal = $globalStats['Femme'] + $globalStats['Homme'];
- $globalStats['PourcentageFemme'] = $totalGlobal > 0 ? round(($globalStats['Femme'] / $totalGlobal) * 100, 2) : 0;
- $globalStats['PourcentageHomme'] = $totalGlobal > 0 ? round(($globalStats['Homme'] / $totalGlobal) * 100, 2) : 0;
- ksort($globalEntrees);
- $globalStats['EntreesParAnnee'] = $globalEntrees;
- $globalStats['Lieux'] = $lieuxStats;
- return $globalStats;
- }
- }
|