Files
apollinare-catering-software/docs/views/GET_EVENTI_DA_PAGARE_ENTRO_65GG.md
2025-12-17 13:02:12 +01:00

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