# Apollinare Catering - Documentazione Completa

Questa documentazione contiene l'estrazione completa di tutti gli oggetti del database Oracle e dell'applicazione APEX di Apollinare Catering & Banqueting.

## [Application Overview](APPLICATION_OVERVIEW.md)

**Apollinare Catering & Banqueting Management Software** è un gestionale completo per aziende di catering che gestisce l'intero ciclo di vita di un evento: dalla richiesta del cliente, al preventivo, alla conferma, fino all'esecuzione.

### Funzionalità Principali

| Area                  | Descrizione                                 |
| --------------------- | ------------------------------------------- |
| **Gestione Eventi**   | Creazione, workflow stati, versioning       |
| **Gestione Ospiti**   | Tipologie ospiti, conteggi, coefficienti    |
| **Lista Prelievo**    | Calcolo automatico quantità materiale       |
| **Risorse/Staff**     | Pianificazione personale per evento         |
| **Acconti/Pagamenti** | Sistema caparre 30%-50%-20%, solleciti      |
| **Calendario**        | Vista eventi, limiti giornalieri, conflitti |
| **Reporting**         | Schede evento, preventivi, report cucina    |

### Proposta SaaS: CaterPro

La documentazione include una proposta per trasformare Apollinare in **CaterPro**, una piattaforma SaaS multi-tenant:

- **Target**: Piccole, medie e grandi aziende di catering
- **Stack**: .NET 8 + React TypeScript + PostgreSQL/Oracle
- **Pricing**: Da €49/mese (Basic) a €399/mese (Enterprise)
- **Roadmap**: 10-14 mesi per feature parity + SaaS

Leggi la [documentazione completa](APPLICATION_OVERVIEW.md) per dettagli su architettura, funzionalità e roadmap.

---

## Struttura della Documentazione

```
docs/
├── apex/            # Applicazione APEX
│   ├── README.md           # Overview applicazione
│   ├── pages/              # 56 pagine
│   ├── processes/          # 98 processi
│   ├── lovs/               # 12 List of Values
│   ├── javascript/         # Librerie JavaScript
│   ├── authorization/      # 5 schemi autorizzazione
│   ├── dynamic-actions/    # Azioni dinamiche
│   ├── items/              # Items condivisi
│   ├── regions/            # Regioni condivise
│   └── navigation/         # Navigazione
├── tables/          # 32 tabelle
├── views/           # 26 viste
├── procedures/      # 11 stored procedures
├── functions/       # 23 funzioni
├── packages/        # 17 packages
├── triggers/        # 19 triggers
├── sequences/       # 22 sequences
└── types/           # 10 tipi custom
```

---

## APEX Application Documentation

### [APEX Application Overview](apex/README.md)

**Application:** APCB Project (ID: 112)
**APEX Version:** 21.1.0
**Schema:** APOLLINARECATERINGPROD

| Component       | Count |
| --------------- | ----- |
| Pages           | 56    |
| Items           | 302   |
| Processes       | 98    |
| Regions         | 151   |
| Buttons         | 119   |
| Dynamic Actions | 62    |
| LOVs            | 12    |

### Key APEX Documentation

- [APEX README](apex/README.md) - Application overview and navigation
- [Processes Documentation](apex/processes/README.md) - All 98 processes with PL/SQL code
- [LOVs Documentation](apex/lovs/README.md) - 12 List of Values definitions
- [JavaScript Libraries](apex/javascript/README.md) - Custom ajaxUtils.js and iframeObj.js
- [Authorization Schemes](apex/authorization/README.md) - 5 security schemes

### Critical APEX Pages

| Page   | Name             | Description                                       |
| ------ | ---------------- | ------------------------------------------------- |
| 1      | Home             | Dashboard principale                              |
| **22** | **Nuovo Evento** | **Pagina più complessa (108 items, 32 processi)** |
| 9      | Liste            | Lista eventi                                      |
| 12     | Calendario       | Calendario eventi                                 |
| 35     | Schede           | Schede evento                                     |

---

## Indice per Categoria

### [Tabelle](tables/README.md) (32)

Tabelle principali del dominio business:

