From b3f8a87dd80235b82cdf32062034e5013f375f27 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Tue, 30 Sep 2025 15:13:08 -0600 Subject: [PATCH] ui/ux panorama facturador --- nuxt4-app/app/components/MetricCard.vue | 2 +- .../components/ingresos/PreciosPromedio.vue | 40 ++++ .../app/components/ingresos/SecosVendidos.vue | 19 +- .../ingresos/TotalesIngresoCompra.vue | 211 +++++++++++++++--- .../app/components/ingresos/TotalesVerde.vue | 15 +- .../app/components/rechazos/RechazoCard.vue | 9 +- .../app/composables/useIngresosMetrics.ts | 90 ++++++++ nuxt4-app/app/pages/panorama.vue | 4 +- 8 files changed, 347 insertions(+), 43 deletions(-) create mode 100644 nuxt4-app/app/components/ingresos/PreciosPromedio.vue diff --git a/nuxt4-app/app/components/MetricCard.vue b/nuxt4-app/app/components/MetricCard.vue index c8cb632..8d4b464 100644 --- a/nuxt4-app/app/components/MetricCard.vue +++ b/nuxt4-app/app/components/MetricCard.vue @@ -7,7 +7,7 @@ {{ label }}
{{ value }} - {{ unit }} + {{ unit }}
diff --git a/nuxt4-app/app/components/ingresos/PreciosPromedio.vue b/nuxt4-app/app/components/ingresos/PreciosPromedio.vue new file mode 100644 index 0000000..bcc2d76 --- /dev/null +++ b/nuxt4-app/app/components/ingresos/PreciosPromedio.vue @@ -0,0 +1,40 @@ + + + diff --git a/nuxt4-app/app/components/ingresos/SecosVendidos.vue b/nuxt4-app/app/components/ingresos/SecosVendidos.vue index 2914515..d3c664a 100644 --- a/nuxt4-app/app/components/ingresos/SecosVendidos.vue +++ b/nuxt4-app/app/components/ingresos/SecosVendidos.vue @@ -6,21 +6,21 @@
@@ -35,6 +35,13 @@ defineProps<{ metrics: IngresosMetrics }>() +const formatNumber = (value: number) => { + return value.toLocaleString('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }) +} + const formatCurrency = (value: number) => { return new Intl.NumberFormat('es-HN', { style: 'currency', diff --git a/nuxt4-app/app/components/ingresos/TotalesIngresoCompra.vue b/nuxt4-app/app/components/ingresos/TotalesIngresoCompra.vue index 6428091..9d04313 100644 --- a/nuxt4-app/app/components/ingresos/TotalesIngresoCompra.vue +++ b/nuxt4-app/app/components/ingresos/TotalesIngresoCompra.vue @@ -1,45 +1,198 @@ \ No newline at end of file diff --git a/nuxt4-app/app/components/ingresos/TotalesVerde.vue b/nuxt4-app/app/components/ingresos/TotalesVerde.vue index 088bad9..ba3a6d6 100644 --- a/nuxt4-app/app/components/ingresos/TotalesVerde.vue +++ b/nuxt4-app/app/components/ingresos/TotalesVerde.vue @@ -7,17 +7,17 @@
@@ -33,7 +33,7 @@ />
@@ -47,6 +47,13 @@ defineProps<{ metrics: IngresosMetrics }>() +const formatNumber = (value: number) => { + return value.toLocaleString('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }) +} + const formatCurrency = (value: number) => { return new Intl.NumberFormat('es-HN', { style: 'currency', diff --git a/nuxt4-app/app/components/rechazos/RechazoCard.vue b/nuxt4-app/app/components/rechazos/RechazoCard.vue index 042938a..ddc2fea 100644 --- a/nuxt4-app/app/components/rechazos/RechazoCard.vue +++ b/nuxt4-app/app/components/rechazos/RechazoCard.vue @@ -4,7 +4,7 @@
Total {{ unidad }}: - {{ metrics.value.totalCantidad.toFixed(2) }} {{ unidad }} + {{ formatNumber(metrics.value.totalCantidad) }} {{ unidad }}
Precio promedio: @@ -44,6 +44,13 @@ const borderColor = computed(() => { return colors[props.color] }) +const formatNumber = (value: number) => { + return value.toLocaleString('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }) +} + const formatCurrency = (value: number) => { return new Intl.NumberFormat('es-HN', { style: 'currency', diff --git a/nuxt4-app/app/composables/useIngresosMetrics.ts b/nuxt4-app/app/composables/useIngresosMetrics.ts index 74ccab8..d37946f 100644 --- a/nuxt4-app/app/composables/useIngresosMetrics.ts +++ b/nuxt4-app/app/composables/useIngresosMetrics.ts @@ -13,6 +13,16 @@ export interface IngresosMetrics { // Totales de ingreso y compra totalQqSecoIngresado: ComputedRef totalQqSecoComprado: ComputedRef + totalLbUvaIngresada: ComputedRef + totalQqSecoUvaIngresado: ComputedRef + totalQqSecoMojadoIngresado: ComputedRef + totalQqSecoOreadoIngresado: ComputedRef + totalQqSecoMojadoOreadoIngresado: ComputedRef + totalLbUvaPagada: ComputedRef + totalQqSecoUvaPagado: ComputedRef + totalQqSecoMojadoPagado: ComputedRef + totalQqSecoOreadoPagado: ComputedRef + totalQqSecoMojadoOreadoPagado: ComputedRef precioPromedioUvaPorQqLb: ComputedRef precioPromedioOreadoPorQq: ComputedRef precioPromedioMojadoPorQq: ComputedRef @@ -75,6 +85,76 @@ export function useIngresosMetrics(ingresos: ComputedRef) { .reduce((sum, i) => sum + (i.peso_seco || 0), 0) }) + // Total lb uva ingresada (peso_neto) - pagado y pendiente + const totalLbUvaIngresada = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'uva' && (i.estado === 'pagado' || i.estado === 'pendiente')) + .reduce((sum, i) => sum + (i.peso_neto || 0), 0) + }) + + // Total qq seco uva ingresado (peso_seco) - pagado y pendiente + const totalQqSecoUvaIngresado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'uva' && (i.estado === 'pagado' || i.estado === 'pendiente')) + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco mojado ingresado (peso_seco) - pagado y pendiente + const totalQqSecoMojadoIngresado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'mojado' && (i.estado === 'pagado' || i.estado === 'pendiente')) + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco oreado ingresado (peso_seco) - pagado y pendiente + const totalQqSecoOreadoIngresado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'oreado' && (i.estado === 'pagado' || i.estado === 'pendiente')) + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco mojado/oreado ingresado (peso_seco) - pagado y pendiente + const totalQqSecoMojadoOreadoIngresado = computed(() => { + return ingresos.value + .filter(i => (i.tipo === 'mojado' || i.tipo === 'oreado') && (i.estado === 'pagado' || i.estado === 'pendiente')) + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total lb uva pagada (peso_neto) - solo pagado + const totalLbUvaPagada = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'uva' && i.estado === 'pagado') + .reduce((sum, i) => sum + (i.peso_neto || 0), 0) + }) + + // Total qq seco uva pagado (peso_seco) - solo pagado + const totalQqSecoUvaPagado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'uva' && i.estado === 'pagado') + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco mojado pagado (peso_seco) - solo pagado + const totalQqSecoMojadoPagado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'mojado' && i.estado === 'pagado') + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco oreado pagado (peso_seco) - solo pagado + const totalQqSecoOreadoPagado = computed(() => { + return ingresos.value + .filter(i => i.tipo === 'oreado' && i.estado === 'pagado') + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + + // Total qq seco mojado/oreado pagado (peso_seco) - solo pagado + const totalQqSecoMojadoOreadoPagado = computed(() => { + return ingresos.value + .filter(i => (i.tipo === 'mojado' || i.tipo === 'oreado') && i.estado === 'pagado') + .reduce((sum, i) => sum + (i.peso_seco || 0), 0) + }) + const precioPromedioUvaPorQqLb = computed(() => { const uvasPagadas = ingresos.value.filter(i => i.tipo === 'uva' && i.estado === 'pagado') const sumaPesoNeto = uvasPagadas.reduce((sum, i) => sum + (i.peso_neto || 0), 0) @@ -242,6 +322,16 @@ export function useIngresosMetrics(ingresos: ComputedRef) { // Totales de ingreso y compra totalQqSecoIngresado, totalQqSecoComprado, + totalLbUvaIngresada, + totalQqSecoUvaIngresado, + totalQqSecoMojadoIngresado, + totalQqSecoOreadoIngresado, + totalQqSecoMojadoOreadoIngresado, + totalLbUvaPagada, + totalQqSecoUvaPagado, + totalQqSecoMojadoPagado, + totalQqSecoOreadoPagado, + totalQqSecoMojadoOreadoPagado, precioPromedioUvaPorQqLb, precioPromedioOreadoPorQq, precioPromedioMojadoPorQq, diff --git a/nuxt4-app/app/pages/panorama.vue b/nuxt4-app/app/pages/panorama.vue index 2fe86ed..7b9abcd 100644 --- a/nuxt4-app/app/pages/panorama.vue +++ b/nuxt4-app/app/pages/panorama.vue @@ -166,12 +166,12 @@ + - + -