dispatch('open-documentos-modal'); } public function cargarDocumentos() { $this->alumno = Auth::user() ->alumnos() ->with('nivelRel.documentosRequeridos') ->first(); if ($this->alumno) { $this->documentosPorTipo = $this->alumno ->documentos() ->get() ->keyBy('tipo'); $this->tiposDocumentos = $this->alumno->nivelRel ? $this->alumno->nivelRel->documentosRequeridos : collect(); } } public function store() { if (!$this->alumno) { abort(404, 'Alumno no encontrado'); } $rules = []; foreach ($this->tiposDocumentos as $tipo) { $rules["archivos.{$tipo->slug}"] = 'nullable|file|mimes:' . implode(',', $tipo->extensiones); } $this->validate($rules); foreach ($this->tiposDocumentos as $tipo) { if (isset($this->archivos[$tipo->slug])) { $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(); } public function render() { return view('livewire.documentos'); } }