Composables
useAttivita
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
}