From 2f36b6002526ea28b9ca866de2a671dbbf7480bb Mon Sep 17 00:00:00 2001 From: pipo-22cm Date: Sun, 14 Jun 2026 16:44:43 -0300 Subject: [PATCH] Ultima clase --- app/Http/Controllers/PersonaController.php | 66 +++++++- app/Http/Requests/StorePeronaRequest.php | 45 ++++++ app/Http/Requests/UpdatedPersonaRequest.php | 45 ++++++ app/Models/persona.php | 6 +- resources/views/compartido/errores.blade.php | 9 ++ resources/views/compartido/mensajes.blade.php | 3 + resources/views/layouts/admin.blade.php | 126 +++++++++++++++ resources/views/persona/edit.blade.php | 79 ++++++++++ resources/views/persona/index.blade.php | 149 +++++++++++++++--- resources/views/persona/new.blade.php | 73 +++++++++ resources/views/persona/show.blade.php | 31 ++++ routes/web.php | 11 +- 12 files changed, 620 insertions(+), 23 deletions(-) create mode 100644 app/Http/Requests/StorePeronaRequest.php create mode 100644 app/Http/Requests/UpdatedPersonaRequest.php create mode 100644 resources/views/compartido/errores.blade.php create mode 100644 resources/views/compartido/mensajes.blade.php create mode 100644 resources/views/layouts/admin.blade.php create mode 100644 resources/views/persona/edit.blade.php create mode 100644 resources/views/persona/new.blade.php create mode 100644 resources/views/persona/show.blade.php diff --git a/app/Http/Controllers/PersonaController.php b/app/Http/Controllers/PersonaController.php index d38ef55..d06586c 100644 --- a/app/Http/Controllers/PersonaController.php +++ b/app/Http/Controllers/PersonaController.php @@ -2,15 +2,77 @@ namespace App\Http\Controllers; +use App\Http\Requests\StorePeronaRequest; use Illuminate\Http\Request; +use Illuminate\Http\RedirectResponse; use App\Models\persona; +use App\Http\Requests\UpdatedPersonaRequest; +use App\Http\Requests\StorePersonaRequest; + + class PersonaController extends Controller { public function index(Request $request){ - $personas= persona::all(); + /*$personas= persona::all();*/ + $personas= persona::withTrashed()->get(); return view('persona.index', ["personas"=>$personas]); } -} + + + public function show($id){ + $personas = persona::findOrfail($id); + return view('persona.show', ["per"=>$personas]); + } + + public function destroy(Request $request, $id){ + $personas = persona::findOrfail($id); + $personas->delete(); + $request->session()->flash('mensaje-success', 'La persona fue eliminada.'); + return redirect('/persona'); + } + + public function create(){ + return view('persona.new'); + } + + public function store(StorePeronaRequest $request){ + + $personas = new Persona(); + $personas->fill([ + 'nombre' => $request->input('nombre'), + 'apellido' => $request->input('apellido'), + 'dni' => $request->input('dni'), + ]); + $personas->save(); + $request->session()->flash('mensaje-success', 'La persona fue agregada.'); + return redirect('/persona'); + + } + + public function edit($id){ + $personas = Persona::findOrfail($id); + return view('persona.edit', ["per"=>$personas]); + } + + public function update(UpdatedPersonaRequest $request, $id){ + $personas = Persona::findOrfail($id); + $personas->fill([ + 'nombre' => $request->input('nombre'), + 'apellido' => $request->input('apellido'), + 'dni' => $request->input('dni'), + ]); + $personas->update(); + $request->session()->flash('mensaje-success', 'La persona fue modificada.'); + return redirect('/persona'); + } + + public function restaurar(Request $request, $id){ + $personas = persona::withTrashed()->findOrfail($id); + $personas->restore(); + $request->session()->flash('mensaje-success', 'La persona fue restaurada.'); + return redirect('/persona'); + } +} \ No newline at end of file diff --git a/app/Http/Requests/StorePeronaRequest.php b/app/Http/Requests/StorePeronaRequest.php new file mode 100644 index 0000000..52d7baa --- /dev/null +++ b/app/Http/Requests/StorePeronaRequest.php @@ -0,0 +1,45 @@ +|string> + */ + public function rules(): array + { + return [ + 'apellido' => 'required|max:20', + 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20', + 'dni' => 'required|unique:personas,dni|numeric|digits_between:7,8', + ]; + } + + public function messages() { + + return [ + 'apellido.required' => 'el campo apellido debe ser requerido', + 'apellido.max' => 'el campo apellido debe contener maximo 20 caracteres', + 'nombre.required' => 'el campo nombre es requerido', + 'nombre.regex' => 'el campo nombre solo debe contener letras', + 'nombre.max' => 'el campo nombre debe contener un maximo de 20 caracteres', + 'dni.required' => 'el campo dni es requerido', + 'dni.numeric' => 'el campo dni solo debe contener numeros', + 'dni.digits_between:7,8' => 'el campo dni debe tener entre 7 y 8 caracteres', + 'dni.unique' => 'el campo dni no se puede repetir', + ]; + } +} diff --git a/app/Http/Requests/UpdatedPersonaRequest.php b/app/Http/Requests/UpdatedPersonaRequest.php new file mode 100644 index 0000000..65840ee --- /dev/null +++ b/app/Http/Requests/UpdatedPersonaRequest.php @@ -0,0 +1,45 @@ +|string> + */ + public function rules(): array + { + return [ + 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20', + 'apellido' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:20', + 'dni' => 'required|numeric|unique:personas,dni,' . $this->route('personas') . ',id_persona', + ]; + } + + public function messages() { + + return [ + 'nombre.required' => 'el campo nombre es requerido', + 'nombre.regex' => 'el campo nombre solo debe contener letras', + 'nombre.max' => 'el campo nombre debe contener un maximo de 20 caracteres', + 'apellido.regex' => 'el campo apellido solo debe contener letras', + 'apellido.required' => 'el campo apellido es requerido', + 'apellido.max' => 'el campo apellido debe contener un maximo de 20 caracteres', + 'dni.required' => 'el campo dni es requerido', + 'dni.numeric' => 'el campo dni solo debe contener numeros', + 'dni.unique' => 'ya existe una persona con este dni', + ]; + } +} diff --git a/app/Models/persona.php b/app/Models/persona.php index be09c2d..2c67d40 100644 --- a/app/Models/persona.php +++ b/app/Models/persona.php @@ -4,19 +4,21 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\SoftDeletes; class persona extends Model { use HasFactory; + use SoftDeletes; protected $table = 'personas'; public $primaryKey = 'id_persona'; - public $timestamps = false; + public $timestamps = true; protected $fillable = [ 'apellido', 'nombre', - 'dni' + 'dni', ]; } diff --git a/resources/views/compartido/errores.blade.php b/resources/views/compartido/errores.blade.php new file mode 100644 index 0000000..16ff22c --- /dev/null +++ b/resources/views/compartido/errores.blade.php @@ -0,0 +1,9 @@ +@if ($errors->any()) +
+ +
+@endif \ No newline at end of file diff --git a/resources/views/compartido/mensajes.blade.php b/resources/views/compartido/mensajes.blade.php new file mode 100644 index 0000000..8b0ba24 --- /dev/null +++ b/resources/views/compartido/mensajes.blade.php @@ -0,0 +1,3 @@ +@if (session('mensaje-success')) +

{{ session('mensaje-success') }}

+@endif \ No newline at end of file diff --git a/resources/views/layouts/admin.blade.php b/resources/views/layouts/admin.blade.php new file mode 100644 index 0000000..fa600cc --- /dev/null +++ b/resources/views/layouts/admin.blade.php @@ -0,0 +1,126 @@ + + + + + + + + + +@yield('title','Sistema Taller') + + + + + + + + + + +@stack('styles') + + + + + + + + + + +
+ + @yield('contenido') +
+ + + + + + + + + + + + + + + + + + + + +@stack('scripts') + + diff --git a/resources/views/persona/edit.blade.php b/resources/views/persona/edit.blade.php new file mode 100644 index 0000000..7c2db35 --- /dev/null +++ b/resources/views/persona/edit.blade.php @@ -0,0 +1,79 @@ +@extends('layouts.admin') +@section('contenido') + + +
+ +
+

Editar Personas

+
+
+
+
+ + + @include('compartido.mensajes') + @include('compartido.errores') +
+
+
+ + +
+ @csrf + @method('PUT') + + +
+ + +
+ + + + +
+ +
+ + +
+ +
+ + +
+
+ +
+
+ + +
+
+ + Salir +
+
+
+ +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/persona/index.blade.php b/resources/views/persona/index.blade.php index 297d997..bef951e 100644 --- a/resources/views/persona/index.blade.php +++ b/resources/views/persona/index.blade.php @@ -1,20 +1,133 @@ - - - - Personas - - +@extends('layouts.admin') +@section('contenido') - + - - \ No newline at end of file +
+ +
+

Listado de Personas

+
+
+ +
+ +
+ +
+ +
+
+ + + @include('compartido.mensajes') + @include('compartido.errores') + + +
+ + + + + + + + + + + + + + @foreach($personas as $per) + + + + + + + + @endforeach + +
IdNombreApellidoDNIAcciones
{{ $per->id_persona }}{{ $per->nombre }}{{ $per->apellido }}{{ $per->dni }} + + @if($per->deleted_at == null) +
+ @csrf + @method('DELETE') + + + + + + + + + + + + + +
+ @else +
+ @csrf + @method('PUT') + + + +
+ + @endif +
+
+ +
+
+ +@endsection +@push('styles') + +@endpush +@push('scripts') + +@endpush diff --git a/resources/views/persona/new.blade.php b/resources/views/persona/new.blade.php new file mode 100644 index 0000000..4c795ca --- /dev/null +++ b/resources/views/persona/new.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.admin') +@section ('contenido') + + +
+ +
+

Nueva Persona

+
+
+
+
+ + + @include('compartido.mensajes') + @include('compartido.errores') +
+
+
+ + +
+ @csrf + + +
+ +
+ + + + +
+ +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + Salir +
+
+
+ +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/persona/show.blade.php b/resources/views/persona/show.blade.php new file mode 100644 index 0000000..a9775be --- /dev/null +++ b/resources/views/persona/show.blade.php @@ -0,0 +1,31 @@ +@extends('layouts.admin') +@section ('contenido') +
+
+

Ver Personas

+
+
+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ Salir +
+
+ +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 45e7def..9236ae9 100644 --- a/routes/web.php +++ b/routes/web.php @@ -17,4 +17,13 @@ Route::get('/', function () { return view('welcome'); }); -Route::get('persona', [PersonaController::class, 'index'])->name('persona.index'); +/*Route::get('persona', [PersonaController::class, 'index'])->name('persona.index'); +Route::post('persona', [PersonaController::class, 'store'])->name('persona.store'); +Route::get('persona/create', [PersonaController::class, 'create'])->name('persona.create'); +Route::get('persona/{personas}', [PersonaController::class, 'show'])->name('persona.show'); +Route::delete('persona/{personas}', [PersonaController::class, 'destroy'])->name('persona.destroy'); +Route::get('persona/edit/{personas}', [PersonaController::class, 'edit'])->name('persona.edit'); +Route::put('persona/update/{personas}', [PersonaController::class, 'update'])->name('persona.update');*/ + +Route::resource('persona', PersonaController::class); +Route::put('persona/restaurar/{personas}', [PersonaController::class, 'restaurar'])->name('persona.restaurar');