Composables

useFasiMetrics

Composable per metriche di avanzamento e stallo della pipeline.

Panoramica

useFasiMetrics carica le metriche aggregate dalla pipeline: avanzamento per stato e schede in stallo. È usato da KanbanFasiBoard per alimentare FaseProgressBar e FaseStalloIndicator.

Inizializzazione

import { useFasiMetrics } from '@pzeta/vue-kanban'

const metrics = useFasiMetrics(boardId)

Stato reattivo

ProprietàTipoDescrizione
avanzamentoRef<FaseAvanzamento[]>Dati da v_fasi_avanzamento
stalliRef<SchedaStallo[]>Schede in stallo da v_stalli_pipeline
loadingRef<boolean>Caricamento in corso

Metodi

// Carica avanzamento: distribuzione stati per fase
await metrics.loadAvanzamento()
// GET /v_fasi_avanzamento?idboard=eq.{id} (schema fasi)

// Carica stalli: schede oltre il giornistallo della loro fase
await metrics.loadStalli()
// GET /v_stalli_pipeline?idboard=eq.{id} (schema fasi)

FaseAvanzamento

interface FaseAvanzamento {
  idfase: number
  codstatoscheda: CodStatoScheda
  nschede: number
  percentuale: number
}

v_fasi_avanzamento restituisce una riga per ogni combinazione fase×stato con schede presenti.

SchedaStallo

interface SchedaStallo {
  idscheda: number
  idfase: number
  titolo: string
  giorni_infase: number
  giorni_oltre: number    // giorni_infase - giornistallo della fase
  giornistallo: number    // limite configurato sulla fase
  nome_fase: string
}

Utilizzo manuale

KanbanFasiBoard chiama loadAvanzamento e loadStalli al mount in parallelo con gli altri caricamenti. Per refresh su richiesta:

// Dopo un aggiornamento importante
await Promise.all([metrics.loadAvanzamento(), metrics.loadStalli()])

Calcolo max giorni stallo per fase

KanbanFasiBoard calcola il massimo giorni_oltre per fase tramite computed:

const maxGiorniOltrePerFase = computed(() => {
  const map = new Map<number, number>()
  for (const s of metrics.stalli.value) {
    const current = map.get(s.idfase) ?? 0
    if (s.giorni_oltre > current) map.set(s.idfase, s.giorni_oltre)
  }
  return map
})

Questo valore viene passato a FaseHeader come giorniOltreMassimo.