has("dni") && !$request->has("telefono")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerDatosJson($persona); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerDatosJson($persona); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_DATOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Funcion de ruta, obtiene los horarios de una persona en una sede específica según el DNI o teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros necesarios: * - 'dni' o 'telefono' para identificar a la persona. * - 'sede' para especificar la sede. * - 'funcion' para especificar la función. * - 'dia' para especificar el día de la semana. * - 'tipo_horario' para especificar el tipo de horario. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los horarios de la persona, o un mensaje de error si no se encuentra la información. */ public function getHorariosPorSede(Request $request) { if (!$request->has("telefono") && !$request->has("dni")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } if (!$request->has("sede")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_SEDE")], HttpStatus::BAD_REQUEST ); } if (!$request->has("funcion")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_FUNCION")], HttpStatus::BAD_REQUEST ); } if (!$request->has("dia")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DIA")], HttpStatus::BAD_REQUEST ); } if (!$request->has("tipo_horario")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_TIPO_HORARIO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerHorariosPorSede( $persona, $request->get("sede"), $request->get("funcion"), $request->get("dia"), $request->get("tipo_horario") ); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerHorariosPorSede( $persona, $request->get("sede"), $request->get("funcion"), $request->get("dia"), $request->get("tipo_horario") ); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_HORARIOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Funcion de ruta, obtiene los horarios de una persona en una unidad académica específica según el DNI o teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros necesarios: * - 'dni' o 'telefono' para identificar a la persona. * - 'unidad_academica' para especificar la unidad académica. * - 'funcion' para especificar la función. * - 'dia' para especificar el día de la semana. * - 'tipo_horario' para especificar el tipo de horario. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los horarios de la persona, o un mensaje de error si no se encuentra la información. */ public function getHorariosPorUnidadAcademica(Request $request) { if (!$request->has("telefono") && !$request->has("dni")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } if (!$request->has("unidad_academica")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_UNIDAD_ACADEMICA")], HttpStatus::BAD_REQUEST ); } if (!$request->has("funcion")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_FUNCION")], HttpStatus::BAD_REQUEST ); } if (!$request->has("dia")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DIA")], HttpStatus::BAD_REQUEST ); } if (!$request->has("tipo_horario")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_TIPO_HORARIO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerHorariosPorUnidadAcademica( $persona, $request->get("unidad_academica"), $request->get("funcion"), $request->get("dia"), $request->get("tipo_horario") ); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerHorariosPorUnidadAcademica( $persona, $request->get("unidad_academica"), $request->get("funcion"), $request->get("dia"), $request->get("tipo_horario") ); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_HORARIOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Funcion de ruta, obtiene la dirección de una persona según el DNI o el número de teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros de búsqueda: * - 'dni' o 'telefono' para identificar a la persona. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos de la persona encontrada, o un mensaje de error si no se encuentra. */ public function getDireccion(Request $request) { /** * Obtiene la direccion de una persona según el DNI o el número de teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros de búsqueda. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos de la persona encontrada, o un mensaje de error si no se encuentra. */ if (!$request->has("dni") && !$request->has("telefono")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerDireccion($persona); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerDireccion($persona); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_DATOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Funcion de ruta que obtiene las funciones de una persona en una determinada unidad academica * según el DNI o el número de teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros de búsqueda. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos de la persona encontrada, o un mensaje de error si no se encuentra. */ public function getFuncionesPorUnidadAcademica(Request $request) { if (!$request->has("unidad_academica")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_UNIDAD_ACADEMICA")], HttpStatus::BAD_REQUEST ); } if (!$request->has("dni") && !$request->has("telefono")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerFuncionesPorUnidadAcademica( $persona, $request->get("unidad_academica") ); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerFuncionesPorUnidadAcademica( $persona, $request->get("unidad_academica") ); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_DATOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Funcion de ruta que obtiene las funciones de una persona en una determinada sede * según el DNI o el número de teléfono. * * @param \Illuminate\Http\Request $request La solicitud HTTP que contiene los parámetros de búsqueda. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos de la persona encontrada, o un mensaje de error si no se encuentra. */ public function getFuncionesPorSede(Request $request) { if (!$request->has("sede")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_SEDE")], HttpStatus::BAD_REQUEST ); } if (!$request->has("dni") && !$request->has("telefono")) { return response()->json( ["error" => trans("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } try { if ($request->has("dni")) { $persona = UaderMapuchePersona::buscarPersonaPorDni( $request->get("dni") ); if ($persona) { return ApiPersonaController::extraerFuncionesPorSede( $persona, $request->get("sede") ); } } if ($request->has("telefono")) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono( $request->get("telefono") ); if ($persona) { return ApiPersonaController::extraerFuncionesPorSede( $persona, $request->get("sede") ); } } return response()->json( ["error" => trans("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (\Exception $e) { Log::error(trans("persona.LOG_DATOS") . $e->getMessage()); return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } /** * Obtiene las unidades académicas asociadas a una persona. * * Este método verifica si se ha proporcionado un DNI o un teléfono en la solicitud. * Si ninguno de los dos está presente, se devuelve un error de solicitud incorrecta. * Si se proporciona un DNI, se llama al método `getUnidadesAcademicasPor` con el tipo 'dni'. * Si se proporciona un teléfono, se llama a `getUnidadesAcademicasPor` con el tipo 'telefono'. * * @param Request $request La solicitud que contiene los parámetros de búsqueda (dni o teléfono). * @return JsonResponse La respuesta en formato JSON con las unidades académicas o un mensaje de error. */ public static function getUnidadesAcademicas(Request $request) { if (!$request->has("dni") && !$request->has("telefono")) { return response()->json( ["error" => __("persona.DEBE_INGRESAR_DNI_O_TELEFONO")], HttpStatus::BAD_REQUEST ); } if ($request->has("dni")) { return self::getUnidadesAcademicasPor("dni", $request->get("dni")); } if ($request->has("telefono")) { return self::getUnidadesAcademicasPor( "telefono", $request->get("telefono") ); } } /** * Obtiene las unidades académicas de una persona según el tipo de búsqueda. * * Este método realiza la búsqueda de una persona utilizando el DNI o el teléfono, dependiendo * del tipo especificado. Si la persona se encuentra, se devuelve su información sobre unidades * académicas. Si no se encuentra o si el tipo de búsqueda no es válido, se devuelve un error correspondiente. * * @param string $tipo El tipo de búsqueda, que puede ser 'dni' o 'telefono'. * @param string $valor El valor correspondiente al tipo de búsqueda (DNI o número de teléfono). * @return JsonResponse La respuesta en formato JSON con las unidades académicas o un mensaje de error. * @throws InvalidArgumentException Si el tipo de búsqueda no es válido. */ private static function getUnidadesAcademicasPor( string $tipo, string $valor ) { try { if ($tipo === "dni") { $persona = UaderMapuchePersona::buscarPersonaPorDni($valor); } elseif ($tipo === "telefono") { $persona = UaderMapuchePersona::buscarPersonaPorTelefono( $valor ); } else { throw new InvalidArgumentException( "Tipo de búsqueda no válido. Debe ser 'dni' o 'telefono'." ); } if ($persona) { return response()->json( $persona->getUnidadesAcademicas(), HttpStatus::OK ); } return response()->json( ["error" => __("persona.NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } catch (NotFoundHttpException $e) { return response()->json( ["error" => trans($e->getMessage())], HttpStatus::NOT_FOUND ); } catch (HttpException $e) { return response()->json( ["error" => trans("persona.ERROR")], $e->getStatusCode() ); } catch (InvalidArgumentException $e) { return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } catch (Exception $e) { return response()->json( ["error" => trans("persona.ERROR")], HttpStatus::INTERNAL_SERVER_ERROR ); } } // SUBRUTAS INVOCADAS POR LAS RUTAS: /** * Devuelve en formato JSON los horarios asignados a una persona en una sede específica, filtrados por función, día y tipo de horario. * * @param \App\Models\Persona $persona El objeto de la persona cuya declaración jurada se utiliza para extraer los horarios. * @param string $sede El código de la sede para filtrar las funciones. * @param int $funcion El ID de la función para filtrar los horarios. * @param int $dia El día de la semana para filtrar los horarios. * @param string $tipoHorario El tipo de horario para filtrar los horarios. * @return \Illuminate\Http\JsonResponse Una respuesta JSON que contiene la información de la persona, la función y los horarios correspondientes a la sede especificada. */ public function extraerHorariosPorSede( $persona, $sede, $funcion, $dia, $tipoHorario ) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $cargos = $declaracion_jurada ->CargosGrupo() ->where("estado", "A") ->get(); if (empty($cargos)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES")], HttpStatus::NOT_FOUND ); } $horarios = []; $aux_horario = null; $unidadAcademica = null; foreach ($cargos as $cargo) { if ($unidadAcademica == null) { $unidadAcademica = $cargo->Sede->ua_guarani; } if ( $cargo->id_funcion == $funcion && $cargo->Sede->uacad == $sede ) { // Si vino foreach ($cargo->GrupoHorario as $grupo_horario) { foreach ($grupo_horario->Horarios as $horario) { if ( $horario->dia_semanal == $dia && $horario->tipo_horario == $tipoHorario ) { $aux_horario = [ "tipo_horario" => $horario->tipo_horario, "hora_entra" => $horario->hora_entra, "hora_sale" => $horario->hora_sale, ]; if (!in_array($aux_horario, $horarios)) { $horarios[] = [ "tipo_horario" => $horario->tipo_horario, "hora_entra" => $horario->hora_entra, "hora_sale" => $horario->hora_sale, ]; } } } } } } if (empty($horarios)) { return response()->json( ["error" => trans("persona.SIN_HORARIOS")], HttpStatus::NOT_FOUND ); } // Ordenar el arreglo de horarios usando la función de comparación usort($horarios, [ApiPersonaController::class, "compararHorarios"]); $datos = [ "id" => $declaracion_jurada->id_persona, "nombre" => ucwords(strtolower(trim($persona->desc_nombr))) . " " . ucwords(strtolower(trim($persona->desc_appat))), "funcion" => [ "tipo" => $funcion, "unidad_academica" => $unidadAcademica, "sede" => $sede, ], "horarios" => $horarios, ]; return response()->json($datos, HttpStatus::OK); } /** * Devuelve en formato JSON los horarios asignados a una persona en una unidad académica específica, filtrados por función, día y tipo de horario. * * @param \App\Models\Persona $persona El objeto de la persona cuya declaración jurada se utiliza para extraer los horarios. * @param string $unidadAcademica El código de la unidad académica para filtrar las funciones. * @param int $funcion El ID de la función para filtrar los horarios. * @param int $dia El día de la semana para filtrar los horarios. * @param string $tipoHorario El tipo de horario para filtrar los horarios. * @return \Illuminate\Http\JsonResponse Una respuesta JSON que contiene la información de la persona, la función y los horarios correspondientes a la unidad académica especificada. */ public function extraerHorariosPorUnidadAcademica( $persona, $unidadAcademica, $funcion, $dia, $tipoHorario ) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $cargos = $declaracion_jurada ->CargosGrupo() ->where("estado", "A") ->get(); if (empty($cargos)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES")], HttpStatus::NOT_FOUND ); } $horarios = []; $aux_horario = null; $sede = null; foreach ($cargos as $cargo) { if ($sede == null) { $sede = $cargo->Sede->uacad; } if ( $cargo->id_funcion == $funcion && $cargo->Sede->ua_guarani == $unidadAcademica ) { // Si vino foreach ($cargo->GrupoHorario as $grupo_horario) { foreach ($grupo_horario->Horarios as $horario) { if ( $horario->dia_semanal == $dia && $horario->tipo_horario == $tipoHorario ) { $aux_horario = [ "tipo_horario" => $horario->tipo_horario, "hora_entra" => $horario->hora_entra, "hora_sale" => $horario->hora_sale, ]; if (!in_array($aux_horario, $horarios)) { $horarios[] = [ "tipo_horario" => $horario->tipo_horario, "hora_entra" => $horario->hora_entra, "hora_sale" => $horario->hora_sale, ]; } } } } } } if (empty($horarios)) { return response()->json( ["error" => trans("persona.SIN_HORARIOS")], HttpStatus::NOT_FOUND ); } // Ordenar el arreglo de horarios usando la función de comparación usort($horarios, [ApiPersonaController::class, "compararHorarios"]); $datos = [ "id" => $declaracion_jurada->id_persona, "nombre" => ucwords(strtolower(trim($persona->desc_nombr))) . " " . ucwords(strtolower(trim($persona->desc_appat))), "funcion" => [ "tipo" => $funcion, "unidad_academica" => $unidadAcademica, "sede" => $sede, ], "horarios" => $horarios, ]; return response()->json($datos, HttpStatus::OK); } /** * Extrae los datos de la declaracion jurada de una persona y los retorna como JSON. * * @param mixed $persona La instancia de la persona de la cual se extraerán los datos. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos extraídos de la persona. */ public static function extraerDatosJson($persona) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $datos = [ "id" => $declaracion_jurada->id_persona ?? null, // id persona de la tabla 'uader_persona' "dni" => $persona->nro_docum ?? null, "apellido" => ucwords(strtolower(trim($persona->desc_appat))) ?? null, "nombres" => ucwords(strtolower(trim($persona->desc_nombr))) ?? null, "telefono" => "549" . preg_replace( "([^0-9])", "", trim($persona->telefono_celular) ) ?? null, "email" => strtolower(trim($persona->correo_electronico)) ?? null, ]; return response()->json($datos, HttpStatus::OK); } /** * Extrae los datos de la direccion de una persona para ser devueltos como respuesta JSON. * * @param App\Models\UaderMapuchePersona $persona La instancia de la persona de la cual se extraerán los datos. * @return \Illuminate\Http\JsonResponse La respuesta JSON con los datos extraídos de la persona. **/ public static function extraerDireccion($persona) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $datos = [ "id" => $declaracion_jurada->id_persona, "nombre" => ucwords(strtolower(trim($persona->desc_nombr))) . " " . ucwords(strtolower(trim($persona->desc_appat))) ?? null, "domicilio" => [ "calle" => strtolower(trim($persona->calle)) ?? null, "numero" => strtolower(trim($persona->numero)) ?? null, "piso" => strtolower(trim($persona->piso)) ?? null, "dpto_oficina" => strtolower(trim($persona->dpto_oficina)) ?? null, "calles_entre" => strtolower(trim($persona->calles_entre)) ?? null, "domicilio_referencia" => strtolower(trim($persona->domicilio_referencia)) ?? null, "zona_paraje" => strtolower(trim($persona->zona_paraje)) ?? null, "casa_nro" => strtolower(trim($persona->casa_nro)) ?? null, "casa_manzana" => strtolower(trim($persona->casa_manzana)) ?? null, "localidad" => ucfirst( strtolower(trim($persona->Localidad->desc_localidad)) ) ?? null, "provincia" => trim($persona->Provincia->descripcion_pcia) ?? null, ], ]; return response()->json($datos, HttpStatus::OK); } /** * Extrae las funciones asignadas a una persona en una unidad académica específica * y las devuelve en un formato JSON. * * @param \App\Models\Persona $persona El objeto de la persona cuya declaración jurada se utiliza para extraer las funciones. * @param string $unidadAcademica El código de la unidad académica para filtrar las funciones. * @return \Illuminate\Http\JsonResponse Una respuesta JSON que contiene la información de la persona y las funciones correspondientes a la unidad académica especificada. */ public static function extraerFuncionesPorUnidadAcademica( $persona, $unidadAcademica ) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $cargos = $declaracion_jurada ->CargosGrupo() ->where("estado", "A") ->get(); if (empty($cargos)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES")], HttpStatus::NOT_FOUND ); } $cargosUnidadAcademica = []; foreach ($cargos as $cargo) { if ($cargo->Sede->ua_guarani == $unidadAcademica) { $cargosUnidadAcademica[] = $cargo; } } if (empty($cargosUnidadAcademica)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES_UA")], HttpStatus::NOT_FOUND ); } $funciones = []; $funcion = null; foreach ($cargosUnidadAcademica as $cargoUnidadAcademica) { $funcion = [ "tipo" => $cargoUnidadAcademica->id_funcion, "unidad_academica" => $unidadAcademica, "sede" => $cargoUnidadAcademica->Sede->uacad, ]; if (!in_array($funcion, $funciones)) { // para que no se repitan las funciones por cargo $funciones[] = $funcion; } } $datos = [ "id" => $declaracion_jurada->id_persona, "nombre" => ucwords(strtolower(trim($persona->desc_nombr))) . " " . ucwords(strtolower(trim($persona->desc_appat))), "funciones" => $funciones, ]; return response()->json($datos, HttpStatus::OK); } /** * Extrae las funciones asignadas a una persona en una sede específica * y las devuelve en un formato JSON. * * @param \App\Models\Persona $persona El objeto de la persona cuya declaración jurada se utiliza para extraer las funciones. * @param string $sede El código de la sede para filtrar las funciones. * @return \Illuminate\Http\JsonResponse Una respuesta JSON que contiene la información de la persona y las funciones correspondientes a la sede especificada. */ public static function extraerFuncionesPorSede($persona, $sede) { $declaracion_jurada = $persona->declaracion_jurada; if (!$declaracion_jurada) { return response()->json( ["error" => trans("persona.DECLARACION_JURADA_NO_ENCONTRADA")], HttpStatus::NOT_FOUND ); } $cargos = $declaracion_jurada ->CargosGrupo() ->where("estado", "A") ->get(); if (empty($cargos)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES")], HttpStatus::NOT_FOUND ); } $cargosSedes = []; $unidadAcademica = null; foreach ($cargos as $cargo) { if ($cargo->Sede->uacad == $sede) { $cargosSedes[] = $cargo; if ($unidadAcademica == null) { $unidadAcademica = $cargo->Sede->ua_guarani; } } } if (empty($cargosSedes)) { return response()->json( ["error" => trans("persona.NO_TIENE_DESIGNACIONES_SEDE")], HttpStatus::NOT_FOUND ); } $funciones = []; $funcion = null; foreach ($cargosSedes as $cargoSede) { $funcion = [ "tipo" => $cargoSede->id_funcion, "unidad_academica" => $unidadAcademica, "sede" => $sede, ]; if (!in_array($funcion, $funciones)) { // para que no se repitan las funciones por tarea o designacion $funciones[] = $funcion; } } $datos = [ "id" => $declaracion_jurada->id_persona, "nombre" => ucwords(strtolower(trim($persona->desc_nombr))) . " " . ucwords(strtolower(trim($persona->desc_appat))), "funciones" => $funciones, ]; return response()->json($datos, HttpStatus::OK); } // FUNCIONES STANDALONE: /** * Compara dos horarios por su hora de entrada. * * Utilizada para ordenar un arreglo de horarios. * * @param array $a El primer horario a comparar. * @param array $b El segundo horario a comparar. * @return int Un valor negativo si $a es menor que $b, cero si son iguales, o un valor positivo si $a es mayor que $b. */ public static function compararHorarios($a, $b) { return strcmp($a["hora_entra"], $b["hora_entra"]); } }