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.
95 lines
3.2 KiB
TypeScript
95 lines
3.2 KiB
TypeScript
/**
|
|
* ⚠️ ADVERTENCIA - COMPOSABLE OBSOLETO PARA PANORAMA FACTURADOR ⚠️
|
|
*
|
|
* Este composable NO debe usarse en el Panorama Facturador.
|
|
*
|
|
* FILOSOFÍA DE LA APLICACIÓN:
|
|
* "Metabase calcula TODO. Vue solo renderiza."
|
|
*
|
|
* Los cálculos de métricas, agregaciones y promedios DEBEN hacerse
|
|
* en Metabase mediante SQL. Los componentes de Vue solo deben recibir
|
|
* datos ya calculados y renderizarlos.
|
|
*
|
|
* Este composable existe para compatibilidad con otras páginas legacy,
|
|
* pero NO debe usarse en nuevas funcionalidades del Panorama.
|
|
*
|
|
* Para el Panorama Facturador, consulta:
|
|
* - METABASE_QUERIES_PANORAMA.md (Query #6: panorama_rechazos_subproductos)
|
|
* - server/api/metabase/panorama.post.ts
|
|
* - pages/panorama.vue
|
|
* - components/rechazos/RechazosSubproductos.vue
|
|
*
|
|
* Última actualización: 2025-10-27
|
|
*/
|
|
|
|
import { computed } from 'vue'
|
|
import type { ComputedRef } from 'vue'
|
|
|
|
export interface RechazoRecord {
|
|
tipo: 'chibolita' | 'perico' | 'vano' | 'picadillo' | 'magalla' | 'pinta'
|
|
cantidad: number // libras para chibolita, perico, pinta; galones para vano, picadillo, magalla
|
|
precio_unitario: number
|
|
total_cobrado: number
|
|
}
|
|
|
|
export interface RechazoMetrics {
|
|
totalCantidad: number
|
|
precioPromedio: number
|
|
totalCobrado: number
|
|
}
|
|
|
|
export interface RechazosMetrics {
|
|
chibolita: ComputedRef<RechazoMetrics>
|
|
perico: ComputedRef<RechazoMetrics>
|
|
vano: ComputedRef<RechazoMetrics>
|
|
picadillo: ComputedRef<RechazoMetrics>
|
|
magalla: ComputedRef<RechazoMetrics>
|
|
pinta: ComputedRef<RechazoMetrics>
|
|
totalRechazos: ComputedRef<number>
|
|
}
|
|
|
|
export function useRechazosMetrics(rechazos: ComputedRef<RechazoRecord[]>) {
|
|
const calcularMetricasPorTipo = (tipo: RechazoRecord['tipo']): ComputedRef<RechazoMetrics> => {
|
|
return computed(() => {
|
|
const registros = rechazos.value.filter(r => r.tipo === tipo)
|
|
|
|
const totalCantidad = registros.reduce((sum, r) => sum + (r.cantidad || 0), 0)
|
|
// const totalCobrado = registros.reduce((sum, r) => sum + (r.total_cobrado || 0), 0) DESACTIVADO HASTA NORMALIZAR LOS DATOS DE LA TABLA ORIGINAL, MENCIONAR SI TE TOPAS CON ESTO UN MES DESPUES ESTAMOS EN 1 OCTUBRE 2025
|
|
// const precioPromedio = totalCantidad > 0 ? totalCobrado / totalCantidad : 0 DESACTIVADO HASTA NORMALIZAR LOS DATOS DE LA TABLA ORIGINAL, MENCIONAR SI TE TOPAS CON ESTO UN MES DESPUES ESTAMOS EN 1 OCTUBRE 2025
|
|
const precioPromedio = 10
|
|
const totalCobrado = 100
|
|
|
|
return {
|
|
totalCantidad,
|
|
precioPromedio,
|
|
totalCobrado
|
|
}
|
|
})
|
|
}
|
|
|
|
const chibolita = calcularMetricasPorTipo('chibolita')
|
|
const perico = calcularMetricasPorTipo('perico')
|
|
const vano = calcularMetricasPorTipo('vano')
|
|
const picadillo = calcularMetricasPorTipo('picadillo')
|
|
const magalla = calcularMetricasPorTipo('magalla')
|
|
const pinta = calcularMetricasPorTipo('pinta')
|
|
|
|
const totalRechazos = computed(() => {
|
|
return chibolita.value.totalCobrado +
|
|
perico.value.totalCobrado +
|
|
vano.value.totalCobrado +
|
|
picadillo.value.totalCobrado +
|
|
magalla.value.totalCobrado +
|
|
pinta.value.totalCobrado
|
|
})
|
|
|
|
return {
|
|
chibolita,
|
|
perico,
|
|
vano,
|
|
picadillo,
|
|
magalla,
|
|
pinta,
|
|
totalRechazos
|
|
}
|
|
} |