Files

110 lines
5.7 KiB
PHP

<?php
$fr = static fn ($n): string => nombre($n);
$max = static fn (array $valeurs): int => max(1, ...array_values(array_map('intval', $valeurs)));
/** Barre horizontale : la longueur est donnée par une classe de 0 à 20, la valeur est toujours écrite. */
$barre = static fn (float $v, float $m): string => '<span class="barre"><span class="l' . (int) round(20 * $v / max($m, 0.0001)) . '"></span></span>';
?>
<div class="barre-titre"><h1><?= e(t('Tableau de bord')) ?></h1></div>
<?php if ($sauvegarde && ($sauvegarde['en_retard'] || $sauvegarde['dernier_echec'])): ?>
<p class="flash flash-erreur" role="alert">
<strong><?= e($sauvegarde['en_retard']
? ($sauvegarde['jours'] === null ? t('Aucune sauvegarde de la base n\'a encore été faite.') : t('Dernière sauvegarde réussie il y a %d jours.', $sauvegarde['jours']))
: t('La dernière sauvegarde a rencontré un problème.')) ?></strong>
<?php if ($sauvegarde['dernier_echec']): ?><?= e((string) $sauvegarde['dernier_echec']['detail']) ?><?php endif; ?>
<a href="<?= e(url('sauvegarde')) ?>"><?= e(t('Ouvrir la page Sauvegarde')) ?></a>
</p>
<?php endif; ?>
<?php if ($s['total'] === 0 && $s['archives'] === 0): ?>
<section class="carte">
<p><strong><?= e(t('Aucun profil pour l\'instant.')) ?></strong></p>
<p class="aide"><?= e(t('Les chiffres apparaîtront après le premier import.')) ?></p>
<p><a class="bouton" href="<?= e(url('import')) ?>"><?= e(t('Importer un profil')) ?></a></p>
</section>
<?php else: ?>
<dl class="chiffres">
<div><dt><?= e(t('Profils dans le vivier')) ?></dt><dd><?= (int) $s['total'] ?></dd></div>
<div><dt><?= e(t('Reçus sur 30 jours')) ?></dt><dd><?= (int) $s['recus_30j'] ?></dd></div>
<div><dt><?= e(t('En cours de parcours')) ?></dt><dd><?= (int) $s['en_parcours'] ?></dd></div>
<div><dt><?= e(t('Embauchés')) ?></dt><dd><?= (int) $s['par_statut']['embauche'] ?></dd></div>
<div><dt><a href="<?= e(url('suivi')) ?>"><?= e(t('Entretiens sur 7 jours')) ?></a></dt><dd><?= (int) $s['entretiens_7j'] ?></dd></div>
<div><dt><a href="<?= e(url('suivi')) ?>"><?= e(t('Relances à faire')) ?></a></dt><dd><?= (int) $s['relances_dues'] ?></dd></div>
<div><dt><a href="<?= e(url('besoins', ['statut' => 'ouvert'])) ?>"><?= e(t('Besoins ouverts')) ?></a></dt><dd><?= (int) $s['besoins_ouverts'] ?></dd></div>
<div><dt><?php if (est_admin()): ?><a href="<?= e(url('conservation')) ?>"><?= e(t('Conservation à traiter')) ?></a><?php else: ?><?= e(t('Conservation à traiter')) ?><?php endif; ?></dt><dd><?= (int) $s['a_echeance'] ?></dd></div>
</dl>
<div class="deux-egales">
<section class="carte">
<h2><?= e(t('Profils par statut')) ?></h2>
<table class="mesures">
<tbody>
<?php $m = $max($s['par_statut']); foreach (STATUTS as $code => $libelle): ?>
<tr>
<th scope="row"><?= echelle($code) ?><a href="<?= e(url('recherche', ['statut' => $code])) ?>"><?= e(t($libelle)) ?></a></th>
<td><?= $barre($s['par_statut'][$code], $m) ?></td>
<td class="nombre"><?= (int) $s['par_statut'][$code] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if ($s['archives']): ?>
<p class="aide"><a href="<?= e(url('recherche', ['archives' => 'seuls'])) ?>"><?= e(tn((int) $s['archives'], '%d profil archivé', '%d profils archivés')) ?></a>, <?= e(t('hors de ces chiffres.')) ?></p>
<?php endif; ?>
</section>
<section class="carte">
<h2><?= e(t('Temps moyen passé à chaque étape')) ?></h2>
<?php if (!$s['delais']): ?>
<p class="vide"><?= e(t('Aucun changement de statut enregistré. Les délais se calculent à partir du premier passage d\'une étape à l\'autre.')) ?></p>
<?php else: ?>
<table class="mesures">
<tbody>
<?php $m = max(array_column($s['delais'], 'jours')); foreach ($s['delais'] as $code => $d): ?>
<tr>
<th scope="row"><?= echelle($code) ?><?= e(t(STATUTS[$code])) ?></th>
<td><?= $barre((float) $d['jours'], (float) $m) ?></td>
<td class="nombre"><?= e(t('%s j', nombre($d['jours']))) ?> <small><?= e(tn((int) $d['passages'], 'sur %d passage', 'sur %d passages')) ?></small></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<p class="aide"><?= e(t('Durée entre l\'entrée dans un statut et sa sortie. Les profils supprimés ne comptent plus.')) ?></p>
<?php endif; ?>
</section>
<section class="carte">
<h2><?= e(t('Séniorité')) ?></h2>
<table class="mesures">
<tbody>
<?php $m = $max($s['par_seniorite']); foreach (SENIORITES as $code => $libelle): ?>
<tr>
<th scope="row"><a href="<?= e(url('recherche', ['seniorite' => $code])) ?>"><?= e(t($libelle)) ?></a></th>
<td><?= $barre($s['par_seniorite'][$code], $m) ?></td>
<td class="nombre"><?= (int) $s['par_seniorite'][$code] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</section>
<section class="carte">
<h2><?= e(t('Technologies les plus présentes')) ?></h2>
<?php if (!$s['technologies']): ?><p class="vide"><?= e(t('Aucune technologie enregistrée.')) ?></p><?php else: ?>
<table class="mesures">
<tbody>
<?php $m = (int) $s['technologies'][0]['n']; foreach ($s['technologies'] as $t): ?>
<tr>
<th scope="row"><a href="<?= e(url('recherche', ['q' => $t['nom']])) ?>"><?= e($t['nom']) ?></a></th>
<td><?= $barre((float) $t['n'], (float) $m) ?></td>
<td class="nombre"><?= (int) $t['n'] ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</section>
</div>
<?php endif; ?>