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.
 
 
 
 

385 lines
15 KiB

<?php
namespace App\Http\Controllers;
use App\Models\UaderMapuchePersona;
use App\Models\UaderDjPersona;
use Illuminate\Http\Request;
use App\Constants\HttpStatus;
use Illuminate\Support\Facades\Log;
class ApiPersonaController extends Controller
{
public function getDatos(Request $request){
/**
* 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);
}
try{
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 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);
}
}
public function getFunciones(Request $request){
/**
* Obtiene las funciones 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('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::extraerFunciones($persona, $request->get('unidad_academica'));
}
}
if ($request->has('telefono')) {
$persona = UaderMapuchePersona::BuscarPersonaPorTelefono($request->get('telefono'));
if ($persona) {
return ApiPersonaController::extraerFunciones($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);
}
}
# 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);
}
public static function extraerDireccion($persona){
/**
* 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.
**/
$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,
'nombre' => ucwords(strtolower(trim($persona->desc_nombr))) . ' ' .ucwords(strtolower(trim($persona->desc_appat))) ?? null,
'domicilio' => array(
'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);
}
public static function extraerFunciones($persona, $unidad_academica){
$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);
}
$funciones = array();
$funcion = null;
foreach ($designaciones as $designacion) {
if($designacion->Sede->ua_guarani == $unidad_academica){
$funcion = ['tipo' => $designacion->id_funcion, 'unidad_academica' => $unidad_academica];
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);
}
# FUNCION STANDALONE:
public static function compararHorarios($a, $b) {
return strcmp($a['hora_entra'], $b['hora_entra']);
}
}