Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f2ae1cef58 | |||
| 65fe788281 |
@@ -86,7 +86,13 @@ export class PlanningKpisComponent implements OnInit, OnDestroy {
|
||||
private refresh(): void {
|
||||
const assigned = this.routeState.getAssignedSnapshot();
|
||||
const unassigned = this.routeState.getNoAssignedSnapshot();
|
||||
const totalPdvs = assigned.length + unassigned.length;
|
||||
const assignedPdvIds = new Set(assigned.map(route => String(route.json.pdv_id)));
|
||||
// A PDV with at least one scheduled visit is assigned; repeated weekly visits and
|
||||
// partial-assignment alerts must not inflate the planning coverage counters.
|
||||
const unassignedPdvIds = new Set(unassigned
|
||||
.map(route => String(route.pdv_id))
|
||||
.filter(pdvId => !assignedPdvIds.has(pdvId)));
|
||||
const totalPdvs = new Set([...assignedPdvIds, ...unassignedPdvIds]).size;
|
||||
const dailyRoutes = summarizeDailyRoutes(assigned);
|
||||
const totalDistance = dailyRoutes.reduce((sum, day) => sum + day.distanceKm, 0);
|
||||
const totalTravelHours = dailyRoutes.reduce((sum, day) => sum + day.travelHours, 0);
|
||||
@@ -134,9 +140,9 @@ export class PlanningKpisComponent implements OnInit, OnDestroy {
|
||||
|
||||
this.summary = {
|
||||
totalPdvs,
|
||||
assignedPdvs: assigned.length,
|
||||
unassignedPdvs: unassigned.length,
|
||||
coverage: totalPdvs ? (assigned.length / totalPdvs) * 100 : 0,
|
||||
assignedPdvs: assignedPdvIds.size,
|
||||
unassignedPdvs: unassignedPdvIds.size,
|
||||
coverage: totalPdvs ? (assignedPdvIds.size / totalPdvs) * 100 : 0,
|
||||
users,
|
||||
days,
|
||||
totalDistance,
|
||||
@@ -149,9 +155,15 @@ export class PlanningKpisComponent implements OnInit, OnDestroy {
|
||||
assignmentBalance
|
||||
};
|
||||
|
||||
const reasonCounts = new Map<string, number>();
|
||||
const reasonByPdv = new Map<string, string>();
|
||||
for (const route of unassigned) {
|
||||
const pdvId = String(route.pdv_id);
|
||||
if (assignedPdvIds.has(pdvId) || reasonByPdv.has(pdvId)) continue;
|
||||
const reason = route.motivo?.trim() || 'Sin motivo especificado';
|
||||
reasonByPdv.set(pdvId, reason);
|
||||
}
|
||||
const reasonCounts = new Map<string, number>();
|
||||
for (const reason of reasonByPdv.values()) {
|
||||
reasonCounts.set(reason, (reasonCounts.get(reason) ?? 0) + 1);
|
||||
}
|
||||
this.reasons = Array.from(reasonCounts.entries())
|
||||
|
||||
Reference in New Issue
Block a user