Tipi

RPC ed Eventi

Request/response RPC e payload eventi MFE.

RPC — pianifica_attivita

Crea una nuova attività con assegnatari multipli.

interface PianificaAttivitaRequest {
  p_idtipoattivita: number
  p_entitasorgente: string
  p_identitasorgente: number
  p_datascadenza?: string          // obbligatoria se p_completata_subito = false
  p_idutente?: number
  p_riepilogo?: string
  p_nota?: string
  p_priorita?: 1 | 2 | 3 | 4
  p_orarioinizio?: string
  p_orariofine?: string
  p_assegnatari?: number[]
  p_completata_subito?: boolean    // true = segna come fatto subito
}

interface PianificaAttivitaResponse {
  success: boolean
  idattivita: number
  tipo: string
  icona: string
  stato: 'pianificata' | 'completata'
  statovisivo: StatoVisivo
  datascadenza: string
  assegnatari: Array<{ idutente: number; principale: boolean }>
}

RPC — completa_attivita

interface CompletaAttivitaRequest {
  p_idattivita: number
  p_risultato?: string
}

interface CompletaAttivitaResponse {
  success: boolean
  idattivita: number
  datacompletamento: string
  attivita_successive: AttivitaSuccessiva[]
  ricorrenza_creata: { idattivita: number; datascadenza: string } | null
}

AttivitaSuccessiva

interface AttivitaSuccessiva {
  tipo: 'attivata' | 'suggerita'
  idattivita?: number      // se tipo = 'attivata'
  idtipoattivita?: number  // se tipo = 'suggerita'
  nometipo: string
  icona?: string
  datascadenza: string
}

RPC — annulla_attivita

interface AnnullaAttivitaRequest {
  p_idattivita: number
  p_motivo?: string
}

interface AnnullaAttivitaResponse {
  success: boolean
  idattivita: number
  stato: 'annullata'
  ricorrenza_creata: { idattivita: number; datascadenza: string } | null
}

RPC — conta_attivita_utente

// Response di GET /rpc/conta_attivita_utente
interface ContatoreAttivita {
  in_ritardo: number
  oggi: number
  futuro: number
  totale_pianificate: number
}

Firma digitale

interface RichiestafirmaRequest {
  iddocumento: number | null
  firmatari: Array<{ email: string; nome: string; ordine: number }>
  messaggio: string
  scadenzafirma: string | null
  firmadelrichiedente?: string | null  // base64 PNG
}

interface RichiestafirmaResult {
  idrichiestafirma: string
  stato: 'inviata' | 'completata' | 'rifiutata'
  urlfirma: string
}

Upload documento

// POST /api/attivita/{id}/upload-documento
interface UploadDocumentoResult {
  iddocumento: number
  nome: string
  url: string         // URL MinIO
  dimensione: number  // bytes
}

Eventi MFE

Gli eventi vengono emessi tramite onEvent configurato nel plugin:

Nome eventoPayloadQuando
attivita:createdAttivitaCreatedPayloadDopo pianificaAttivita
attivita:completataAttivitaCompletedPayloadDopo completaAttivita
attivita:annullataAttivitaCancelledPayloadDopo annullaAttivita
attivita:scadenza-imminente{ totale_in_ritardo, oggi }In fetchDashboard se ci sono urgenti
// In main.ts
app.use(AttivitaPlugin, {
  baseUrl: '/attivita',
  onEvent: (name, payload) => {
    if (name === 'attivita:created') {
      notificheStore.add({ type: 'success', message: 'Attività pianificata' })
    }
    if (name === 'attivita:scadenza-imminente') {
      headerStore.setBadge((payload as any).totale_in_ritardo)
    }
  },
})