when($request->search, fn ($q) => $q->where(function ($sub) use ($request) { $sub->where('designation', 'like', "%{$request->search}%") ->orWhere('reference', 'like', "%{$request->search}%"); })) ->when($request->categorie_id, fn ($q) => $q->where('categorie_id', $request->categorie_id)) ->orderBy('designation') ->paginate(20) ->withQueryString(); return Inertia::render('Articles/Index', [ 'articles' => $articles, 'categories' => Categorie::active()->orderBy('ordre')->get(), 'filters' => $request->only(['search', 'categorie_id']), ]); } public function create(): Response { return Inertia::render('Articles/Create', [ 'categories' => Categorie::active()->orderBy('ordre')->get(), 'fournisseurs' => Fournisseur::active()->orderBy('nom')->get(), ]); } public function store(Request $request): RedirectResponse { $validated = $request->validate([ 'reference' => 'nullable|string|max:100', 'designation' => 'required|string|max:255', 'description' => 'nullable|string', 'categorie_id' => 'nullable|exists:categories,id', 'fournisseur_id' => 'nullable|exists:fournisseurs,id', 'prix_unitaire_ht' => 'nullable|numeric|min:0', 'unite' => 'nullable|string|max:30', ]); Article::create($validated); return redirect()->route('articles.index') ->with('success', 'Article créé avec succès.'); } public function edit(Article $article): Response { return Inertia::render('Articles/Edit', [ 'article' => $article, 'categories' => Categorie::active()->orderBy('ordre')->get(), 'fournisseurs' => Fournisseur::active()->orderBy('nom')->get(), ]); } public function update(Request $request, Article $article): RedirectResponse { $validated = $request->validate([ 'reference' => 'nullable|string|max:100', 'designation' => 'required|string|max:255', 'description' => 'nullable|string', 'categorie_id' => 'nullable|exists:categories,id', 'fournisseur_id' => 'nullable|exists:fournisseurs,id', 'prix_unitaire_ht' => 'nullable|numeric|min:0', 'unite' => 'nullable|string|max:30', 'active' => 'boolean', ]); $article->update($validated); return redirect()->route('articles.index') ->with('success', 'Article mis à jour.'); } public function destroy(Article $article): RedirectResponse { $article->update(['active' => false]); return back()->with('success', 'Article désactivé.'); } }