Initial commit with contrats and domaines modules
This commit is contained in:
116
app/Http/Controllers/FournisseurController.php
Normal file
116
app/Http/Controllers/FournisseurController.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Fournisseur;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Inertia\Inertia;
|
||||
use Inertia\Response;
|
||||
|
||||
class FournisseurController extends Controller
|
||||
{
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$this->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',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user