From 17c40c66a63a0569b94f4f7e7162ad9592022bd6 Mon Sep 17 00:00:00 2001 From: Alberto Martinez <349769123@users.noreply.cursor.com> Date: Tue, 8 Sep 2026 22:12:23 +0000 Subject: [PATCH] feat: ver el programa de obra como Gantt (no la grilla de ceros) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Qué pasaba El Excel que importaste es **por partida** (erogaciones semanales). Eso llena **Partidas** y el **Gantt**, no las barras de concepto. La pestaña que se abría era **Conceptos**, con 0–0 en cada semana. Además el Gantt que ya existía tenía el encabezado de semanas mal alineado. ## Cambio - **Gantt es la primera pestaña** y se abre sola si el programa es solo por partida. - Cada partida es una barra de la primera a la última semana con monto (tooltip con total). - En Conceptos, si no hay barras, se explica que hay que mirar Gantt o Partidas. ## Cómo probar 1. Mergear y recargar (solo front; no hay Liquibase). 2. Abrir Programa de obra en la obra ya importada: debe entrar en **Gantt** con barras (A001, A002, …) sobre Sem 1–9. 3. Partidas: montos semanales (no ceros). 4. Conceptos: sigue en 0 y el aviso; es normal en este Excel.
Open in Web Open in Cursor 
--- web-panel/components/WorkProgramGantt.vue | 200 ++++++++++++------ .../components/WorkProgramImportDialog.vue | 4 +- web-panel/pages/programa-obra.vue | 91 +++++--- web-panel/utils/workProgramGantt.ts | 37 ++++ 4 files changed, 240 insertions(+), 92 deletions(-) create mode 100644 web-panel/utils/workProgramGantt.ts diff --git a/web-panel/components/WorkProgramGantt.vue b/web-panel/components/WorkProgramGantt.vue index d532f4a..585134f 100644 --- a/web-panel/components/WorkProgramGantt.vue +++ b/web-panel/components/WorkProgramGantt.vue @@ -1,28 +1,39 @@ diff --git a/web-panel/components/WorkProgramImportDialog.vue b/web-panel/components/WorkProgramImportDialog.vue index 012b26f..667844a 100644 --- a/web-panel/components/WorkProgramImportDialog.vue +++ b/web-panel/components/WorkProgramImportDialog.vue @@ -82,7 +82,7 @@ type Preview = { }; const props = defineProps<{ visible: boolean; projectId: number; projectName: string }>(); -const emit = defineEmits<{ "update:visible": [boolean]; imported: [] }>(); +const emit = defineEmits<{ "update:visible": [boolean]; imported: [{ format: string }] }>(); const { api } = useApi(); const toast = useToast(); @@ -144,7 +144,7 @@ async function confirm() { fd.append("file", pending.value); await api(`/v1/projects/${props.projectId}/work-program/import?create_chapters=true`, { method: "POST", body: fd }); toast.add({ severity: "success", summary: "Programa importado", life: 2500 }); - emit("imported"); + emit("imported", { format: preview.value.format }); visibleModel.value = false; preview.value = null; pending.value = null; diff --git a/web-panel/pages/programa-obra.vue b/web-panel/pages/programa-obra.vue index 8cb960e..1c0cc95 100644 --- a/web-panel/pages/programa-obra.vue +++ b/web-panel/pages/programa-obra.vue @@ -29,13 +29,23 @@