Refonte design V1

This commit is contained in:
mrKamoo
2026-10-02 13:06:14 +02:00
parent 429dd9de5e
commit 83e1ce00a9
20 changed files with 1403 additions and 531 deletions
@@ -1,79 +1,92 @@
@extends('layouts.app')
@section('title', 'Affectations — Signatures CABM')
@section('title', 'Affectations — Signatures')
@section('content')
<h1>Affectations</h1>
<p class="muted" style="margin-top:-8px">
Un agent membre de plusieurs groupes reçoit le template de l'affectation dont la <strong>priorité est la plus haute</strong>
(à égalité : la plus ancienne). Sans groupe affecté, il reçoit le template par défaut.
Tous les groupes AD synchronisés sont proposés, sauf les groupes de rôles du back-office.
</p>
<header class="page-head">
<div>
<h1>Affectations</h1>
<p class="lead">
Un agent membre de plusieurs groupes reçoit le template de l'affectation dont la <strong>priorité est la plus haute</strong>
(à égalité : la plus ancienne). Sans groupe affecté, il reçoit le template par défaut.
</p>
</div>
</header>
<div class="card">
<form method="post" action="{{ route('admin.assignments.store') }}" class="card">
@csrf
<h2>Ajouter une affectation</h2>
<form method="post" action="{{ route('admin.assignments.store') }}" class="row" style="align-items:flex-end">
@csrf
<div style="flex:2;min-width:220px">
<label for="directory_group_id">Groupe AD</label>
<div class="field-row" style="align-items:flex-end">
<div style="flex:2">
<label for="directory_group_id" style="margin-top:0">Groupe AD</label>
<select id="directory_group_id" name="directory_group_id" required>
<option value="">— choisir —</option>
<option value="">Choisir un groupe</option>
@if ($groups->isEmpty())
<option value="" disabled>Aucun groupe synchronisé : lancez php artisan signature:sync --full</option>
<option value="" disabled>Aucun groupe synchronisé : lancez une synchronisation complète</option>
@endif
@foreach ($groups as $g)
<option value="{{ $g->id }}" @selected(old('directory_group_id') == $g->id)>{{ $g->display_name }} ({{ $g->members_count }})</option>
@endforeach
</select>
</div>
<div style="flex:2;min-width:220px">
<label for="template_id">Template</label>
<div style="flex:2">
<label for="template_id" style="margin-top:0">Template</label>
<select id="template_id" name="template_id" required>
<option value="">— choisir —</option>
<option value="">Choisir un template</option>
@foreach ($templates as $t)
<option value="{{ $t->id }}" @selected(old('template_id') == $t->id)>{{ $t->name }}{{ $t->html_full ? '' : ' (non publié)' }}</option>
@endforeach
</select>
</div>
<div>
<label for="priority">Priorité</label>
<input class="small" type="number" id="priority" name="priority" min="0" max="1000" value="{{ old('priority', 10) }}" required>
<div style="flex:0 0 96px;min-width:96px">
<label for="priority" style="margin-top:0">Priorité</label>
<input type="number" id="priority" name="priority" min="0" max="1000" value="{{ old('priority', 10) }}" required>
</div>
<button class="btn" type="submit">Ajouter</button>
</form>
</div>
<div style="flex:0 0 auto;min-width:0">
<button class="btn" type="submit"><x-icon name="plus" />Ajouter</button>
</div>
</div>
</form>
<div class="card">
<h2>Affectations actives, par ordre de priorité</h2>
<table class="list">
<thead><tr><th>Priorité</th><th>Groupe AD</th><th>Membres</th><th>Template</th><th></th></tr></thead>
<tbody>
@forelse ($assignments as $a)
<tr>
<td>
<form class="row" method="post" action="{{ route('admin.assignments.update', $a) }}">
@csrf @method('PUT')
<input class="small" type="number" name="priority" min="0" max="1000" value="{{ $a->priority }}" aria-label="Priorité">
<button class="btn secondary small" type="submit">OK</button>
</form>
</td>
<td>{{ $a->group?->display_name }}</td>
<td>{{ $a->group?->members_count }}</td>
<td>
<a href="{{ route('admin.templates.edit', $a->template_id) }}">{{ $a->template?->name }}</a>
@unless ($a->template?->html_full) <span class="badge warn">non publié : ignoré</span> @endunless
</td>
<td style="text-align:right">
<form class="inline" method="post" action="{{ route('admin.assignments.destroy', $a) }}"
onsubmit="return confirm('Supprimer cette affectation ?')">
@csrf @method('DELETE')
<button class="btn danger small" type="submit">Supprimer</button>
</form>
</td>
</tr>
@empty
<tr><td colspan="5" class="muted">Aucune affectation : tous les agents reçoivent le template par défaut.</td></tr>
@endforelse
</tbody>
</table>
<p class="muted">Vérifiez le résultat agent par agent dans l'onglet <a href="{{ route('admin.agents.index') }}">Agents</a>.</p>
<div class="card card--flush">
<div class="card-head"><h2>Affectations, par ordre de priorité</h2></div>
<div class="table-wrap">
<table class="list">
<thead><tr><th>Priorité</th><th>Groupe AD</th><th>Membres</th><th>Template</th><th></th></tr></thead>
<tbody>
@forelse ($assignments as $a)
<tr>
<td>
<form class="row" method="post" action="{{ route('admin.assignments.update', $a) }}" style="flex-wrap:nowrap">
@csrf @method('PUT')
<input class="small" type="number" name="priority" min="0" max="1000" value="{{ $a->priority }}" aria-label="Priorité de {{ $a->group?->display_name }}">
<button class="btn secondary small" type="submit" title="Enregistrer la priorité" aria-label="Enregistrer la priorité"><x-icon name="check" :size="15" /></button>
</form>
</td>
<td>{{ $a->group?->display_name }}</td>
<td class="num">{{ $a->group?->members_count }}</td>
<td>
<a class="cell-title" href="{{ route('admin.templates.edit', $a->template_id) }}">{{ $a->template?->name }}</a>
@unless ($a->template?->html_full) <span class="badge warn">non publié : ignoré</span> @endunless
</td>
<td class="cell-actions">
<form class="inline" method="post" action="{{ route('admin.assignments.destroy', $a) }}"
data-confirm="Supprimer cette affectation ? Les agents du groupe recevront le template suivant dans l'ordre de priorité, ou le template par défaut."
data-confirm-label="Supprimer" data-confirm-danger>
@csrf @method('DELETE')
<button class="btn danger small" type="submit"><x-icon name="trash-2" :size="15" />Supprimer</button>
</form>
</td>
</tr>
@empty
<tr><td colspan="5">
<div class="empty">
<x-icon name="users" :size="32" />
<p><strong>Aucune affectation</strong>Tous les agents reçoivent le template par défaut.</p>
</div>
</td></tr>
@endforelse
</tbody>
</table>
</div>
<div class="card-foot muted">Vérifiez le résultat agent par agent dans l'écran <a href="{{ route('admin.agents.index') }}">Agents</a>.</div>
</div>
@endsection