feat: implement admin CRUD and toggle functionality for municipalities.
This commit is contained in:
@@ -11,10 +11,56 @@ class MunicipalityController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$municipalities = Municipality::all();
|
||||
$municipalities = Municipality::orderBy('name')->get();
|
||||
return view('admin.municipalities.index', compact('municipalities'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('admin.municipalities.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->merge(['is_active' => $request->has('is_active')]);
|
||||
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|string|max:255|unique:municipalities',
|
||||
'zip_code' => 'required|string|max:10',
|
||||
'is_active' => 'boolean'
|
||||
]);
|
||||
|
||||
Municipality::create($validated);
|
||||
|
||||
return redirect()->route('admin.municipalities.index')->with('success', 'Commune créée avec succès.');
|
||||
}
|
||||
|
||||
public function edit(Municipality $municipality)
|
||||
{
|
||||
return view('admin.municipalities.edit', compact('municipality'));
|
||||
}
|
||||
|
||||
public function update(Request $request, Municipality $municipality)
|
||||
{
|
||||
$request->merge(['is_active' => $request->has('is_active')]);
|
||||
|
||||
$validated = $request->validate([
|
||||
'name' => 'required|string|max:255|unique:municipalities,name,' . $municipality->id,
|
||||
'zip_code' => 'required|string|max:10',
|
||||
'is_active' => 'boolean'
|
||||
]);
|
||||
|
||||
$municipality->update($validated);
|
||||
|
||||
return redirect()->route('admin.municipalities.index')->with('success', 'Commune mise à jour avec succès.');
|
||||
}
|
||||
|
||||
public function destroy(Municipality $municipality)
|
||||
{
|
||||
$municipality->delete();
|
||||
return redirect()->route('admin.municipalities.index')->with('success', 'Commune supprimée avec succès.');
|
||||
}
|
||||
|
||||
public function toggle(Municipality $municipality)
|
||||
{
|
||||
$municipality->update(['is_active' => !$municipality->is_active]);
|
||||
|
||||
41
resources/views/admin/municipalities/create.blade.php
Normal file
41
resources/views/admin/municipalities/create.blade.php
Normal file
@@ -0,0 +1,41 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2>Ajouter une Commune</h2>
|
||||
<a href="{{ route('admin.municipalities.index') }}" class="btn btn-secondary">Retour</a>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<form action="{{ route('admin.municipalities.store') }}" method="POST">
|
||||
@csrf
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Nom de la Commune</label>
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}" required>
|
||||
@error('name')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="zip_code" class="form-label">Code Postal</label>
|
||||
<input type="text" class="form-control @error('zip_code') is-invalid @enderror" id="zip_code" name="zip_code" value="{{ old('zip_code') }}" required>
|
||||
@error('zip_code')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="is_active" name="is_active" {{ old('is_active', true) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="is_active">Actif</label>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Enregistrer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
42
resources/views/admin/municipalities/edit.blade.php
Normal file
42
resources/views/admin/municipalities/edit.blade.php
Normal file
@@ -0,0 +1,42 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2>Modifier la Commune: {{ $municipality->name }}</h2>
|
||||
<a href="{{ route('admin.municipalities.index') }}" class="btn btn-secondary">Retour</a>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<form action="{{ route('admin.municipalities.update', $municipality) }}" method="POST">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="name" class="form-label">Nom de la Commune</label>
|
||||
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name', $municipality->name) }}" required>
|
||||
@error('name')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<label for="zip_code" class="form-label">Code Postal</label>
|
||||
<input type="text" class="form-control @error('zip_code') is-invalid @enderror" id="zip_code" name="zip_code" value="{{ old('zip_code', $municipality->zip_code) }}" required>
|
||||
@error('zip_code')
|
||||
<div class="invalid-feedback">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" class="form-check-input" id="is_active" name="is_active" {{ old('is_active', $municipality->is_active) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="is_active">Actif</label>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-primary">Mettre à jour</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -2,7 +2,10 @@
|
||||
|
||||
@section('content')
|
||||
<div class="container">
|
||||
<h2 class="mb-4">Gestion des Communes</h2>
|
||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||
<h2>Gestion des Communes</h2>
|
||||
<a href="{{ route('admin.municipalities.create') }}" class="btn btn-primary">Ajouter une Commune</a>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
@@ -29,12 +32,22 @@
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
<div class="d-flex gap-2">
|
||||
<a href="{{ route('admin.municipalities.edit', $municipality) }}" class="btn btn-sm btn-outline-primary">Modifier</a>
|
||||
|
||||
<form action="{{ route('admin.municipalities.toggle', $municipality) }}" method="POST">
|
||||
@csrf
|
||||
<button type="submit" class="btn btn-sm {{ $municipality->is_active ? 'btn-outline-danger' : 'btn-outline-success' }}">
|
||||
<button type="submit" class="btn btn-sm {{ $municipality->is_active ? 'btn-outline-secondary' : 'btn-outline-success' }}">
|
||||
{{ $municipality->is_active ? 'Désactiver' : 'Activer' }}
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<form action="{{ route('admin.municipalities.destroy', $municipality) }}" method="POST" onsubmit="return confirm('Êtes-vous sûr de vouloir supprimer cette commune ?');">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="submit" class="btn btn-sm btn-outline-danger">Supprimer</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
|
||||
@@ -57,8 +57,8 @@ Route::middleware(['auth', 'active', 'admin'])->prefix('admin')->name('admin.')-
|
||||
})->name('users.index');
|
||||
|
||||
// Admin Municipalities
|
||||
Route::get('/municipalities', [\App\Http\Controllers\Admin\MunicipalityController::class, 'index'])->name('municipalities.index');
|
||||
Route::post('/municipalities/{municipality}/toggle', [\App\Http\Controllers\Admin\MunicipalityController::class, 'toggle'])->name('municipalities.toggle');
|
||||
Route::resource('municipalities', \App\Http\Controllers\Admin\MunicipalityController::class);
|
||||
|
||||
// Admin License Levels
|
||||
Route::get('/license-levels', [\App\Http\Controllers\Admin\LicenseLevelController::class, 'index'])->name('license_levels.index');
|
||||
|
||||
Reference in New Issue
Block a user