Commit Graph

71 Commits

Author SHA1 Message Date
494ffb6d3b Feat: Agregar footer con resumen a todos los botones de copiar texto
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
Implementa un footer consistente en todas las funciones de copiar texto
que incluye información de contexto del informe:

Footer incluye:
- 📅 Rango de fechas aplicado
- 📦 Cantidad de ingresos filtrados vs total
- 👥 Cantidad de clientes con ingresos vs total
- 🕐 Fecha y hora de generación

Cambios en archivos:
- informe-ingresos.vue: Footer en Lista, Top 10 y Serie Temporal
- TotalesIngresoCompra.vue: Recibe contadores y metadata
- TotalesMonetarios.vue: Recibe contadores y metadata
- TotalesVerde.vue: Recibe contadores y metadata

El footer usa datos de la query "Informe Ingresos - Contadores de Filtros"
que proporciona totales con y sin filtros aplicados.
2025-10-30 16:47:59 -06:00
0966af4d1f Feat: Agregar botones de copia a componentes de Totales
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 50s
Implementa botones "Copiar Texto" y "Copiar JSON" en los tres
componentes de totales del informe de ingresos:

- TotalesIngresoCompra: Exporta datos de Uva, Mojado, Oreado y totales
- TotalesMonetarios: Exporta inversiones, precios promedio y restantes
- TotalesVerde: Exporta métricas de café verde

Cada componente incluye:
- Formato de texto con emojis para compartir en WhatsApp
- Formato JSON para integración con sistemas
- Alertas de confirmación al copiar

Todos los componentes de datos del informe ahora tienen
funcionalidad de exportación consistente.
2025-10-30 16:38:13 -06:00
63c7043664 Feat: Agregar botones de Copiar Texto y Copiar JSON
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
Implementa funcionalidad de copia en tres secciones del Informe:

📋 Funcionalidades agregadas:
1. Lista de Ingresos
   - Copiar Texto: Formato WhatsApp con emojis y legible
   - Copiar JSON: Formato estructurado para sistemas

2. Top 10 Clientes
   - Copiar Texto: Ranking formateado con métricas
   - Copiar JSON: Array de objetos con datos completos

3. Serie Temporal Acumulada
   - Copiar Texto: Evolución temporal con emojis
   - Copiar JSON: Datos completos para análisis

 Características:
- Botones con iconos (i-lucide-copy y i-lucide-code)
- Disabled cuando no hay datos disponibles
- Alertas de confirmación al copiar
- Formato texto optimizado para WhatsApp
- Incluye metadata: rango de fechas y timestamp

Uso:
- Copiar Texto → Compartir en WhatsApp/Telegram
- Copiar JSON → Integración con otros sistemas
2025-10-30 16:33:54 -06:00
d1006acf94 Fix: Corrección definitiva del fondo de sidebar al tema café
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
- Corregir prop :ui de 'wrapper' a 'root' en UDashboardSidebar
- Agregar mapeo explícito de variables --ui-color-neutral-* a coffee
- Esto fuerza a Nuxt UI a usar la paleta café en lugar de slate/azul
- Soluciona el problema de fondo azul en todos los navegadores
2025-10-30 15:54:47 -06:00
c0ad00c87f Fix: Aplicar tema café a sidebar y estilos personalizados
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
- Agregar fondo café oscuro al sidebar (var(--brand-surface))
- Personalizar estilos del input de búsqueda con colores del tema
- Mejorar indicador visual de tab seleccionada con borde izquierdo
- Aplicar estilos consistentes a los badges de teclado (⌘ K)
2025-10-30 15:33:49 -06:00
86265b4aa8 Feat: Reemplazar checkboxes por InputMenu en filtros restantes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
Nuevo componente creado:
- SimpleMultiSelector.vue: Componente genérico reutilizable
- Normaliza strings a objetos {label, value}
- Capitaliza primera letra automáticamente
- Props configurables: icon, placeholder, labels singular/plural
- Mismo estilo espectacular que otros selectores

Cambios en informe-ingresos.vue:

1. Layout mejorado:
   - Grid de 3 columnas (antes 2 columnas + 1 separado)
   - Tipos, Estados y Calidades en mismo nivel
   - Distribución más equilibrada y consistente

