feat: rol manager, arreglos de reportes (cancelacion/afluencias), credito unico, cliente enkontrol, vendedor en bitacora y actualizar afluencia existente
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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á
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user