has('dni') && !$request->has('telefono')){ return response()->json(['error' => trans('persona.DEBE_INGRESAR_DNI_O_TELEFONO')], HttpStatus::BAD_REQUEST); } try{ throw new \Exception("prueba"); if ($request->has('dni')) { $persona = UaderMapuchePersona::buscarPersonaPorDni($request->get('dni')); if ($persona) { return ApiPersonaController::extraerDatos($persona); } } if ($request->has('telefono')) { $persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono')); if ($persona) { return ApiPersonaController::extraerDatos($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); } } public function getHorarios(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::extraerHorarios( $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::extraerHorarios( $persona, $request->get('unidad_academica'), $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); } } public function buscar($dni) { $persona = UaderMapuchePersona::buscarPersonaPorDni($dni); if (!empty($persona)) { $dj = UaderDjPersona::find($persona->id_dj_persona); $datos = array( 'id' => $dj->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)), 'domicilio' => array( 'calle' => strtolower(trim($persona->calle)), 'numero' => strtolower(trim($persona->numero)), 'piso' => strtolower(trim($persona->piso)), 'dpto_oficina' => strtolower(trim($persona->dpto_oficina)), 'calles_entre' => strtolower(trim($persona->calles_entre)), 'domicilio_referencia' => strtolower(trim($persona->domicilio_referencia)), 'zona_paraje' => strtolower(trim($persona->zona_paraje)), 'casa_nro' => strtolower(trim($persona->casa_nro)), 'casa_manzana' => strtolower(trim($persona->casa_manzana)), 'localidad' => ucfirst(strtolower(trim($persona->Localidad->desc_localidad))), 'provincia' => trim($persona->Provincia->descripcion_pcia), ) ); return response()->json($datos); } else { return response()->json(array(), 404); } } # 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']); } }