2. Reemplazar UCheckboxGroup por SimpleMultiSelector:
   - Tipos de Café: icon coffee, "tipo/tipos"
   - Estados: icon check-circle, "estado/estados"
   - Calidades: icon star, "calidad/calidades"

3. Labels consistentes:
   - Todas las secciones usan mismo formato
   - text-sm font-medium mb-2

Beneficios:
- Interfaz más limpia y moderna
- Búsqueda integrada en cada filtro
- Tags visuales de selección
- Consistencia total en todos los filtros
- Mismo tema café/dorado en toda la app
- Mejor uso del espacio (3 columnas iguales)
2025-10-30 14:18:52 -06:00
dae7c73749 Fix: Normalizar array de ubicaciones y agregar soporte para loading
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
Problema identificado:
- El array de ubicaciones viene como array de strings simples,
  no como objetos con {label, value}
- Ejemplo: ["breñales, la union, lempira", "buenos aires, ..."]

Solución implementada:

1. Normalización de datos:
   - Crear computed normalizedUbicaciones que transforma el array
   - Si el item es string: usa el string como label y value
   - Si el item es objeto: usa sus propiedades label y value
   - Filtrar null/undefined durante la transformación

2. Agregar prop loading:
   - Agregada prop opcional loading?: boolean
   - Pasar loading al UInputMenu para mostrar spinner

3. Simplificar lógica de filtrado:
   - Usar normalizedUbicaciones como base
   - Filtrar por query sin errores de toLowerCase

4. Mejorar selectedUbicacionesObjects:
   - Usar normalizedUbicaciones para encontrar seleccionados
   - Comparar con value normalizado

Ahora el componente:
- Muestra todas las ubicaciones correctamente
- Funciona con array de strings o array de objetos
- Muestra animación de loading cuando carga datos
- Búsqueda funciona sin errores
2025-10-30 14:14:44 -06:00
3c076415ff Fix: Corregir error de toLowerCase y selección múltiple en ubicaciones
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
Problemas corregidos:

1. Error "Cannot read properties of undefined (reading 'toLowerCase')":
   - Agregar validación para filtrar items undefined/null
   - Verificar que cada item tenga label y value antes de usar toLowerCase
   - Prevenir errores cuando el array de ubicaciones tiene items inválidos

2. Selección múltiple no funcionaba:
   - Mejorar onSelectionChange para manejar diferentes tipos de valores
   - Agregar validación de array antes de procesar
   - Filtrar items null/undefined antes de extraer valores
   - Manejar tanto objetos como strings en el array de valores

3. Tags no aparecían en el input:
   - El problema estaba en el procesamiento de valores seleccionados
   - Ahora maneja correctamente item.value y strings directos

El componente ahora funciona igual que ClienteMultiSelector:
- Sin errores en consola
- Tags visuales aparecen correctamente
- Selección múltiple funciona perfectamente
2025-10-30 14:11:17 -06:00
a58f0b26ed Feat: Reemplazar UCheckboxGroup de ubicaciones por InputMenu estilo clientes
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
Nuevo componente creado:
- UbicacionMultiSelector.vue: InputMenu con tema personalizado
- Mismo estilo y funcionalidad que ClienteMultiSelector
- Búsqueda en tiempo real de ubicaciones
- Tags visuales para selección múltiple
- Contador y botón "Limpiar todo"

Cambios en informe-ingresos.vue:
- Reemplazar UCheckboxGroup de ubicaciones por UbicacionMultiSelector
- Mover selector de ubicaciones a su propia sección (fuera del grid)
- Grid ahora tiene 2 columnas (Tipos y Estados) en lugar de 3
- Mantener layout consistente con selector de clientes

Estilos aplicados (igual que ClienteMultiSelector):
- Fondo: --brand-surface
- Bordes: --brand-border con focus dorado
- Item highlighted: tono dorado suave
- Tags: color --brand-primary

Ahora ubicaciones tiene la misma UX moderna que clientes.
2025-10-30 14:07:04 -06:00
a7e585a3de Style: Aplicar tema café/dorado personalizado a la sidebar
Some checks failed
build-and-deploy / build-and-deploy (push) Has been cancelled
Reemplaza todos los colores por defecto de Nuxt UI (azules y verdes)
en la sidebar con la paleta de colores café/dorado personalizada.

