fix(mi-dia): leads y oportunidades en pestañas separadas + limpieza
- misLeads: solo muestra items del tablero Leads (captura ligera) - misOportunidades: muestra items del tablero Oportunidades (afluencia) - Eliminado el merge que causaba que el mismo item apareciera en ambas - apartadosPorVencer: filtrado por esMio (solo propios) - Limpiado duplicado MONICA RODRIGUEZ VEGA de Monday Leads - 630 tests verdes
This commit is contained in:
@@ -282,11 +282,9 @@ export async function resumenMiDia(
|
||||
fuente: 'oportunidad',
|
||||
ultimoCambio: null,
|
||||
}))
|
||||
// Excluir de "Mis leads" los que ya aparecen en "Mis oportunidades"
|
||||
// para no mostrar el mismo item en dos pestañas
|
||||
const idsEnOportunidades = new Set(misLeadsOportunidades.map((o) => o.id))
|
||||
const misLeadsLeadsSinDuplicados = misLeadsLeads.filter((l) => !idsEnOportunidades.has(l.id))
|
||||
const misLeads: LeadMiDia[] = [...misLeadsLeadsSinDuplicados, ...misLeadsOportunidades].sort((a, b) =>
|
||||
// "Mis leads" solo muestra items del tablero Leads (captura ligera).
|
||||
// Las oportunidades van exclusivamente en "Mis oportunidades".
|
||||
const misLeads: LeadMiDia[] = misLeadsLeads.sort((a, b) =>
|
||||
b.updatedAt.localeCompare(a.updatedAt),
|
||||
)
|
||||
|
||||
@@ -589,37 +587,23 @@ export function resumenMiDiaLocal(
|
||||
const oportunidadesLocales = capturas.filter((c) => c.board === 'OPORTUNIDADES')
|
||||
const apartadosLocales = capturas.filter((c) => c.board === 'APARTADO')
|
||||
|
||||
// "Mis leads" mezcla Leads + Oportunidades, igual que el camino Monday
|
||||
const misLeads: LeadMiDia[] = [
|
||||
...leadsLocales
|
||||
.filter((c) => !esEstadoTerminalLead(c.etapa))
|
||||
.map((c) => ({
|
||||
id: c.leadId,
|
||||
nombre: c.nombreLead,
|
||||
telefono: c.telefono ?? '',
|
||||
email: c.email ?? '',
|
||||
estado: c.etapa,
|
||||
origen: c.origen ?? '',
|
||||
updatedAt: c.updatedAt.toISOString(),
|
||||
fuente: 'lead' as const,
|
||||
ultimoCambio: ultimoCambioLocal(c, usuario.nombre),
|
||||
pendienteSync: c.pendienteSync,
|
||||
})),
|
||||
...oportunidadesLocales
|
||||
.filter((c) => !esEtapaTerminal(c.etapa))
|
||||
.map((c) => ({
|
||||
id: c.leadId,
|
||||
nombre: c.nombreLead,
|
||||
telefono: c.telefono ?? '',
|
||||
email: c.email ?? '',
|
||||
estado: c.etapa,
|
||||
origen: c.origen ?? '',
|
||||
updatedAt: c.updatedAt.toISOString(),
|
||||
fuente: 'oportunidad' as const,
|
||||
ultimoCambio: ultimoCambioLocal(c, usuario.nombre),
|
||||
pendienteSync: c.pendienteSync,
|
||||
})),
|
||||
].sort(porUpdatedAtDesc)
|
||||
// "Mis leads" solo muestra leads (board LEADS), no oportunidades
|
||||
const misLeads: LeadMiDia[] = leadsLocales
|
||||
.filter((c) => !esEstadoTerminalLead(c.etapa))
|
||||
.map((c) => ({
|
||||
id: c.leadId,
|
||||
nombre: c.nombreLead,
|
||||
telefono: c.telefono ?? '',
|
||||
email: c.email ?? '',
|
||||
estado: c.etapa,
|
||||
origen: c.origen ?? '',
|
||||
updatedAt: c.updatedAt.toISOString(),
|
||||
fuente: 'lead' as const,
|
||||
ultimoCambio: ultimoCambioLocal(c, usuario.nombre),
|
||||
pendienteSync: c.pendienteSync,
|
||||
}))
|
||||
.sort((a, b) => b.updatedAt.localeCompare(a.updatedAt))
|
||||
// (oportunidades se muestran exclusivamente en misOportunidades)
|
||||
|
||||
// Conteo por etapa de TODAS las oportunidades (incluye terminales, como Monday)
|
||||
const porEtapa: Record<string, number> = {}
|
||||
|
||||
Reference in New Issue
Block a user