diff --git a/src/app/Models/UaderMapuchePersona.php b/src/app/Models/UaderMapuchePersona.php index 59bdecc..82bb1e9 100644 --- a/src/app/Models/UaderMapuchePersona.php +++ b/src/app/Models/UaderMapuchePersona.php @@ -166,6 +166,59 @@ class UaderMapuchePersona extends Model ]; } + /** + * Obtiene los codigos de sedes asociadas a la declaración jurada de la persona. + * + * Este método verifica si la persona tiene una declaración jurada. Si no la tiene, + * se lanza una excepción indicando que no se encontró la declaración jurada. + * Luego, se obtienen los cargos activos de la declaración jurada. Si no hay cargos, + * se lanza una excepción indicando que la persona no tiene designaciones. + * Finalmente, se construye un arreglo con las sedes activas asociadas a los cargos, + * asegurando que no haya duplicados, y se devuelve un array con el ID de la persona, su nombre + * completo y las unidades académicas activas. + * + * @return array Un arreglo que contiene el ID de la persona, su nombre completo y las sedes activas. + * @throws NotFoundHttpException Si no se encuentra la declaración jurada o si la persona no tiene designaciones. + */ + public function getSedes() + { + $declaracionJurada = $this->declaracion_jurada; + if (!$declaracionJurada) { + throw new NotFoundHttpException( + __("persona.DECLARACION_JURADA_NO_ENCONTRADA") + ); + } + + $cargos = $declaracionJurada + ->CargosGrupo() + ->where("estado", "A") + ->get(); + if (empty($cargos)) { + throw new NotFoundHttpException( + __("persona.NO_TIENE_DESIGNACIONES") + ); + } + + // Agrego la sede + $sedes = []; + foreach ($cargos as $cargo) { + $codigoSede = trim($cargo->Sede->uacad); // Eliminar espacios en blanco + // Verificar que no exista ya en el arreglo + if (!in_array($codigoSede, $sedes)) { + $sedes[] = $codigoSede; + } + } + + return [ + "id" => $declaracionJurada->id_persona, + "nombre" => + ucwords(strtolower(trim($this->desc_nombr))) . + " " . + ucwords(strtolower(trim($this->desc_appat))), + "sedes activas" => $sedes, + ]; + } + /** * Busca una persona en el sistema según el tipo de filtro especificado (DNI o teléfono). *