- [EVENTI](tables/EVENTI.md) - Tabella principale eventi
- [EVENTI_DET_PREL](tables/EVENTI_DET_PREL.md) - Liste prelievo
- [EVENTI_DET_OSPITI](tables/EVENTI_DET_OSPITI.md) - Dettaglio ospiti
- [EVENTI_DET_RIS](tables/EVENTI_DET_RIS.md) - Risorse assegnate
- [EVENTI_DET_DEGUST](tables/EVENTI_DET_DEGUST.md) - Degustazioni
- [EVENTI_ACCONTI](tables/EVENTI_ACCONTI.md) - Gestione acconti/pagamenti
- [EVENTI_ALTRICOSTI](tables/EVENTI_ALTRICOSTI.md) - Altri costi
- [EVENTI_ALLEG](tables/EVENTI_ALLEG.md) - Allegati
- [ARTICOLI](tables/ARTICOLI.md) - Catalogo articoli
- [COSTI_ARTICOLI](tables/COSTI_ARTICOLI.md) - Storico costi
- [CLIENTI](tables/CLIENTI.md) - Anagrafica clienti
- [LOCATION](tables/LOCATION.md) - Location eventi
- [RISORSE](tables/RISORSE.md) - Personale

Tabelle di lookup:

- [TB_TIPI_MAT](tables/TB_TIPI_MAT.md) - Tipi materiale
- [TB_CODICI_CATEG](tables/TB_CODICI_CATEG.md) - Categorie
- [TB_TIPI_EVENTO](tables/TB_TIPI_EVENTO.md) - Tipi evento
- [TB_TIPI_OSPITI](tables/TB_TIPI_OSPITI.md) - Tipi ospiti
- [TB_TIPI_RISORSA](tables/TB_TIPI_RISORSA.md) - Tipi risorsa
- [TB_TIPI_PASTO](tables/TB_TIPI_PASTO.md) - Tipi pasto
- [TB_CALENDAR_LOCKS](tables/TB_CALENDAR_LOCKS.md) - Limiti calendario
- [TB_CONFIG](tables/TB_CONFIG.md) - Configurazioni

Tabelle di sistema:

- [USERS_READONLY](tables/USERS_READONLY.md) - Permessi utenti
- [XLIB_LOGS](tables/XLIB_LOGS.md) - Log applicazione
- [XLIB_COMPONENTS](tables/XLIB_COMPONENTS.md) - Componenti
- [XLIB_JASPERREPORTS_CONF](tables/XLIB_JASPERREPORTS_CONF.md) - Config report
- [XLIB_JASPERREPORTS_DEMOS](tables/XLIB_JASPERREPORTS_DEMOS.md) - Demo report

### [Viste](views/README.md) (26)

Viste per calcolo costi:

- [GET_COSTO_ART_BY_EVT](views/GET_COSTO_ART_BY_EVT.md) - Costo articoli per evento
- [GET_COSTO_ART_EVT](views/GET_COSTO_ART_EVT.md) - Costo articoli aggregato
- [GET_COSTO_CATEG_EVT](views/GET_COSTO_CATEG_EVT.md) - Costo per categoria
- [GET_COSTO_DEGUS_EVT](views/GET_COSTO_DEGUS_EVT.md) - Costo degustazioni
- [GET_COSTO_OSPITI_EVT](views/GET_COSTO_OSPITI_EVT.md) - Costo ospiti
- [GET_COSTO_RIS_EVT](views/GET_COSTO_RIS_EVT.md) - Costo risorse
- [GET_COSTO_TIPI_EVT](views/GET_COSTO_TIPI_EVT.md) - Costo per tipo
- [GET_ULTIMI_COSTI](views/GET_ULTIMI_COSTI.md) - Ultimi costi articoli

Viste per eventi:

- [GET_EVT_DATA](views/GET_EVT_DATA.md) - Dati evento completi
- [GET_EVT_DATA_PRINT](views/GET_EVT_DATA_PRINT.md) - Dati per stampa
- [GET_PREL_ART_TOT](views/GET_PREL_ART_TOT.md) - Totali prelievo
- [GET_PREL_BY_EVT](views/GET_PREL_BY_EVT.md) - Prelievi per evento

Viste per calendario e stato:

- [VW_CALENDARIO_EVENTI](views/VW_CALENDARIO_EVENTI.md) - Vista calendario
- [VW_EVENT_COLOR](views/VW_EVENT_COLOR.md) - Colori stati
- [VW_EVENTI_STATUSES](views/VW_EVENTI_STATUSES.md) - Stati eventi

Viste per giacenze:

- [V_IMPEGNI_ARTICOLI](views/V_IMPEGNI_ARTICOLI.md) - Impegni articoli
- [V_IMPEGNI_ARTICOLI_LOC](views/V_IMPEGNI_ARTICOLI_LOC.md) - Impegni per location

Viste per report:

