diff --git a/app/Http/Controllers/PersonaController.php b/app/Http/Controllers/PersonaController.php index 83176f3..2a3f951 100644 --- a/app/Http/Controllers/PersonaController.php +++ b/app/Http/Controllers/PersonaController.php @@ -3,88 +3,99 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Http\RedirectResponse; use App\Models\Persona; +use App\Http\Requests\UpdatedPersonaRequest; class PersonaController extends Controller { - public function index(Request $request) - { + public function index(Request $request){ + $personas = Persona::withTrashed()->get(); - return view('personas.index', [ - "personas" => $personas - ]); + // $personas = Persona::findOrFail(13); + //$per = Persona::where('id', 1)->first(); + //$personas = Persona::where('apellido', 'Cursos, capacitaciones y formación')->get(); + //$personas = Persona::where('apellido', 'like', '%Prod%')->get(); + + //$personas = Persona::orderBy('nombre', 'desc')->get(); + + //$personas = Persona::first(); + //$personas = Persona::last(); + /*Persona::count();*/ + + + return view('personas.index', ["personas"=>$personas]); } - public function show($id) - { - $persona = Persona::findOrFail($id); - - return view('personas.show', [ - "persona" => $persona - ]); + public function show($id){ + $persona = Persona::findOrfail($id); + return view('personas.show', ["per"=>$persona]); } - public function create() - { + public function destroy(Request $request, $id){ + $personas = Persona::findOrfail($id); + $personas->delete(); + $request->session()->flash('mensaje-success', 'La persona fue eliminada.'); + return redirect('/personas'); + } + + + public function create(){ return view('personas.new'); } - public function store(Request $request) - { - $persona = new Persona(); + public function store(Request $request){ + + $request->validate([ + 'apellido' => 'required|max:100', + 'nombre' => 'required|unique:personas,nombre|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:100', + //'dni' => 'required|numeric|digits_between:7,8', + ], + [ + 'apellido.required' => 'el campo apellido debe ser requerido', + 'apellido.max' => 'el campo apellido debe contener maximo 100 caracteres', + 'nombre.required' => 'el campo nombre es requerido', + 'nombre.unique' => 'el campo nombre no se puede repetir', + 'nombre.regex' => 'el campo nombre solo debe contener letras', + 'nombre.max' => 'el campo nombre debe contener un maximo de 100 caracteres', - $persona->fill([ + ] + ); + + $personas = new Persona(); + $personas->fill([ 'nombre' => $request->input('nombre'), 'apellido' => $request->input('apellido'), - 'dni' => $request->input('dni'), - ]); - - $persona->save(); - + ]); + $personas->save(); + $request->session()->flash('mensaje-success', 'La persona fue agregada.'); return redirect('/personas'); } - public function edit($id) - { - $persona = Persona::findOrFail($id); - - return view('personas.edit', [ - "persona" => $persona - ]); + public function edit($id){ + $persona = Persona::findOrfail($id); + //$persona = Persona::where('id',$id)->first(); + return view('personas.edit', ["per"=>$persona]); } - public function update(Request $request, $id) - { - $persona = Persona::findOrFail($id); - - $persona->fill([ + public function update(UpdatedPersonaRequest $request, $id){ + $personas = Persona::findOrfail($id); + $personas->fill([ 'nombre' => $request->input('nombre'), 'apellido' => $request->input('apellido'), - 'dni' => $request->input('dni'), ]); - - $persona->update(); - - return redirect('/personas'); + $personas->update(); + $request->session()->flash('mensaje-success', 'La persona fue modificada.'); + return redirect('/personas'); } - public function destroy($id) - { - $persona = Persona::findOrFail($id); - - $persona->delete(); - + public function restaurar(Request $request, $id){ + $personas = Persona::withTrashed()->findOrfail($id); + $personas->restore(); + $request->session()->flash('mensaje-success', 'La persona fue restaurada.'); return redirect('/personas'); } - public function restaurar(Request $request, $id) - { - $persona = Persona::withTrashed()->findOrFail($id); - - $persona->restore(); - - return redirect('/personas'); - } -} \ No newline at end of file +} diff --git a/app/Http/Requests/UpdatedPersonaRequest.php b/app/Http/Requests/UpdatedPersonaRequest.php new file mode 100644 index 0000000..0704017 --- /dev/null +++ b/app/Http/Requests/UpdatedPersonaRequest.php @@ -0,0 +1,42 @@ +|string> + */ + public function rules(): array + { + return [ + 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/|max:100|unique:personas,nombre,' . $this->route('persona') . ',id', + 'apellido' => 'required', + 'dni' => 'required' + ]; + } + + 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 100 caracteres', + 'nombre.unique' => 'ya existe una persona con este nombre', + 'apellido.required' => 'el campo apellido es requerido', + 'dni.required' => 'el campo dni es requerido' + ]; + } +} diff --git a/app/Models/Persona.php b/app/Models/Persona.php index 63baccf..0e57248 100644 --- a/app/Models/Persona.php +++ b/app/Models/Persona.php @@ -13,7 +13,7 @@ class Persona extends Model protected $table = 'personas'; - protected $primaryKey = 'id'; + public $primaryKey = 'id'; public $timestamps = true; @@ -22,5 +22,4 @@ class Persona extends Model 'apellido', 'dni', ]; -} - +} \ No newline at end of file diff --git a/personas.sql b/personas.sql new file mode 100644 index 0000000..6ae3b53 --- /dev/null +++ b/personas.sql @@ -0,0 +1,55 @@ +-- phpMyAdmin SQL Dump +-- version 5.2.1 +-- https://www.phpmyadmin.net/ +-- +-- Servidor: 127.0.0.1:3306 +-- Tiempo de generación: 10-06-2026 a las 03:54:18 +-- Versión del servidor: 8.3.0 +-- Versión de PHP: 8.2.18 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +START TRANSACTION; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; + +-- +-- Base de datos: `mis_turnos` +-- + +-- -------------------------------------------------------- + +-- +-- Estructura de tabla para la tabla `personas` +-- + +DROP TABLE IF EXISTS `personas`; +CREATE TABLE IF NOT EXISTS `personas` ( + `id` int NOT NULL AUTO_INCREMENT, + `nombre` varchar(100) NOT NULL, + `apellido` varchar(100) NOT NULL, + `dni` varchar(20) NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + `deleted_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- +-- Volcado de datos para la tabla `personas` +-- + +INSERT INTO `personas` (`id`, `nombre`, `apellido`, `dni`, `created_at`, `updated_at`, `deleted_at`) VALUES +(3, 'Adrian', 'Tejeda', '36782848', NULL, NULL, NULL), +(4, 'Elena', 'Paz', '40687678', NULL, '2026-06-05 07:29:03', NULL), +(5, 'Raul', 'Garcia', '34562767', '2026-05-27 03:00:47', '2026-06-03 01:10:55', NULL), +(6, 'Maia', 'Torres', '43897909', '2026-06-05 07:25:35', '2026-06-05 07:29:23', NULL); +COMMIT; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 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..74a1723 --- /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/personas/edit.blade.php b/resources/views/personas/edit.blade.php index 77d2e71..651ca27 100644 --- a/resources/views/personas/edit.blade.php +++ b/resources/views/personas/edit.blade.php @@ -1,48 +1,105 @@ - - +@extends('layouts.admin') +@section('contenido') - - - Editar Persona - + +
+ +
+

Editar Persona

+
+
- +
+
-

Editar Persona

+ + @include('compartido.mensajes') + @include('compartido.errores') -
+
+
- @csrf - @method('PUT') +
-

- Nombre: - -

+ + -

- Apellido: - -

+ @csrf + @method('PUT') -

- DNI: - -

+ +
- + + +
- + + - + + +
- \ No newline at end of file +
+ + + +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
+ +
+ + Salir +
+ +
+ + + +@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/personas/index.blade.php b/resources/views/personas/index.blade.php index d5b3c39..7883924 100644 --- a/resources/views/personas/index.blade.php +++ b/resources/views/personas/index.blade.php @@ -1,83 +1,130 @@ - - +@extends('layouts.admin') +@section('contenido') - - - Personas - + - +
+ +
+

Listado de Personas

+
+
-

Listado de Personas

+
+
+ + + Nuevo + +
+
-

- - Nueva Persona - -

+
- +@endsection +@push('styles') - - - \ No newline at end of file +@endpush +@push('scripts') + +@endpush \ No newline at end of file diff --git a/resources/views/personas/new.blade.php b/resources/views/personas/new.blade.php index 8b5bd90..d7fc82c 100644 --- a/resources/views/personas/new.blade.php +++ b/resources/views/personas/new.blade.php @@ -1,58 +1,92 @@ - - +@extends('layouts.admin') +@section ('contenido') - - - Nueva Persona - + +
+ +
+

Nueva Persona

+
+
- +
+
-

Nueva Persona

+ + @include('compartido.mensajes') + @include('compartido.errores') +
+
-
+
+ + @csrf + + +
-
-
+ +
+ + - + + +
+ +
+ + +
+ +
+ + +
-
-
- - -
- -
-
- - -
- -
- - - - - Volver - + +
+
+ + +
+
+ + Salir +
- - +@endsection +@push('scripts') + +@endpush diff --git a/resources/views/personas/show.blade.php b/resources/views/personas/show.blade.php index b941366..7381649 100644 --- a/resources/views/personas/show.blade.php +++ b/resources/views/personas/show.blade.php @@ -1,47 +1,36 @@ - - +@extends('layouts.admin') +@section ('contenido') +
+
+

Ver Persona

+
+
+
+
- - - Ver Persona - +
+
+ + +
- +
+ + +
-

Ver Persona

- -
-
- - +
+ + +
-
-
+ - +
+
+ Salir +
-
-
- - -
- - - - - - +@endsection diff --git a/routes/web.php b/routes/web.php index 0724850..bb08ee4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -2,27 +2,30 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\PersonaController; +/* +|-------------------------------------------------------------------------- +| Web Routes +|-------------------------------------------------------------------------- +| +| Here is where you can register web routes for your application. These +| routes are loaded by the RouteServiceProvider and all of them will +| be assigned to the "web" middleware group. Make something great! +| +*/ -/*Route::get('personas', [PersonaController::class, 'index']) - ->name('personas.index'); +Route::get('/', function () { + return view('welcome'); +}); -Route::get('personas/create', [PersonaController::class, 'create']) - ->name('personas.create'); +/*Route::get('personas', [PersonaController::class, 'index'])->name('personas.index'); +Route::post('personas', [PersonaController::class, 'store'])->name('personas.store'); +Route::get('personas/create', [PersonaController::class, 'create'])->name('personas.create'); +Route::get('personas/{persona}', [PersonaController::class, 'show'])->name('personas.show'); +Route::delete('personas/{persona}', [PersonaController::class, 'destroy'])->name('personas.destroy'); +Route::get('personas/{persona}/edit', [PersonaController::class, 'edit'])->name('personas.edit'); +Route::put('personas/{persona}', [PersonaController::class, 'update'])->name('personas.update');*/ -Route::post('personas', [PersonaController::class, 'store']) - ->name('personas.store'); -Route::get('personas/{persona}', [PersonaController::class, 'show']) - ->name('personas.show'); - -Route::get('personas/edit/{persona}', [PersonaController::class, 'edit']) - ->name('personas.edit'); - -Route::put('personas/update/{persona}', [PersonaController::class, 'update']) - ->name('personas.update'); - -Route::delete('personas/{persona}', [PersonaController::class, 'destroy']) - ->name('personas.destroy'); */ +Route::resource('personas', PersonaController::class); Route::put('personas/restaurar/{persona}', [PersonaController::class, 'restaurar'])->name('personas.restaurar'); -Route::resource('personas', PersonaController::class); \ No newline at end of file