Initial commit with contrats and domaines modules

This commit is contained in:
mrKamoo
2026-04-08 18:07:08 +02:00
commit 092a6a0484
191 changed files with 24639 additions and 0 deletions

View 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',
]);
}
}