feat: version 2.17.9 -- Panel: medidor y detalle en "Actividades vencidas"

Base = actividades no eliminadas, no canceladas y de proyectos no cancelados;
el conteo de vencidas usa el mismo criterio (antes incluia eliminadas).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-21 08:03:22 -05:00
parent 22b287fcd8
commit dda6aa3369
8 changed files with 45 additions and 11 deletions
+3 -1
View File
@@ -14,13 +14,14 @@ function memberFilterFor(currentUser) {
export const getSummary = asyncHandler(async (req, res) => {
const memberUserId = memberFilterFor(req.currentUser);
const [kpis, myActivities, byStatus, overdueProjects, activeProjects, pendingActivities] = await Promise.all([
const [kpis, myActivities, byStatus, overdueProjects, activeProjects, pendingActivities, overdueActivities] = await Promise.all([
repo.summary(memberUserId),
repo.myPendingActivities(req.currentUser.id, memberUserId),
repo.projectsByStatus(memberUserId),
repo.overdueProjectsList(memberUserId),
repo.activeProjectsList(memberUserId),
repo.pendingActivitiesList(memberUserId),
repo.pendingActivitiesList(memberUserId, true),
]);
ok(res, {
kpis,
@@ -29,6 +30,7 @@ export const getSummary = asyncHandler(async (req, res) => {
overdueProjects,
activeProjects: activeProjects.map((p) => ({ ...p, dueStatus: dueStatus(p.estimated_end_date) })),
pendingActivities: pendingActivities.map((a) => ({ ...a, dueStatus: dueStatus(a.due_date) })),
overdueActivities: overdueActivities.map((a) => ({ ...a, dueStatus: 'overdue' })),
});
});