- Toggle button: color neutral con hover café/dorado
- Tarjeta de usuario: fondo brand-surface con borde brand-border
- Avatar: ring brand-primary, indicador brand-accent
- Avatar generado: background café (c08040) en lugar de azul
- Botones de acción: hover brand-primary/10, iconos en colores del tema
- Badge notificaciones: brand-accent con texto brand-bg
- Botón cerrar sesión: colores del tema en lugar de rojo
- Vista colapsada: todos los colores actualizados
2025-10-30 14:06:14 -06:00
87ec3b1eb3 Style: Aplicar tema personalizado a todos los filtros InputMenu
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
Se aplica el mismo tema café/dorado a todos los InputMenu de filtros:
- Tipo de café
- Estado
- Ubicación
- Calidad

Estilos aplicados (igual que ClienteMultiSelector):
- Fondo: --brand-surface (#1f180f)
- Borde: --brand-border (#3a2a16)
- Focus ring: ring-1 con --brand-primary (#e0c080)
- Item highlighted: rgba(224,192,128,0.12)
- Tags: color --brand-primary con bordes dorados
- Transición suave en el borde de focus

Todos los filtros ahora mantienen la coherencia visual
con el resto de la aplicación.
2025-10-30 14:02:15 -06:00
4837de1262 Style: Personalizar borde de focus con colores de la app
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
Cambios aplicados:
- Reemplazar ring-2 (2px) por ring-1 (1px) para borde más delgado
- Cambiar color de focus de verde por defecto a --brand-primary (#e0c080)
- Aplicar focus:ring-1 y focus:border-[--brand-primary] en el input base
- Agregar focus-within:ring-1 en el root para consistencia
- Agregar transition-shadow para animación suave del borde

Ahora el borde de focus es más delgado y usa el color dorado
de la app en lugar del verde por defecto de Nuxt UI.
2025-10-30 13:30:42 -06:00
425e828083 Style: Aplicar tema café/dorado personalizado al InputMenu
Some checks failed
build-and-deploy / build-and-deploy (push) Has been cancelled
Colores aplicados según el sistema de diseño de la app:
- Fondo del input: --brand-surface (#1f180f)
- Borde: --brand-border (#3a2a16)
- Texto: --brand-text (#fef9f0)
- Placeholder y iconos: --brand-text-muted (#d8c7a6)
- Dropdown: mismo fondo y borde que el input
- Item highlighted: rgba(224,192,128,0.12) (tono dorado suave)
- Tags seleccionados: rgba(224,192,128,0.14) con borde más fuerte
- Color de tags: --brand-primary (#e0c080)
- Hover en botón delete: tono dorado más intenso

El componente ahora tiene la misma paleta de colores que las cards
de Metabase Debug y el resto de la aplicación, eliminando los
colores azules/verdes por defecto de Nuxt UI.
2025-10-30 13:26:48 -06:00
3b0d21dd02 Fix: Corregir selección de usuarios y aplicar estilos de la app
Some checks failed
build-and-deploy / build-and-deploy (push) Has been cancelled
Correcciones de funcionalidad:
- Cambiar v-model por :model-value y @update:model-value para control manual
- Crear selectedClientesObjects computed para sincronizar con props
- Implementar onSelectionChange para extraer IDs correctamente
- Arreglar binding bidireccional con selectedIds

Correcciones de estilo:
- Agregar size="sm" para consistencia con otros inputs
- Usar variables CSS de la app (--brand-text, --brand-text-muted)
- Mantener coherencia visual con el resto de componentes
- Corregir contador para usar props.selectedIds directamente

Ahora el componente:
- Permite seleccionar y deseleccionar usuarios correctamente
- Muestra tags visuales de los seleccionados
- Mantiene el estilo consistente con la app
- Respeta el mínimo de 4 caracteres para búsqueda
2025-10-30 13:20:37 -06:00
466e3923d7 Fix: Corregir implementación de InputMenu según documentación oficial
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 52s
Correcciones aplicadas:
- Usar ignore-filter para control manual del filtrado
- Implementar label-key y value-key correctamente
- Usar slot #item-label en lugar de #item para personalización
- Usar slot #empty para mensajes cuando no hay resultados
- Mapear items a formato InputMenuItem con label y value
- Usar clases de Nuxt UI (text-muted) en lugar de variables CSS
- Simplificar lógica eliminando control manual del estado open

Funcionalidad:
- Filtrado solo se activa con mínimo 4 caracteres
- Búsqueda por nombre y cédula
- Selección múltiple con tags visuales
- Formato de cédula mantenido
2025-10-30 13:16:17 -06:00
c2bf441db7 Refactor: Reemplazar selector de clientes con InputMenu de Nuxt UI
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
Cambios implementados:
- Reemplazar input con checkboxes por UInputMenu con selección múltiple
- Filtrado por nombre y cédula únicamente (sin ubicación)
- El menú de sugerencias solo se abre después de 4 caracteres
- Mantener contador de seleccionados y botón "Limpiar todo"
- Actualizar tipo de cedula de number a string para manejar formato correcto
- Simplificar lógica eliminando filtros por ubicación

Mejoras de UX:
- Interfaz más limpia y moderna con InputMenu
- Búsqueda más eficiente con mínimo de caracteres
- Tags visuales para items seleccionados
- Formato de cédula mantenido (XXXX-XXXX-XXXXX)
2025-10-30 13:12:59 -06:00
a10d39a179 Refactor: Implementación impecable de la sidebar con estado unificado
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
Soluciona todos los problemas identificados en la arquitectura anterior:

Cambios principales:
- Nuevo composable useSidebarState() que centraliza todo el estado
- Elimina múltiples fuentes de verdad que causaban desincronización
- Remueve watchers en cascada y hooks indirectos
- Elimina workarounds manuales de DOM y aria-hidden
- Implementa persistencia consistente en cookies
- Manejo responsive automático (mobile vs desktop)

Archivos modificados:
- app/composables/useSidebarState.ts (nuevo): Composable singleton
- app/components/app/AppSidebar.vue: Usa el nuevo composable
- app/layouts/dashboard.vue: Simplificado, sin refs locales ni workarounds
- docs/SIDEBAR_ARCHITECTURE.md (nuevo): Documentación completa

Beneficios:
✓ Estado consistente en toda la aplicación
✓ No más flickering o comportamientos anómalos
✓ Código más simple y mantenible
✓ Mejor performance (menos re-renders)
✓ Auto-close en mobile al navegar

Referencias:
- app/composables/useSidebarState.ts:1
- app/components/app/AppSidebar.vue:232
- app/layouts/dashboard.vue:40
2025-10-30 11:16:15 -06:00
20f87e37fc Feature: agregar filtros de clientes y ubicaciones en Informe de Ingresos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
- Crear endpoint /api/clientes para obtener clientes desde Supabase
- Crear endpoint /api/postgres/query para ejecutar queries SQL
- Crear componente ClienteMultiSelector con búsqueda y filtro por ubicación
- Agregar filtros de clientes, ubicaciones y calidades en informe-ingresos.vue
- Cargar opciones de filtros desde Metabase (query ID 53)
- Actualizar detección de cambios pendientes con nuevos filtros
- Enviar cliente_ids, ubicaciones y calidades al endpoint de Metabase
- Componente con formato de cédula y ordenamiento por nombre
- Búsqueda por nombre, cédula o ubicación
- Contador de selección y botón limpiar todo
- Botones rápidos para seleccionar por ubicación
2025-10-29 18:36:14 -06:00
5aac61d37a Style: aplicar colores café del tema a tabs e input en Metabase Debug
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
- Personalizar UTabs con prop :ui usando colores de marca
- Tab seleccionada: bg-[#c08040] con texto oscuro
- Tabs inactivas: text-[var(--brand-text-muted)] con hover
- Borde inferior: border-[var(--brand-border)]
- Input de búsqueda con bg, text y border del tema
- Focus ring en color café #c08040
2025-10-29 18:23:34 -06:00
180bb661be Revert "Fix: aplicar estilos de marca a tabs y input de búsqueda en Metabase Debug"
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
This reverts commit f8ae9e44e7.
2025-10-29 18:21:33 -06:00
f8ae9e44e7 Fix: aplicar estilos de marca a tabs y input de búsqueda en Metabase Debug
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
- Envolver tabs en UCard con clase brand-card
- Aplicar estilos de variables CSS al input de búsqueda
- Configurar focus ring con color de marca #c08040
- Usar colores de texto y fondo del tema en input
2025-10-29 18:11:43 -06:00
e85078f6c8 Refactor: unificar estilos de cards de Metabase Debug con Panorama e Informe
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
- Aplicar clase brand-card a todas las cards principales
- Usar colores de variables CSS (--brand-text, --brand-text-muted, --brand-primary)
- Estilizar cards de estadísticas con border-[#3a2a16] y bg-[#1c140c]
- Actualizar estilos de tablas, modales y formularios
- Aplicar estilo consistente a botones principales con color de marca #c08040
2025-10-29 18:06:48 -06:00
e25a0c6b76 Fix: no enviar parámetros opcionales vacíos a Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 45s
Problema:
- Al enviar parámetros con valores vacíos (""), Metabase los expandía
- Filtros opcionales [[AND ...]] se convertían en filtros obligatorios
- Resultado: queries retornaban 0 registros en lugar de aplicar filtros opcionales

Solución:
- Solo enviar parámetros si son requeridos O tienen valor no vacío
- Verificar que el valor no sea null, "", undefined o array vacío
- Los parámetros opcionales sin valor no se incluyen en el request

Afecta: MetabaseCardDisplay.vue executeQuery() líneas 345-360
2025-10-29 17:46:36 -06:00
20d71ba47a Fix: enviar string vacío en lugar de null para parámetros text/date en Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 45s
Problema:
- Metabase rechazaba queries cuando se enviaba null para parámetros text/date
- Error: "faltan los parámetros necesarios: fecha_desde, fecha_hasta"
- Los parámetros usados fuera de [[...]] son considerados requeridos

Solución:
- Cambiar || null a || '' para parámetros de tipo text y date
- Ahora envía string vacío que es compatible con NULLIF() en la query SQL

Afecta: MetabaseCardDisplay.vue líneas 333 y 342
2025-10-29 17:42:34 -06:00
76eaa5fd6a Fix: corregir tipos de parámetros en queries de Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 47s
Problema:
- Las queries de Metabase fallaban con error 500 al ejecutarse desde metabase-debug
- Metabase rechazaba los parámetros porque usaban tipos simples en lugar de tipos con operadores

Solución:
- Actualizar mapeo de tipos de parámetros en MetabaseCardDisplay.vue
- boolean → boolean/=
- date → date/single
- number → number/=
- text → string/=

Esto corrige el error "Tipo de parámetro no válido :text para el parámetro 'cliente_ids'"
2025-10-29 17:30:12 -06:00
33e0319272 Refactor: mover toggle de unidades y aplicar en Precios Promedio Ponderados
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
Cambios en TotalesIngresoCompra:
- Mover botón toggle del header principal al header de sección 'Uva'
- Mejor posicionamiento: solo afecta la sección donde se aplica

Cambios en TotalesMonetarios:
- Agregar toggle de unidades en 'Precios Promedio Ponderados' para Uva
- 3 estados: LB, QQ, Ambos (muestra ambos precios en un contenedor)
- Unificar visualización de 'Uva por LB' y 'Uva por QQ' en un solo contenedor
- Grid cambia de 5 a 4 columnas para mejor layout

Ambos toggles funcionan independientemente y mantienen el mismo patrón
de diseño con iconos dinámicos.
2025-10-29 13:25:43 -06:00
465d68ec17 Feat: agregar toggle de unidades en sección Uva de Totales de Ingreso y Compra
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 49s
- Agregar botón toggle de 3 estados: LB, QQ Seco, Ambos
- Por defecto muestra valores en LB
- Al cambiar a QQ Seco muestra: QQ Seco Ingresado, Pagado, en Depósito
- Al cambiar a Ambos muestra ambas unidades en el mismo contenedor
- Calcular QQ Seco en Depósito para Uva (ingresado - pagado)
- Iconos dinámicos según el modo seleccionado
2025-10-29 13:19:35 -06:00
1af1c61191 Agregar componente RechazosSubproductos para panorama facturador
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 5m28s
2025-10-29 10:05:31 -06:00
ae19af5c9e Fix: corregir renderizado de parámetros en MetabaseCardDisplay
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
- Cambiar tipo de parámetros boolean de 'category' a 'boolean' para que funcione el UToggle
- Detectar campos de fecha por nombre aunque sean tipo text en Metabase
- Renderizar inputs de fecha con date picker para campos que contienen 'fecha'
- Mejorar inicialización de parámetros text que representan fechas

Resuelve el problema donde incluir_anulados no aparecía y fecha_desde/fecha_hasta
se mostraban como text inputs en lugar de date pickers
2025-10-29 09:38:17 -06:00
694ee4e3bb Refactorizar Panorama Facturador: implementar filosofía "Metabase calcula TODO, Vue solo renderiza"
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 5m41s
Cambios principales:

- Refactorizar todos los componentes de panorama para recibir datos directos de Metabase
  * TotalesMonetarios.vue: cambiar de props.metrics a props.data
  * TotalesIngresoCompra.vue: cambiar de props.metrics a props.data
  * TotalesVerde.vue: cambiar de props.metrics a props.data
  * SecosVendidos.vue: cambiar de props.metrics a props.data

- Eliminar fechas hardcodeadas en panorama.post.ts
  * Pasar valores null directamente a Metabase para usar sus defaults

- Marcar composables obsoletos para Panorama Facturador
  * useIngresosMetrics.ts: agregar advertencia de no uso en Panorama
  * useRechazosMetrics.ts: agregar advertencia de no uso en Panorama

Resultado: Todos los cálculos (agregaciones, promedios ponderados) se hacen en Metabase mediante SQL. Los componentes Vue solo renderizan valores ya calculados.
2025-10-27 15:09:03 -06:00
9234c5832c Mejorar botón Inicio con icono de perfil y estilo mejorado
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
- Agregar icono de la app perfil al botón Inicio
- Implementar sistema de fallback para iconos (local → remoto → favicon)
- Aplicar gradientes y estilos inspirados en la app perfil
- Agregar transiciones suaves y efectos hover mejorados
2025-10-18 02:06:06 -06:00
0930aaa699 Actualizar botón sidebar: Mi Perfil → Inicio
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 48s
Cambios en AppSidebar.vue:
- Cambiar link de /profile a https://inicio.nucleoriofrio.com
- Actualizar texto de 'Mi Perfil' a 'Inicio'
- Cambiar icono de user a home
- Actualizar colores de azul a verde

El botón ahora navega a la PWA de inicio usando scope extensions.
2025-10-17 04:08:21 -06:00
93668d9b6f feat: panorama facturador completamente funcional
All checks were successful
build-and-deploy / build (push) Successful in 43s
build-and-deploy / deploy (push) Successful in 3s
- Remover badge de mantenimiento del sidebar
- Eliminar endpoints de debug temporales
- Panorama funcionando con todas las secciones:
  * Totales Financieros
  * Café Seco - Inventario y Proyecciones
  * Totales de Ingreso y Compra
  * Totales Monetarios
  * Café Verde
  * Rechazos y Subproductos
- Todas las 9 queries de Metabase ejecutándose correctamente
- Datos reales mostrados en tiempo real
2025-10-14 10:57:26 -06:00
f8c53da6fc feat: restaurar panorama facturador con nueva arquitectura basada en Metabase
All checks were successful
build-and-deploy / build (push) Successful in 43s
build-and-deploy / deploy (push) Successful in 4s
- Crear endpoint /api/metabase/panorama.post.ts que ejecuta las 9 queries en paralelo
- Restaurar y adaptar panorama.vue para usar el nuevo endpoint
- Crear componentes auxiliares: SecosVendidos, TotalesIngresoCompra, TotalesMonetarios, TotalesVerde, MetricBox, RechazosRechazoCard
- Adaptar RechazosSubproductos para recibir data directamente de Metabase
- Toda la transformación de datos ocurre en las queries SQL de Metabase
- Sin uso de stores ni composables de métricas
- Agregar documentación de queries en archivos MD
2025-10-14 10:34:27 -06:00
45ff3777a7 feat: agregar formulario configurable de parámetros en queries
All checks were successful
build-and-deploy / build (push) Successful in 42s
build-and-deploy / deploy (push) Successful in 3s
- Agregar sección expandible para configurar parámetros antes de ejecutar
- Inputs dinámicos según tipo: toggle para boolean, date picker para fechas, text para otros
- Inicialización automática con valores por defecto de template-tags
- Botón para restablecer parámetros a valores originales
- Usar valores del formulario al ejecutar queries
- Mejorar UX con labels legibles y estilos consistentes
2025-10-14 03:51:00 -06:00
9d5e2dbfe2 fix: usar valores por defecto de template-tags al ejecutar queries
All checks were successful
build-and-deploy / build (push) Successful in 43s
build-and-deploy / deploy (push) Successful in 3s
- Extraer valores por defecto de template-tags de la card
- Construir parámetros dinámicamente basados en la configuración
- Soportar tipos: date, boolean, text
- Resolver error de parámetros faltantes en queries con fechas
2025-10-14 03:47:37 -06:00
c69c3bdafc feat: mejorar visualización de resultados de queries en Metabase Debug
All checks were successful
build-and-deploy / build (push) Successful in 43s
build-and-deploy / deploy (push) Successful in 3s
- Agregar tabla estructurada para mostrar resultados de queries
- Agregar botón de copiar JSON profesional con feedback visual
- Agregar formato automático de números y fechas según tipo de columna
- Mantener vista JSON colapsable para ver datos completos
- Mejorar UX con tabla responsive y estilos consistentes
2025-10-14 03:42:52 -06:00
02d17b816b fix: agregar parámetros por defecto y estado vacío amigable
All checks were successful
build-and-deploy / build (push) Successful in 43s
build-and-deploy / deploy (push) Successful in 3s
Soluciona dos problemas en la ejecución de queries de Metabase:

1. Error de parámetros faltantes:
   - Las queries requieren parámetros (incluir_anulados, fecha_desde, fecha_hasta)
   - Agregado valores por defecto a todas las llamadas POST:
     * incluir_anulados: false
     * fecha_desde: null (sin filtro)
     * fecha_hasta: null (sin filtro)

2. Estado vacío poco amigable:
   - Cuando rows y cols están vacíos mostraba solo JSON
   - Agregado EmptyState visual con:
     * Icono de tabla vacía
     * Mensaje "No hay datos"
     * Descripción explicativa

Cambios en:
- MetabaseCardDisplay.vue: executeQuery() con parámetros y EmptyState
- MetabaseCardsTable.vue: executeCard() con parámetros y EmptyState en modal
2025-10-14 03:10:53 -06:00
585d31a374 fix: mejorar visualización responsive en móvil para metabase-debug
All checks were successful
build-and-deploy / build (push) Successful in 42s
build-and-deploy / deploy (push) Successful in 3s
Ajustes realizados:

Components:
- MetabaseCardDisplay: grid responsive, queries con wrap, botones apilables
- MetabaseCardsTable: filtros verticales en móvil, acciones con wrap

Page:
- Header responsive con elementos apilados
- Stats en grid 2x2 para móvil, 4 columnas en desktop
- Tamaños de fuente adaptados con breakpoints

Todas las queries SQL y JSON ahora usan whitespace-pre-wrap y break-words
para aprovechar el espacio vertical en lugar de scroll horizontal.
2025-10-14 02:21:51 -06:00
214d9a17d5 feat: agregar link a Metabase Debug en sidebar
All checks were successful
build-and-deploy / build (push) Successful in 41s
build-and-deploy / deploy (push) Successful in 3s
Agrega nuevo item de navegación en la sidebar para acceder
a la página de debugging de Metabase.
2025-10-14 02:14:41 -06:00
90aebbde3d feat: agregar página de debug para Metabase
All checks were successful
build-and-deploy / build (push) Successful in 41s
build-and-deploy / deploy (push) Successful in 3s
- Crear componente MetabaseCardDisplay para mostrar detalles de queries
- Crear componente MetabaseCardsTable para listar todas las queries
- Crear página /metabase-debug con vistas de tabla, cards y queries Panorama
- Agregar API routes para cards de Metabase (GET, POST, export)
- Actualizar metabase.ts para soportar API Key authentication
- Agregar configuración de Metabase API Key en nuxt.config.ts
- Documentar todos los endpoints disponibles en METABASE_API_ENDPOINTS.md
2025-10-14 01:34:56 -06:00
87dec62ee1 feat: remove maintenance badge from data explorer in sidebar
All checks were successful
build-and-deploy / build (push) Successful in 42s
build-and-deploy / deploy (push) Successful in 3s
2025-10-13 18:35:07 -06:00
2cf2242b82 Add maintenance mode to data analysis pages
All checks were successful
build-and-deploy / build (push) Successful in 45s
build-and-deploy / deploy (push) Successful in 4s
Restore all data analysis pages but display them in maintenance mode.
Users can see these pages in the navigation and access them, but they
show a maintenance message instead of trying to fetch data.

Changes:
- Create MaintenanceMode component for reusable maintenance UI
- Restore all deleted pages: explorer, metadatos, rawExplorer, panorama,
  comparativa-cosechas, informe-ingresos
- Replace complex data-fetching logic with MaintenanceMode component
- Add "Mantenimiento" badges to navigation menu items
- Pages show clear maintenance message with technical details
- Users can still navigate to these pages without errors

This approach:
- Keeps the UI structure intact
- Shows users what features exist
- Provides clear communication about maintenance status
- Prevents confusion about missing features
- Easy to re-enable when data sources are reconnected
2025-10-13 13:52:13 -06:00
608b4dbe26 Remove all database dependencies and simplify application
All checks were successful
build-and-deploy / build (push) Successful in 3m37s
build-and-deploy / deploy (push) Successful in 4s
BREAKING CHANGE: Remove all data analysis features

This commit removes all database-dependent functionality and simplifies
the application to focus on authentication and user management only.

Changes:
- Remove all /api/data and /api/metadata server endpoints
- Remove Supabase configuration from nuxt.config.ts and .env.example
- Remove @supabase/supabase-js dependency from package.json
- Delete data analysis pages: explorer, metadatos, rawExplorer, panorama,
  comparativa-cosechas, informe-ingresos
- Simplify sidebar navigation to show only "Inicio"
- Update home page to focus on authentication and profile management
- Remove "Supabase" and "Solo lectura" badges from navbar
- Keep only auth-related API endpoints: /api/auth/status and /api/auth/check-group

The application now serves as an authentication-protected portal with:
- Authentik SSO integration
- User profile management
- Settings and notifications pages (coming soon)
- No database or data analysis features
2025-10-13 13:37:52 -06:00
4a3624b231 Add SessionStatusButton to navbar
All checks were successful
build-and-deploy / build (push) Successful in 52s
build-and-deploy / deploy (push) Successful in 4s
- Add AuthSessionStatusButton to dashboard layout navbar
- Redesign button as compact icon button for navbar integration
- Button checks session status against Authentik in real-time
- Styled to match navbar aesthetic with hover effects
2025-10-13 13:07:52 -06:00
e4d0b43692 feat: agregar componentes de auth y UserMetadata en dropdown del UserMenu
All checks were successful
build-and-deploy / build (push) Successful in 35s
build-and-deploy / deploy (push) Successful in 4s
2025-10-13 11:58:38 -06:00
d32b3e8db3 feat: migrar a useAuthentik y configurar CI/CD con Gitea Actions
Some checks failed
build-and-deploy / build (push) Failing after 6s
build-and-deploy / deploy (push) Has been skipped
deploy-analiticaNucleo / deploy (push) Failing after 2s
- Migrar de useAuth() a useAuthentik() para autenticación SSR
- Actualizar componentes UserMenu, AppSidebar y profile.vue
- Configurar docker-compose.yml con variables dinámicas
- Agregar Gitea Actions workflow para build y deploy automático
- Implementar hook de monitoreo de Gitea Actions
- Configurar secrets y variables para deploy seguro
- Actualizar configuración de Traefik con Authentik Forward Auth
2025-10-13 11:25:40 -06:00
16cef018b5 logout e integracion con authentik completa
All checks were successful
deploy-analiticaNucleo / deploy (push) Successful in 36s
2025-10-05 17:08:53 -06:00
0380f69f1b entorno de desarrollo listo 2025-10-05 15:56:42 -06:00
2b252d798b preparando el deploy
Some checks failed
deploy-analiticaNucleo / deploy (push) Failing after 2s
2025-10-05 12:13:32 -06:00