feat(mejoras): 22 mejoras UX en todos los módulos
Mi día: cancelación con motivo, conteo escrituración real, cita sin retroceder, calendario completo Cobranza: MoraDashboard respeta alcance, hoy dinámico, cancelar con motivo Landing: contactos paginados, error vs vacío diferenciado Dashboards: KPI renombrado, drill-down planes activos Chat: historial recarga, preguntas rotativas, error solo toast Transversal: shadow-sm corrupto corregido en 9 archivos 553 API tests + 7 apps construidas
This commit is contained in:
@@ -148,6 +148,8 @@ export interface ResumenMiDia {
|
||||
misCapturas: CapturaMiDia[]
|
||||
misClientes: ClienteMiDia[]
|
||||
misActividadesHoy: ActividadMiDia[]
|
||||
/** Todas las actividades ABIERTAS del usuario (sin filtro de fecha): alimenta el calendario */
|
||||
todasMisActividades: ActividadMiDia[]
|
||||
apartadosPorVencer: ApartadoPorVencer[]
|
||||
/** MIS oportunidades: conteo por etapa + lista de trabajo (etapas no terminales) */
|
||||
misOportunidades: { porEtapa: Record<string, number>; items: OportunidadMiDia[] }
|
||||
@@ -381,13 +383,8 @@ export function resumenMiDiaLocal(
|
||||
const hoy = fechaLocal(ahora, 0)
|
||||
const manana = fechaLocal(ahora, 1)
|
||||
const en7Dias = fechaLocal(ahora, 7)
|
||||
const misActividadesHoy: ActividadMiDia[] = actividades
|
||||
const actividadesAbiertasOrdenadas = actividades
|
||||
.filter((a) => a.estado.toUpperCase() === 'ABIERTA')
|
||||
.filter((a) => {
|
||||
if (!a.fechaVencimiento) return true
|
||||
const fv = a.fechaVencimiento.toISOString().slice(0, 10)
|
||||
return fv <= manana
|
||||
})
|
||||
.sort((a, b) => {
|
||||
const fa = a.fechaVencimiento?.toISOString() ?? '9999'
|
||||
const fb = b.fechaVencimiento?.toISOString() ?? '9999'
|
||||
@@ -400,6 +397,12 @@ export function resumenMiDiaLocal(
|
||||
fecha: a.fechaVencimiento ? a.fechaVencimiento.toISOString().slice(0, 10) : '',
|
||||
estado: a.estado,
|
||||
}))
|
||||
const todasMisActividades: ActividadMiDia[] = actividadesAbiertasOrdenadas
|
||||
const misActividadesHoy: ActividadMiDia[] = actividadesAbiertasOrdenadas
|
||||
.filter((a) => {
|
||||
if (a.fecha === '') return true
|
||||
return a.fecha <= manana
|
||||
})
|
||||
|
||||
// --- Apartados por vencer ---
|
||||
const apartadosPorVencer: ApartadoPorVencer[] = apartadosLocales
|
||||
@@ -479,6 +482,7 @@ export function resumenMiDiaLocal(
|
||||
misCapturas: misCapturasSinDuplicadosLocal,
|
||||
misClientes,
|
||||
misActividadesHoy,
|
||||
todasMisActividades,
|
||||
apartadosPorVencer,
|
||||
misOportunidades: { porEtapa, items: itemsOportunidades },
|
||||
misApartados,
|
||||
|
||||
Reference in New Issue
Block a user