# GET_EVENTI_DA_PAGARE_ENTRO_65GG

## Colonne

| Colonna | Tipo |
|---------|------|
| ID | NUMBER |
| CLIENTE | VARCHAR2(100) |
| DATA | DATE |
| LOCATION | VARCHAR2(200) |
| DESCRIZIONE_TIPO_EVENTO | VARCHAR2(100) |
| STATO | NUMBER |
| TOTALE_CAPARRE_DOVUTE | NUMBER |
| TOTALE_VERSATO | NUMBER |

## Definizione

```sql
CREATE OR REPLACE VIEW GET_EVENTI_DA_PAGARE_ENTRO_65GG AS
SELECT
    e.ID,
    e.CLIENTE,
    e.DATA,
    loc.LOCATION, -- Campo aggiornato per mostrare il nome della location
    te.DESCRIZIONE AS DESCRIZIONE_TIPO_EVENTO,
    e.STATO,
    NVL(caparre.TOTALE_DOVUTO, 0) AS TOTALE_CAPARRE_DOVUTE,
    NVL(pagamenti.TOTALE_PAGATO, 0) AS TOTALE_VERSATO
FROM
    EVENTI e
LEFT JOIN
    TB_TIPI_EVENTO te ON e.COD_TIPO = te.COD_TIPO
LEFT JOIN
    LOCATION loc ON e.ID_LOCATION = loc.ID -- JOIN aggiunta per la tabella LOCATION
LEFT JOIN
    (
        -- Calcola il totale dovuto per la prima e seconda caparra (importi positivi)
        SELECT
            ID_EVENTO,
            SUM(ACCONTO) AS TOTALE_DOVUTO
        FROM
            EVENTI_ACCONTI
        WHERE
            ORDINE IN (10, 20)
        GROUP BY
            ID_EVENTO
    ) caparre ON e.ID = caparre.ID_EVENTO
LEFT JOIN
    (
        -- Calcola il totale versato, invertendo il segno della somma (gli importi sono negativi)
        SELECT
            ID_EVENTO,
            SUM(ACCONTO) * -1 AS TOTALE_PAGATO
        FROM
            EVENTI_ACCONTI
        WHERE
            ORDINE >= 1000
        GROUP BY
            ID_EVENTO
    ) pagamenti ON e.ID = pagamenti.ID_EVENTO
WHERE
    -- Lo stato deve essere 'Scheda Confermata'
    e.STATO = 300
    -- Filtra per eventi futuri entro 65 giorni
    AND e.DATA BETWEEN SYSDATE AND SYSDATE + 65
    
    -- ====================================================================================
    -- CONDIZIONE DI PAGAMENTO CON TOLLERANZA
    AND NVL(pagamenti.TOTALE_PAGATO, 0) < (NVL(caparre.TOTALE_DOVUTO, 0) * (1 - /* TOLLERANZA */ 10 /* % */ / 100))
    -- ====================================================================================

    -- Assicuriamoci di considerare solo eventi per cui è richiesta almeno una caparra
    AND caparre.TOTALE_DOVUTO IS NOT NULL AND caparre.TOTALE_DOVUTO > 0
ORDER BY
    e.DATA
```
