IntegrationTemplate::withCount('serviceItems')->get(), ]); } public function create() { return Inertia::render('Template/Create', [ 'services' => Service::all(), ]); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'is_active' => 'boolean', 'items' => 'required|array|min:1', 'items.*.service_id' => 'required|exists:services,id', 'items.*.label' => 'required|string|max:255', 'items.*.is_mandatory' => 'boolean', 'items.*.fields' => 'nullable|array', 'items.*.fields.*.label' => 'required|string', 'items.*.fields.*.type' => 'required|string|in:text,checkbox,date', ]); \Illuminate\Support\Facades\DB::transaction(function () use ($validated) { $template = IntegrationTemplate::create([ 'name' => $validated['name'], 'description' => $validated['description'], 'is_active' => $validated['is_active'] ?? true, ]); foreach ($validated['items'] as $item) { $template->serviceItems()->create([ 'service_id' => $item['service_id'], 'label' => $item['label'], 'is_mandatory' => $item['is_mandatory'] ?? false, 'fields' => $item['fields'] ?? [], ]); } }); return redirect()->route('templates.index')->with('success', 'Template créé avec succès.'); } public function edit(IntegrationTemplate $template) { $template->load('serviceItems'); return Inertia::render('Template/Edit', [ 'template' => $template, 'services' => Service::all(), ]); } public function update(Request $request, IntegrationTemplate $template) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'description' => 'nullable|string', 'is_active' => 'boolean', 'items' => 'required|array|min:1', 'items.*.service_id' => 'required|exists:services,id', 'items.*.label' => 'required|string|max:255', 'items.*.is_mandatory' => 'boolean', 'items.*.fields' => 'nullable|array', 'items.*.fields.*.label' => 'required|string', 'items.*.fields.*.type' => 'required|string|in:text,checkbox,date', ]); \Illuminate\Support\Facades\DB::transaction(function () use ($template, $validated) { $template->update([ 'name' => $validated['name'], 'description' => $validated['description'], 'is_active' => $validated['is_active'], ]); // Sync items: simpler to delete all and recreate $template->serviceItems()->delete(); foreach ($validated['items'] as $item) { $template->serviceItems()->create([ 'service_id' => $item['service_id'], 'label' => $item['label'], 'is_mandatory' => $item['is_mandatory'] ?? false, 'fields' => $item['fields'] ?? [], ]); } }); return redirect()->route('templates.index')->with('success', 'Template mis à jour avec succès.'); } public function destroy(IntegrationTemplate $template) { $template->delete(); return back()->with('success', 'Template supprimé.'); } }