You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1180 lines
44 KiB
1180 lines
44 KiB
<?php |
|
|
|
namespace App\Http\Controllers; |
|
|
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; |
|
use Symfony\Component\HttpKernel\Exception\HttpException; |
|
use InvalidArgumentException; |
|
use Illuminate\Support\Facades\Log; |
|
use Illuminate\Http\Request; |
|
use App\Constants\HttpStatus; |
|
use App\Models\UaderMapuchePersona; |
|
|
|
class ApiPersonaController extends Controller |
|
{ |
|
/** |
|
* Funcion de la ruta getDatos. |
|
* Devuelve los datos básicos de una persona en formato JSON. |
|
* |
|
* @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 getDatos(Request $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::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 |
|
); |
|
} |
|
} |
|
|
|
/** |
|
* Obtiene las sedes 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 `getSedesPor` con el tipo 'dni'. |
|
* Si se proporciona un teléfono, se llama a `getSedesPor` 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 sedes o un mensaje de error. |
|
*/ |
|
public static function getSedesPorDia(Request $request) |
|
{ |
|
if (!$request->has("dia")) { |
|
return response()->json( |
|
["error" => __("persona.DEBE_INGRESAR_DIA")], |
|
HttpStatus::BAD_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::getSedesPorDiaPor("dni", $request->get("dni"), $request->has("dia")); |
|
} |
|
|
|
if ($request->has("telefono")) { |
|
return self::getSedesPorDiaPor("telefono", $request->get("telefono"), $request->has("dia")); |
|
} |
|
} |
|
|
|
/** |
|
* Obtiene las sedes 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 `getSedesPor` con el tipo 'dni'. |
|
* Si se proporciona un teléfono, se llama a `getSedesPor` 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 sedes o un mensaje de error. |
|
*/ |
|
public static function getSedes(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::getSedesPor("dni", $request->get("dni"), $request->has("dia")); |
|
} |
|
|
|
if ($request->has("telefono")) { |
|
return self::getSedesPor("telefono", $request->get("telefono"), $request->has("dia")); |
|
} |
|
} |
|
|
|
/** |
|
* Obtiene las sedes en las que trabaja hoy 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 codigos de sede donde trabaja. |
|
* 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 sedes o un mensaje de error. |
|
* @throws InvalidArgumentException Si el tipo de búsqueda no es válido. |
|
*/ |
|
private static function getSedesPor(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->getSedes(), 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 |
|
); |
|
} |
|
} |
|
|
|
/** |
|
* Obtiene las sedes en las que trabaja hoy 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 codigos de sede donde trabaja. |
|
* 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 sedes o un mensaje de error. |
|
* @throws InvalidArgumentException Si el tipo de búsqueda no es válido. |
|
*/ |
|
private static function getSedesPorDiaPor(string $tipo, string $valor, $dia) |
|
{ |
|
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->getSedesPorDia($dia), 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 == $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"]); |
|
} |
|
}
|
|
|