- [V_REP_ALLESTIMENTI](views/V_REP_ALLESTIMENTI.md) - Report allestimenti
- [VW_REP_DEGUSTAZIONI](views/VW_REP_DEGUSTAZIONI.md) - Report degustazioni
- [V_GRIGLIA](views/V_GRIGLIA.md) - Vista griglia
- [GET_REPORT_CONSUNTIVO_PER_DATA](views/GET_REPORT_CONSUNTIVO_PER_DATA.md) - Consuntivo

Viste per utenti/permessi:

- [GET_CONSUNTIVI_USERS](views/GET_CONSUNTIVI_USERS.md) - Utenti consuntivi
- [GET_GESTORI_USERS](views/GET_GESTORI_USERS.md) - Utenti gestori
- [GET_USERS_LIST](views/GET_USERS_LIST.md) - Lista utenti

Viste per pagamenti:

- [GET_EVENTI_DA_PAGARE_ENTRO_65GG](views/GET_EVENTI_DA_PAGARE_ENTRO_65GG.md) - Eventi da sollecitare

### [Stored Procedures](procedures/README.md) (11)

Business logic principale:

- [EVENTI_AGGIORNA_QTA_LISTA](procedures/EVENTI_AGGIORNA_QTA_LISTA.md) - Ricalcolo quantità lista prelievo
- [EVENTI_AGGIORNA_TOT_OSPITI](procedures/EVENTI_AGGIORNA_TOT_OSPITI.md) - Aggiorna totale ospiti
- [EVENTI_COPIA](procedures/EVENTI_COPIA.md) - Duplicazione evento
- [EVENTI_RICALCOLA_ACCONTI](procedures/EVENTI_RICALCOLA_ACCONTI.md) - Ricalcolo acconti
- [EVENTO_ELIMINA_PRELIEVI](procedures/EVENTO_ELIMINA_PRELIEVI.md) - Elimina prelievi
- [LISTE_COPIA](procedures/LISTE_COPIA.md) - Copia liste tra eventi
- [P_CANCEL_SAME_LOCATION_EVENTS](procedures/P_CANCEL_SAME_LOCATION_EVENTS.md) - Annulla eventi stessa location

Utility:

- [ROWSORT_TIPI](procedures/ROWSORT_TIPI.md) - Ordinamento tipi
- [HTPPRN](procedures/HTPPRN.md) - Stampa HTTP
- [SEND_DATA_TO_DROPBOX](procedures/SEND_DATA_TO_DROPBOX.md) - Export Dropbox
- [XLOG](procedures/XLOG.md) - Logging

### [Funzioni](functions/README.md) (23)

Calcolo quantità e disponibilità:

- [F_GET_QTA_IMPEGNATA](functions/F_GET_QTA_IMPEGNATA.md) - Quantità impegnata
- [F_GET_TOT_OSPITI](functions/F_GET_TOT_OSPITI.md) - Totale ospiti
- [F_GET_OSPITI](functions/F_GET_OSPITI.md) - Dettaglio ospiti (pipelined)
- [F_LIST_PRELIEVO_ADD_ARTICOLO](functions/F_LIST_PRELIEVO_ADD_ARTICOLO.md) - Aggiunta articolo

Calcolo costi:

- [F_GET_COSTO_ARTICOLO](functions/F_GET_COSTO_ARTICOLO.md) - Costo articolo a data

Validazioni:

- [F_EVENTO_SCADUTO](functions/F_EVENTO_SCADUTO.md) - Verifica scadenza
- [F_MAX_NUMERO_EVENTI_RAGGIUNTO](functions/F_MAX_NUMERO_EVENTI_RAGGIUNTO.md) - Limite eventi
- [F_MAX_NUM_EVENTI_CONFERMATI](functions/F_MAX_NUM_EVENTI_CONFERMATI.md) - Limite confermati
- [F_CI_SONO_EVENTI_CONFERMATI](functions/F_CI_SONO_EVENTI_CONFERMATI.md) - Check confermati

Report:

- [F_REP_ALLESTIMENTI](functions/F_REP_ALLESTIMENTI.md) - Report allestimenti
- [F_REP_CUCINA](functions/F_REP_CUCINA.md) - Report cucina
- [F_GET_ANGOLO_ALLESTIMENTO](functions/F_GET_ANGOLO_ALLESTIMENTO.md) - Angolo allestimento
- [F_GET_ANGOLO_ALLESTIMENTO_OB](functions/F_GET_ANGOLO_ALLESTIMENTO_OB.md) - Angolo open bar
- [F_GET_TOVAGLIATO_ALLESTIMENTO](functions/F_GET_TOVAGLIATO_ALLESTIMENTO.md) - Tovagliato

Autorizzazioni:

