From a2eae3e2bfd45badcadf03060355f368daa2ce74 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Wed, 1 Oct 2025 02:19:29 -0600 Subject: [PATCH] graficas meh. pueden mejorar, pueden desaparecer --- .../ingresos/GraficaAcumuladoresUva.vue | 326 ++++++++++++ .../GraficaDinamicaPagadoDeposito.vue | 494 ++++++++++++++++++ .../ingresos/GraficaSerieIngresos.vue | 277 ++++++++++ .../ingresos/GraficaSerieInversion.vue | 292 +++++++++++ nuxt4-app/app/pages/informe-ingresos.vue | 83 ++- 5 files changed, 1470 insertions(+), 2 deletions(-) create mode 100644 nuxt4-app/app/components/ingresos/GraficaAcumuladoresUva.vue create mode 100644 nuxt4-app/app/components/ingresos/GraficaDinamicaPagadoDeposito.vue create mode 100644 nuxt4-app/app/components/ingresos/GraficaSerieIngresos.vue create mode 100644 nuxt4-app/app/components/ingresos/GraficaSerieInversion.vue diff --git a/nuxt4-app/app/components/ingresos/GraficaAcumuladoresUva.vue b/nuxt4-app/app/components/ingresos/GraficaAcumuladoresUva.vue new file mode 100644 index 0000000..ee48b08 --- /dev/null +++ b/nuxt4-app/app/components/ingresos/GraficaAcumuladoresUva.vue @@ -0,0 +1,326 @@ + + + + diff --git a/nuxt4-app/app/components/ingresos/GraficaDinamicaPagadoDeposito.vue b/nuxt4-app/app/components/ingresos/GraficaDinamicaPagadoDeposito.vue new file mode 100644 index 0000000..09fa5bf --- /dev/null +++ b/nuxt4-app/app/components/ingresos/GraficaDinamicaPagadoDeposito.vue @@ -0,0 +1,494 @@ + + + + diff --git a/nuxt4-app/app/components/ingresos/GraficaSerieIngresos.vue b/nuxt4-app/app/components/ingresos/GraficaSerieIngresos.vue new file mode 100644 index 0000000..4321c1c --- /dev/null +++ b/nuxt4-app/app/components/ingresos/GraficaSerieIngresos.vue @@ -0,0 +1,277 @@ + + + + diff --git a/nuxt4-app/app/components/ingresos/GraficaSerieInversion.vue b/nuxt4-app/app/components/ingresos/GraficaSerieInversion.vue new file mode 100644 index 0000000..94bf60c --- /dev/null +++ b/nuxt4-app/app/components/ingresos/GraficaSerieInversion.vue @@ -0,0 +1,292 @@ + + + + diff --git a/nuxt4-app/app/pages/informe-ingresos.vue b/nuxt4-app/app/pages/informe-ingresos.vue index 279f837..9511164 100644 --- a/nuxt4-app/app/pages/informe-ingresos.vue +++ b/nuxt4-app/app/pages/informe-ingresos.vue @@ -134,7 +134,7 @@
-
+

@@ -185,6 +185,23 @@ class="w-full" />

+ + +
+

+ Calidad +

+ +
+ + +
+
+
+

Acumuladores en el Tiempo

+
+
+ + +
+ +
+ + +
+ +
+
+ + +
+
+
+

Series Temporales

+
+
+ + +
+ +
+ + +
+ +
+
@@ -622,6 +677,7 @@ const selectedClienteIds = ref([]) const selectedTipos = ref([]) const selectedEstados = ref([]) const selectedUbicaciones = ref([]) +const selectedCalidades = ref([]) // Opciones para filtros avanzados const tiposCafeOptions = [ @@ -647,6 +703,17 @@ const ubicacionesOptions = computed(() => { return Array.from(ubicaciones).sort().map(u => ({ value: u, label: u })) }) +// Calidades dinámicas basadas en los ingresos +const calidadesOptions = computed(() => { + const calidades = new Set() + ingresos.value?.forEach(i => { + if (i.calidad) { + calidades.add(i.calidad) + } + }) + return Array.from(calidades).sort().map(c => ({ value: c, label: c })) +}) + // Labels for selected filters const selectedTiposLabels = computed(() => { return selectedTipos.value @@ -662,11 +729,16 @@ const selectedEstadosLabels = computed(() => { .join(', ') }) +const selectedCalidadesLabels = computed(() => { + return selectedCalidades.value.join(', ') +}) + // Check if advanced filters are active const hasAdvancedFilters = computed(() => { return selectedTipos.value.length > 0 || selectedEstados.value.length > 0 || - selectedUbicaciones.value.length > 0 + selectedUbicaciones.value.length > 0 || + selectedCalidades.value.length > 0 }) // Clear advanced filters @@ -674,6 +746,7 @@ function clearAdvancedFilters() { selectedTipos.value = [] selectedEstados.value = [] selectedUbicaciones.value = [] + selectedCalidades.value = [] } async function onToggleAnulados(newValue: boolean | 'indeterminate') { @@ -749,6 +822,11 @@ function matchesUbicacion(ingreso: IngresoRecord): boolean { return cliente?.ubicacion ? selectedUbicaciones.value.includes(cliente.ubicacion) : false } +function matchesCalidad(ingreso: IngresoRecord): boolean { + if (selectedCalidades.value.length === 0) return true + return ingreso.calidad ? selectedCalidades.value.includes(ingreso.calidad) : false +} + // Get selected clientes for display cards const clientesSeleccionados = computed((): ClienteRecord[] => { if (selectedClienteIds.value.length === 0) return [] @@ -769,6 +847,7 @@ const ingresosFiltrados = computed(() => { .filter(r => matchesTipoCafe(r)) .filter(r => matchesEstado(r)) .filter(r => matchesUbicacion(r)) + .filter(r => matchesCalidad(r)) }) const clientesFiltrados = computed((): ClienteRecord[] => {