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.
718 lines
29 KiB
718 lines
29 KiB
<?php |
|
|
|
namespace App\Http\Controllers; |
|
|
|
use App\Models\UaderMapuchePersona; |
|
use Illuminate\Http\Request; |
|
use App\Constants\HttpStatus; |
|
use Illuminate\Support\Facades\Log; |
|
|
|
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::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')){ |
|
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::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 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); |
|
} |
|
} |
|
|
|
# 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); |
|
} |
|
|
|
$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)){ |
|
return response()->json(['error' => trans('persona.NO_TIENE_DESIGNACIONES')], HttpStatus::NOT_FOUND); |
|
} |
|
|
|
$horarios = array(); |
|
$aux_horario = null; |
|
$sede = null; |
|
|
|
foreach ($designaciones as $designacion) { |
|
|
|
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 ($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); |
|
} |
|
|
|
/** |
|
* 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 = 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); |
|
} |
|
|
|
/** |
|
* 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 = 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); |
|
} |
|
|
|
/** |
|
* 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); |
|
} |
|
|
|
$designaciones = $declaracion_jurada->CargosGrupo()->where('estado', 'A')->get(); |
|
if(empty($designaciones)){ |
|
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(); |
|
$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) { |
|
|
|
if($designacion->Sede->uacad == $sede){ |
|
|
|
$designacionesSede[] = $designacion; |
|
|
|
if($unidadAcademica == null){ |
|
$unidadAcademica = $designacion->Sede->ua_guarani; |
|
} |
|
} |
|
} |
|
|
|
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 |
|
$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']); |
|
} |
|
|
|
}
|
|
|