- [F_USER_IN_ROLE](functions/F_USER_IN_ROLE.md) - Verifica ruolo utente
- [F_USER_IN_ROLE_STR](functions/F_USER_IN_ROLE_STR.md) - Ruolo utente (stringa)

Utility:

- [F_DAY_TO_NAME](functions/F_DAY_TO_NAME.md) - Giorno in italiano
- [STRING_TO_TABLE_ENUM](functions/STRING_TO_TABLE_ENUM.md) - Stringa a tabella
- [GET_PARAM_VALUE](functions/GET_PARAM_VALUE.md) - Valore parametro
- [SPLIT](functions/SPLIT.md) - Split stringa
- [MY_INSTR](functions/MY_INSTR.md) - Instr custom
- [CLOB2BLOB](functions/CLOB2BLOB.md) - Conversione CLOB
- [EXTDATE_GET_ITA](functions/EXTDATE_GET_ITA.md) - Data in italiano

### [Packages](packages/README.md) (17)

Business:

- [MAIL_PKG](packages/MAIL_PKG.md) - Gestione invio email automatiche

Utility esterne:

- [UTL_BASE64](packages/UTL_BASE64.md) - Encoding Base64

JasperReports:

- [XLIB_JASPERREPORTS](packages/XLIB_JASPERREPORTS.md) - Integrazione JasperReports
- [XLIB_JASPERREPORTS_IMG](packages/XLIB_JASPERREPORTS_IMG.md) - Immagini report

HTTP/Componenti:

- [XLIB_HTTP](packages/XLIB_HTTP.md) - Chiamate HTTP
- [XLIB_COMPONENT](packages/XLIB_COMPONENT.md) - Componenti
- [XLIB_LOG](packages/XLIB_LOG.md) - Logging

JSON (libreria PLJSON):

- [PLJSON_DYN](packages/PLJSON_DYN.md)
- [PLJSON_EXT](packages/PLJSON_EXT.md)
- [PLJSON_HELPER](packages/PLJSON_HELPER.md)
- [PLJSON_ML](packages/PLJSON_ML.md)
- [PLJSON_OBJECT_CACHE](packages/PLJSON_OBJECT_CACHE.md)
- [PLJSON_PARSER](packages/PLJSON_PARSER.md)
- [PLJSON_PRINTER](packages/PLJSON_PRINTER.md)
- [PLJSON_UT](packages/PLJSON_UT.md)
- [PLJSON_UTIL_PKG](packages/PLJSON_UTIL_PKG.md)
- [PLJSON_XML](packages/PLJSON_XML.md)

### [Triggers](triggers/README.md) (19)

Generazione ID:

- [EVENTI_TRG](triggers/EVENTI_TRG.md) - ID eventi + inizializzazione
- [EVENTI_AI_TRG](triggers/EVENTI_AI_TRG.md) - Creazione ospiti default
- [EVENTI_DET_PREL_TRG](triggers/EVENTI_DET_PREL_TRG.md) - ID prelievi
- [EVENTI_DET_RIS_TRG](triggers/EVENTI_DET_RIS_TRG.md) - ID risorse
- [EVENTI_DET_DEGUST_TRG](triggers/EVENTI_DET_DEGUST_TRG.md) - ID degustazioni
- [EVENTI_ACCONTI_TRG](triggers/EVENTI_ACCONTI_TRG.md) - ID acconti
- [EVENTI_ALTRICOSTI_TRG](triggers/EVENTI_ALTRICOSTI_TRG.md) - ID altri costi
- [EVENTI_ALLEG_TRG](triggers/EVENTI_ALLEG_TRG.md) - ID allegati
- [CLIENTI_TRG](triggers/CLIENTI_TRG.md) - ID clienti
- [LOCATION_TRG](triggers/LOCATION_TRG.md) - ID location
- [RISORSE_TRG](triggers/RISORSE_TRG.md) - ID risorse
- [ARTICOLI_DET_REGOLE_TRG](triggers/ARTICOLI_DET_REGOLE_TRG.md) - ID regole articoli
- [TB_TIPI_PASTO_TRG](triggers/TB_TIPI_PASTO_TRG.md) - ID tipi pasto

Business logic:

- [EVENTI_DET_OSPITI_TRG_AI](triggers/EVENTI_DET_OSPITI_TRG_AI.md) - Aggiornamento ospiti
- [EVENTI_DET_PREL_QTA_TOT_TRG](triggers/EVENTI_DET_PREL_QTA_TOT_TRG.md) - Calcolo quantità totale

Ordinamento:

- [ADD_COD_STEP](triggers/ADD_COD_STEP.md) - Ordine tipi materiale
- [ON_DELETE_REORDER](triggers/ON_DELETE_REORDER.md) - Riordino dopo delete

