100 lines
3.2 KiB
PHP
100 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Actions\Integration\CreateIntegrationAction;
|
|
use App\Models\IntegrationRequest;
|
|
use App\Models\IntegrationTemplate;
|
|
use Illuminate\Http\Request;
|
|
use Inertia\Inertia;
|
|
|
|
class IntegrationController extends Controller
|
|
{
|
|
public function index()
|
|
{
|
|
return Inertia::render('Integration/Index', [
|
|
'integrations' => IntegrationRequest::with(['agent', 'template'])->latest()->get(),
|
|
]);
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
return Inertia::render('Integration/Create', [
|
|
'templates' => IntegrationTemplate::where('is_active', true)->get(),
|
|
]);
|
|
}
|
|
|
|
public function store(Request $request, CreateIntegrationAction $action)
|
|
{
|
|
$validated = $request->validate([
|
|
'first_name' => 'required|string|max:255',
|
|
'last_name' => 'required|string|max:255',
|
|
'email' => 'required|email|unique:agents,email',
|
|
'position' => 'required|string|max:255',
|
|
'department' => 'required|string|max:255',
|
|
'arrival_date' => 'required|date',
|
|
'template_id' => 'nullable|exists:integration_templates,id',
|
|
]);
|
|
|
|
$integration = $action->execute($validated);
|
|
|
|
return redirect()->route('integrations.show', $integration);
|
|
}
|
|
|
|
public function show(IntegrationRequest $integration)
|
|
{
|
|
$integration->load([
|
|
'agent',
|
|
'template',
|
|
'serviceTasks.service',
|
|
'serviceTasks.taskItems',
|
|
'serviceTasks.comments.user',
|
|
'serviceTasks.attachments',
|
|
'activities.causer',
|
|
'comments.user'
|
|
]);
|
|
|
|
$taskActivities = \Spatie\Activitylog\Models\Activity::where('subject_type', \App\Models\ServiceTask::class)
|
|
->whereIn('subject_id', $integration->serviceTasks->pluck('id'))
|
|
->with('causer')
|
|
->latest()
|
|
->get();
|
|
|
|
return Inertia::render('Integration/Show', [
|
|
'integration' => $integration,
|
|
'activities' => $integration->activities->merge($taskActivities)->sortByDesc('created_at')->values(),
|
|
]);
|
|
}
|
|
|
|
public function validateRH(IntegrationRequest $integration, \App\Services\IntegrationService $service)
|
|
{
|
|
$this->authorize('update', $integration);
|
|
|
|
$service->validateRH($integration);
|
|
|
|
return back()->with('success', 'Intégration validée par les RH. Les services ont été notifiés.');
|
|
}
|
|
|
|
public function downloadPdf(IntegrationRequest $integration)
|
|
{
|
|
// Load relationships needed for the PDF
|
|
$integration->load([
|
|
'agent',
|
|
'template',
|
|
'serviceTasks.service',
|
|
'serviceTasks.taskItems.completedBy'
|
|
]);
|
|
|
|
$pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView('pdf.integration', [
|
|
'integration' => $integration,
|
|
'agent' => $integration->agent,
|
|
'date' => now()->format('d/m/Y'),
|
|
]);
|
|
|
|
// Define paper size and orientation if needed, e.g., A4 portrait
|
|
$pdf->setPaper('a4', 'portrait');
|
|
|
|
return $pdf->download("Fiche_Agent_{$integration->agent->last_name}_{$integration->agent->first_name}.pdf");
|
|
}
|
|
}
|