feat: rol manager, arreglos de reportes (cancelacion/afluencias), credito unico, cliente enkontrol, vendedor en bitacora y actualizar afluencia existente

This commit is contained in:
2026-09-18 15:25:34 +00:00
parent 9630893974
commit 4965a4488a
35 changed files with 303 additions and 90 deletions

View File

@@ -59,6 +59,8 @@ type Fila =
interface DefReporte {
id: string
/** Endpoint de datos del API (default: el mismo id) */
endpoint?: string
/** Número con el que el cliente pidió el reporte (1-10) */
numero: number
titulo: string
@@ -100,6 +102,7 @@ const REPORTES: DefReporte[] = [
},
{
id: 'cancelaciones-motivo',
endpoint: 'cancelaciones',
numero: 2,
titulo: 'Cancelación (Cliente / Motivo)',
descripcion: 'Cancelaciones de todas las etapas con el motivo y submotivo del descarte.',
@@ -132,17 +135,28 @@ const REPORTES: DefReporte[] = [
{ key: 'nombre', label: 'Nombre' },
{ key: 'telefono', label: 'Teléfono' },
{ key: 'email', label: 'Email' },
{ key: 'edad', label: 'Edad', tipo: 'numero' },
{ key: 'estadoCivil', label: 'Estado civil' },
{ key: 'tipoEmpleo', label: 'Tipo empleo' },
{ key: 'ocupacion', label: 'Ocupación' },
{ key: 'rangoSalarial', label: 'Rango salarial' },
{ key: 'credito', label: 'Crédito' },
{ key: 'tipoEconomia', label: 'Tipo economía' },
{ key: 'califica', label: 'Califica' },
{ key: 'numDependientes', label: 'Dependientes' },
{ key: 'loQuierePara', label: '¿Para qué?' },
{ key: 'origen', label: 'Origen' },
{ key: 'desarrollo', label: 'Desarrollo' },
{ key: 'modelo', label: 'Modelo' },
{ key: 'califica', label: 'Califica' },
{ key: 'etapa', label: 'Etapa' },
{ key: 'vendedor', label: 'Vendedor' },
{ key: 'notas', label: 'Notas' },
{ key: 'fecha', label: 'Fecha', tipo: 'fecha' },
],
},
{
id: 'cancelaciones-todas',
endpoint: 'cancelaciones',
numero: 4,
titulo: 'Listado de cancelaciones',
descripcion: 'Todas las cancelaciones del sistema: leads, oportunidades, apartados y escrituración.',
@@ -356,7 +370,7 @@ export default function Reportes() {
if (esCaptura) {
setCaptura(await fetchReporteCaptura(desarrollo || undefined))
} else {
const respuesta = await fetchReporte<Fila>(def.id, {
const respuesta = await fetchReporte<Fila>(def.endpoint ?? def.id, {
desde: desde || undefined,
hasta: hasta || undefined,
desarrollo: desarrollo || undefined,

View File

@@ -52,7 +52,7 @@ export interface ResumenMiDia {
}
}
const ROLES_CON_EQUIPO = ['coordinador', 'corporativo', 'admin']
const ROLES_CON_EQUIPO = ['coordinador', 'corporativo', 'admin', 'manager']
/** ¿El rol ve el tablero general por defecto y la sección de equipo? (misma regla que el API) */
export function esRolConEquipo(rol: string): boolean {

View File

@@ -16,7 +16,7 @@ const VISTAS: { id: Vista; etiqueta: string; clave: string }[] = [
]
/** Roles que ven el módulo de Reportes (datos de todos los vendedores) */
const ROLES_REPORTES = ['admin', 'director_ventas', 'direccion_general']
const ROLES_REPORTES = ['admin', 'manager', 'director_ventas', 'direccion_general']
/**
* Tableros con vista por rol: cada tab se muestra solo si el módulo está

View File

@@ -68,8 +68,19 @@ export interface FilaAfluenciaReporte {
desarrollo: string
modelo: string
etapa: string
califica: string
vendedor: string
numDependientes: string
edad: string
estadoCivil: string
tipoEmpleo: string
ocupacion: string
rangoSalarial: string
credito: string
tipoEconomia: string
califica: string
loQuierePara: string
medioContacto: string
notas: string
fecha: string
}