Browse Source

ruta para obtener horarios por dni/telefono especificando ua, funcion, tipo de horario y dia de la semana

main
jirho 2 years ago
parent
commit
3e9dda4d22
  1. 244
      app/Http/Controllers/ApiPersonaController.php
  2. 21
      resources/lang/es/persona.php
  3. 7
      routes/api.php

244
app/Http/Controllers/ApiPersonaController.php

@ -11,133 +11,114 @@ use Illuminate\Support\Facades\Log;
class ApiPersonaController extends Controller class ApiPersonaController extends Controller
{ {
public function getDatos(Request $request) public function getDatos(Request $request){
{
if ($request->has('dni')) {
return ApiPersonaController::rutaGetDatosPorDni($request->get('dni'));
}
if ($request->has('telefono')) { /**
return ApiPersonaController::rutaGetDatosPorTelefono($request->get('telefono')); * Obtiene datos 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); return response()->json(['error' => trans('persona.DEBE_INGRESAR_DNI_O_TELEFONO')], HttpStatus::BAD_REQUEST);
} }
public static function rutaGetDatosPorDni($dni){
try{ try{
$persona = UaderMapuchePersona::buscarPersonaPorDni($dni); throw new \Exception("prueba");
if ($persona) {
return ApiPersonaController::extraerDatos($persona); if ($request->has('dni')) {
}
return response()->json(['error' => trans('persona.NO_ENCONTRADA_POR_DNI')], HttpStatus::NOT_FOUND); $persona = UaderMapuchePersona::buscarPersonaPorDni($request->get('dni'));
} catch (\Exception $e) { if ($persona) {
Log::error(trans('persona.LOG_POR_DNI') . $e->getMessage()); return ApiPersonaController::extraerDatos($persona);
return response()->json(['error' => trans('persona.ERROR_POR_DNI')], HttpStatus::INTERNAL_SERVER_ERROR);
} }
} }
public static function rutaGetDatosPorTelefono($telefono){ if ($request->has('telefono')) {
try{ $persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono'));
$persona = UaderMapuchePersona::BuscarPersonaPorTelefono($telefono);
if ($persona) { if ($persona) {
return ApiPersonaController::extraerDatos($persona); return ApiPersonaController::extraerDatos($persona);
} }
}
return response()->json(['error' => trans('persona.NO_ENCONTRADA_POR_TELEFONO')], HttpStatus::NOT_FOUND); return response()->json(['error' => trans('persona.NO_ENCONTRADA')], HttpStatus::NOT_FOUND);
} catch (\Exception $e) { } catch (\Exception $e) {
Log::error(trans('persona.LOG_POR_TELEFONO') . $e->getMessage());
return response()->json(['error' => trans('persona.ERROR_POR_TELEFONO')], HttpStatus::INTERNAL_SERVER_ERROR); Log::error(trans('persona.LOG_DATOS') . $e->getMessage());
return response()->json(['error' => trans('persona.ERROR')], HttpStatus::INTERNAL_SERVER_ERROR);
} }
} }
public static function extraerDatos($persona){ public function getHorarios(Request $request){
$declaracion_jurada = $persona->declaracion_jurada;
if(!$declaracion_jurada){ 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.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND);
} }
$datos = array( if(!$request->has('unidad_academica')){
'id' => $declaracion_jurada->id_persona ?? null, # id persona de la tabla 'uader_persona' return response()->json(['error' => trans('persona.DEBE_INGRESAR_UNIDAD_ACADEMICA')], HttpStatus::BAD_REQUEST);
'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); if(!$request->has('funcion')){
return response()->json(['error' => trans('persona.DEBE_INGRESAR_FUNCION')], HttpStatus::BAD_REQUEST);
} }
public function store(Request $request) if(!$request->has('dia')){
{ return response()->json(['error' => trans('persona.DEBE_INGRESAR_DIA')], HttpStatus::BAD_REQUEST);
$input = $request->input(); }
$persona = UaderMapuchePersona::BuscarPersonaPorTelefono($input['cel']); if(!$request->has('tipo_horario')){
$dia = $input['dia']; return response()->json(['error' => trans('persona.DEBE_INGRESAR_TIPO_HORARIO')], HttpStatus::BAD_REQUEST);
# lanzar error si es invalido o no vino }
$tipo_horario = $input['tipo_horario'];
# lanzar error si es invalido o no vino
if (!empty($persona)) { try {
$funciones = array(); if($request->has('dni')){
$declaracion_jurada = UaderDjPersona::find($persona->id_dj_persona); $persona = UaderMapuchePersona::buscarPersonaPorDni($request->get('dni'));
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get();
foreach ($designaciones as $designacion) { if($persona){
$horarios = array(); return ApiPersonaController::extraerHorarios(
#dd( $designaciones); $persona,
$request->get('unidad_academica'),
$request->get('funcion'),
$request->get('dia'),
$request->get('tipo_horario')
);
}
}
foreach ($designacion->GrupoHorario as $grupo_horario) { if($request->has('telefono')){
foreach ($grupo_horario->Horarios as $horario) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono'));
if ($horario->dia_semanal == $dia && $horario->tipo_horario == $tipo_horario){ # dia del horario es el mismo que el dia actual y que no sea horario de disposicion if($persona){
$horarios[] = [ return ApiPersonaController::extraerHorarios(
'tipo' => $horario->tipo_horario, $persona,
'hora_entra' => $horario->hora_entra, $request->get('unidad_academica'),
'hora_sale' => $horario->hora_sale $request->get('funcion'),
]; $request->get('dia'),
} $request->get('tipo_horario')
);
} }
} }
# si bien las designaciones son distintas los datos requeridos en esta ruta son pocos y solo necesitamos las designaciones (funciones) con datos diferentes return response()->json(['error' => trans('persona.NO_ENCONTRADA')], HttpStatus::BAD_REQUEST);
$nueva_funcion = ['funcion' => $designacion->id_funcion, 'ua' => intval($designacion->Sede->ua_guarani), 'horarios' => $horarios];
if (!in_array($nueva_funcion, $funciones)) {
$funciones[] = $nueva_funcion;
}
}
$datos = array(
'id' => $declaracion_jurada->id_persona,
'dni' => $persona->nro_docum,
'apellido' => ucwords(strtolower(trim($persona->desc_appat))),
'nombres' => ucwords(strtolower(trim($persona->desc_nombr))),
'telefono' => '549' . preg_replace('([^0-9])', '', trim($persona->telefono_celular)),
'email' => strtolower(trim($persona->correo_electronico)),
'funciones' => $funciones,
);
return response()->json($datos); } catch (\Exception $e) {
} else {
return response()->json(array(), 404); Log::error(trans('persona.LOG_HORARIOS') . $e->getMessage());
return response()->json(['error' => trans('persona.ERROR')], HttpStatus::INTERNAL_SERVER_ERROR);
} }
} }
@ -173,4 +154,103 @@ class ApiPersonaController extends Controller
} }
} }
# SUB RUTAS ADICIONALES
public function extraerHorarios($persona, $unidad_academica, $funcion, $dia, $tipo_horario){
$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);
}
$horarios = array();
$aux_horario = null;
foreach ($designaciones as $designacion) {
if($designacion->id_funcion == $funcion && $designacion->Sede->ua_guarani == $unidad_academica){
foreach ($designacion->GrupoHorario as $grupo_horario) {
foreach ($grupo_horario->Horarios as $horario) {
if ($horario->dia_semanal == $dia && $horario->tipo_horario == $tipo_horario){
$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' => $unidad_academica],
'horarios' => $horarios,
);
return response()->json($datos, HttpStatus::OK);
}
public static function extraerDatos($persona){
/**
* Extrae los datos necesarios de una persona para ser devueltos como respuesta 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.
*/
$declaracion_jurada = $persona->declaracion_jurada;
if(!$declaracion_jurada){
return response()->json(['error' => trans('persona.DECLARACION_JURADA_NO_ENCONTRADA')], HttpStatus::NOT_FOUND);
}
$datos = array(
'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);
}
# FUNCION STANDALONE:
public static function compararHorarios($a, $b) {
return strcmp($a['hora_entra'], $b['hora_entra']);
}
} }

21
resources/lang/es/persona.php

@ -1,13 +1,20 @@
<?php <?php
return [ return [
'NO_ENCONTRADO_MENSAJE' => 'Persona no encontrada.',
'DECLARACION_JURADA_NO_ENCONTRADA' => 'Declaración jurada de la persona no encontrada.', 'DECLARACION_JURADA_NO_ENCONTRADA' => 'Declaración jurada de la persona no encontrada.',
'NO_ENCONTRADA_POR_DNI' => 'Persona no encontrada por DNI.', 'NO_ENCONTRADA' => 'Persona no encontrada con los datos proporcionados.',
'NO_ENCONTRADA_POR_TELEFONO' => 'Persona no encontrada por teléfono.',
'DEBE_INGRESAR_DNI_O_TELEFONO' => 'Debe ingresar un dni o un telefono de la persona', 'DEBE_INGRESAR_DNI_O_TELEFONO' => 'Debe ingresar un dni o un telefono de la persona',
'ERROR_POR_DNI' => 'Ha ocurrido un error mientras se buscaban los datos de la persona por dni.', 'DEBE_INGRESAR_UNIDAD_ACADEMICA' => 'Debe ingresar la unidad academica.',
'ERROR_POR_TELEFONO' => 'Ha ocurrido un error mientras se buscaban los datos de la persona por telefono.', 'DEBE_INGRESAR_FUNCION' => 'Debe ingresar la funcion.',
'LOG_POR_TELEFONO' => 'Error al buscar persona por telefono: ', 'DEBE_INGRESAR_DIA' => 'Debe ingresar el dia.',
'LOG_POR_DNI' => 'Error al buscar persona por dni: ', 'DEBE_INGRESAR_TIPO_HORARIO' => 'Debe ingresar el tipo de horario.',
'NO_TIENE_DESIGNACIONES' => 'La persona no tiene designaciones activas.',
'SIN_HORARIOS' => 'La persona no tiene horarios para los datos proporcionados',
'LOG_DATOS' => 'Error al buscar datos de persona: ',
'LOG_HORARIOS' => 'Error al buscar horarios de persona: ',
'ERROR' => 'Ha ocurrido un error mientras se buscaban los datos de la persona.',
]; ];

7
routes/api.php

@ -26,12 +26,11 @@ Route::get('/', [ApiController::class, 'bienvenida'])->name('api.bienvenida');
# Rutas de personas: # Rutas de personas:
# Rutas de datos basicos: # Ruta de datos basicos:
Route::get('persona/datos', [ApiPersonaController::class, 'getDatos'])->name('persona.getDatos'); Route::get('persona/datos', [ApiPersonaController::class, 'getDatos'])->name('persona.getDatos');
# Rutas de horarios (por unidad academica, funcion y tipo de horario): # Ruta de horarios (por unidad academica, funcion y tipo de horario):
Route::post('persona/horarios/dni/{dni}', [ApiPersonaController::class, 'getHorariosPorTelefono'])->name('persona.getHorariosPorDni'); Route::get('persona/horarios', [ApiPersonaController::class, 'getHorarios'])->name('persona.getHorarios');
Route::post('persona/horarios/telefono/{telefono}', [ApiPersonaController::class, 'getDatosPorTelefono'])->name('persona.getHorariosPorTelefono');
# 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