Browse Source

vuelvo a agregar la ruta para get sedes en general, no solo por dia, ahora estan ambas rutas

main
jirho 1 year ago
parent
commit
9df51ce5a0
  1. 94
      src/app/Http/Controllers/ApiPersonaController.php
  2. 54
      src/app/Models/UaderMapuchePersona.php
  3. 1
      src/routes/api.php

94
src/app/Http/Controllers/ApiPersonaController.php

@ -542,9 +542,8 @@ class ApiPersonaController extends Controller
* @param Request $request La solicitud que contiene los parámetros de búsqueda (dni o teléfono). * @param Request $request La solicitud que contiene los parámetros de búsqueda (dni o teléfono).
* @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error. * @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error.
*/ */
public static function getSedes(Request $request) public static function getSedesPorDia(Request $request)
{ {
if (!$request->has("dia")) { if (!$request->has("dia")) {
return response()->json( return response()->json(
["error" => __("persona.DEBE_INGRESAR_DIA")], ["error" => __("persona.DEBE_INGRESAR_DIA")],
@ -559,6 +558,35 @@ class ApiPersonaController extends Controller
); );
} }
if ($request->has("dni")) {
return self::getSedesPorDiaPor("dni", $request->get("dni"), $request->has("dia"));
}
if ($request->has("telefono")) {
return self::getSedesPorDiaPor("telefono", $request->get("telefono"), $request->has("dia"));
}
}
/**
* Obtiene las sedes asociadas a una persona.
*
* Este método verifica si se ha proporcionado un DNI o un teléfono en la solicitud.
* Si ninguno de los dos está presente, se devuelve un error de solicitud incorrecta.
* Si se proporciona un DNI, se llama al método `getSedesPor` con el tipo 'dni'.
* Si se proporciona un teléfono, se llama a `getSedesPor` con el tipo 'telefono'.
*
* @param Request $request La solicitud que contiene los parámetros de búsqueda (dni o teléfono).
* @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error.
*/
public static function getSedes(Request $request)
{
if (!$request->has("dni") && !$request->has("telefono")) {
return response()->json(
["error" => __("persona.DEBE_INGRESAR_DNI_O_TELEFONO")],
HttpStatus::BAD_REQUEST
);
}
if ($request->has("dni")) { if ($request->has("dni")) {
return self::getSedesPor("dni", $request->get("dni"), $request->has("dia")); return self::getSedesPor("dni", $request->get("dni"), $request->has("dia"));
} }
@ -569,7 +597,65 @@ class ApiPersonaController extends Controller
} }
/** /**
* Obtiene las sedes de una persona según el tipo de búsqueda. * Obtiene las sedes en las que trabaja hoy una persona según el tipo de búsqueda.
*
* Este método realiza la búsqueda de una persona utilizando el DNI o el teléfono, dependiendo
* del tipo especificado. Si la persona se encuentra, se devuelve su codigos de sede donde trabaja.
* Si no se encuentra o si el tipo de búsqueda no es válido, se devuelve un error correspondiente.
*
* @param string $tipo El tipo de búsqueda, que puede ser 'dni' o 'telefono'.
* @param string $valor El valor correspondiente al tipo de búsqueda (DNI o número de teléfono).
* @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error.
* @throws InvalidArgumentException Si el tipo de búsqueda no es válido.
*/
private static function getSedesPor(string $tipo, string $valor)
{
try {
if ($tipo === "dni") {
$persona = UaderMapuchePersona::buscarPersonaPorDni($valor);
} elseif ($tipo === "telefono") {
$persona = UaderMapuchePersona::buscarPersonaPorTelefono(
$valor
);
} else {
throw new InvalidArgumentException(
"Tipo de búsqueda no válido. Debe ser 'dni' o 'telefono'."
);
}
if ($persona) {
return response()->json($persona->getSedes(), HttpStatus::OK);
}
return response()->json(
["error" => __("persona.NO_ENCONTRADA")],
HttpStatus::NOT_FOUND
);
} catch (NotFoundHttpException $e) {
return response()->json(
["error" => trans($e->getMessage())],
HttpStatus::NOT_FOUND
);
} catch (HttpException $e) {
return response()->json(
["error" => trans("persona.ERROR")],
$e->getStatusCode()
);
} catch (InvalidArgumentException $e) {
return response()->json(
["error" => trans("persona.ERROR")],
HttpStatus::INTERNAL_SERVER_ERROR
);
} catch (Exception $e) {
return response()->json(
["error" => trans("persona.ERROR")],
HttpStatus::INTERNAL_SERVER_ERROR
);
}
}
/**
* Obtiene las sedes en las que trabaja hoy una persona según el tipo de búsqueda.
* *
* Este método realiza la búsqueda de una persona utilizando el DNI o el teléfono, dependiendo * Este método realiza la búsqueda de una persona utilizando el DNI o el teléfono, dependiendo
* del tipo especificado. Si la persona se encuentra, se devuelve su codigos de sede donde trabaja. * del tipo especificado. Si la persona se encuentra, se devuelve su codigos de sede donde trabaja.
@ -580,7 +666,7 @@ class ApiPersonaController extends Controller
* @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error. * @return JsonResponse La respuesta en formato JSON con las sedes o un mensaje de error.
* @throws InvalidArgumentException Si el tipo de búsqueda no es válido. * @throws InvalidArgumentException Si el tipo de búsqueda no es válido.
*/ */
private static function getSedesPor(string $tipo, string $valor, $dia) private static function getSedesPorDiaPor(string $tipo, string $valor, $dia)
{ {
try { try {
if ($tipo === "dni") { if ($tipo === "dni") {

54
src/app/Models/UaderMapuchePersona.php

@ -180,6 +180,60 @@ class UaderMapuchePersona extends Model
* @return array Un arreglo que contiene el ID de la persona, su nombre completo y las sedes activas. * @return array Un arreglo que contiene el ID de la persona, su nombre completo y las sedes activas.
* @throws NotFoundHttpException Si no se encuentra la declaración jurada o si la persona no tiene designaciones. * @throws NotFoundHttpException Si no se encuentra la declaración jurada o si la persona no tiene designaciones.
*/ */
public function getSedes()
{
$declaracionJurada = $this->declaracion_jurada;
if (!$declaracionJurada) {
throw new NotFoundHttpException(
__("persona.DECLARACION_JURADA_NO_ENCONTRADA")
);
}
$cargos = $declaracionJurada
->CargosGrupo()
->where("estado", "A")
->get();
if (empty($cargos)) {
throw new NotFoundHttpException(
__("persona.NO_TIENE_DESIGNACIONES")
);
}
// Agrego la sede
$sedes = [];
foreach ($cargos as $cargo) {
$codigoSede = trim($cargo->Sede->uacad); // Eliminar espacios en blanco
// Verificar que no exista ya en el arreglo
if (!in_array($codigoSede, $sedes)) {
$sedes[] = $codigoSede;
}
}
return [
"id" => $declaracionJurada->id_persona,
"nombre" =>
ucwords(strtolower(trim($this->desc_nombr))) .
" " .
ucwords(strtolower(trim($this->desc_appat))),
"sedes activas" => $sedes,
];
}
/**
* Obtiene los codigos de sedes asociadas a la declaración jurada de la persona
* filtrados por si trabaja en esa sede en el dia indicado por parametro.
*
* Este método verifica si la persona tiene una declaración jurada. Si no la tiene,
* se lanza una excepción indicando que no se encontró la declaración jurada.
* Luego, se obtienen los cargos activos de la declaración jurada. Si no hay cargos,
* se lanza una excepción indicando que la persona no tiene designaciones.
* Finalmente, se construye un arreglo con las sedes activas asociadas a los cargos,
* asegurando que no haya duplicados, y se devuelve un array con el ID de la persona, su nombre
* completo y las unidades académicas activas.
*
* @return $codigoDia codigo de dia para filtrar las sedes.
* @throws NotFoundHttpException Si no se encuentra la declaración jurada o si la persona no tiene designaciones.
*/
public function getSedesPorDia($codigoDia) public function getSedesPorDia($codigoDia)
{ {
$declaracionJurada = $this->declaracion_jurada; $declaracionJurada = $this->declaracion_jurada;

1
src/routes/api.php

@ -50,6 +50,7 @@ Route::middleware("jwt.auth")->group(function () {
]); ]);
Route::get("persona/sede", [ApiPersonaController::class, "getSedes"]); Route::get("persona/sede", [ApiPersonaController::class, "getSedes"]);
Route::get("persona/sedespordia", [ApiPersonaController::class, "getSedesPorDia"]);
// Rutas de familiares: // Rutas de familiares:
Route::get("familiar/{dni}", [ Route::get("familiar/{dni}", [

Loading…
Cancel
Save