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()
|
public function index()
|
||||||
{
|
{
|
||||||
$municipalities = Municipality::all();
|
$municipalities = Municipality::orderBy('name')->get();
|
||||||
return view('admin.municipalities.index', compact('municipalities'));
|
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)
|
public function toggle(Municipality $municipality)
|
||||||
{
|
{
|
||||||
$municipality->update(['is_active' => !$municipality->is_active]);
|
$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')
|
@section('content')
|
||||||
<div class="container">
|
<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 shadow-sm">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@@ -29,12 +32,22 @@
|
|||||||
@endif
|
@endif
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<form action="{{ route('admin.municipalities.toggle', $municipality) }}" method="POST">
|
<div class="d-flex gap-2">
|
||||||
@csrf
|
<a href="{{ route('admin.municipalities.edit', $municipality) }}" class="btn btn-sm btn-outline-primary">Modifier</a>
|
||||||
<button type="submit" class="btn btn-sm {{ $municipality->is_active ? 'btn-outline-danger' : 'btn-outline-success' }}">
|
|
||||||
{{ $municipality->is_active ? 'Désactiver' : 'Activer' }}
|
<form action="{{ route('admin.municipalities.toggle', $municipality) }}" method="POST">
|
||||||
</button>
|
@csrf
|
||||||
</form>
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ Route::middleware(['auth', 'active', 'admin'])->prefix('admin')->name('admin.')-
|
|||||||
})->name('users.index');
|
})->name('users.index');
|
||||||
|
|
||||||
// Admin Municipalities
|
// 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::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
|
// Admin License Levels
|
||||||
Route::get('/license-levels', [\App\Http\Controllers\Admin\LicenseLevelController::class, 'index'])->name('license_levels.index');
|
Route::get('/license-levels', [\App\Http\Controllers\Admin\LicenseLevelController::class, 'index'])->name('license_levels.index');
|
||||||
|
|||||||
Reference in New Issue
Block a user