2.2 KiB
2.2 KiB
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
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