Browse Source

Se agregand rutas para obtener funcione y horarios por sede y no por ua, ademas se agregan docstring a todas las funcione y se actualizan las rutas.

main
jirho 1 year ago
parent
commit
127855759d
  1. 372
      app/Http/Controllers/ApiPersonaController.php
  2. 6
      routes/api.php

372
app/Http/Controllers/ApiPersonaController.php

@ -54,7 +54,97 @@ class ApiPersonaController extends Controller
} }
} }
public function getHorarios(Request $request){ /**
* 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::BAD_REQUEST);
} 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')){ if(!$request->has('telefono') && !$request->has('dni')){
return response()->json(['error' => trans('persona.DEBE_INGRESAR_DNI_O_TELEFONO')], HttpStatus::BAD_REQUEST); return response()->json(['error' => trans('persona.DEBE_INGRESAR_DNI_O_TELEFONO')], HttpStatus::BAD_REQUEST);
@ -84,7 +174,7 @@ class ApiPersonaController extends Controller
if($persona){ if($persona){
return ApiPersonaController::extraerHorarios( return ApiPersonaController::extraerHorariosPorUnidadAcademica(
$persona, $persona,
$request->get('unidad_academica'), $request->get('unidad_academica'),
$request->get('funcion'), $request->get('funcion'),
@ -100,7 +190,7 @@ class ApiPersonaController extends Controller
if($persona){ if($persona){
return ApiPersonaController::extraerHorarios( return ApiPersonaController::extraerHorariosPorUnidadAcademica(
$persona, $persona,
$request->get('unidad_academica'), $request->get('unidad_academica'),
$request->get('funcion'), $request->get('funcion'),
@ -120,6 +210,14 @@ class ApiPersonaController extends Controller
} }
} }
/**
* 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) public function getDireccion(Request $request)
{ {
/** /**
@ -163,13 +261,14 @@ class ApiPersonaController extends Controller
} }
} }
public function getFunciones(Request $request){
/** /**
* Obtiene las funciones de una persona según el DNI o el número de teléfono. * 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. * @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. * @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')){ if(!$request->has('unidad_academica')){
@ -188,7 +287,7 @@ class ApiPersonaController extends Controller
$persona = UaderMapuchePersona::buscarPersonaPorDni($request->get('dni')); $persona = UaderMapuchePersona::buscarPersonaPorDni($request->get('dni'));
if ($persona) { if ($persona) {
return ApiPersonaController::extraerFunciones($persona, $request->get('unidad_academica')); return ApiPersonaController::extraerFuncionesPorUnidadAcademica($persona, $request->get('unidad_academica'));
} }
} }
@ -197,7 +296,7 @@ class ApiPersonaController extends Controller
$persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono')); $persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono'));
if ($persona) { if ($persona) {
return ApiPersonaController::extraerFunciones($persona, $request->get('unidad_academica')); return ApiPersonaController::extraerFuncionesPorUnidadAcademica($persona, $request->get('unidad_academica'));
} }
} }
@ -210,34 +309,180 @@ class ApiPersonaController extends Controller
} }
} }
# SUB RUTAS ADICIONALES /**
* 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{
public function extraerHorarios($persona, $unidad_academica, $funcion, $dia, $tipo_horario){ if ($request->has('dni')) {
$declaracion_jurada = $persona->declaracion_jurada; $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);
}
}
# 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){ if(!$declaracion_jurada){
return response()->json(['error' => trans('persona.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND); return response()->json(['error' => trans('persona.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND);
} }
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get(); $designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get();
if(empty($designaciones)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND);
}
$horarios = array();
$aux_horario = null;
$unidadAcademica = null;
foreach ($designaciones as $designacion) {
if($unidadAcademica == null){
$unidadAcademica = $designacion->Sede->ua_guarani;
}
if($designacion->id_funcion == $funcion && $designacion->Sede->uacad == $sede){
# Si vino
foreach ($designacion->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 = array(
'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);
}
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get();
if(empty($designaciones)){ if(empty($designaciones)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND); return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND);
} }
$horarios = array(); $horarios = array();
$aux_horario = null; $aux_horario = null;
$sede = null;
foreach ($designaciones as $designacion) { foreach ($designaciones as $designacion) {
if($designacion->id_funcion == $funcion && $designacion->Sede->ua_guarani == $unidad_academica){ if($sede == null){
$sede = $designacion->Sede->uacad;
}
if($designacion->id_funcion == $funcion && $designacion->Sede->ua_guarani == $unidadAcademica){
# Si vino
foreach ($designacion->GrupoHorario as $grupo_horario) { foreach ($designacion->GrupoHorario as $grupo_horario) {
foreach ($grupo_horario->Horarios as $horario) { foreach ($grupo_horario->Horarios as $horario) {
if ($horario->dia_semanal == $dia && $horario->tipo_horario == $tipo_horario){ if ($horario->dia_semanal == $dia && $horario->tipo_horario == $tipoHorario){
$aux_horario = [ $aux_horario = [
'tipo_horario' => $horario->tipo_horario, 'tipo_horario' => $horario->tipo_horario,
@ -269,7 +514,11 @@ class ApiPersonaController extends Controller
$datos = array( $datos = array(
'id' => $declaracion_jurada->id_persona, 'id' => $declaracion_jurada->id_persona,
'nombre' => ucwords(strtolower(trim($persona->desc_nombr))) . ' ' . ucwords(strtolower(trim($persona->desc_appat))), 'nombre' => ucwords(strtolower(trim($persona->desc_nombr))) . ' ' . ucwords(strtolower(trim($persona->desc_appat))),
'funcion' => ['tipo' => $funcion, 'unidad_academica' => $unidad_academica], 'funcion' => [
'tipo' => $funcion,
'unidad_academica' => $unidadAcademica,
'sede' => $sede,
],
'horarios' => $horarios, 'horarios' => $horarios,
); );
@ -338,34 +587,119 @@ class ApiPersonaController extends Controller
return response()->json($datos, HttpStatus::OK); return response()->json($datos, HttpStatus::OK);
} }
public static function extraerFunciones($persona, $unidad_academica){ /**
* 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; $declaracion_jurada = $persona->declaracion_jurada;
if(!$declaracion_jurada){ if(!$declaracion_jurada){
return response()->json(['error' => trans('persona.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND); return response()->json(['error' => trans('persona.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND);
} }
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get(); $designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get();
if(empty($designaciones)){ if(empty($designaciones)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND); return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND);
} }
$designacionesUnidadAcademica = array();
foreach ($designaciones as $designacion) {
if($designacion->Sede->ua_guarani == $unidadAcademica){
$designacionesUnidadAcademica[] = $designacion;
}
}
if(empty($designacionesUnidadAcademica)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES_UA')], HttpStatus::NOT_FOUND);
}
$funciones = array(); $funciones = array();
$funcion = null; $funcion = null;
foreach ($designacionesUnidadAcademica as $designacionUA) {
$funcion = [
'tipo' => $designacionUA->id_funcion,
'unidad_academica' => $unidadAcademica,
'sede' => $designacionUA->Sede->uacad
];
if(!in_array($funcion, $funciones)){ # para que no se repitan las funciones por tarea o designacion
$funciones[] = $funcion;
}
}
$datos = array(
'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);
}
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get();
if(empty($designaciones)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND);
}
$designacionesSede = array();
$unidadAcademica = null;
foreach ($designaciones as $designacion) { foreach ($designaciones as $designacion) {
if($designacion->Sede->ua_guarani == $unidad_academica){ if($designacion->Sede->uacad == $sede){
$designacionesSede[] = $designacion;
if($unidadAcademica == null){
$unidadAcademica = $designacion->Sede->ua_guarani;
}
}
}
$funcion = ['tipo' => $designacion->id_funcion, 'unidad_academica' => $unidad_academica]; if(empty($designacionesSede)){
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES_SEDE')], HttpStatus::NOT_FOUND);
}
$funciones = array();
$funcion = null;
foreach ($designacionesSede as $designacionSede) {
$funcion = [
'tipo' => $designacionSede->id_funcion,
'unidad_academica' => $unidadAcademica,
'sede' => $sede
];
if(!in_array($funcion, $funciones)){ # para que no se repitan las funciones por tarea o designacion if(!in_array($funcion, $funciones)){ # para que no se repitan las funciones por tarea o designacion
$funciones[] = $funcion; $funciones[] = $funcion;
} }
} }
}
$datos = array( $datos = array(
'id' => $declaracion_jurada->id_persona, 'id' => $declaracion_jurada->id_persona,

6
routes/api.php

@ -27,9 +27,11 @@ Route::get('/', [ApiController::class, 'bienvenida'])->name('api.bienvenida');
# Rutas de personas: # Rutas de personas:
Route::get('persona/datos', [ApiPersonaController::class, 'getDatos'])->name('persona.getDatos'); Route::get('persona/datos', [ApiPersonaController::class, 'getDatos'])->name('persona.getDatos');
Route::get('persona/horarios', [ApiPersonaController::class, 'getHorarios'])->name('persona.getHorarios'); Route::get('persona/horarios/unidadacademica', [ApiPersonaController::class, 'getHorariosPorUnidadAcademica'])->name('persona.horarios.unidadacademica');
Route::get('persona/horarios/sede', [ApiPersonaController::class, 'getHorariosPorSede'])->name('persona.horarios.sede');
Route::get('persona/direccion', [ApiPersonaController::class, 'getDireccion'])->name('persona.getDireccion'); Route::get('persona/direccion', [ApiPersonaController::class, 'getDireccion'])->name('persona.getDireccion');
Route::get('persona/funciones', [ApiPersonaController::class, 'getFunciones'])->name('persona.funciones'); Route::get('persona/funciones/sede', [ApiPersonaController::class, 'getFuncionesPorSede'])->name('persona.funciones.sede');
Route::get('persona/funciones/unidadacademica', [ApiPersonaController::class, 'getFuncionesPorUnidadAcademica'])->name('persona.funciones.unidadacademica');
# Rutas de familiares: # Rutas de familiares:
Route::get('familiar/{dni}', [ApiFamilliaresController::class, 'buscar'])->name('familiar.buscar'); Route::get('familiar/{dni}', [ApiFamilliaresController::class, 'buscar'])->name('familiar.buscar');

Loading…
Cancel
Save