fix(6-mejoras): subcategoría+apartado libre+PDF+coacreditado+docs+dedup

1. Subcategoría en modal descarte (catálogo completo + select)
2. Apartado sin monto mínimo (eliminada validación de 0,000)
3. PDF solo con propuesta elegida (no las 4)
4. Co-acreditado: checkbox 'no tiene' valida sin campos obligatorios
5. Documentos apartado: previsualizar + descargar (endpoint + frontend)
6. Oportunidades: sin duplicados, orden Confirmar→Afluencia→Cotizar→Aparto(verde)→Descartar
This commit is contained in:
2026-09-12 07:09:15 +00:00
parent c8357fe582
commit 852182fabc
12 changed files with 261 additions and 112 deletions

View File

@@ -48,7 +48,7 @@ import {
cambiarEtapaOportunidadEndpoint,
perderOportunidadEndpoint,
} from '../controllers/oportunidades.controller.js'
import { cambiarEstadoApartadoEndpoint, listarDocumentosApartado, subirDocumentosApartado, uploadDocumentosApartado } from '../controllers/apartados.controller.js'
import { cambiarEstadoApartadoEndpoint, listarDocumentosApartado, subirDocumentosApartado, descargarDocumentoApartado, uploadDocumentosApartado } from '../controllers/apartados.controller.js'
import { correrRecordatorios, listarRecordatorios } from '../controllers/recordatorios.controller.js'
import {
cambiarEstadoLeadEndpoint,
@@ -214,6 +214,8 @@ apiRouter.post('/apartados/:itemId/estado', cambiarEstadoApartadoEndpoint)
// el cliente ligado al apartado (se crea la ficha mínima si aún no existe)
apiRouter.get('/apartados/:itemId/documentos', listarDocumentosApartado)
apiRouter.post('/apartados/:itemId/documentos', uploadDocumentosApartado.array('archivos', 10), subirDocumentosApartado)
// Archivo de un documento (previsualizar / descargar desde "Mis apartados")
apiRouter.get('/apartados/:itemId/documentos/:docId/archivo', descargarDocumentoApartado)
// Notas del apartado
apiRouter.post('/apartados/:id/notas', crearNotaEndpoint)
apiRouter.get('/apartados/:id/notas', listarNotasEndpoint)