Se crean las especificaciones de los documentos a requerir por nivel, a su vez permitir al alumno subirlos

This commit is contained in:
2026-03-31 11:56:34 -06:00
parent cfd9d2ac68
commit 588a63ed24
61 changed files with 1487 additions and 326 deletions
+55 -56
View File
@@ -2,7 +2,6 @@
namespace App\Livewire;
use App\Models\Alumno;
use Illuminate\Support\Facades\Auth;
use Livewire\Attributes\On;
use Livewire\Component;
@@ -12,13 +11,10 @@ class Documentos extends Component
{
use WithFileUploads;
public $curp;
public $acta;
public $comprobante;
public $user;
public $archivos = [];
public $alumno;
public $documentosPorTipo = [];
public $tiposDocumentos = [];
#[On('documentos')]
public function documentos()
@@ -27,73 +23,76 @@ class Documentos extends Component
}
public function cargarDocumentos()
{
$this->alumno = Auth::user()->alumnos()->first();
{
$this->alumno = Auth::user()
->alumnos()
->with('nivelRel.documentosRequeridos')
->first();
if ($this->alumno) {
$this->documentosPorTipo = $this->alumno
->documentos()
->get()
->keyBy('tipo');
if ($this->alumno) {
$this->documentosPorTipo = $this->alumno
->documentos()
->get()
->keyBy('tipo');
$this->tiposDocumentos = $this->alumno->nivelRel
? $this->alumno->nivelRel->documentosRequeridos
: collect();
}
}
}
public function store()
{
$this->validate([
'curp' => 'nullable|file|mimes:pdf,jpg,png',
'acta' => 'nullable|file|mimes:pdf,jpg,png',
'comprobante' => 'nullable|file|mimes:pdf,jpg,png',
]);
$alumno = Auth::user()->alumnos->first();
if (!$alumno) {
if (!$this->alumno) {
abort(404, 'Alumno no encontrado');
}
$tipos = ['curp', 'acta', 'comprobante'];
$rules = [];
foreach ($tipos as $tipo) {
if ($this->$tipo) {
$ruta = $this->$tipo->store('documentos', 'public');
$alumno->documentos()->updateOrCreate(
['tipo' => $tipo],
[
'archivo' => $ruta,
'status' => 0
]
);
foreach ($this->tiposDocumentos as $tipo) {
$rules["archivos.{$tipo->slug}"] =
'nullable|file|mimes:' . implode(',', $tipo->extensiones);
}
}
// 🔥 recargar correctamente
$this->cargarDocumentos();
$this->validate($rules);
$this->reset(['curp', 'acta', 'comprobante']);
foreach ($this->tiposDocumentos as $tipo) {
$this->dispatch('close-documentos-modal');
if (isset($this->archivos[$tipo->slug])) {
$this->dispatch('swal',
icon: 'success',
title: 'Éxito!',
text: 'Documentos cargados',
timer: 2000,
confirm: false,
closeModal: true,
reload: 2000
);
$ruta = $this->archivos[$tipo->slug]->store('documentos', 'public');
$this->alumno->documentos()->updateOrCreate(
['tipo' => $tipo->slug],
[
'archivo' => $ruta,
'status' => 0
]
);
}
}
$this->cargarDocumentos();
$this->reset('archivos');
$this->dispatch('close-documentos-modal');
$this->dispatch('swal',
icon: 'success',
title: 'Éxito!',
text: 'Documentos cargados',
timer: 2000,
confirm: false,
closeModal: true
);
}
public function mount()
{
$this->cargarDocumentos();
}
{
$this->cargarDocumentos();
}
public function render()
{