# Stored Procedures

Questa cartella contiene la documentazione di tutte le 11 stored procedures del database.

## Procedures Business Logic

| Procedura | Descrizione |
|-----------|-------------|
| [EVENTI_AGGIORNA_QTA_LISTA](EVENTI_AGGIORNA_QTA_LISTA.md) | Ricalcola tutte le quantità della lista prelievo |
| [EVENTI_AGGIORNA_TOT_OSPITI](EVENTI_AGGIORNA_TOT_OSPITI.md) | Aggiorna il totale ospiti in testata evento |
| [EVENTI_COPIA](EVENTI_COPIA.md) | Duplica un evento con tutti i dettagli |
| [EVENTI_RICALCOLA_ACCONTI](EVENTI_RICALCOLA_ACCONTI.md) | Ricalcola gli importi degli acconti |
| [EVENTO_ELIMINA_PRELIEVI](EVENTO_ELIMINA_PRELIEVI.md) | Elimina i prelievi di un evento |
| [LISTE_COPIA](LISTE_COPIA.md) | Copia selettiva di liste tra due eventi |
| [P_CANCEL_SAME_LOCATION_EVENTS](P_CANCEL_SAME_LOCATION_EVENTS.md) | Annulla eventi nella stessa location/data |

## Procedures Utility

| Procedura | Descrizione |
|-----------|-------------|
| [ROWSORT_TIPI](ROWSORT_TIPI.md) | Riordina i tipi materiale |
| [HTPPRN](HTPPRN.md) | Output HTTP per APEX |
| [SEND_DATA_TO_DROPBOX](SEND_DATA_TO_DROPBOX.md) | Export dati verso Dropbox |
| [XLOG](XLOG.md) | Procedura di logging |

## Dettaglio Procedures Critiche

### EVENTI_AGGIORNA_QTA_LISTA

**Parametri:**
- `p_id_evento NUMBER` - ID dell'evento

**Logica:**
1. Cicla su tutti gli articoli nella lista prelievo
2. Per ogni articolo determina il metodo di calcolo:
   - **Quantità Standard**: Se `QTA_STD_A/S/B` sono valorizzate
   - **Tovagliato/Caraffe**: Moltiplica per quantità tavoli/angoli
   - **Codice Relativo**: Moltiplica per quantità articolo di riferimento
   - **Standard**: Moltiplica coefficienti per totale ospiti
3. Verifica disponibilità rispetto alla giacenza
4. Aggiorna note con warning se quantità insufficiente

### EVENTI_COPIA

**Parametri:**
- `id_evento_old NUMBER` - ID evento da copiare
- `nuova_versione NUMBER DEFAULT 0` - 1 per creare nuova versione
- `id_evento_new OUT NUMBER` - ID nuovo evento creato

**Logica:**
1. Copia testata evento
2. Se nuova versione: imposta `ID_EVT_PADRE`, incrementa `VERS_NUMBER`
3. Aggiorna evento vecchio con `ID_EVT_FIGLIO`
4. Copia tutte le tabelle dettaglio:
   - `EVENTI_DET_DEGUST`
   - `EVENTI_DET_OSPITI` (via UPDATE, non INSERT)
   - `EVENTI_DET_PREL`
   - `EVENTI_DET_RIS`
   - `EVENTI_ACCONTI`
   - `EVENTI_ALTRICOSTI`
5. In caso di errore: elimina evento creato e solleva eccezione

### EVENTI_RICALCOLA_ACCONTI

**Parametri:**
- `p_event_id NUMBER` - ID evento

**Logica:**
1. Calcola totale evento dalle viste costo
2. Se nessun acconto pagato:
   - Elimina acconti esistenti
   - Inserisce nuovi acconti con percentuali 30%-50%-20%
3. Se acconti parzialmente pagati:
   - Mantiene importi pagati
   - Ricalcola solo acconti non pagati
   - Verifica che totale acconti ≤ totale evento

### LISTE_COPIA

**Parametri:**
- `id_evento_from NUMBER` - Evento sorgente
- `id_evento_to NUMBER` - Evento destinazione
- `copia_degustazioni NUMBER DEFAULT 0`
- `copia_prelievi NUMBER DEFAULT 0`
- `copia_risorse NUMBER DEFAULT 0`
- `copia_acconti NUMBER DEFAULT 0`
- `copia_altricosti NUMBER DEFAULT 0`

**Logica:**
Per ogni flag > 0 esegue un MERGE (UPDATE se esiste, INSERT altrimenti).
