Composables
UseAttivita
title: useAttivita description: Composable principale per CRUD attività su una specifica entità.
Panoramica
useAttivita gestisce tutte le operazioni CRUD per le attività di una specifica entità. Dopo ogni operazione ricarica automaticamente la lista e emette eventi cross-app tramite onEvent.
Internamente usa repository ottenuto via useAttivitaContext — quindi richiede AttivitaPlugin configurato (con baseUrl o repository custom).
Auto-refresh cross-componente (v1.0.0): ogni metodo di scrittura (
pianifica/completa/annulla/ripristina/elimina/segnaComeFatto/aggiungi/rimuoviAssegnatario) incrementa refreshSignal del context. Inoltre useAttivita watcha refreshSignal per ri-fetchare attività + riepilogo quando un altro componente dell'app effettua una modifica. Per disabilitare, usare un repository custom che non incrementi il signal.Inizializzazione
import { useAttivita } from '@pzeta/vue-attivita'
const { attivita, riepilogo, loading, error, fetchAttivita, pianificaAttivita, completaAttivita } =
useAttivita({
entitasorgente: 'anagrafica',
identitasorgente: 42,
})
Accetta anche MaybeRef — utile in componenti dove l'ID cambia dinamicamente:
const { attivita } = useAttivita({
entitasorgente: toRef(props, 'entitasorgente'),
identitasorgente: toRef(props, 'identitasorgente'),
})
Stato reattivo
| Proprietà | Tipo | Descrizione |
|---|---|---|
attivita | Ref<AttivitaView[]> | Lista attività |
riepilogo | Ref<AttivitaRiepilogo | null> | Contatori riepilogo |
loading | Ref<boolean> | Caricamento in corso |
error | Ref<string | null> | Messaggio errore |
Metodi
Caricamento
// Carica attività con filtri opzionali
await fetchAttivita({ stato: 'pianificata', priorita: 3 })
// Carica riepilogo contatori
await fetchRiepilogo()
// Entrambi in parallelo
await refresh()
Pianificazione
const result = await pianificaAttivita({
p_idtipoattivita: 1,
p_entitasorgente: 'anagrafica',
p_identitasorgente: 42,
p_riepilogo: 'Chiamata di follow-up',
p_datascadenza: '2025-12-31',
p_idutente: 10,
p_priorita: 2,
p_assegnatari: [10, 15],
})
// Emette: 'attivita:created'
Completamento
const result = await completaAttivita({
p_idattivita: 123,
p_risultato: 'Cliente interessato, fissato appuntamento',
})
// result.attivita_successive → eventuali attività da pianificare
// Emette: 'attivita:completata'
Annullamento
const result = await annullaAttivita({
p_idattivita: 123,
p_motivo: 'Cliente non raggiungibile',
})
// Emette: 'attivita:annullata'
Segna come fatto (pianifica + completa subito)
await segnaComeFatto({
p_idtipoattivita: 1,
p_entitasorgente: 'anagrafica',
p_identitasorgente: 42,
p_riepilogo: 'Nota su cliente',
// p_datascadenza non richiesta
})
Altre operazioni
await ripristinaAttivita(idattivita) // da 'annullata' a 'pianificata'
await eliminaAttivita(idattivita) // eliminazione definitiva
await aggiungiAssegnatario(idattivita, idutente)
await rimuoviAssegnatario(idattivita, idutente)
const assegnatari = await getAssegnatari(idattivita)
AttivitaFilters
interface AttivitaFilters {
entitasorgente?: string
identitasorgente?: number
stato?: 'pianificata' | 'completata' | 'annullata'
scaduta?: boolean
idutente?: number
codtipoattivita?: CodTipoAttivita
priorita?: Priorita
datascadenzaDa?: string // YYYY-MM-DD
datascadenzaA?: string // YYYY-MM-DD
order?: 'datascadenza.asc' | 'datascadenza.desc' | 'priorita.desc'
limit?: number
offset?: number
}