diff --git a/src/app/Models/UaderMapuchePersona.php b/src/app/Models/UaderMapuchePersona.php index 76fcf79..59bdecc 100644 --- a/src/app/Models/UaderMapuchePersona.php +++ b/src/app/Models/UaderMapuchePersona.php @@ -2,6 +2,7 @@ namespace App\Models; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use DB; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -111,6 +112,60 @@ class UaderMapuchePersona extends Model return self::buscarPersona("dni", $dni); } + /** + * Obtiene los codigos de unidades académicas 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 unidades académicas 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 unidades + * académicas activas. + * @throws NotFoundHttpException Si no se encuentra la declaración jurada o si la persona no tiene designaciones. + */ + public function getUnidadesAcademicas() + { + $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 unidad académica + $unidadesAcademicas = []; + foreach ($cargos as $cargo) { + $uaGuarani = trim($cargo->Sede->ua_guarani); // Eliminar espacios en blanco + // Verificar que no exista ya en el arreglo + if (!in_array($uaGuarani, $unidadesAcademicas)) { + $unidadesAcademicas[] = $uaGuarani; + } + } + + return [ + "id" => $declaracionJurada->id_persona, + "nombre" => + ucwords(strtolower(trim($this->desc_nombr))) . + " " . + ucwords(strtolower(trim($this->desc_appat))), + "unidades academicas activas" => $unidadesAcademicas, + ]; + } + /** * Busca una persona en el sistema según el tipo de filtro especificado (DNI o teléfono). *