69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
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)
|
|
const precioPromedio = totalCantidad > 0 ? totalCobrado / totalCantidad : 0
|
|
|
|
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
|
|
}
|
|
} |