Skip to content

Feature: capa de datos de catálogos (carreras, grupos, ITRs y categorías)

juan.viera.c requested to merge feature/gestion-catalogos into dev

Agrega la pantalla /catalogos (el ítem "Catálogos" del menú ya existía pero llevaba a un 404) con el ABM de los cinco catálogos: carreras, grupos, ITRs, categorías de instancia y categorías de recordatorio (RF35–RF40).

Cambios

Listado

  • Una pestaña por catálogo. Solo se ven las que el usuario puede ver (VER_CARRERAS, VER_GRUPOS, VER_ITRS, VER_CATEGORIAS_*). La pestaña abierta queda en la URL (?tab=).
  • Buscador y filtro por estado en todas las pestañas. Grupos filtra además por carrera y generación, e ITRs por carrera.
  • Desactivar con confirmación y activar directo. "Editar" solo aparece en registros activos, porque el backend rechaza editar uno inactivo.
  • Los mensajes de éxito o error se borran a los 3 segundos. El error de carga del listado queda fijo.
  • Ancho de 1200px, igual que Instancias e Incidencias.

Alta y edición

  • Páginas propias: /catalogos/[catalogo]/nuevo y /catalogos/[catalogo]/[id]/editar, con la misma estructura que el resto de los formularios y una leyenda informativa por catálogo.
  • Grupo: la carrera no se puede cambiar después de crearlo, y la generación va de 1901 al año actual.
  • Categorías: muestra cómo se va a guardar el nombre (ej. ENTREVISTA_CON_FAMILIA).
  • ITR: se eligen las carreras que dicta. Como GET /itrs solo trae los nombres de las carreras y el PUT reemplaza todas las asociaciones, la edición se bloquea si no se pudo cargar el catálogo de carreras, para no desvincularlas todas por error.
  • Un nombre repetido se marca en el campo. Por URL directa: sin permiso se muestra SinPermiso, y un registro inactivo muestra un aviso en vez del formulario.

Archivos

  • Nuevos: app/(app)/(secciones)/catalogos/**, components/catalogos/*, lib/carreras.ts, lib/categorias-recordatorio.ts, lib/catalogos.ts, lib/catalogos-tabs.ts.
  • Modificados: lib/groups.ts, lib/itrs.ts y lib/cates funciones de ABM y un parámetro estado` opcional. Laspantallas que ya los usaban no cambian.

Problema conocido (backend)

Después de asociar una carrera a un ITR, el listado de carreras sigue mostrando "Sin ITR asignado" hasta que se reinicia el backend. No es del front: CarreraService.listar() usa @Cacheable("carrera)/editar() solo vacían el caché itrs. Al revés pasa lomismo: renombrar o desactivar una carrera no actualiza el listado de ITRs. El arreglo es que esos métodos vacíen los dos cachés.

Cómo probar

  1. Con un administrador, entrar a Catálogos y recorrer las pestañas.
  2. Crear una carrera, editarla, desactivarla y volver a a se va solo a los 3 s.
  3. Crear un grupo para esa carrera. Al editarlo, la carrera aparece bloqueada.
  4. Crear un ITR y asociarle carreras. Editarlo y verifica ya tenía.
  5. Crear una categoría "entrevista con familia" y verificar que se guarda como ENTREVISTA_CON_FAMILIA. Crearla de nuevo y verificar que marca el nombre repetido.
  6. Desactivar una categoría en uso: muestra el error del backend.
  7. Con un usuario sin permisos de catálogos, entrar por Uogos/carreras/nuevo: muestra SinPermiso`.

Verificación

Typecheck y lint pasan.

Merge request reports

Loading