+ Gestion de avances fisicos de obra y seguimiento de progreso +
+Total Avances
+{statsData.total}
+Pendientes de Revision
++ {(statsData.porStatus.captured || 0) + (statsData.porStatus.pending || 0)} +
+Aprobados Hoy
+{approvedToday}
+% Avance Global
+{globalProgress}%
+| + Concepto + | ++ Lote/Ubicacion + | ++ Fecha Captura + | ++ Cant. Ejecutada / Presup. + | ++ % Avance + | ++ Estado + | ++ Acciones + | +
|---|---|---|---|---|---|---|
|
+
+ {avance.concepto?.codigo || 'N/A'}
+
+
+ {avance.concepto?.nombre || 'Sin concepto'}
+
+ |
+
+ {avance.lote ? (
+
+
+ ) : avance.departamento ? (
+
+ Lote {avance.lote.numero}
+
+
+ {avance.lote.manzanaNumero
+ ? `Mz. ${avance.lote.manzanaNumero}`
+ : avance.lote.fraccionamientoNombre || ''}
+
+
+
+ ) : (
+ Sin ubicacion
+ )}
+
+ Depto. {avance.departamento.numero}
+
+
+ {avance.departamento.edificioNombre || ''}
+
+ |
+ + {new Date(avance.captureDate).toLocaleDateString()} + | +
+
+ {avance.quantityExecuted.toLocaleString()}{' '}
+ /{' '}
+ {avance.concepto?.cantidadPresupuestada?.toLocaleString() || '0'}
+
+
+ {avance.concepto?.unidad || 'UND'}
+
+ |
+
+
+
+
+
+
+
+ {percentage.toFixed(1)}%
+
+ |
+ + + {statusLabels[avance.status] || avance.status} + + | +
+
+
+ {avance.status === 'captured' && (
+
+ )}
+ {avance.status === 'reviewed' && (
+ <>
+
+
+ >
+ )}
+
+ |
+
+ Esta rechazando el avance del concepto:{' '} + {avance.concepto?.codigo || 'N/A'} +
+ +Registro diario de actividades en obra
+Total Entradas
+{statsData.totalEntries}
+Entradas con Incidentes
+{statsData.entriesWithIncidents}
+Promedio Trabajadores/Dia
++ {statsData.averageWorkersPerDay.toFixed(1)} +
+Ultima Entrada
++ {statsData.lastEntryDate ? formatShortDate(statsData.lastEntryDate) : 'N/A'} +
++ Esta seguro de eliminar esta entrada de bitacora? Esta accion no se puede deshacer. +
+{displayDescription}
+ {descriptionTruncated && ( + + )} +{entry.incidents}
+