45
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Http\Controllers\Admin\Concerns\ScopedToTenant;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Assignment;
|
||||
use App\Models\AuditLog;
|
||||
use App\Models\DirectoryGroup;
|
||||
use App\Models\Template;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\View\View;
|
||||
|
||||
/** Affectation template <-> groupe AD, avec priorité (la plus haute l'emporte). */
|
||||
class AssignmentController extends Controller
|
||||
{
|
||||
use ScopedToTenant;
|
||||
|
||||
public function index(): View
|
||||
{
|
||||
$tenant = $this->tenantId();
|
||||
|
||||
return view('admin.assignments.index', [
|
||||
'assignments' => Assignment::where('tenant_id', $tenant)
|
||||
->with(['template:id,name,html_full', 'group' => fn ($q) => $q->withCount('members')])
|
||||
->orderByDesc('priority')->orderBy('id')->get(),
|
||||
'templates' => Template::where('tenant_id', $tenant)->orderBy('name')->get(['id', 'name', 'html_full', 'is_default']),
|
||||
// Tous les groupes synchronisés, sauf les groupes de rôles du back-office.
|
||||
'groups' => DirectoryGroup::where('tenant_id', $tenant)
|
||||
->whereNotIn('display_name', array_values(config('signature.roles')))
|
||||
->withCount('members')->orderBy('display_name')->get(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function store(Request $request): RedirectResponse
|
||||
{
|
||||
$tenant = $this->tenantId();
|
||||
$data = $request->validate([
|
||||
'template_id' => ['required', Rule::exists('templates', 'id')->where('tenant_id', $tenant)],
|
||||
'directory_group_id' => [
|
||||
'required',
|
||||
Rule::exists('directory_groups', 'id')->where('tenant_id', $tenant),
|
||||
Rule::unique('assignments')->where(fn ($q) => $q->where('template_id', $request->input('template_id'))),
|
||||
],
|
||||
'priority' => ['required', 'integer', 'between:0,1000'],
|
||||
], ['directory_group_id.unique' => 'Ce groupe est déjà affecté à ce template.']);
|
||||
|
||||
$assignment = Assignment::create($data + ['tenant_id' => $tenant]);
|
||||
AuditLog::record('admin', $this->actor(), 'assignment.create', $assignment, $data);
|
||||
|
||||
return back()->with('status', 'Affectation ajoutée.');
|
||||
}
|
||||
|
||||
public function update(Request $request, Assignment $assignment): RedirectResponse
|
||||
{
|
||||
$this->ensureTenant($assignment);
|
||||
$data = $request->validate(['priority' => ['required', 'integer', 'between:0,1000']]);
|
||||
$old = $assignment->priority;
|
||||
$assignment->update($data);
|
||||
AuditLog::record('admin', $this->actor(), 'assignment.update', $assignment, ['priority' => [$old, $assignment->priority]]);
|
||||
|
||||
return back()->with('status', 'Priorité mise à jour.');
|
||||
}
|
||||
|
||||
public function destroy(Assignment $assignment): RedirectResponse
|
||||
{
|
||||
$this->ensureTenant($assignment);
|
||||
AuditLog::record('admin', $this->actor(), 'assignment.delete', $assignment, [
|
||||
'template_id' => $assignment->template_id, 'directory_group_id' => $assignment->directory_group_id,
|
||||
]);
|
||||
$assignment->delete();
|
||||
|
||||
return back()->with('status', 'Affectation supprimée.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user