Sistema:

- [BI_GL_SCHEMA_CHANGES](triggers/BI_GL_SCHEMA_CHANGES.md) - Log modifiche schema
- [XLIB_LOGS_BI_TRG](triggers/XLIB_LOGS_BI_TRG.md) - Log applicazione

### [Sequences](sequences/README.md) (22)

Tutte le sequence del database.

### [Types](types/README.md) (10)

Tipi custom:

- [T_DET_OSPITI_ROW](types/T_DET_OSPITI_ROW.md) / [T_DET_OSPITI_TAB](types/T_DET_OSPITI_TAB.md) - Tipo per F_GET_OSPITI
- [T_REP_ALLESTIMENTI_ROW](types/T_REP_ALLESTIMENTI_ROW.md) / [T_REP_ALLESTIMENTI_TAB](types/T_REP_ALLESTIMENTI_TAB.md) - Tipo per F_REP_ALLESTIMENTI
- [T_REP_CUCINA_ROW](types/T_REP_CUCINA_ROW.md) / [T_REP_CUCINA_TAB](types/T_REP_CUCINA_TAB.md) - Tipo per F_REP_CUCINA
- [STRING_LIST](types/STRING_LIST.md) - Lista stringhe
- [ENUM_TABLE_OBJECT](types/ENUM_TABLE_OBJECT.md) / [ENUM_TABLE_TYPE](types/ENUM_TABLE_TYPE.md) - Tipi per STRING_TO_TABLE_ENUM
- [XLIB_VC2_ARRAY_T](types/XLIB_VC2_ARRAY_T.md) - Array varchar2

---

## Schema ER Semplificato

```
                    ┌─────────────┐
                    │   CLIENTI   │
                    └──────┬──────┘
                           │
                           ▼
┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  LOCATION   │◄────│   EVENTI    │────►│TB_TIPI_EVENTO│
└─────────────┘     └──────┬──────┘     └─────────────┘
                           │
         ┌─────────────────┼─────────────────┐
         │                 │                 │
         ▼                 ▼                 ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│EVENTI_DET_OSPITI│ │ EVENTI_DET_PREL │ │ EVENTI_DET_RIS  │
└─────────────────┘ └────────┬────────┘ └────────┬────────┘
         │                   │                   │
         ▼                   ▼                   ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ TB_TIPI_OSPITI  │ │    ARTICOLI     │ │    RISORSE      │
└─────────────────┘ └────────┬────────┘ └─────────────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │ TB_CODICI_CATEG │
                    └────────┬────────┘
                             │
                             ▼
                    ┌─────────────────┐
                    │  TB_TIPI_MAT    │
                    └─────────────────┘

         ┌─────────────────┬─────────────────┐
         │                 │                 │
         ▼                 ▼                 ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│EVENTI_DET_DEGUST│ │ EVENTI_ACCONTI  │ │EVENTI_ALTRICOSTI│
└─────────────────┘ └─────────────────┘ └─────────────────┘
```

## Workflow Stati Evento

```
     ┌──────────────┐
     │  PREVENTIVO  │ (100) - Bianco
     └──────┬───────┘
            │ Degustazione
            ▼
     ┌──────────────┐
     │SCHEDA EVENTO │ (200) - Celeste
     │(preparazione)│
     └──────┬───────┘
            │ Prima caparra
            ▼
     ┌──────────────┐
     │   SCHEDA     │ (300) - Giallo
     │  CONFERMATA  │
     └──────┬───────┘
            │ Quasi confermato
            ▼
     ┌──────────────┐
     │SCHEDA QUASI  │ (350) - Arancio
     │  CONFERMATA  │
     └──────┬───────┘
            │ Conferma definitiva
            ▼
     ┌──────────────┐
     │  CONFERMATO  │ (400) - Verde
     └──────────────┘

            │ Rifiuto/Scadenza
            ▼
     ┌──────────────┐
     │NON ACCETTATO/│ (900) - Viola
     │   SUPERATO   │
     └──────────────┘
```

## Note per lo Sviluppo

1. **Packages PLJSON\_\***: Libreria esterna per parsing JSON, può essere sostituita con funzionalità native .NET

2. **Packages XLIB\_\***: Componenti per integrazione JasperReports, da valutare sostituzione con report .NET

3. **Trigger per ID**: In .NET usare Identity columns o GUID

4. **Calcolo quantità**: La logica in `EVENTI_AGGIORNA_QTA_LISTA` è critica e deve essere portata fedelmente

5. **Sistema acconti**: Le percentuali 30%-50%-20% sono hardcoded, valutare parametrizzazione
