Files
Vivier/vues/import_lot.php
T

98 lines
5.8 KiB
PHP

<?php
$libelles = ['en_attente' => t('En attente'), 'pret' => t('Prêt à relire'), 'erreur' => t('Erreur')];
$motifs = ['email' => t('même adresse email'), 'telephone' => t('même téléphone'), 'nom' => t('même prénom et même nom')];
$attente = count(array_filter($lignes, static fn ($l) => $l['etat'] === 'en_attente'));
$prets = count(array_filter($lignes, static fn ($l) => $l['etat'] === 'pret'));
$places = LOT_MAX - count($lignes);
?>
<p class="fil"><a href="<?= e(url('import')) ?>"><?= e(t('Importer')) ?></a> / <?= e(t('Import en lot')) ?></p>
<div class="barre-titre">
<h1><?= e(t('Import en lot')) ?> <small><?= e(tn(count($lignes), '%d CV dans le lot', '%d CV dans le lot')) ?></small></h1>
</div>
<p class="aide"><?= e(t('Déposez plusieurs CV d\'un coup : %d au plus. Chaque profil est relu avant d\'entrer dans le Kanban. Un CV laissé dans le lot est retiré après 7 jours.', LOT_MAX)) ?></p>
<?php if ($places > 0): ?>
<div class="deux-egales depot">
<section class="carte<?= $auto ? ' mise-en-avant' : '' ?>">
<h2><?= e(t('CV à analyser')) ?></h2>
<?php if ($auto): ?>
<p class="aide"><?= e(t('Vivier envoie chaque CV à Claude, l\'un après l\'autre. Comptez une à deux minutes par CV.')) ?></p>
<form method="post" action="<?= e(url('import_lot')) ?>" enctype="multipart/form-data" class="pile">
<?= champ_csrf() ?>
<label><?= e(t('CV des candidats (PDF, DOCX, ODT, MD ou TXT)')) ?>
<input type="file" name="cv[]" accept=".pdf,.docx,.odt,.md,.txt" multiple required>
</label>
<button type="submit" name="action" value="deposer"><?= e(t('Déposer les CV')) ?></button>
</form>
<?php else: ?>
<p class="aide"><?= e(t('Non configurée. Ajoutez une clé d\'API Claude dans')) ?> <code><?= e(t('config/config.php')) ?></code> <?= e(t('pour analyser un CV sans quitter Vivier.')) ?></p>
<?php endif; ?>
</section>
<section class="carte">
<h2><?= e(t('Profils déjà analysés')) ?></h2>
<p class="aide"><?= e(t('Sélectionnez ensemble les fichiers JSON, les CV d\'origine et les rapports. Vivier associe chaque profil au CV que nomme son JSON.')) ?></p>
<form method="post" action="<?= e(url('import_lot')) ?>" enctype="multipart/form-data" class="pile">
<?= champ_csrf() ?>
<label><?= e(t('Profils (.json), CV et rapports')) ?>
<input type="file" name="fichiers[]" accept=".json,.pdf,.docx,.doc,.odt,.rtf,.md,.txt" multiple required>
</label>
<button type="submit" name="action" value="deposer_analyses" class="<?= $auto ? 'secondaire' : '' ?>"><?= e(t('Déposer les fichiers')) ?></button>
</form>
</section>
</div>
<?php else: ?>
<p class="flash flash-info"><?= e(t('Le lot est plein. Enregistrez ou retirez des CV pour en déposer d\'autres.')) ?></p>
<?php endif; ?>
<?php if ($lignes): ?>
<section class="carte" id="lot" data-url="<?= e(url('import_lot_analyse')) ?>" data-auto="<?= $auto ? '1' : '0' ?>">
<div class="barre-titre">
<h2><?= e(t('Contenu du lot')) ?></h2>
<?php if ($prets): ?>
<form method="post" action="<?= e(url('import_lot')) ?>" data-confirmer="<?= e(t('Enregistrer tous les profils prêts, sans les relire un par un ?')) ?>">
<?= champ_csrf() ?>
<button type="submit" name="action" value="tout"><?= e(tn($prets, 'Enregistrer le profil prêt', 'Enregistrer les %d profils prêts')) ?></button>
</form>
<?php endif; ?>
</div>
<?php if ($attente && $auto): ?>
<p class="flash flash-info" id="lot-avancement" role="status">
<?= e(tn($attente, '%d CV attend son analyse. Elle démarre seule : gardez cette page ouverte.', '%d CV attendent leur analyse. Elle démarre seule : gardez cette page ouverte.')) ?>
</p>
<?php endif; ?>
<div class="defile"><table class="lot">
<thead><tr><th><?= e(t('Fichier')) ?></th><th><?= e(t('État')) ?></th><th><?= e(t('Candidat')) ?></th><th></th></tr></thead>
<tbody>
<?php foreach ($lignes as $l): ?>
<tr data-id="<?= (int) $l['id'] ?>" data-etat="<?= e($l['etat']) ?>">
<td><?= e($l['nom_fichier']) ?><br><small><?= e($l['nom_affiche']) ?>, <?= e(date_fr($l['cree_le'], true)) ?></small></td>
<td>
<span class="badge badge-lot-<?= e($l['etat']) ?> etat-lot"><?= e($libelles[$l['etat']]) ?></span>
<?php if ($l['etat'] === 'erreur'): ?><p class="retard detail-lot"><?= e((string) $l['erreur']) ?></p><?php else: ?><p class="retard detail-lot" hidden></p><?php endif; ?>
</td>
<td class="candidat-lot">
<?= e((string) $l['candidat']) ?>
<?php foreach ($l['doublons'] as $d): ?>
<br><small class="retard"><?= e(t('Ressemble à %s', $d['corbeille'] ? sprintf('ITC-%04d', $d['id']) . ' (' . t('profil à la corbeille') . ')' : $d['prenom'] . ' ' . $d['nom'])) ?> : <?= e(implode(', ', array_map(static fn ($m) => $motifs[$m], $d['motifs']))) ?></small>
<?php endforeach; ?>
</td>
<td>
<form method="post" action="<?= e(url('import_lot')) ?>" class="actions-ligne droite">
<?= champ_csrf() ?>
<input type="hidden" name="id" value="<?= (int) $l['id'] ?>">
<?php if ($l['etat'] === 'pret'): ?>
<button type="submit" name="action" value="relire" class="secondaire"><?= e(t('Relire')) ?></button>
<?php elseif ($auto && ($l['meta']['mode'] ?? '') === 'auto'): ?>
<button type="submit" name="action" value="analyser" class="secondaire bouton-analyse"><?= e($l['etat'] === 'erreur' ? t('Relancer l\'analyse') : t('Analyser')) ?></button>
<?php endif; ?>
<button type="submit" name="action" value="retirer" class="lien"><?= e(t('Retirer')) ?></button>
</form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table></div>
</section>
<?php endif; ?>