authorize('viewAny', Fournisseur::class); $query = Fournisseur::withCount('commandes') ->when($request->search, fn ($q) => $q->where(function ($sub) use ($request) { $sub->where('nom', 'like', "%{$request->search}%") ->orWhere('ville', 'like', "%{$request->search}%") ->orWhere('email', 'like', "%{$request->search}%"); })) ->when($request->has('active') && $request->active !== '', fn ($q) => $q->where('active', $request->active)); $fournisseurs = $query->orderBy('nom')->paginate(20)->withQueryString(); return Inertia::render('Fournisseurs/Index', [ 'fournisseurs' => $fournisseurs, 'filters' => $request->only(['search', 'active']), ]); } public function create(): Response { $this->authorize('create', Fournisseur::class); return Inertia::render('Fournisseurs/Create'); } public function store(Request $request): RedirectResponse { $this->authorize('create', Fournisseur::class); $validated = $this->validateFournisseur($request); Fournisseur::create($validated); return redirect()->route('fournisseurs.index') ->with('success', 'Fournisseur créé avec succès.'); } public function show(Fournisseur $fournisseur): Response { $this->authorize('view', $fournisseur); $fournisseur->load(['commandes' => fn ($q) => $q->with('service', 'demandeur')->latest()->limit(10)]); return Inertia::render('Fournisseurs/Show', compact('fournisseur')); } public function edit(Fournisseur $fournisseur): Response { $this->authorize('update', $fournisseur); return Inertia::render('Fournisseurs/Edit', compact('fournisseur')); } public function update(Request $request, Fournisseur $fournisseur): RedirectResponse { $this->authorize('update', $fournisseur); $validated = $this->validateFournisseur($request); $fournisseur->update($validated); return redirect()->route('fournisseurs.show', $fournisseur) ->with('success', 'Fournisseur mis à jour.'); } public function destroy(Fournisseur $fournisseur): RedirectResponse { $this->authorize('delete', $fournisseur); $fournisseur->delete(); return redirect()->route('fournisseurs.index') ->with('success', 'Fournisseur supprimé.'); } public function toggleActive(Fournisseur $fournisseur): RedirectResponse { $this->authorize('update', $fournisseur); $fournisseur->update(['active' => !$fournisseur->active]); return back()->with('success', 'Statut du fournisseur mis à jour.'); } private function validateFournisseur(Request $request): array { return $request->validate([ 'nom' => 'required|string|max:255', 'raison_sociale' => 'nullable|string|max:255', 'siret' => 'nullable|string|max:14', 'adresse' => 'nullable|string', 'code_postal' => 'nullable|string|max:10', 'ville' => 'nullable|string|max:100', 'telephone' => 'nullable|string|max:20', 'email' => 'nullable|email|max:255', 'contact_commercial' => 'nullable|string|max:255', 'email_commercial' => 'nullable|email|max:255', 'telephone_commercial' => 'nullable|string|max:20', 'site_web' => 'nullable|url|max:255', 'notes' => 'nullable|string', 'active' => 'boolean', ]); } }