modificaciones

This commit is contained in:
cmoreno 2026-10-11 23:16:25 -03:00
parent 3c362b2bd1
commit 91ac61faf9
10 changed files with 671 additions and 265 deletions

View File

@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use App\Models\denuncias;
use App\Models\civiles;
use App\Models\TiposDenuncias;
use App\Http\Requests\UpdatedDenunciasRequest;
use App\Http\Requests\StoreDenunciasRequest;
@ -13,33 +15,73 @@ class denunciasController extends Controller
{
public function index(Request $request){
$denuncias = denuncias::all();
$denuncias = denuncias::with('tipo')->get();
return view('denuncias.index', ['denuncias'=>$denuncias]);
}
public function show($id){
$denuncias = denuncias::findOrfail($id);
return view('denuncias.show', ["denuncias"=>$denuncias]);
$denuncia = denuncias::with('tipo','estado','civiles')->findOrFail($id);
return view('denuncias.show', ["denuncia"=>$denuncia]);
}
public function create(){
return view('denuncias.new');
$civiles = Civiles::get();
$tipos = TiposDenuncias::get();
return view('denuncias.new',["civiles"=>$civiles, "tipos"=>$tipos] );
}
public function store(StoreDenunciasRequest $request){
$denuncias = new denuncias();
$denuncias->fill([
'nombre_denunciante' => $request->input('nombre'),
'apellido_denunciante' => $request->input('apellido'),
'dni_denunciante' => $request->input('dni'),
'fecha' => $request->input('fecha'),
'tipo' => $request->input('tipo'),
'fecha_hecho' => $request->input('fecha_hecho'),
'tipo_id' => $request->input('tipo_id'),
'descripcion' => $request->input('descripcion'),
'lugar' => $request->input('lugar'),
'estado_id' => 1,
]);
$denuncias->save();
//guardar denunciantes (A)
foreach ($request->input('denunciantes', []) as $civil_id) {
$denuncias->civiles()->attach($civil_id, [
'rol_en_denuncia' => 'A'
]);
}
//Guardar denunciados (D)
foreach ($request->input('denunciados', []) as $civil_id) {
$denuncias->civiles()->attach($civil_id, [
'rol_en_denuncia' => 'D'
]);
}
//Guardar víctimas (V)
foreach ($request->input('victimas', []) as $civil_id) {
$denuncias->civiles()->attach($civil_id, [
'rol_en_denuncia' => 'V'
]);
}
//Guardar testigos (T)
foreach ($request->input('testigos', []) as $civil_id) {
$denuncias->civiles()->attach($civil_id, [
'rol_en_denuncia' => 'T'
]);
}
$request->session()->flash('mensaje-success', 'La denuncia fue guardada exitosamente.');
return redirect('/denuncias');
}

View File

@ -20,11 +20,9 @@ class StoreDenunciasRequest extends FormRequest
public function rules(): array
{
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:denuncias,dni_denunciante',
'fecha' => 'required|date',
'tipo' => 'required|max:100',
'tipo_id' => 'required',
'descripcion' => 'required|max:1000',
'lugar' => 'required|max:100',
];
@ -36,22 +34,11 @@ class StoreDenunciasRequest extends FormRequest
public function messages(): array
{
return [
'nombre.required' => 'El campo nombre es requerido',
'nombre.regex' => 'El campo nombre sólo debe contener letras',
'apellido.required' => 'El campo apellido es requerido',
'apellido.regex' => 'El campo apellido sólo debe contener letras',
'dni.required' => 'El campo DNI es requerido',
'dni.numeric' => 'El campo DNI sólo admite números',
'dni.digits_between' => 'El campo DNI debe tener entre 7 y 8 dígitos',
'dni.unique' => 'El DNI ya se encuentra registrado en otra denuncia',
'fecha.required' => 'El campo fecha es requerido',
'fecha.date' => 'La fecha ingresada no es válida',
'tipo.required' => 'El campo tipo es requerido',
'tipo.max' => 'El tipo no puede superar los 100 caracteres',
'tipo_id.required' => 'El campo tipo es requerido',
'descripcion.required' => 'El campo descripción es requerido',
'descripcion.max' => 'La descripción no puede superar los 1000 caracteres',

View File

@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class EstadosDenuncias extends Model
{
use HasFactory;
protected $table = 'estados_denuncias';
public $primaryKey = 'id_estado';
public $timestamps = false;
protected $fillable = [
'nombre',
'descripcion',
];
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class TiposDenuncias extends Model
{
use HasFactory;
protected $table = 'tipos_denuncias';
public $primaryKey = 'id_tipo';
public $timestamps = false;
protected $fillable = [
'nombre',
'descripcion',
];
}

View File

@ -14,12 +14,39 @@ class denuncias extends Model
public $timestamps = true;
protected $fillable = [
'nombre_denunciante',
'apellido_denunciante',
'dni_denunciante',
'fecha',
'tipo',
'fecha_hecho',
'tipo_id',
'estado_id',
'descripcion',
'lugar',
];
public function tipo()
{
return $this->belongsTo(
TiposDenuncias::class,
'tipo_id','id_tipo'
);
}
public function estado()
{
return $this->belongsTo(
EstadosDenuncias::class,
'estado_id','id_estado'
);
}
public function civiles()
{
return $this->belongsToMany(
civiles::class,
'civil_denuncia',
'denuncia_id',
'civil_id',
'id_denuncia',
'id_civil'
)->withPivot('rol_en_denuncia')
->withTimestamps();
}
}

View File

@ -451,7 +451,7 @@ return [
],
],
'Select2' => [
'active' => false,
'active' => true,
'files' => [
[
'type' => 'js',

View File

@ -33,11 +33,10 @@
<thead>
<tr>
<th>Id</th>
<th>Denunciante</th>
<th>DNI</th>
<th>Fecha</th>
<th>Tipo</th>
<th>Lugar</th>
<th>Descripcion</th>
<th>Acciones</th>
</tr>
</thead>
@ -50,18 +49,14 @@
<td>{{ $den->id_denuncia }}</td>
<td>
{{ $den->nombre_denunciante }}
{{ $den->apellido_denunciante }}
</td>
<td>{{ $den->dni_denunciante }}</td>
<td>{{ $den->fecha }}</td>
<td>{{ $den->tipo }}</td>
<td>{{ $den->tipo->nombre }}</td>
<td>{{ $den->lugar }}</td>
<td>{{ $den->descripcion }}</td>
<td align="center">

View File

@ -27,74 +27,14 @@
@csrf
<!-- Primera fila -->
<div class="row">
<!-- Nombre -->
<div class="form-group col-md-4">
<label for="nombre" class="form-check-label">
Nombre del denunciante (*)
</label>
<input
type="text"
name="nombre"
id="nombre"
value="{{ old('nombre') }}"
required
class="form-control"
>
</div>
<!-- Apellido -->
<div class="form-group col-md-4">
<label for="apellido" class="form-check-label">
Apellido del denunciante (*)
</label>
<input
type="text"
name="apellido"
id="apellido"
value="{{ old('apellido') }}"
required
class="form-control"
>
</div>
<!-- DNI -->
<div class="form-group col-md-4">
<label for="dni" class="form-check-label">
DNI (*)
</label>
<input
type="text"
name="dni"
id="dni"
value="{{ old('dni') }}"
required
class="form-control"
>
</div>
</div>
<!-- Segunda fila -->
<div class="row">
<!-- Fecha -->
<div class="form-group col-md-4">
<div class="form-group col-md-3">
<label for="fecha" class="form-check-label">
Fecha (*)
Fecha de Denuncia (*)
</label>
<input
@ -107,20 +47,17 @@
>
</div>
<div class="form-group col-md-3">
<!-- Tipo -->
<div class="form-group col-md-4">
<label for="tipo" class="form-check-label">
Tipo de denuncia (*)
<label for="fecha" class="form-check-label">
Fecha de Hecho (*)
</label>
<input
type="text"
name="tipo"
id="tipo"
value="{{ old('tipo') }}"
type="date"
name="fecha_hecho"
id="fecha_hecho"
value="{{ old('fecha_hecho') }}"
required
class="form-control"
>
@ -128,8 +65,38 @@
</div>
<!-- Tipo -->
<!-- Tipo de denuncia -->
<div class="form-group col-md-3">
<label for="tipo_id" class="form-check-label">
Tipo de denuncia (*)
</label>
<select
name="tipo_id"
id="tipo_id"
class="form-control"
required
>
<option value="">Seleccione un tipo</option>
@foreach($tipos as $tipo)
<option
value="{{ $tipo->id_tipo }}"
{{ old('tipo_id') == $tipo->id_tipo ? 'selected' : '' }}
>
{{ $tipo->nombre }}
</option>
@endforeach
</select>
</div>
<!-- Lugar -->
<div class="form-group col-md-4">
<div class="form-group col-md-3">
<label for="lugar" class="form-check-label">
Lugar (*)
@ -174,6 +141,166 @@
<br>
<!-- Personas involucradas -->
<div class="row">
<div class="form-group col-md-12">
<h4>Personas involucradas</h4>
<hr>
</div>
</div>
<!-- Denunciantes -->
<div class="row">
<div class="form-group col-md-12">
<label for="denunciantes">
Denunciantes (A) (*)
</label>
<select
name="denunciantes[]"
id="denunciantes"
class="form-control"
multiple
size="5"
required
>
@foreach($civiles as $civil)
<option
value="{{ $civil->id_civil }}"
@selected(in_array($civil->id_civil, old('denunciantes', [])))
>
{{ $civil->apellido }},
{{ $civil->nombre }}
- DNI: {{ $civil->dni }}
</option>
@endforeach
</select>
</div>
</div>
<hr>
<!-- Denunciados -->
<div class="row">
<div class="form-group col-md-12">
<label for="denunciados">
Denunciados (D)
</label>
<select
name="denunciados[]"
id="denunciados"
class="form-control"
multiple
size="5"
>
@foreach($civiles as $civil)
<option
value="{{ $civil->id_civil }}"
@selected(in_array($civil->id_civil, old('denunciados', [])))
>
{{ $civil->apellido }},
{{ $civil->nombre }}
- DNI: {{ $civil->dni }}
</option>
@endforeach
</select>
</div>
</div>
<hr>
<!-- Víctimas -->
<div class="row">
<div class="form-group col-md-12">
<label for="victimas">
Víctimas (V)
</label>
<select
name="victimas[]"
id="victimas"
class="form-control"
multiple
size="5"
>
@foreach($civiles as $civil)
<option
value="{{ $civil->id_civil }}"
@selected(in_array($civil->id_civil, old('victimas', [])))
>
{{ $civil->apellido }},
{{ $civil->nombre }}
- DNI: {{ $civil->dni }}
</option>
@endforeach
</select>
</div>
</div>
<hr>
<!-- Testigos -->
<div class="row">
<div class="form-group col-md-12">
<label for="testigos">
Testigos (T)
</label>
<select
name="testigos[]"
id="testigos"
class="form-control"
multiple
size="5"
>
@foreach($civiles as $civil)
<option
value="{{ $civil->id_civil }}"
@selected(in_array($civil->id_civil, old('testigos', [])))
>
{{ $civil->apellido }},
{{ $civil->nombre }}
- DNI: {{ $civil->dni }}
</option>
@endforeach
</select>
</div>
</div>
<hr>
<div class="row">
<div class="col-md-12">
<small class="text-muted">
Mantenga presionada la tecla Ctrl para
seleccionar varias personas.
</small>
</div>
</div>
<!-- Botones -->
@ -211,11 +338,23 @@
@endsection
@push('scripts')
@push('js')
<script>
// Aquí podremos agregar JavaScript específico para esta vista.
$(document).ready(function() {
$('#denunciantes, #denunciados, #victimas, #testigos').select2({
placeholder: 'Seleccione una o varias personas',
width: '100%',
allowClear: true
});
});
$('#tipo_id').select2({
placeholder: 'Seleccione Tipo',
width: '100%',
allowClear: true
});
</script>
@endpush

View File

@ -1,189 +1,365 @@
@extends('layouts.admin')
@section('contenido')
<!-- Título -->
<div class="row justify-content-center align-items-center">
<div class="col-lg-11 col-md-11 col-sm-11 col-xs-11">
<h3>Ver Datos de la Denuncia</h3>
<div class="progress" style="height: 2px;"></div>
<div class="col-md-11">
<h3>Detalle de Denuncia N° {{ $denuncia->id_denuncia }}</h3>
</div>
</div>
<br>
<!-- Datos del denunciante -->
<div class="row">
<!-- Nombre -->
<div class="form-group col-md-4">
<label for="nombre" class="form-check-label">
Nombre del denunciante
</label>
<input
type="text"
name="nombre"
id="nombre"
class="form-control"
value="{{ $denuncias->nombre_denunciante }}"
readonly
>
</div>
<!-- Apellido -->
<div class="form-group col-md-4">
<label for="apellido" class="form-check-label">
Apellido del denunciante
</label>
<input
type="text"
name="apellido"
id="apellido"
class="form-control"
value="{{ $denuncias->apellido_denunciante }}"
readonly
>
</div>
<!-- DNI -->
<div class="form-group col-md-4">
<label for="dni" class="form-check-label">
DNI
</label>
<input
type="text"
name="dni"
id="dni"
class="form-control"
value="{{ $denuncias->dni_denunciante }}"
readonly
>
</div>
</div>
<!-- Datos de la denuncia -->
<div class="row">
<div class="row justify-content-center">
<div class="col-md-11">
<!-- Fecha -->
<div class="form-group col-md-4">
<div class="card card-primary">
<label for="fecha" class="form-check-label">
Fecha
</label>
<div class="card-header">
<h3 class="card-title">Datos de la denuncia</h3>
</div>
<input
type="text"
name="fecha"
id="fecha"
class="form-control"
value="{{ $denuncias->fecha }}"
readonly
>
<div class="card-body">
<!-- Primera fila -->
<div class="row">
<!-- Fecha de denuncia -->
<div class="form-group col-md-3">
<label>Fecha de denuncia</label>
<input
type="text"
class="form-control"
value="{{ $denuncia->fecha }}"
readonly
>
</div>
<!-- Fecha del hecho -->
<div class="form-group col-md-3">
<label>Fecha del hecho</label>
<input
type="text"
class="form-control"
value="{{ $denuncia->fecha_hecho }}"
readonly
>
</div>
<!-- Tipo de denuncia -->
<div class="form-group col-md-3">
<label>Tipo de denuncia</label>
<input
type="text"
class="form-control"
value="{{ $denuncia->tipo->nombre ?? 'Sin especificar' }}"
readonly
>
</div>
<!-- Estado -->
<div class="form-group col-md-3">
<label>Estado</label>
<input
type="text"
class="form-control"
value="{{ $denuncia->estado->nombre ?? 'Sin especificar' }}"
readonly
>
</div>
</div>
<!-- Segunda fila -->
<div class="row">
<!-- Lugar -->
<div class="form-group col-md-12">
<label>Lugar del hecho</label>
<input
type="text"
class="form-control"
value="{{ $denuncia->lugar }}"
readonly
>
</div>
</div>
<!-- Tercera fila -->
<div class="row">
<!-- Descripción -->
<div class="form-group col-md-12">
<label>Descripción</label>
<textarea
class="form-control"
rows="5"
readonly
>{{ $denuncia->descripcion }}</textarea>
</div>
</div>
</div>
</div>
</div>
<!-- Tipo -->
<div class="form-group col-md-4">
<label for="tipo" class="form-check-label">
Tipo de denuncia
</label>
<input
type="text"
name="tipo"
id="tipo"
class="form-control"
value="{{ $denuncias->tipo }}"
readonly
>
</div>
<!-- Lugar -->
<div class="form-group col-md-4">
<label for="lugar" class="form-check-label">
Lugar
</label>
<input
type="text"
name="lugar"
id="lugar"
class="form-control"
value="{{ $denuncias->lugar }}"
readonly
>
</div>
</div>
<!-- Descripción -->
<div class="row">
<!-- Personas involucradas -->
<div class="row justify-content-center">
<div class="col-md-11">
<div class="form-group col-md-12">
<div class="card card-info">
<label for="descripcion" class="form-check-label">
Descripción
</label>
<div class="card-header">
<h3 class="card-title">Personas involucradas</h3>
</div>
<textarea
name="descripcion"
id="descripcion"
rows="6"
class="form-control"
readonly
>{{ $denuncia->descripcion }}</textarea>
<div class="card-body">
<!-- DENUNCIANTES -->
<div class="row">
<div class="col-md-12">
<h5>Denunciantes (A)</h5>
<hr>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Apellido</th>
<th>Nombre</th>
<th>DNI</th>
</tr>
</thead>
<tbody>
@forelse($denuncia->civiles->where('pivot.rol_en_denuncia', 'A') as $civil)
<tr>
<td>{{ $civil->apellido }}</td>
<td>{{ $civil->nombre }}</td>
<td>{{ $civil->dni }}</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-center">
No hay denunciantes registrados.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<br>
<!-- DENUNCIADOS -->
<div class="row">
<div class="col-md-12">
<h5>Denunciados (D)</h5>
<hr>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Apellido</th>
<th>Nombre</th>
<th>DNI</th>
</tr>
</thead>
<tbody>
@forelse($denuncia->civiles->where('pivot.rol_en_denuncia', 'D') as $civil)
<tr>
<td>{{ $civil->apellido }}</td>
<td>{{ $civil->nombre }}</td>
<td>{{ $civil->dni }}</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-center">
No hay denunciados registrados.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<br>
<!-- VÍCTIMAS -->
<div class="row">
<div class="col-md-12">
<h5>Víctimas (V)</h5>
<hr>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Apellido</th>
<th>Nombre</th>
<th>DNI</th>
</tr>
</thead>
<tbody>
@forelse($denuncia->civiles->where('pivot.rol_en_denuncia', 'V') as $civil)
<tr>
<td>{{ $civil->apellido }}</td>
<td>{{ $civil->nombre }}</td>
<td>{{ $civil->dni }}</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-center">
No hay víctimas registradas.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
<br>
<!-- TESTIGOS -->
<div class="row">
<div class="col-md-12">
<h5>Testigos (T)</h5>
<hr>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Apellido</th>
<th>Nombre</th>
<th>DNI</th>
</tr>
</thead>
<tbody>
@forelse($denuncia->civiles->where('pivot.rol_en_denuncia', 'T') as $civil)
<tr>
<td>{{ $civil->apellido }}</td>
<td>{{ $civil->nombre }}</td>
<td>{{ $civil->dni }}</td>
</tr>
@empty
<tr>
<td colspan="3" class="text-center">
No hay testigos registrados.
</td>
</tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<legend></legend>
<!-- Botón Salir -->
<!-- Botones -->
<div class="row justify-content-center align-items-center">
<!-- Editar -->
<div class="col-md-2">
<a
href="{{ route('denuncias.index') }}"
class="btn btn-primary btn-block btn-lg"
title="Salir"
<a
href="{{ route('denuncias.edit', $denuncia->id_denuncia) }}"
class="btn btn-warning btn-block btn-lg"
>
Salir
<i class="fas fa-edit"></i> Editar
</a>
</div>
<!-- Volver -->
<div class="col-md-2">
<a
href="{{ route('denuncias.index') }}"
class="btn btn-primary btn-block btn-lg"
>
Volver
</a>
</div>
</div>
<br>
@endsection
@endsection

View File

@ -54,7 +54,7 @@
<div class="form-group col-md-3">
<label for="rangoo" class="form-check-label"> Rangoo (*)</label>
<input type="text" name="rango" id="rango" class="form-control"
value="{{ old('rango', $per->rango) }}" >
value="{{ old('rango') }}" >
</div>
</div>