diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php new file mode 100644 index 0000000..3559954 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php @@ -0,0 +1,39 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + $this->middleware('auth')->only('logout'); + } + + public function login(Request $request) + { + + $credentials = $request->validate([ + 'email' => 'required|email', + 'password' => 'required', + ]); + + + if (Auth::attempt($credentials)) { + $request->session()->regenerate(); + return redirect()->intended('/dashboard'); // ruta post-login + } + + + return back()->withErrors([ + 'email' => 'Las credenciales no coinciden con nuestros registros.', + ]); + } + +public function logout(Request $request) +{ +Auth::logout(); +$request->session()->invalidate(); +$request->session()->regenerateToken(); + +return redirect('/login'); +} +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..7f588ea --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,70 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @return User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + ]); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..fe965b2 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,29 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..7cbc2c3 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,28 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Contracts\Support\Renderable + */ + public function index() + { + return view('home'); + } +} diff --git a/app/Http/Controllers/detenidosController.php b/app/Http/Controllers/civilesController.php similarity index 53% rename from app/Http/Controllers/detenidosController.php rename to app/Http/Controllers/civilesController.php index b4d43b2..42cc310 100644 --- a/app/Http/Controllers/detenidosController.php +++ b/app/Http/Controllers/civilesController.php @@ -4,60 +4,60 @@ namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; -use App\Models\detenidos; -use App\Http\Requests\UpdatedDetenidosRequest; -use App\Http\Requests\StoreDetenidosRequest; +use App\Models\civiles; +use App\Http\Requests\UpdatedCivilesRequest; +use App\Http\Requests\StoreCivilesRequest; -class detenidosController extends Controller +class civilesController extends Controller { public function index(Request $request){ - $detenidos = detenidos::get(); + $civiles = civiles::get(); - return view('detenidos.index', ['detenidos'=>$detenidos]); + return view('civiles.index', ['civiles'=>$civiles]); } public function show($id){ - $detenidos = detenidos::findOrfail($id); - return view('detenidos.show', ["detenido"=>$detenido]); + $civiles = civiles::findOrfail($id); + return view('civiles.show', ["civiles"=>$civiles]); } public function create(){ - return view('detenidos.new'); + return view('civiles.new'); } - public function store(StoreDetenidosRequest $request){ + public function store(StoreCivilesRequest $request){ - $detenidos = new detenidos(); - $detenidos->fill([ + $civiles = new civiles(); + $civiles->fill([ 'nombre' => $request->input('nombre'), 'apellido' => $request->input('apellido'), 'dni' => $request->input('dni'), 'fecha_nacimiento' => $request->input('fecha_nacimiento'), 'domicilio' => $request->input('domicilio'), ]); - $detenidos->save(); + $civiles->save(); $request->session()->flash('mensaje-success', 'Los datos fueron guardados exitosamente.'); - return redirect('/detenidos'); + return redirect('/civiles'); } public function edit($id){ - $detenidos = detenidos::findOrfail($id); - return view('detenidos.edit', ["detenido"=>$detenidos]); + $civiles = civiles::findOrfail($id); + return view('civiles.edit', ["civiles"=>$civiles]); } - public function update(UpdatedDetenidosRequest $request, $id){ - $detenidos = detenidos::findOrfail($id); - $detenidos->fill([ + public function update(UpdatedCivilesRequest $request, $id){ + $civiles = civiles::findOrfail($id); + $civiles->fill([ 'nombre' => $request->input('nombre'), 'apellido' => $request->input('apellido'), 'dni' => $request->input('dni'), 'fecha_nacimiento' => $request->input('fecha_nacimiento'), 'domicilio' => $request->input('domicilio'), ]); - $detenidos->update(); + $civiles->update(); $request->session()->flash('mensaje-success', 'Los datos fueron modificados exitosamente.'); - return redirect('/detenidos'); + return redirect('/civiles'); } } diff --git a/app/Http/Controllers/denunciasController.php b/app/Http/Controllers/denunciasController.php index 8e096ce..a71a3f8 100644 --- a/app/Http/Controllers/denunciasController.php +++ b/app/Http/Controllers/denunciasController.php @@ -13,7 +13,7 @@ class denunciasController extends Controller { public function index(Request $request){ - $denuncias = denuncias::withTrashed()-> get(); + $denuncias = denuncias::all(); return view('denuncias.index', ['denuncias'=>$denuncias]); } @@ -22,12 +22,6 @@ class denunciasController extends Controller return view('denuncias.show', ["denuncias"=>$denuncias]); } - public function destroy(Request $request, $id){ - $denuncias = denuncias::findOrfail($id); - $denuncias->delete(); - $request->session()->flash('mensaje-success', 'La denuncia fue eliminada.'); - return redirect('/denuncias'); - } public function create(){ return view('denuncias.new'); @@ -70,12 +64,5 @@ class denunciasController extends Controller $request->session()->flash('mensaje-success', 'Los datos fueron modificados.'); return redirect('/denuncias'); } - - public function restaurar(Request $request, $id){ - $denuncias = denuncias::withTrashed()->findOrfail($id); - $denuncias->restore(); - $request->session()->flash('mensaje-success', 'La denuncia fue restaurada.'); - return redirect('/denuncias'); - } } diff --git a/app/Http/Controllers/expedientesController.php b/app/Http/Controllers/expedientesController.php new file mode 100644 index 0000000..1fc6aa3 --- /dev/null +++ b/app/Http/Controllers/expedientesController.php @@ -0,0 +1,69 @@ + $expedientes]); + } + + public function show($id) + { + $expediente = expedientes::findOrFail($id); + + return view('expedientes.show', ['expediente' => $expediente]); + } + + public function create() + { + return view('expedientes.new'); + } + + public function store(Request $request) + { + $expediente = new expedientes(); + $expediente->fill([ + 'id_detenido' => $request->input('id_detenido'), + 'motivo_detencion' => $request->input('motivo_detencion'), + 'fecha_ingreso' => $request->input('fecha_ingreso'), + 'fecha_egreso' => $request->input('fecha_egreso'), + 'fecha_traslado' => $request->input('fecha_traslado'), + 'estado' => $request->input('estado'), + ]); + $expediente->save(); + + $request->session()->flash('mensaje-success', 'El expediente fue guardado exitosamente.'); + return redirect('/expedientes'); + } + + public function edit($id) + { + $expediente = expedientes::findOrFail($id); + return view('expedientes.edit', ['expediente' => $expediente]); + } + + public function update(Request $request, $id) + { + $expediente = expedientes::findOrFail($id); + $expediente->fill([ + 'id_detenido' => $request->input('id_detenido'), + 'motivo_detencion' => $request->input('motivo_detencion'), + 'fecha_ingreso' => $request->input('fecha_ingreso'), + 'fecha_egreso' => $request->input('fecha_egreso'), + 'fecha_traslado' => $request->input('fecha_traslado'), + 'estado' => $request->input('estado'), + ]); + $expediente->update(); + + $request->session()->flash('mensaje-success', 'Los datos del expediente fueron modificados.'); + return redirect('/expedientes'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/personalController.php b/app/Http/Controllers/personalController.php index 4e483b7..ca5f2ab 100644 --- a/app/Http/Controllers/personalController.php +++ b/app/Http/Controllers/personalController.php @@ -38,6 +38,7 @@ class personalController extends Controller 'apellido' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/', 'dni' => 'required|numeric|digits_between:7,8 |unique:personal,dni', 'domicilio' => 'required||max:20', + 'rango' => 'required||max:20', ], [ 'nombre.required' => 'el campo nombre es requerido', @@ -51,6 +52,8 @@ class personalController extends Controller 'domicilio.required' => 'el campo domicilio es requerido', 'domicilio.regex' => 'el campo domicilio sólo debe contener letras', 'domicilio.max' => 'el campo domicilio sólo puede tener 20 caracteres', + 'rango.required' => 'el campo rango es requerido', + 'rango.max' => 'el campo rango sólo puede tener 20 caracteres', ] ); @@ -61,6 +64,7 @@ class personalController extends Controller 'apellido' => $request->input('apellido'), 'dni' => $request->input('dni'), 'domicilio' => $request->input('domicilio'), + 'rango' => $request->input('rango'), ]); $personal->save(); $request->session()->flash('mensaje-success', 'La Efectivo policial fue agregado.'); @@ -79,6 +83,7 @@ class personalController extends Controller 'apellido' => $request->input('apellido'), 'dni' => $request->input('dni'), 'domicilio' => $request->input('domicilio'), + 'rango' => $request->input('rango'), ]); $personal->update(); $request->session()->flash('mensaje-success', 'Los datos del Efectivo fueron modificados.'); diff --git a/app/Http/Requests/StoreDetenidosRequest.php b/app/Http/Requests/StoreCivilesRequest.php similarity index 96% rename from app/Http/Requests/StoreDetenidosRequest.php rename to app/Http/Requests/StoreCivilesRequest.php index 662a1e0..b8c1b26 100644 --- a/app/Http/Requests/StoreDetenidosRequest.php +++ b/app/Http/Requests/StoreCivilesRequest.php @@ -4,7 +4,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; -class StoreDetenidosRequest extends FormRequest +class StoreCivilesRequest extends FormRequest { /** * Determine if the user is authorized to make this request. @@ -22,7 +22,7 @@ class StoreDetenidosRequest extends FormRequest return [ 'nombre' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/', 'apellido' => 'required|regex:/^[a-zA-ZáéíóúñÁÉÍÓÚ]+( [a-zA-ZáéíóúñÁÉÍÓÚ]+)*$/', - 'dni' => 'required|numeric|digits_between:7,8|unique:detenidos,dni', + 'dni' => 'required|numeric|digits_between:7,8|unique:civiles,dni', 'fecha_nacimiento' => 'required|date', 'domicilio' => 'required|max:150', ]; diff --git a/app/Http/Requests/UpdatedDetenidosRequest.php b/app/Http/Requests/UpdatedCivilesRequest.php similarity index 97% rename from app/Http/Requests/UpdatedDetenidosRequest.php rename to app/Http/Requests/UpdatedCivilesRequest.php index 1672010..16d329c 100644 --- a/app/Http/Requests/UpdatedDetenidosRequest.php +++ b/app/Http/Requests/UpdatedCivilesRequest.php @@ -4,7 +4,7 @@ namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; -class UpdatedDetenidosRequest extends FormRequest +class UpdatedCivilesRequest extends FormRequest { /** * Determine if the user is authorized to make this request. diff --git a/app/Models/detenidos.php b/app/Models/civiles.php similarity index 75% rename from app/Models/detenidos.php rename to app/Models/civiles.php index d442c62..ec05518 100644 --- a/app/Models/detenidos.php +++ b/app/Models/civiles.php @@ -5,12 +5,12 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -class detenidos extends Model +class civiles extends Model { use HasFactory; - protected $table = 'detenidos'; + protected $table = 'civiles'; - public $primaryKey = 'id_detenido'; + public $primaryKey = 'id_civil'; public $timestamps = true; protected $fillable = [ diff --git a/app/Models/denuncias.php b/app/Models/denuncias.php index d691ea1..689705a 100644 --- a/app/Models/denuncias.php +++ b/app/Models/denuncias.php @@ -4,12 +4,10 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\SoftDeletes; class denuncias extends Model { use HasFactory; - use SoftDeletes; protected $table = 'denuncias'; public $primaryKey = 'id_denuncia'; diff --git a/app/Models/expedientes.php b/app/Models/expedientes.php new file mode 100644 index 0000000..4fe08b5 --- /dev/null +++ b/app/Models/expedientes.php @@ -0,0 +1,26 @@ + 'Detenidos', + 'text' => 'Civiles', 'icon' => 'fas fa-fw fa-user-lock', 'submenu' => [ [ 'text' => 'Listado', - 'route' => 'detenidos.index', + 'route' => 'civiles.index', 'icon' => 'fas fa-fw fa-list-ul', ], [ 'text' => 'Nuevo detenido', - 'route' => 'detenidos.create', + 'route' => 'civiles.create', + 'icon' => 'fas fa-fw fa-plus', + ], + + ], + ], + + [ + 'text' => 'expedientes', + 'icon' => 'fas fa-fw fa-user-lock', + 'submenu' => [ + + [ + 'text' => 'Listado', + 'route' => 'expedientes.index', + 'icon' => 'fas fa-fw fa-list-ul', + ], + + [ + 'text' => 'Nuevo expediente', + 'route' => 'expedientes.create', 'icon' => 'fas fa-fw fa-plus', ], diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 0000000..fcacb80 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +}; diff --git a/package.json b/package.json index 56f5ddc..9a0b5bf 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,11 @@ "build": "vite build" }, "devDependencies": { + "@popperjs/core": "^2.11.6", "axios": "^1.6.4", + "bootstrap": "^5.2.3", "laravel-vite-plugin": "^1.0.0", + "sass": "^1.56.1", "vite": "^5.0.0" } } diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js index 846d350..46f7a33 100644 --- a/resources/js/bootstrap.js +++ b/resources/js/bootstrap.js @@ -1,3 +1,5 @@ +import 'bootstrap'; + /** * We'll load the axios HTTP library which allows us to easily issue requests * to our Laravel back-end. This library automatically handles sending the @@ -24,7 +26,7 @@ window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; // broadcaster: 'pusher', // key: import.meta.env.VITE_PUSHER_APP_KEY, // cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1', -// wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, +// wsHost: import.meta.env.VITE_PUSHER_HOST ?? `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`, // wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80, // wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443, // forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https', diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss new file mode 100644 index 0000000..172daaa --- /dev/null +++ b/resources/sass/_variables.scss @@ -0,0 +1,7 @@ +// Body +$body-bg: #f8fafc; + +// Typography +$font-family-sans-serif: 'Nunito', sans-serif; +$font-size-base: 0.9rem; +$line-height-base: 1.6; diff --git a/resources/sass/app.scss b/resources/sass/app.scss new file mode 100644 index 0000000..1026a0b --- /dev/null +++ b/resources/sass/app.scss @@ -0,0 +1,8 @@ +// Fonts +@import url('https://fonts.bunny.net/css?family=Nunito'); + +// Variables +@import 'variables'; + +// Bootstrap +@import 'bootstrap/scss/bootstrap'; diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..ea9ac94 --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,73 @@ +@extends('layouts.app') + +@section('content') +