From 5500c83f9f834014a1a22bcaee093fbbdc741c87 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Thu, 30 Oct 2025 17:13:21 -0600 Subject: [PATCH] Feat: Agregar botones de copia a Panorama Facturador MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implementa botones "Copiar Texto" y "Copiar JSON" en todos los componentes de datos del Panorama Facturador: Componentes actualizados: - SecosVendidos: Exporta inventario y proyecciones de café seco - RechazosSubproductos: Exporta tabla de rechazos con totales - Totales Financieros: Exporta vista general financiera (directo en página) Además: - Los componentes de Totales (IngresoCompra, Monetarios, Verde) ahora reciben contadores y metadata para incluir footer - Todos los textos incluyen footer con: - Rango de fechas - Ingresos y rechazos filtrados vs totales - Fecha de generación Nota: Panorama no tiene datos de clientes, solo ingresos y rechazos. --- .../app/components/RechazosSubproductos.vue | 86 +++++++++++++- nuxt4-app/app/components/SecosVendidos.vue | 60 +++++++++- nuxt4-app/app/pages/panorama.vue | 110 ++++++++++++++++-- 3 files changed, 245 insertions(+), 11 deletions(-) diff --git a/nuxt4-app/app/components/RechazosSubproductos.vue b/nuxt4-app/app/components/RechazosSubproductos.vue index b4e74ce..2eddc19 100644 --- a/nuxt4-app/app/components/RechazosSubproductos.vue +++ b/nuxt4-app/app/components/RechazosSubproductos.vue @@ -1,8 +1,34 @@ @@ -297,6 +359,38 @@ const formatCurrency = (value: number) => { }).format(value).replace('HNL', 'L') } +// Funciones de copia para Totales Financieros +async function copiarTotalesFinancierosTexto() { + if (!data.value?.financieros) return + + const footer = ` +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +📊 RESUMEN +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +📅 Rango: ${rangoLegible.value} +📦 Ingresos: ${data.value.conteos?.ingresos_filtrados || 0} de ${data.value.conteos?.ingresos_total || 0} registros +📦 Rechazos: ${data.value.conteos?.rechazos_filtrados || 0} de ${data.value.conteos?.rechazos_total || 0} registros +🕐 Generado: ${lastUpdated.value}` + + const texto = `💰 TOTALES FINANCIEROS + +📊 VISTA GENERAL: + Total Invertido en Café: ${formatCurrency(data.value.financieros.total_invertido_cafe)} + Total Rechazos: ${formatCurrency(data.value.financieros.total_rechazos)} + Balance Neto: ${formatCurrency(data.value.financieros.balance_neto)}${footer}` + + await navigator.clipboard.writeText(texto) + alert('✅ Totales Financieros copiados al portapapeles') +} + +async function copiarTotalesFinancierosJSON() { + if (!data.value?.financieros) return + + const json = JSON.stringify(data.value.financieros, null, 2) + await navigator.clipboard.writeText(json) + alert('✅ JSON copiado al portapapeles') +} + // Methods async function loadData() { // Prevenir múltiples peticiones simultáneas