fix(mi-dia): apartados por vencer solo propios + eliminar duplicado leads/oportunidades
1. apartadosPorVencer: filtrado por esMio — cada vendedor solo ve sus propios apartados por vencer, no los de todos. 2. misLeads: excluye items que ya estan en misOportunidades — evita que el mismo item aparezca en ambas pestanas (leads + oportunidades). 3. 630 tests verdes.
This commit is contained in:
@@ -315,7 +315,7 @@ describe('resumenMiDia (GET /api/mi-dia/resumen)', () => {
|
|||||||
expect(r.misActividadesHoy).toEqual([])
|
expect(r.misActividadesHoy).toEqual([])
|
||||||
expect(r.conteos).toEqual({ leadsNuevosSemana: 0, actividadesAbiertas: 0 })
|
expect(r.conteos).toEqual({ leadsNuevosSemana: 0, actividadesAbiertas: 0 })
|
||||||
// Los apartados por vencer son del pipeline completo: sí se muestran
|
// Los apartados por vencer son del pipeline completo: sí se muestran
|
||||||
expect(r.apartadosPorVencer).toHaveLength(1)
|
expect(r.apartadosPorVencer).toHaveLength(0) // solo apartados propios
|
||||||
})
|
})
|
||||||
|
|
||||||
it('conteos: leads nuevos de los últimos 7 días suman AMBOS tableros (incluye terminales recientes)', async () => {
|
it('conteos: leads nuevos de los últimos 7 días suman AMBOS tableros (incluye terminales recientes)', async () => {
|
||||||
|
|||||||
@@ -282,7 +282,11 @@ export async function resumenMiDia(
|
|||||||
fuente: 'oportunidad',
|
fuente: 'oportunidad',
|
||||||
ultimoCambio: null,
|
ultimoCambio: null,
|
||||||
}))
|
}))
|
||||||
const misLeads: LeadMiDia[] = [...misLeadsLeads, ...misLeadsOportunidades].sort((a, b) =>
|
// 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) =>
|
||||||
b.updatedAt.localeCompare(a.updatedAt),
|
b.updatedAt.localeCompare(a.updatedAt),
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -437,6 +441,7 @@ export async function resumenMiDia(
|
|||||||
const apartadosPorVencer: ApartadoPorVencer[] = apartados
|
const apartadosPorVencer: ApartadoPorVencer[] = apartados
|
||||||
.filter(
|
.filter(
|
||||||
(a) =>
|
(a) =>
|
||||||
|
esMio(a.vendedorIds, a.id) &&
|
||||||
a.fechaLimite !== '' &&
|
a.fechaLimite !== '' &&
|
||||||
a.fechaLimite >= hoy &&
|
a.fechaLimite >= hoy &&
|
||||||
a.fechaLimite <= en7Dias &&
|
a.fechaLimite <= en7Dias &&
|
||||||
|
|||||||
Reference in New Issue
Block a user