- Agrega helper withJitOff en impuestos.service.ts - Ejecuta getResumenIva, getIvaMensual y readResumenIvaFromCache con SET LOCAL jit = off - Evita compilación JIT de ~17s en queries con costo estimado alto feat(contribuyentes): auto-asignar a cartera del supervisor - Al crear contribuyente con supervisorUserId, se agrega automáticamente a todas las carteras top-level del supervisor feat(permisos): restricciones de UI por rol en contribuyentes - Oculta botón Add-ons para roles distintos de owner/cfo - Oculta botón Eliminar contribuyente para no-owner - Oculta botón Agregar RFC para auxiliar/visor/cliente/contador feat(cfdi): ver CFDI desde conceptos y forma de pago en Excel - Agrega botón Ver CFDI en cada fila de la tabla de Conceptos - Agrega columna Forma de Pago en export Excel de CFDIs - Agrega columna Forma de Pago en export individual de CFDI chore(migraciones): índices GIN para relaciones de activos - 048: índices btree parciales para activos - 049: índices GIN para cfdis_relacionados y uuid_relacionado
40 lines
2.4 KiB
TypeScript
40 lines
2.4 KiB
TypeScript
import { Router, type IRouter } from 'express';
|
|
import { authenticate, authorize } from '../middlewares/auth.middleware.js';
|
|
import { tenantMiddleware } from '../middlewares/tenant.middleware.js';
|
|
import * as ctrl from '../controllers/cartera.controller.js';
|
|
import * as asignacionesCtrl from '../controllers/asignaciones.controller.js';
|
|
|
|
const router: IRouter = Router();
|
|
|
|
router.use(authenticate);
|
|
router.use(tenantMiddleware);
|
|
|
|
// Static routes first
|
|
router.get('/supervisores', authorize('owner'), ctrl.getSupervisores);
|
|
|
|
// Asignaciones de obligaciones/tareas a auxiliares (antes de /:id para evitar match dinámico)
|
|
router.get('/asignaciones', authorize('owner', 'supervisor'), asignacionesCtrl.listPorSupervisor);
|
|
router.get('/asignaciones/mias', authorize('auxiliar'), asignacionesCtrl.listPorAuxiliar);
|
|
router.get('/asignaciones/sin-asignar', authorize('owner', 'supervisor'), asignacionesCtrl.listSinAsignar);
|
|
router.get('/asignaciones/auxiliares-elegibles/:contribuyenteId', authorize('owner', 'supervisor'), asignacionesCtrl.listAuxiliaresElegibles);
|
|
|
|
// Read: owner + supervisor + auxiliar
|
|
router.get('/', authorize('owner', 'supervisor', 'auxiliar'), ctrl.list);
|
|
router.get('/:id', authorize('owner', 'supervisor', 'auxiliar'), ctrl.getById);
|
|
router.get('/:id/subcarteras', authorize('owner', 'supervisor', 'auxiliar'), ctrl.listSubcarteras);
|
|
router.get('/:id/entidades', authorize('owner', 'supervisor', 'auxiliar'), ctrl.getEntidades);
|
|
router.get('/:id/auxiliares', authorize('owner', 'supervisor', 'auxiliar'), ctrl.getAuxiliares);
|
|
router.get('/:supervisorId/auxiliares-disponibles', authorize('owner', 'supervisor'), ctrl.getAuxiliaresDelSupervisor);
|
|
|
|
// Write: owner + supervisor (with permission checks in controller)
|
|
router.post('/', authorize('owner', 'supervisor'), ctrl.create);
|
|
router.put('/:id', authorize('owner', 'supervisor'), ctrl.update);
|
|
router.delete('/:id', authorize('owner', 'supervisor'), ctrl.remove);
|
|
router.post('/:id/subcarteras', authorize('owner', 'supervisor'), ctrl.createSubcartera);
|
|
router.post('/:id/entidades', authorize('owner', 'supervisor'), ctrl.addEntidad);
|
|
router.delete('/:id/entidades/:entidadId', authorize('owner', 'supervisor'), ctrl.removeEntidad);
|
|
router.post('/:id/auxiliares', authorize('owner', 'supervisor'), ctrl.addAuxiliar);
|
|
router.delete('/:id/auxiliares/:auxiliarUserId', authorize('owner', 'supervisor'), ctrl.removeAuxiliar);
|
|
|
|
export default router;
|