156 lines
9.0 KiB
PHP
156 lines
9.0 KiB
PHP
<?php
|
|
$ouvert = $b['statut'] === 'ouvert';
|
|
$actives = array_filter($b['propositions'], static fn ($p) => $p['etat'] !== 'ecarte');
|
|
?>
|
|
<p class="fil"><a href="<?= e(url('besoins')) ?>"><?= e(t('Besoins clients')) ?></a> / <?= e($b['client']) ?></p>
|
|
|
|
<div class="entete-profil">
|
|
<div>
|
|
<h1><?= e($b['intitule']) ?></h1>
|
|
<p class="sous-titre">
|
|
<strong><?= e($b['client']) ?></strong>
|
|
<span class="badge badge-besoin-<?= e($b['statut']) ?>"><?= e(t(ETATS_BESOIN[$b['statut']])) ?></span>
|
|
<span><?= e(t('créé par %s le %s', $b['nom_affiche'], date_fr($b['cree_le']))) ?></span>
|
|
</p>
|
|
</div>
|
|
<?php if (peut_ecrire()): ?>
|
|
<form method="post" action="<?= e(url('besoin', ['id' => $b['id']])) ?>" class="statut-form">
|
|
<?= champ_csrf() ?>
|
|
<label><?= e(t('Statut du besoin')) ?>
|
|
<select name="statut">
|
|
<?php foreach (ETATS_BESOIN as $code => $libelle): ?><option value="<?= e($code) ?>"<?= $b['statut'] === $code ? ' selected' : '' ?>><?= e(t($libelle)) ?></option><?php endforeach; ?>
|
|
</select>
|
|
</label>
|
|
<button type="submit" name="action" value="statut" class="secondaire"><?= e(t('Mettre à jour')) ?></button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<?php if ($erreur !== null): ?><p class="flash flash-erreur" role="alert"><?= e($erreur) ?></p><?php endif; ?>
|
|
|
|
<div class="deux-colonnes">
|
|
<div>
|
|
<section class="carte" id="propositions">
|
|
<h2><?= e(t('Profils proposés')) ?> <small><?= count($actives) ?></small></h2>
|
|
<?php if (!$b['propositions']): ?>
|
|
<p class="vide"><?= e(t('Aucun profil proposé. Choisissez-en dans la liste ci-dessous, ou depuis la fiche d\'un profil.')) ?></p>
|
|
<?php else: ?>
|
|
<ul class="simple agenda">
|
|
<?php foreach ($b['propositions'] as $p): ?>
|
|
<li class="<?= $p['etat'] === 'ecarte' ? 'faite' : '' ?>">
|
|
<?= avatar($p) ?>
|
|
<div>
|
|
<a href="<?= e(url('profil', ['id' => $p['id']])) ?>"><?= e($p['prenom'] . ' ' . $p['nom']) ?></a>
|
|
<span class="badge badge-proposition-<?= e($p['etat']) ?>"><?= e(t(ETATS_PROPOSITION[$p['etat']])) ?></span>
|
|
<p><?= e(implode(' · ', array_filter([
|
|
$p['titre'], t(SENIORITES[$p['seniorite']]), annees($p['annees_experience']), t(STATUTS[$p['statut']]),
|
|
$p['archive_le'] ? t('Archivé') : null, $p['tjm'] ? t('TJM %s', euros($p['tjm'])) : null,
|
|
]))) ?></p>
|
|
<?php if ($p['note']): ?><p><?= e($p['note']) ?></p><?php endif; ?>
|
|
<small><?= e(t('ajouté par %s le %s', $p['nom_affiche'], date_fr($p['ajoute_le']))) ?></small>
|
|
<?php if (peut_ecrire()): ?>
|
|
<details>
|
|
<summary><?= e(t('Mettre à jour')) ?></summary>
|
|
<form method="post" action="<?= e(url('besoin', ['id' => $b['id']])) ?>" class="pile">
|
|
<?= champ_csrf() ?>
|
|
<input type="hidden" name="candidat_id" value="<?= (int) $p['id'] ?>">
|
|
<label><?= e(t('État')) ?>
|
|
<select name="etat">
|
|
<?php foreach (ETATS_PROPOSITION as $code => $libelle): ?><option value="<?= e($code) ?>"<?= $p['etat'] === $code ? ' selected' : '' ?>><?= e(t($libelle)) ?></option><?php endforeach; ?>
|
|
</select>
|
|
</label>
|
|
<label><?= e(t('Note')) ?> <input type="text" name="note" maxlength="500" value="<?= e($p['note'] ?? '') ?>"></label>
|
|
<div class="actions">
|
|
<button type="submit" name="action" value="retirer" class="lien"><?= e(t('Retirer de ce besoin')) ?></button>
|
|
<button type="submit" name="action" value="etat" class="secondaire"><?= e(t('Enregistrer')) ?></button>
|
|
</div>
|
|
</form>
|
|
</details>
|
|
<?php endif; ?>
|
|
</div>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<?php endif; ?>
|
|
</section>
|
|
|
|
<?php if ($ouvert): ?>
|
|
<section class="carte" id="rapprochement">
|
|
<h2><?= e(t('Profils du vivier qui répondent au besoin')) ?></h2>
|
|
<?php if (!$suggestions): ?>
|
|
<p class="vide"><?= e(t('Aucun profil ne porte les technologies ni les mots de l\'intitulé. Élargissez la demande, ou importez de nouveaux CV.')) ?></p>
|
|
<?php else: ?>
|
|
<ul class="simple agenda rapprochement">
|
|
<?php foreach ($suggestions as $r): ?>
|
|
<li>
|
|
<?= avatar($r) ?>
|
|
<div>
|
|
<a href="<?= e(url('profil', ['id' => $r['id']])) ?>"><?= e($r['prenom'] . ' ' . $r['nom']) ?></a>
|
|
<span class="note-rapprochement" title="<?= e(t('Note de rapprochement sur 100')) ?>"><?= (int) $r['score'] ?><small>/100</small></span>
|
|
<p><?= e(implode(' · ', array_filter([
|
|
$r['titre'], t(SENIORITES[$r['seniorite']]), annees($r['annees_experience']), t(STATUTS[$r['statut']]),
|
|
libelle_disponibilite($r) ?: null,
|
|
$r['tjm'] ? t('TJM %s', euros($r['tjm'])) : null,
|
|
]))) ?></p>
|
|
<?php if ($r['trouvees'] || $r['manquantes']): ?>
|
|
<p class="technos">
|
|
<?php foreach ($r['trouvees'] as $t): ?><span class="trouve"><?= e($t['nom']) ?><?= $t['annees'] !== null ? ' ' . e(annees($t['annees'])) : '' ?></span><?php endforeach; ?>
|
|
<?php foreach ($r['manquantes'] as $t): ?><span class="absent"><?= e(t('%s absent', $t)) ?></span><?php endforeach; ?>
|
|
</p>
|
|
<?php endif; ?>
|
|
<?php foreach ($r['alertes'] as $a): ?><small class="retard"><?= e($a) ?></small><?php endforeach; ?>
|
|
<?php if (peut_ecrire()): ?>
|
|
<form method="post" action="<?= e(url('besoin', ['id' => $b['id']])) ?>" class="actions-ligne">
|
|
<?= champ_csrf() ?>
|
|
<input type="hidden" name="candidat_id" value="<?= (int) $r['id'] ?>">
|
|
<button type="submit" name="action" value="proposer" class="secondaire"><?= e(t('Proposer')) ?></button>
|
|
</form>
|
|
<?php endif; ?>
|
|
</div>
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
<p class="aide"><?= e(t('Note sur 100 : technologies 55, intitulé 15, séniorité 10, langues 10, disponibilité 5, tarif 5. Une donnée inconnue vaut la moitié des points. Les profils archivés ou non retenus sont exclus.')) ?></p>
|
|
<?php endif; ?>
|
|
</section>
|
|
<?php endif; ?>
|
|
</div>
|
|
|
|
<aside>
|
|
<section class="carte">
|
|
<h2><?= e(t('Demande')) ?></h2>
|
|
<dl class="grille serre">
|
|
<dt><?= e(t('Séniorité')) ?></dt><dd><?= $b['seniorite_min'] ? e(t('%s au moins', t(SENIORITES[$b['seniorite_min']]))) : '<em>' . e(t('Indifférente')) . '</em>' ?></dd>
|
|
<dt><?= e(t('Langues')) ?></dt><dd><?= e($b['langues']) ?: '<em>' . e(t('non renseigné')) . '</em>' ?></dd>
|
|
<dt><?= e(t('Lieu')) ?></dt><dd><?= e($b['lieu']) ?: '<em>' . e(t('non renseigné')) . '</em>' ?></dd>
|
|
<dt><?= e(t('Télétravail')) ?></dt><dd><?= $b['teletravail'] ? e(t(TELETRAVAIL[$b['teletravail']])) : '<em>' . e(t('non renseigné')) . '</em>' ?></dd>
|
|
<dt><?= e(t('Début')) ?></dt><dd><?= e(date_fr($b['date_debut'])) ?: '<em>' . e(t('non renseigné')) . '</em>' ?></dd>
|
|
<dt><?= e(t('Budget')) ?></dt><dd><?= $b['tjm_max'] ? e(t('%s par jour', euros($b['tjm_max']))) : '<em>' . e(t('non renseigné')) . '</em>' ?></dd>
|
|
</dl>
|
|
<?php if ($b['technologies']): ?>
|
|
<p class="technos"><?php foreach (liste_saisie($b['technologies']) as $t): ?><span><?= e($t) ?></span><?php endforeach; ?></p>
|
|
<?php endif; ?>
|
|
<?php if ($b['description']): ?><p class="description-besoin"><?= nl2br(e($b['description'])) ?></p><?php endif; ?>
|
|
</section>
|
|
|
|
<?php if (peut_ecrire()): ?>
|
|
<section class="carte">
|
|
<h2><?= e(t('Gestion')) ?></h2>
|
|
<details<?= $erreur !== null ? ' open' : '' ?>>
|
|
<summary><?= e(t('Modifier le besoin')) ?></summary>
|
|
<form method="post" action="<?= e(url('besoin', ['id' => $b['id']])) ?>" class="pile besoin-etroit">
|
|
<?= champ_csrf() ?>
|
|
<?php require __DIR__ . '/_besoin_champs.php'; ?>
|
|
<div class="actions"><button type="submit" name="action" value="modifier" class="secondaire"><?= e(t('Enregistrer')) ?></button></div>
|
|
</form>
|
|
</details>
|
|
<form method="post" action="<?= e(url('besoin', ['id' => $b['id']])) ?>" class="danger"
|
|
data-confirmer="<?= e(t('Supprimer ce besoin et la liste des profils proposés ? Les profils eux-mêmes sont conservés.')) ?>">
|
|
<?= champ_csrf() ?>
|
|
<button type="submit" name="action" value="supprimer" class="dangereux"><?= e(t('Supprimer le besoin')) ?></button>
|
|
</form>
|
|
</section>
|
|
<?php endif; ?>
|
|
</aside>
|
|
</div>
|