--
-- Create Schema Script
--   Database Version            : 19.0.0.0.0
--   Database Compatible Level   : 19.0.0.0.0
--   Script Compatible Level     : 19.0.0.0.0
--   Toad Version                : 13.3.0.181
--   Schema                      : BANDO_VOLI
--   Script Created by           : BANDO_VOLI
--   Script Created at           : 06/08/2026 09:54:45
--   Notes                       : 
--


-- "Set define off" turns off substitution variables.
Set define off; 

--
-- ACCOUNT_ANAG_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE ACCOUNT_ANAG_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 200
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ACCOUNT_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE ACCOUNT_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ACCOUNT_NUCLEO_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE ACCOUNT_NUCLEO_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ALLEGATI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE ALLEGATI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ANAG_COMPAGNIE_SEQ  (Sequence) 
--
CREATE SEQUENCE ANAG_COMPAGNIE_SEQ
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ANAG_DICHIARAZIONI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE ANAG_DICHIARAZIONI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- AUDIT_RICHIESTA_INTEGRAZIONE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE AUDIT_RICHIESTA_INTEGRAZIONE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- BANDI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE BANDI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- COMPAGNIE_SEQ  (Sequence) 
--
CREATE SEQUENCE COMPAGNIE_SEQ
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- COMUNE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE COMUNE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- CUSTOMER_SATISFACTION_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE CUSTOMER_SATISFACTION_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOCUMENTIBANDO_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOCUMENTIBANDO_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_CONTRATTI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_CONTRATTI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_EMAIL_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_EMAIL_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_IBAN_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_IBAN_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_SCONTI_CONTROLLI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_SCONTI_CONTROLLI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_SCONTI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_SCONTI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- DOMANDA_SCONTI_IMPORTI_LOG_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE DOMANDA_SCONTI_IMPORTI_LOG_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ESPORTAZIONI_SEQ  (Sequence) 
--
CREATE SEQUENCE ESPORTAZIONI_SEQ
  START WITH 1
  MAXVALUE 999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- FAQ_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE FAQ_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- FAQ_UTENTI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE FAQ_UTENTI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- IMPERSONIFICAZIONE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE IMPERSONIFICAZIONE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- INTEGRAZIONI_EMAIL_QUEUE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE INTEGRAZIONI_EMAIL_QUEUE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- LOGS_BE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE LOGS_BE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 200
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- LOGS_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE LOGS_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- LOGS_P7M_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE LOGS_P7M_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- RICHIESTA_INTEGRAZIONE_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE RICHIESTA_INTEGRAZIONE_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- SPID_ACCESSI_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE SPID_ACCESSI_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- UID_FIREBASE_ADMIN_ID_SEQ  (Sequence) 
--
CREATE SEQUENCE UID_FIREBASE_ADMIN_ID_SEQ
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER
  NOKEEP
  NOSCALE
  GLOBAL;


--
-- ACCOUNT  (Table) 
--
--   Row Count: 402857
CREATE TABLE ACCOUNT
(
  CODICE_FISCALE              VARCHAR2(16 BYTE) NOT NULL,
  USERNAME                    VARCHAR2(255 BYTE),
  PASSWORD                    VARCHAR2(255 BYTE),
  DATA_REGISTRAZIONE          TIMESTAMP(6)      DEFAULT SYSTIMESTAMP,
  AUTORIZZAZIONE_TRATTAMENTO  NUMBER            DEFAULT NULL,
  CANCELLATO                  NUMBER            DEFAULT 0,
  ID                          NUMBER            NOT NULL
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- IX_CF_ACCOUNT  (Index) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--
CREATE UNIQUE INDEX IX_CF_ACCOUNT ON ACCOUNT
(CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );
--
-- PK_ACCOUNT_ID  (Index) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--
CREATE UNIQUE INDEX PK_ACCOUNT_ID ON ACCOUNT
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ACCOUNT ADD (
  CONSTRAINT PK_ACCOUNT_ID
  PRIMARY KEY
  (ID)
  USING INDEX PK_ACCOUNT_ID
  ENABLE VALIDATE);



--
-- ACCOUNT_ANAGRAFICA  (Table) 
--
--   Row Count: 375149
CREATE TABLE ACCOUNT_ANAGRAFICA
(
  CODICE_FISCALE            VARCHAR2(16 BYTE)   NOT NULL,
  NOME                      VARCHAR2(200 BYTE),
  COGNOME                   VARCHAR2(200 BYTE),
  DATA_NASCITA              VARCHAR2(20 BYTE),
  COMUNE_NASCITA            VARCHAR2(200 BYTE),
  PROV_NASCITA              VARCHAR2(2 BYTE),
  CAP_NASCITA               VARCHAR2(5 BYTE),
  COMUNE_RESIDENZA          VARCHAR2(200 BYTE),
  PROV_RESIDENZA            VARCHAR2(2 BYTE),
  CAP_RESIDENZA             VARCHAR2(5 BYTE),
  INDIRIZZO_RESIDENZA       VARCHAR2(200 BYTE),
  CIVICO_RESIDENZA          VARCHAR2(20 BYTE),
  SPID_CELLULARE            VARCHAR2(200 BYTE),
  SPID_DOCUMENTO            VARCHAR2(200 BYTE),
  SPID_DOCUMENTO_SCADENZA   VARCHAR2(200 BYTE),
  SPID_DOCUMENTO_RILASCIO   VARCHAR2(200 BYTE),
  SPID_TIPO_DOCUMENTO       VARCHAR2(200 BYTE),
  SPID_DOCUMENTO_ENTE       VARCHAR2(200 BYTE),
  DATA_REGISTRAZIONE        TIMESTAMP(6)        DEFAULT SYSTIMESTAMP,
  DATA_MODIFICA             TIMESTAMP(6),
  ID                        NUMBER              NOT NULL,
  RECAPITO                  VARCHAR2(50 BYTE),
  SESSO                     VARCHAR2(1 BYTE),
  FORZATURA_CODICE_FISCALE  INTEGER             DEFAULT 0,
  SPID_EMAIL                VARCHAR2(200 BYTE),
  PEC                       VARCHAR2(200 BYTE),
  EMAIL                     VARCHAR2(200 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ACCOUNT_ANAGRAFICA_PK  (Index) 
--
--  Dependencies: 
--   ACCOUNT_ANAGRAFICA (Table)
--
CREATE UNIQUE INDEX ACCOUNT_ANAGRAFICA_PK ON ACCOUNT_ANAGRAFICA
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ACCOUNT_ANAGRAFICA ADD (
  CONSTRAINT ACCOUNT_ANAGRAFICA_PK
  PRIMARY KEY
  (ID)
  USING INDEX ACCOUNT_ANAGRAFICA_PK
  ENABLE VALIDATE);



--
-- ACCOUNT_NUCLEO_FAMILIARE  (Table) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--
--   Row Count: 422085
CREATE TABLE ACCOUNT_NUCLEO_FAMILIARE
(
  ID                  INTEGER                   NOT NULL,
  ID_ACCOUNT          NUMBER,
  COGNOME             VARCHAR2(255 BYTE),
  NOME                VARCHAR2(255 BYTE),
  DATA_NASCITA        DATE,
  RAPPORTO_PARENTELA  INTEGER                   NOT NULL,
  CODICE_FISCALE      VARCHAR2(255 BYTE)        NOT NULL,
  CONFERMATO          INTEGER                   DEFAULT 0,
  COMUNE_RESIDENZA    VARCHAR2(255 BYTE),
  PROV_RESIDENZA      VARCHAR2(2 BYTE),
  CAP_RESIDENZA       VARCHAR2(5 BYTE),
  FLAG                VARCHAR2(1000 BYTE),
  PRIORITY            INTEGER                   DEFAULT 0
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ACCOUNT_NUCLEO_FAMILIARE_PK  (Index) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--
CREATE UNIQUE INDEX ACCOUNT_NUCLEO_FAMILIARE_PK ON ACCOUNT_NUCLEO_FAMILIARE
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );
--
-- IDX_ACCOUNT_CODICE_FISCALE  (Index) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--
CREATE UNIQUE INDEX IDX_ACCOUNT_CODICE_FISCALE ON ACCOUNT_NUCLEO_FAMILIARE
(ID_ACCOUNT, CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ACCOUNT_NUCLEO_FAMILIARE ADD (
  CONSTRAINT ACCOUNT_NUCLEO_FAMILIARE_PK
  PRIMARY KEY
  (ID)
  USING INDEX ACCOUNT_NUCLEO_FAMILIARE_PK
  ENABLE VALIDATE);



--
-- AEROPORTI  (Table) 
--
--   Row Count: 45
CREATE TABLE AEROPORTI
(
  CODICE   VARCHAR2(3 BYTE)                     NOT NULL,
  NOME     VARCHAR2(255 BYTE)                   NOT NULL,
  REGIONE  NUMBER                               NOT NULL
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- AEROPORTI_PK  (Index) 
--
--  Dependencies: 
--   AEROPORTI (Table)
--
CREATE UNIQUE INDEX AEROPORTI_PK ON AEROPORTI
(CODICE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE AEROPORTI ADD (
  CONSTRAINT AEROPORTI_PK
  PRIMARY KEY
  (CODICE)
  USING INDEX AEROPORTI_PK
  ENABLE VALIDATE);



--
-- ALLEGATI  (Table) 
--
--   Row Count: 384193
CREATE TABLE ALLEGATI
(
  ID                  INTEGER                   NOT NULL,
  ID_DOMANDA          INTEGER,
  FILEPATH            VARCHAR2(1000 BYTE),
  CANCELLATO          INTEGER,
  ID_DOCUMENTO        NUMBER,
  TIPO_DOCUMENTO      NUMBER                    DEFAULT 0,
  FILESIZE            NUMBER,
  DATA_REGISTRAZIONE  TIMESTAMP(6)              DEFAULT SYSTIMESTAMP,
  NOTE                VARCHAR2(200 BYTE),
  NOMEFILEORIGINALE   VARCHAR2(255 BYTE),
  HASH_FILE           VARCHAR2(1000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ALLEGATI_PK  (Index) 
--
--  Dependencies: 
--   ALLEGATI (Table)
--
CREATE UNIQUE INDEX ALLEGATI_PK ON ALLEGATI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ALLEGATI ADD (
  CONSTRAINT ALLEGATI_PK
  PRIMARY KEY
  (ID)
  USING INDEX ALLEGATI_PK
  ENABLE VALIDATE);



--
-- ANAG_COMPAGNIE  (Table) 
--
--   Row Count: 48
CREATE TABLE ANAG_COMPAGNIE
(
  ID                       INTEGER              NOT NULL,
  NOME                     VARCHAR2(255 BYTE)   NOT NULL,
  ADESIONE                 INTEGER              DEFAULT 0                     NOT NULL,
  DATA_ADESIONE            DATE,
  PERC_COMPAGNIE           NUMBER,
  DATA_ADEGUAMENTO         DATE,
  ADEGUAMENTO_NATIVI       NUMBER,
  DATA_ADEGUAMENTO_NATIVI  DATE
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ANAG_COMPAGNIE_PK  (Index) 
--
--  Dependencies: 
--   ANAG_COMPAGNIE (Table)
--
CREATE UNIQUE INDEX ANAG_COMPAGNIE_PK ON ANAG_COMPAGNIE
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ANAG_COMPAGNIE ADD (
  CONSTRAINT ANAG_COMPAGNIE_PK
  PRIMARY KEY
  (ID)
  USING INDEX ANAG_COMPAGNIE_PK
  ENABLE VALIDATE);



--
-- ANAG_DICHIARAZIONI  (Table) 
--
--   Row Count: 0
CREATE TABLE ANAG_DICHIARAZIONI
(
  ID           INTEGER                          NOT NULL,
  CODICE       VARCHAR2(255 BYTE),
  DESCRIZIONE  VARCHAR2(2000 BYTE),
  CANCELLATO   INTEGER                          DEFAULT 0,
  POSIZIONE    INTEGER                          DEFAULT 0,
  OBBLIGO      INTEGER                          DEFAULT 0
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ANAG_DICHIARAZIONI_PK  (Index) 
--
--  Dependencies: 
--   ANAG_DICHIARAZIONI (Table)
--
CREATE UNIQUE INDEX ANAG_DICHIARAZIONI_PK ON ANAG_DICHIARAZIONI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ANAG_DICHIARAZIONI ADD (
  CONSTRAINT ANAG_DICHIARAZIONI_PK
  PRIMARY KEY
  (ID)
  USING INDEX ANAG_DICHIARAZIONI_PK
  ENABLE VALIDATE);



--
-- AUDIT_RICHIESTA_INTEGRAZIONE  (Table) 
--
--   Row Count: 47
CREATE TABLE AUDIT_RICHIESTA_INTEGRAZIONE
(
  ID_AUDIT          NUMBER                      NOT NULL,
  ID_INTEGRAZIONE   NUMBER                      NOT NULL,
  DATA_MODIFICA     DATE                        DEFAULT SYSDATE,
  STATO_PRECEDENTE  VARCHAR2(30 BYTE),
  STATO_ATTUALE     VARCHAR2(30 BYTE),
  UTENTE_OPERATORE  VARCHAR2(100 BYTE),
  MOTIVO            VARCHAR2(1000 BYTE),
  ORIGINE           VARCHAR2(50 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE AUDIT_RICHIESTA_INTEGRAZIONE ADD (
  PRIMARY KEY
  (ID_AUDIT)
  USING INDEX
    TABLESPACE BANDO_VOLI_TBS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
  ENABLE VALIDATE);



--
-- BANDI  (Table) 
--
--   Row Count: 1
CREATE TABLE BANDI
(
  ID                         NUMBER             NOT NULL,
  INIZIO_PREPARAZIONE        TIMESTAMP(6),
  FINE_PREPARAZIONE          TIMESTAMP(6),
  INIZIO_CLICKDAY            TIMESTAMP(6),
  FINE_CLICKDAY              TIMESTAMP(6),
  DESCRIZIONE                VARCHAR2(255 BYTE),
  DETTAGLIO                  VARCHAR2(1000 BYTE),
  DISPONIBILITA_FINANZIARIA  NUMBER(20,4),
  COEFFICENTE_SFRATTO        NUMBER(20,4),
  COEFFICENTE                NUMBER(20,6)       DEFAULT 0
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- BANDI_PK  (Index) 
--
--  Dependencies: 
--   BANDI (Table)
--
CREATE UNIQUE INDEX BANDI_PK ON BANDI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE BANDI ADD (
  CONSTRAINT BANDI_PK
  PRIMARY KEY
  (ID)
  USING INDEX BANDI_PK
  ENABLE VALIDATE);



--
-- COMUNE  (Table) 
--
--   Row Count: 10559
CREATE TABLE COMUNE
(
  ID                NUMBER(5)                   NOT NULL,
  CODICE_REGIONE    VARCHAR2(3 BYTE),
  CD_PROVINCIA      VARCHAR2(6 BYTE),
  CODICE_ISTAT      VARCHAR2(6 BYTE),
  DESCRIZIONE       VARCHAR2(100 BYTE),
  CODICE_PROVINCIA  VARCHAR2(5 BYTE),
  PROV              VARCHAR2(50 BYTE),
  COD_CF            VARCHAR2(10 BYTE),
  ATTIVO            NUMBER(1),
  CAP               VARCHAR2(20 BYTE),
  REGIONE           VARCHAR2(20 BYTE),
  SEARCH            INTEGER                     DEFAULT 1
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- COMUNE_PK  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE UNIQUE INDEX COMUNE_PK ON COMUNE
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE COMUNE ADD (
  CONSTRAINT COMUNE_PK
  PRIMARY KEY
  (ID)
  USING INDEX COMUNE_PK
  ENABLE VALIDATE);



--
-- CUSTOMER_SATISFACTION  (Table) 
--
--   Row Count: 22417
CREATE TABLE CUSTOMER_SATISFACTION
(
  ID              NUMBER,
  CODICE_FISCALE  VARCHAR2(16 BYTE)             NOT NULL,
  VALORE          NUMBER,
  DATA            TIMESTAMP(6)                  DEFAULT SYSTIMESTAMP
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- CUSTOMER_SATISFACTION_PK  (Index) 
--
--  Dependencies: 
--   CUSTOMER_SATISFACTION (Table)
--
CREATE UNIQUE INDEX CUSTOMER_SATISFACTION_PK ON CUSTOMER_SATISFACTION
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE CUSTOMER_SATISFACTION ADD (
  CONSTRAINT CUSTOMER_SATISFACTION_PK
  PRIMARY KEY
  (ID)
  USING INDEX CUSTOMER_SATISFACTION_PK
  ENABLE VALIDATE);



--
-- DOCUMENTI_BANDO  (Table) 
--
--   Row Count: 2
CREATE TABLE DOCUMENTI_BANDO
(
  ID                    NUMBER                  NOT NULL,
  NOME                  VARCHAR2(500 BYTE),
  OBBLIGO               NUMBER                  DEFAULT 0,
  PRIORITA              NUMBER                  DEFAULT 0,
  FASE                  NUMBER                  DEFAULT 0,
  CANCELLATO            NUMBER                  DEFAULT 0,
  TIPO_FIRMATARIO       INTEGER                 DEFAULT 0,
  ESTENZIONE_FILE       VARCHAR2(255 BYTE),
  VERIFICA_FIRMA_P7M    INTEGER                 DEFAULT 0,
  FILE_DA_GENERARE      INTEGER                 DEFAULT 0,
  MODULE                VARCHAR2(255 BYTE),
  OBBLIGO_CONDIZIONATO  VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON COLUMN DOCUMENTI_BANDO.TIPO_FIRMATARIO IS '(1 = Legale Rappresentante; 2 = RUP di progetto)';

COMMENT ON COLUMN DOCUMENTI_BANDO.FILE_DA_GENERARE IS 'Se impostato a 1 il file deve essere prima generato';

COMMENT ON COLUMN DOCUMENTI_BANDO.OBBLIGO_CONDIZIONATO IS 'TABELLA|CAMPO|VALORE';


--
-- DOCUMENTI_BANDO_PK  (Index) 
--
--  Dependencies: 
--   DOCUMENTI_BANDO (Table)
--
CREATE UNIQUE INDEX DOCUMENTI_BANDO_PK ON DOCUMENTI_BANDO
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOCUMENTI_BANDO ADD (
  CONSTRAINT DOCUMENTI_BANDO_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOCUMENTI_BANDO_PK
  ENABLE VALIDATE);



--
-- DOMANDA  (Table) 
--
--   Row Count: 412483
CREATE TABLE DOMANDA
(
  ID                  INTEGER                   NOT NULL,
  DATA_REGISTRAZIONE  TIMESTAMP(6)              DEFAULT SYSTIMESTAMP          NOT NULL,
  IBAN                VARCHAR2(50 BYTE),
  ISTITUTO_CREDITO    VARCHAR2(100 BYTE),
  FILIALE_CREDITO     VARCHAR2(100 BYTE),
  ID_ACCOUNT          NUMBER                    NOT NULL,
  DATA_RILASCIO_ISEE  DATE,
  ISEE                INTEGER                   DEFAULT 0                     NOT NULL,
  STATO               INTEGER                   DEFAULT 0                     NOT NULL,
  NOTE                VARCHAR2(3000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- DOMANDA_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA (Table)
--
CREATE UNIQUE INDEX DOMANDA_PK ON DOMANDA
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );
--
-- IX_ACCOUNT  (Index) 
--
--  Dependencies: 
--   DOMANDA (Table)
--
CREATE UNIQUE INDEX IX_ACCOUNT ON DOMANDA
(ID_ACCOUNT)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA ADD (
  CONSTRAINT DOMANDA_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOMANDA_PK
  ENABLE VALIDATE);



--
-- DOMANDA_DICHIARAZIONI  (Table) 
--
--   Row Count: 0
CREATE TABLE DOMANDA_DICHIARAZIONI
(
  ID_DOMANDA             INTEGER,
  ID_ANAG_DICHIARAZIONI  INTEGER
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- DOMANDA_DICHIARAZIONI_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA_DICHIARAZIONI (Table)
--
CREATE UNIQUE INDEX DOMANDA_DICHIARAZIONI_PK ON DOMANDA_DICHIARAZIONI
(ID_DOMANDA, ID_ANAG_DICHIARAZIONI)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_DICHIARAZIONI ADD (
  CONSTRAINT DOMANDA_DICHIARAZIONI_PK
  PRIMARY KEY
  (ID_DOMANDA, ID_ANAG_DICHIARAZIONI)
  USING INDEX DOMANDA_DICHIARAZIONI_PK
  ENABLE VALIDATE);



--
-- DOMANDA_EMAIL  (Table) 
--
--  Dependencies: 
--   DOMANDA (Table)
--
--   Row Count: 0
CREATE TABLE DOMANDA_EMAIL
(
  ID          INTEGER                           NOT NULL,
  ID_DOMANDA  INTEGER                           NOT NULL,
  EMAIL       VARCHAR2(255 BYTE)                NOT NULL,
  ESITO       VARCHAR2(255 BYTE),
  DATA_INVIO  TIMESTAMP(6),
  STATO       INTEGER                           DEFAULT 0                     NOT NULL
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- DOMANDA_EMAIL_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA_EMAIL (Table)
--
CREATE UNIQUE INDEX DOMANDA_EMAIL_PK ON DOMANDA_EMAIL
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_EMAIL ADD (
  CONSTRAINT DOMANDA_EMAIL_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOMANDA_EMAIL_PK
  ENABLE VALIDATE);



--
-- DOMANDA_SCONTI  (Table) 
--
--   Row Count: 1960356
CREATE TABLE DOMANDA_SCONTI
(
  ID                             INTEGER        NOT NULL,
  ID_DOMANDA                     NUMBER         NOT NULL,
  COGNOME                        VARCHAR2(255 BYTE) NOT NULL,
  NOME                           VARCHAR2(255 BYTE) NOT NULL,
  DATA_NASCITA                   DATE           NOT NULL,
  RAPPORTO_PARENTELA             INTEGER        NOT NULL,
  CODICE_FISCALE                 VARCHAR2(255 BYTE) NOT NULL,
  COMUNE_RESIDENZA               VARCHAR2(255 BYTE),
  PROV_RESIDENZA                 VARCHAR2(2 BYTE),
  CAP_RESIDENZA                  VARCHAR2(5 BYTE),
  COMPAGNIA_AEREA                VARCHAR2(255 BYTE),
  NUMERO_VOLO                    VARCHAR2(255 BYTE) NOT NULL,
  DATA_VOLO                      DATE           NOT NULL,
  COSTO_TRATTA                   FLOAT(126)     NOT NULL,
  AEROPORTO_PARTENZA             VARCHAR2(255 BYTE) NOT NULL,
  AEROPORTO_DESTINAZIONE         VARCHAR2(255 BYTE) NOT NULL,
  FILEPATH_BIGLIETTO             VARCHAR2(1000 BYTE),
  FILEPATH_CARTAIMBARCO          VARCHAR2(1000 BYTE),
  ISEE                           INTEGER        DEFAULT 0                     NOT NULL,
  DATA_RILASCIO_ISEE             DATE,
  FILEPATH_ISEE                  VARCHAR2(1000 BYTE),
  IBAN                           VARCHAR2(50 BYTE),
  ISTITUTO_CREDITO               VARCHAR2(100 BYTE),
  FILIALE_CREDITO                VARCHAR2(100 BYTE),
  STATO                          NUMBER         DEFAULT 0                     NOT NULL,
  DATA_REGISTRAZIONE             TIMESTAMP(6)   DEFAULT SYSTIMESTAMP          NOT NULL,
  ID_UID_FIREBASE                INTEGER,
  DATA_ESPORTAZIONE              TIMESTAMP(6),
  DATA_ESITO                     TIMESTAMP(6),
  DATA_EROGAZIONE                TIMESTAMP(6),
  NOTE                           VARCHAR2(3000 BYTE),
  AEROPORTO_PARTENZA_CODICE      VARCHAR2(3 BYTE),
  AEROPORTO_DESTINAZIONE_CODICE  VARCHAR2(3 BYTE),
  COMPAGNIA_ID                   INTEGER,
  DATA_ACQUISTO                  DATE,
  SCONTO_TOTALE                  NUMBER(10,4)   DEFAULT NULL,
  LOTTO                          INTEGER        DEFAULT 0                     NOT NULL,
  FLAG                           VARCHAR2(1000 BYTE),
  PRIORITY                       INTEGER        DEFAULT 0,
  FORZA_RESIDENZA                INTEGER        DEFAULT 0,
  CITTADINANZA                   VARCHAR2(255 CHAR),
  FILEPATH_BIGLIETTO_HASH        VARCHAR2(1000 CHAR),
  FILEPATH_CARTAIMBARCO_HASH     VARCHAR2(1000 CHAR)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON COLUMN DOMANDA_SCONTI.DATA_ACQUISTO IS 'Data di acquisto del biglietto aereo';

COMMENT ON COLUMN DOMANDA_SCONTI.FORZA_RESIDENZA IS '1 = Forza il calcolo dello sconto residenza';


--
-- DOMANDA_SCONTI_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE UNIQUE INDEX DOMANDA_SCONTI_PK ON DOMANDA_SCONTI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );
--
-- KY_SCONTI_IX  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE UNIQUE INDEX KY_SCONTI_IX ON DOMANDA_SCONTI
(CODICE_FISCALE, NUMERO_VOLO, DATA_VOLO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_SCONTI ADD (
  CONSTRAINT DOMANDA_SCONTI_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOMANDA_SCONTI_PK
  ENABLE VALIDATE);



--
-- DOMANDA_SCONTI_CONTROLLI  (Table) 
--
--   Row Count: 1546
CREATE TABLE DOMANDA_SCONTI_CONTROLLI
(
  ID                     NUMBER,
  LOTTO                  NUMBER,
  ID_DOMANDA_SCONTI      NUMBER,
  DATA_ESITO             TIMESTAMP(6),
  ID_UID_FIREBASE_ADMIN  NUMBER,
  ESITO                  NUMBER,
  DATA_INSERIMENTO       TIMESTAMP(6)           DEFAULT SYSTIMESTAMP
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- DOMANDA_SCONTI_CONTROLLI_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_CONTROLLI (Table)
--
CREATE UNIQUE INDEX DOMANDA_SCONTI_CONTROLLI_PK ON DOMANDA_SCONTI_CONTROLLI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );
--
-- IX_ID_DOMANDA_SCONTI  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_CONTROLLI (Table)
--
CREATE UNIQUE INDEX IX_ID_DOMANDA_SCONTI ON DOMANDA_SCONTI_CONTROLLI
(ID_DOMANDA_SCONTI)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_SCONTI_CONTROLLI ADD (
  CONSTRAINT DOMANDA_SCONTI_CONTROLLI_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOMANDA_SCONTI_CONTROLLI_PK
  ENABLE VALIDATE);



--
-- DOMANDA_SCONTI_IMPORTI_LOG  (Table) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
--   Row Count: 0
CREATE TABLE DOMANDA_SCONTI_IMPORTI_LOG
(
  ID                     NUMBER,
  ID_DOMANDA_SCONTI      NUMBER,
  ID_DOMANDA             NUMBER,
  COSTO_TRATTA           FLOAT(126),
  DATA                   TIMESTAMP(6)           DEFAULT SYSTIMESTAMP,
  ID_UID_FIREBASE_ADMIN  NUMBER,
  SCONTO_TOTALE          FLOAT(126)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- DOMANDA_SCONTI_IMPORTI_LOG_PK  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_IMPORTI_LOG (Table)
--
CREATE UNIQUE INDEX DOMANDA_SCONTI_IMPORTI_LOG_PK ON DOMANDA_SCONTI_IMPORTI_LOG
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_SCONTI_IMPORTI_LOG ADD (
  CONSTRAINT DOMANDA_SCONTI_IMPORTI_LOG_PK
  PRIMARY KEY
  (ID)
  USING INDEX DOMANDA_SCONTI_IMPORTI_LOG_PK
  ENABLE VALIDATE);



--
-- DOMANDA_SCONTI_INTEGRAZIONE  (Table) 
--
--   Row Count: 15390
CREATE TABLE DOMANDA_SCONTI_INTEGRAZIONE
(
  ID_RICHIESTA        INTEGER,
  LOTTO_INTEGRAZIONE  INTEGER
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- IX_ID_RICHIESTA  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--
CREATE UNIQUE INDEX IX_ID_RICHIESTA ON DOMANDA_SCONTI_INTEGRAZIONE
(ID_RICHIESTA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE DOMANDA_SCONTI_INTEGRAZIONE ADD (
  CHECK ("ID_RICHIESTA" IS NOT NULL)
  DISABLE NOVALIDATE);



--
-- ESPORTAZIONI  (Table) 
--
--   Row Count: 106
CREATE TABLE ESPORTAZIONI
(
  LOTTO               INTEGER                   NOT NULL,
  DATA_CREAZIONE      TIMESTAMP(6)              DEFAULT SYSTIMESTAMP,
  DATA_FILTRO         DATE,
  NUMERO_DRS          VARCHAR2(255 BYTE),
  DATA_DRS            DATE,
  FILEPATH            VARCHAR2(1000 BYTE),
  TIPO                INTEGER,
  IMPORTO_MANDATO     VARCHAR2(255 BYTE),
  NOTE                VARCHAR2(1000 BYTE),
  MESE_RIFERIMENTO    VARCHAR2(255 BYTE),
  CAPITOLO_BILANCIO   VARCHAR2(255 BYTE),
  ANNO_FINANZIARIO    VARCHAR2(255 BYTE),
  CODICE_FINANZIARIO  VARCHAR2(255 BYTE),
  FILEPATH_DRS        VARCHAR2(1000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- ESPORTAZIONI_PK  (Index) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--
CREATE UNIQUE INDEX ESPORTAZIONI_PK ON ESPORTAZIONI
(LOTTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE ESPORTAZIONI ADD (
  CONSTRAINT ESPORTAZIONI_PK
  PRIMARY KEY
  (LOTTO)
  USING INDEX ESPORTAZIONI_PK
  ENABLE VALIDATE);



--
-- FAQ  (Table) 
--
--   Row Count: 4
CREATE TABLE FAQ
(
  ID                     NUMBER                 NOT NULL,
  ID_UID_FIREBASE_ADMIN  NUMBER,
  OGGETTO                VARCHAR2(1000 BYTE),
  PUBBLICATA             NUMBER                 DEFAULT 0                     NOT NULL,
  CANCELLATO             NUMBER                 DEFAULT 0                     NOT NULL,
  DATA_INSERIMENTO       TIMESTAMP(6)           DEFAULT SYSTIMESTAMP,
  ID_CATEGORIA           NUMBER,
  BANDO                  NUMBER                 DEFAULT 0,
  DOMANDA                VARCHAR2(1000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- FAQ_PK  (Index) 
--
--  Dependencies: 
--   FAQ (Table)
--
CREATE UNIQUE INDEX FAQ_PK ON FAQ
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE FAQ ADD (
  CONSTRAINT FAQ_PK
  PRIMARY KEY
  (ID)
  USING INDEX FAQ_PK
  ENABLE VALIDATE);



--
-- FAQ_UTENTI  (Table) 
--
--   Row Count: 1423
CREATE TABLE FAQ_UTENTI
(
  ID                NUMBER                      NOT NULL,
  NOME              VARCHAR2(200 BYTE),
  COGNOME           VARCHAR2(200 BYTE),
  EMAIL             VARCHAR2(100 BYTE),
  STATO             NUMBER                      DEFAULT 0                     NOT NULL,
  DOMANDA           VARCHAR2(1000 BYTE),
  ID_CATEGORIA      NUMBER,
  BANDO             NUMBER                      DEFAULT 0,
  DATA_INSERIMENTO  TIMESTAMP(6)                DEFAULT SYSTIMESTAMP,
  ACCOUNT           VARCHAR2(20 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- FAQ_UTENTI_PK  (Index) 
--
--  Dependencies: 
--   FAQ_UTENTI (Table)
--
CREATE UNIQUE INDEX FAQ_UTENTI_PK ON FAQ_UTENTI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE FAQ_UTENTI ADD (
  CONSTRAINT FAQ_UTENTI_PK
  PRIMARY KEY
  (ID)
  USING INDEX FAQ_UTENTI_PK
  ENABLE VALIDATE);



--
-- IMPERSONIFICAZIONE  (Table) 
--
--   Row Count: 38
CREATE TABLE IMPERSONIFICAZIONE
(
  ID                  NUMBER,
  DATA                TIMESTAMP(6)              DEFAULT SYSTIMESTAMP,
  UID_FIREBASE_ADMIN  VARCHAR2(255 BYTE),
  CODICE_FISCALE      VARCHAR2(16 BYTE),
  USED                INTEGER                   DEFAULT 0
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE IMPERSONIFICAZIONE ADD (
  PRIMARY KEY
  (ID)
  USING INDEX
    TABLESPACE BANDO_VOLI_TBS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
  ENABLE VALIDATE);



--
-- INTEGRAZIONI_EMAIL_QUEUE  (Table) 
--
--   Row Count: 82
CREATE TABLE INTEGRAZIONI_EMAIL_QUEUE
(
  ID                NUMBER,
  ID_RICHIESTA      INTEGER                     DEFAULT 0,
  DESTINATARIO      VARCHAR2(255 BYTE)          NOT NULL,
  OGGETTO           VARCHAR2(255 BYTE)          NOT NULL,
  CORPO             CLOB                        NOT NULL,
  STATO             INTEGER                     DEFAULT 0,
  TENTATIVI         NUMBER                      DEFAULT 0,
  ERRORE_MESSAGGIO  VARCHAR2(1000 BYTE),
  DATA_INSERIMENTO  TIMESTAMP(6)                DEFAULT SYSTIMESTAMP,
  DATA_INVIO        TIMESTAMP(6)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE INTEGRAZIONI_EMAIL_QUEUE ADD (
  PRIMARY KEY
  (ID)
  USING INDEX
    TABLESPACE BANDO_VOLI_TBS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
  ENABLE VALIDATE);



--
-- LOGS  (Table) 
--
--   Row Count: 10386414
CREATE TABLE LOGS
(
  ID                       NUMBER(38)           NOT NULL,
  ID_OPERATORE             VARCHAR2(255 BYTE),
  IP                       VARCHAR2(255 BYTE),
  USERNAME                 VARCHAR2(255 BYTE),
  DATA                     TIMESTAMP(6)         DEFAULT SYSTIMESTAMP          NOT NULL,
  MODULE                   VARCHAR2(255 BYTE),
  ACTION                   VARCHAR2(255 BYTE),
  INFO                     CLOB,
  OLDVALUE                 CLOB,
  OPERATION                CLOB,
  IMPERSONIFICAZIONE_GUID  VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- LOGS_PK  (Index) 
--
--  Dependencies: 
--   LOGS (Table)
--
CREATE UNIQUE INDEX LOGS_PK ON LOGS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- LOGS_BE  (Table) 
--
--   Row Count: 3017
CREATE TABLE LOGS_BE
(
  ID            NUMBER(38)                      NOT NULL,
  ID_OPERATORE  VARCHAR2(255 BYTE),
  IP            VARCHAR2(255 BYTE),
  USERNAME      VARCHAR2(255 BYTE),
  DATA          TIMESTAMP(6)                    DEFAULT SYSTIMESTAMP          NOT NULL,
  MODULE        VARCHAR2(255 BYTE),
  ACTION        VARCHAR2(255 BYTE),
  INFO          CLOB,
  OLDVALUE      CLOB,
  OPERATION     CLOB
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- LOGS_BE_PK  (Index) 
--
--  Dependencies: 
--   LOGS_BE (Table)
--
CREATE UNIQUE INDEX LOGS_BE_PK ON LOGS_BE
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- LOGS_P7M  (Table) 
--
--   Row Count: 0
CREATE TABLE LOGS_P7M
(
  ID          INTEGER,
  ID_DOMANDA  INTEGER,
  ERRORE      VARCHAR2(4000 BYTE),
  FILEPATH    VARCHAR2(4000 BYTE),
  DATA        TIMESTAMP(6)                      DEFAULT SYSTIMESTAMP,
  FASE        NUMBER
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- LOGS_P7M_PK  (Index) 
--
--  Dependencies: 
--   LOGS_P7M (Table)
--
CREATE UNIQUE INDEX LOGS_P7M_PK ON LOGS_P7M
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- MD_APPLICATIONFILES  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_APPLICATIONFILES
(
  ID                  NUMBER                    NOT NULL,
  APPLICATIONS_ID_FK  NUMBER                    NOT NULL,
  NAME                VARCHAR2(200 BYTE)        NOT NULL,
  URI                 VARCHAR2(4000 BYTE)       NOT NULL,
  TYPE                VARCHAR2(100 BYTE)        NOT NULL,
  STATE               VARCHAR2(100 BYTE)        NOT NULL,
  LANGUAGE            VARCHAR2(100 BYTE),
  LOC                 NUMBER,
  SECURITY_GROUP_ID   NUMBER                    DEFAULT 0                     NOT NULL,
  CREATED_ON          DATE                      DEFAULT sysdate               NOT NULL,
  CREATED_BY          VARCHAR2(4000 BYTE),
  UPDATED_ON          DATE,
  UPDATED_BY          VARCHAR2(4000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_APPLICATIONFILES IS 'Holds a tuple for each file that is being processed whether it is changed or not.';

COMMENT ON COLUMN MD_APPLICATIONFILES.NAME IS 'file name  //OBJECTNAME';

COMMENT ON COLUMN MD_APPLICATIONFILES.URI IS 'The uri is the part of the file url after the base dir has been removed.  See MD_APPLICATION for base dir';

COMMENT ON COLUMN MD_APPLICATIONFILES.TYPE IS 'This will denote the type of file we have, including DIR, FILE (text), BINARY, IGNORE (where we choose to ignore files)';

COMMENT ON COLUMN MD_APPLICATIONFILES.STATE IS 'State will be how this file is operated on.  For example. it will be OPEN, NEW, FIXED, IGNORED, REVIEWED, COMPLETE';

COMMENT ON COLUMN MD_APPLICATIONFILES.LANGUAGE IS 'Language of the file that has been processed.';

COMMENT ON COLUMN MD_APPLICATIONFILES.SECURITY_GROUP_ID IS 'APEX';

COMMENT ON COLUMN MD_APPLICATIONFILES.CREATED_ON IS 'APEX';

COMMENT ON COLUMN MD_APPLICATIONFILES.CREATED_BY IS 'APEX';

COMMENT ON COLUMN MD_APPLICATIONFILES.UPDATED_ON IS 'APEX';

COMMENT ON COLUMN MD_APPLICATIONFILES.UPDATED_BY IS 'APEX';


--
-- MD_APPLICATIONFILES_PK  (Index) 
--
--  Dependencies: 
--   MD_APPLICATIONFILES (Table)
--
CREATE UNIQUE INDEX MD_APPLICATIONFILES_PK ON MD_APPLICATIONFILES
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_APPLICATIONFILES ADD (
  CONSTRAINT MD_APPLICATIONFILES_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_APPLICATIONFILES_PK
  ENABLE VALIDATE);



--
-- MD_APPLICATIONS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_APPLICATIONS
(
  ID                 NUMBER                     NOT NULL,
  NAME               VARCHAR2(4000 BYTE),
  DESCRIPTION        VARCHAR2(4000 BYTE),
  BASE_DIR           VARCHAR2(4000 BYTE),
  OUTPUT_DIR         VARCHAR2(4000 BYTE),
  BACKUP_DIR         VARCHAR2(4000 BYTE),
  INPLACE            NUMBER,
  PROJECT_ID_FK      NUMBER                     NOT NULL,
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE),
  LAST_UPDATED_ON    DATE,
  LAST_UPDATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_APPLICATIONS IS 'This is the base table for application projects.  It holds the base information for applications associated with a database';

COMMENT ON COLUMN MD_APPLICATIONS.ID IS 'Primary Key';

COMMENT ON COLUMN MD_APPLICATIONS.NAME IS 'Name of the application suite  //OBJECTNAME';

COMMENT ON COLUMN MD_APPLICATIONS.DESCRIPTION IS 'Overview of what the application does.';

COMMENT ON COLUMN MD_APPLICATIONS.BASE_DIR IS 'This is the base src directory for the application.  It could be an svn checkout, a clearcase view or something similar';

COMMENT ON COLUMN MD_APPLICATIONS.OUTPUT_DIR IS 'This is the output directory where the scanner will present the converted files, if there are converted or modified.';

COMMENT ON COLUMN MD_APPLICATIONS.BACKUP_DIR IS 'This is the directory in which the application files are backed up if a backp is chosen';

COMMENT ON COLUMN MD_APPLICATIONS.INPLACE IS 'Designates whether the changes have been made inplace, in the source directory or not';

COMMENT ON COLUMN MD_APPLICATIONS.PROJECT_ID_FK IS 'project of the database(s) this application relates to';


--
-- MD_APPLICATIONS_PK  (Index) 
--
--  Dependencies: 
--   MD_APPLICATIONS (Table)
--
CREATE UNIQUE INDEX MD_APPLICATIONS_PK ON MD_APPLICATIONS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_APPLICATIONS ADD (
  CONSTRAINT MD_APPLICATIONS_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_APPLICATIONS_PK
  ENABLE VALIDATE);



--
-- MD_CATALOGS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_CATALOGS
(
  ID                 NUMBER                     NOT NULL,
  CONNECTION_ID_FK   NUMBER                     NOT NULL,
  CATALOG_NAME       VARCHAR2(4000 BYTE),
  DUMMY_FLAG         CHAR(1 BYTE)               DEFAULT 'N',
  NATIVE_SQL         CLOB,
  NATIVE_KEY         VARCHAR2(4000 BYTE),
  COMMENTS           VARCHAR2(4000 BYTE),
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE),
  LAST_UPDATED_ON    DATE,
  LAST_UPDATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_CATALOGS IS 'Store catalogs in this table.';

COMMENT ON COLUMN MD_CATALOGS.CONNECTION_ID_FK IS 'Foreign key into the connections table - Shows what connection this catalog belongs to //PARENTFIELD';

COMMENT ON COLUMN MD_CATALOGS.CATALOG_NAME IS 'Name of the catalog //OBJECTNAME';

COMMENT ON COLUMN MD_CATALOGS.DUMMY_FLAG IS 'Flag to show if this catalog is a "dummy" catalog which is used as a placeholder for those platforms that do not support catalogs.  ''N'' signifies that this is NOT a dummy catalog, while ''Y'' signifies that it is.';

COMMENT ON COLUMN MD_CATALOGS.NATIVE_SQL IS 'THe SQL used to create this catalog';

COMMENT ON COLUMN MD_CATALOGS.NATIVE_KEY IS 'A unique identifier used to identify the catalog at source.';


--
-- MD_CATALOGS_PK  (Index) 
--
--  Dependencies: 
--   MD_CATALOGS (Table)
--
CREATE UNIQUE INDEX MD_CATALOGS_PK ON MD_CATALOGS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_CATALOGS ADD (
  CONSTRAINT MD_CATALOGS_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_CATALOGS_PK
  ENABLE VALIDATE);



--
-- MD_FILE_ARTIFACTS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_FILE_ARTIFACTS
(
  ID                   NUMBER CONSTRAINT MD_APP_FILE_ART_NONULL NOT NULL,
  APPLICATIONFILES_ID  NUMBER CONSTRAINT MD_APPL_FILE_FK_NONULL NOT NULL,
  PATTERN              VARCHAR2(4000 BYTE),
  STRING_FOUND         VARCHAR2(4000 BYTE),
  STRING_REPLACED      VARCHAR2(4000 BYTE),
  TYPE                 VARCHAR2(200 BYTE),
  STATUS               VARCHAR2(4000 BYTE),
  LINE                 NUMBER,
  PATTERN_START        NUMBER,
  PATTERN_END          NUMBER,
  DUE_DATE             DATE,
  DB_TYPE              VARCHAR2(100 BYTE),
  CODE_TYPE            VARCHAR2(1000 BYTE),
  DESCRIPTION          VARCHAR2(4000 BYTE),
  PRIORITY             INTEGER,
  SECURITY_GROUP_ID    VARCHAR2(20 BYTE)        DEFAULT '0'                   NOT NULL,
  CREATED_ON           DATE                     DEFAULT sysdate               NOT NULL,
  CREATED_BY           VARCHAR2(4000 BYTE),
  LAST_UPDATED         DATE,
  LAST_UPDATED_BY      VARCHAR2(4000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_FILE_ARTIFACTS IS 'Holds a tuple for each interesting thing the scanner finds in a file';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.PATTERN IS 'Pattern used to search source file for interesting artifiacts';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.STRING_FOUND IS 'String found in source from the pattern supplied';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.STRING_REPLACED IS 'This is the string which replace the string found if it was replaced.';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.TYPE IS 'This is the type of the replacement.  It could be a straight replace from a replacement pattern, or we could have passed the string to a translator which would change the string depending on the database.';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.STATUS IS 'Pattern used to search source file for interesting artifiacts';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.DUE_DATE IS 'Due date is used by the TODO mechanism to manage the validation and work to complete this change';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.DB_TYPE IS 'Source database calls type';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.CODE_TYPE IS 'Source code db api, like dblib, jdbc';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.DESCRIPTION IS 'This is a description of the artifact which will have a default generated by the scanner and then can be modified by the user to be more appropriate for their use';

COMMENT ON COLUMN MD_FILE_ARTIFACTS.PRIORITY IS 'The priority is set for the TODOs so they can be managed by the user';


--
-- MD_FILE_ARTIFACTS_PK  (Index) 
--
--  Dependencies: 
--   MD_FILE_ARTIFACTS (Table)
--
CREATE UNIQUE INDEX MD_FILE_ARTIFACTS_PK ON MD_FILE_ARTIFACTS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_FILE_ARTIFACTS ADD (
  CONSTRAINT MD_FILE_ARTIFACTS_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_FILE_ARTIFACTS_PK
  ENABLE VALIDATE);



--
-- MD_GROUP_MEMBERS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_GROUP_MEMBERS
(
  ID                  NUMBER                    NOT NULL,
  GROUP_ID_FK         NUMBER                    NOT NULL,
  USER_ID_FK          NUMBER,
  GROUP_MEMBER_ID_FK  NUMBER,
  SECURITY_GROUP_ID   NUMBER                    DEFAULT 0                     NOT NULL,
  CREATED_ON          DATE                      DEFAULT sysdate               NOT NULL,
  CREATED_BY          VARCHAR2(255 BYTE),
  LAST_UPDATED_ON     DATE,
  LAST_UPDATED_BY     VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_GROUP_MEMBERS IS 'This table is used to store the members of a group.';

COMMENT ON COLUMN MD_GROUP_MEMBERS.ID IS 'Primary Key';

COMMENT ON COLUMN MD_GROUP_MEMBERS.USER_ID_FK IS 'Id of member';

COMMENT ON COLUMN MD_GROUP_MEMBERS.GROUP_MEMBER_ID_FK IS 'groups can be members of groups';


--
-- MD_GROUP_MEMBERS_PK  (Index) 
--
--  Dependencies: 
--   MD_GROUP_MEMBERS (Table)
--
CREATE UNIQUE INDEX MD_GROUP_MEMBERS_PK ON MD_GROUP_MEMBERS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_GROUP_MEMBERS ADD (
  CONSTRAINT MD_GROUP_MEMBERS_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_GROUP_MEMBERS_PK
  ENABLE VALIDATE);



--
-- MD_REPOVERSIONS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_REPOVERSIONS
(
  REVISION  NUMBER                              NOT NULL
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_REPOVERSIONS IS 'This table is used to version this schema for future requirements.';


--
-- MD_SEQUENCES  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_SEQUENCES
(
  ID                 NUMBER                     NOT NULL,
  SCHEMA_ID_FK       NUMBER                     NOT NULL,
  NAME               VARCHAR2(4000 BYTE)        NOT NULL,
  SEQ_START          NUMBER                     NOT NULL,
  INCR               NUMBER                     DEFAULT 1                     NOT NULL,
  NATIVE_SQL         CLOB,
  NATIVE_KEY         VARCHAR2(4000 BYTE),
  COMMENTS           VARCHAR2(4000 BYTE),
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE)         DEFAULT '0'                   NOT NULL,
  LAST_UPDATED_ON    DATE,
  LAST_UPDATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_SEQUENCES IS 'For storing information on sequences.';

COMMENT ON COLUMN MD_SEQUENCES.ID IS 'Primary Key';

COMMENT ON COLUMN MD_SEQUENCES.SCHEMA_ID_FK IS 'The schema to which this object belongs. //PARENTFIELD';

COMMENT ON COLUMN MD_SEQUENCES.NAME IS 'Name of this sequence //OBJECTNAME';

COMMENT ON COLUMN MD_SEQUENCES.SEQ_START IS 'Starting point of the sequence';

COMMENT ON COLUMN MD_SEQUENCES.INCR IS 'Increment value of the sequence';


--
-- MD_TABLESPACES  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_TABLESPACES
(
  ID                 NUMBER                     NOT NULL,
  SCHEMA_ID_FK       NUMBER                     NOT NULL,
  TABLESPACE_NAME    VARCHAR2(4000 BYTE),
  NATIVE_SQL         CLOB,
  NATIVE_KEY         VARCHAR2(4000 BYTE),
  COMMENTS           VARCHAR2(4000 BYTE),
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE),
  LAST_UPDATED_ON    DATE,
  LAST_UPDATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_TABLESPACES IS 'For storing information about tablespaces.';

COMMENT ON COLUMN MD_TABLESPACES.ID IS 'Primary Key';

COMMENT ON COLUMN MD_TABLESPACES.SCHEMA_ID_FK IS 'Schema to which this tablespace belongs //PARENTFIELD';

COMMENT ON COLUMN MD_TABLESPACES.TABLESPACE_NAME IS 'Name of the table space //OBJECTNAME';

COMMENT ON COLUMN MD_TABLESPACES.NATIVE_SQL IS 'The SQL used to create this tablespace';

COMMENT ON COLUMN MD_TABLESPACES.NATIVE_KEY IS 'A unique identifier for this object at source';


--
-- MD_TABLESPACES_PK  (Index) 
--
--  Dependencies: 
--   MD_TABLESPACES (Table)
--
CREATE UNIQUE INDEX MD_TABLESPACES_PK ON MD_TABLESPACES
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_TABLESPACES ADD (
  CONSTRAINT MD_TABLESPACES_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_TABLESPACES_PK
  ENABLE VALIDATE);



--
-- MD_USERS  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_USERS
(
  ID                 NUMBER                     NOT NULL,
  SCHEMA_ID_FK       NUMBER                     NOT NULL,
  USERNAME           VARCHAR2(4000 BYTE)        NOT NULL,
  PASSWORD           VARCHAR2(4000 BYTE),
  NATIVE_SQL         CLOB,
  NATIVE_KEY         VARCHAR2(4000 BYTE),
  COMMENTS           VARCHAR2(4000 BYTE),
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE),
  LAST_UPDATED_ON    DATE,
  LAST_UPDATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_USERS IS 'User information.';

COMMENT ON COLUMN MD_USERS.ID IS 'Primary Key';

COMMENT ON COLUMN MD_USERS.SCHEMA_ID_FK IS 'Shema in which this object belongs //PARENTFIELD';

COMMENT ON COLUMN MD_USERS.USERNAME IS 'Username for login //OBJECTNAME';

COMMENT ON COLUMN MD_USERS.PASSWORD IS 'Password for login';

COMMENT ON COLUMN MD_USERS.NATIVE_SQL IS 'SQL Used to create this object at source';

COMMENT ON COLUMN MD_USERS.NATIVE_KEY IS 'Unique identifier for this object at source.';


--
-- MD_USERS_PK  (Index) 
--
--  Dependencies: 
--   MD_USERS (Table)
--
CREATE UNIQUE INDEX MD_USERS_PK ON MD_USERS
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_USERS ADD (
  CONSTRAINT MD_USERS_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_USERS_PK
  ENABLE VALIDATE);



--
-- MD_USER_PRIVILEGES  (Table) 
--
--   Row Count: 0
CREATE TABLE MD_USER_PRIVILEGES
(
  ID                 NUMBER                     NOT NULL,
  USER_ID_FK         NUMBER                     NOT NULL,
  PRIVILEGE_ID_FK    NUMBER,
  SECURITY_GROUP_ID  NUMBER                     DEFAULT 0                     NOT NULL,
  CREATED_ON         DATE                       DEFAULT sysdate               NOT NULL,
  CREATED_BY         VARCHAR2(255 BYTE),
  LAST_UPDATED_ON    DATE,
  LAST_UDPATED_BY    VARCHAR2(255 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

COMMENT ON TABLE MD_USER_PRIVILEGES IS 'This table stores privileges granted to individual users';

COMMENT ON COLUMN MD_USER_PRIVILEGES.ID IS 'Primary Key';

COMMENT ON COLUMN MD_USER_PRIVILEGES.USER_ID_FK IS 'User';

COMMENT ON COLUMN MD_USER_PRIVILEGES.PRIVILEGE_ID_FK IS 'Privilege';


--
-- MD_USER_PRIVILEGES_PK  (Index) 
--
--  Dependencies: 
--   MD_USER_PRIVILEGES (Table)
--
CREATE UNIQUE INDEX MD_USER_PRIVILEGES_PK ON MD_USER_PRIVILEGES
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE MD_USER_PRIVILEGES ADD (
  CONSTRAINT MD_USER_PRIVILEGES_PK
  PRIMARY KEY
  (ID)
  USING INDEX MD_USER_PRIVILEGES_PK
  ENABLE VALIDATE);



--
-- RICHIESTA_INTEGRAZIONE  (Table) 
--
--   Row Count: 35
CREATE TABLE RICHIESTA_INTEGRAZIONE
(
  ID                         NUMBER,
  ID_DOMANDA_SCONTI          NUMBER             NOT NULL,
  DATA_RICHIESTA             TIMESTAMP(6)       DEFAULT SYSTIMESTAMP          NOT NULL,
  DESCRIZIONE_RICHIESTA      VARCHAR2(1000 BYTE),
  NUMERO_PROTOCOLLO          VARCHAR2(255 BYTE),
  PROTOCOLLO_JSON            CLOB,
  DATA_PROTOCOLLO            TIMESTAMP(6),
  FILEPATH_PDF_PROTOCOLLATO  VARCHAR2(500 BYTE),
  DATA_INVIO_NOTIFICA        DATE,
  SCADENZA                   DATE,
  FILEPATH_RISPOSTA          VARCHAR2(500 BYTE),
  DATA_CARICAMENTO           DATE,
  STATO                      VARCHAR2(30 BYTE),
  NOTE_OPERATORE             VARCHAR2(1000 BYTE),
  DATA_VALIDAZIONE           TIMESTAMP(6),
  OPERATORE_VALIDAZIONE      VARCHAR2(100 BYTE),
  OPERATORE_RICHIESTA        INTEGER,
  NOTE_UTENTE                VARCHAR2(1000 BYTE)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


ALTER TABLE RICHIESTA_INTEGRAZIONE ADD (
  PRIMARY KEY
  (ID)
  USING INDEX
    TABLESPACE BANDO_VOLI_TBS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          64K
                NEXT             1M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
  ENABLE VALIDATE);



--
-- SPID_ACCESSI  (Table) 
--
--   Row Count: 4273336
CREATE TABLE SPID_ACCESSI
(
  ID              NUMBER                        NOT NULL,
  CODICE_FISCALE  VARCHAR2(30 BYTE),
  INRESPONSETO    VARCHAR2(200 BYTE),
  AUTHNINSTANT    VARCHAR2(200 BYTE),
  DATA            TIMESTAMP(6)                  DEFAULT SYSTIMESTAMP
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- SPID_ACCESSI_PK  (Index) 
--
--  Dependencies: 
--   SPID_ACCESSI (Table)
--
CREATE UNIQUE INDEX SPID_ACCESSI_PK ON SPID_ACCESSI
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- UID_FIREBASE_ADMIN  (Table) 
--
--   Row Count: 20
CREATE TABLE UID_FIREBASE_ADMIN
(
  ID              NUMBER                        NOT NULL,
  GUID            VARCHAR2(1000 BYTE),
  EMAIL           VARCHAR2(255 BYTE),
  NOME            VARCHAR2(255 BYTE),
  COGNOME         VARCHAR2(255 BYTE),
  SUPER_USER      INTEGER                       NOT NULL,
  GROUP_ID        INTEGER                       DEFAULT 0,
  VERIFICATO      INTEGER                       DEFAULT 0,
  CODICE_FISCALE  VARCHAR2(16 CHAR)
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- UID_FIREBASE_ADMIN_PK  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE UNIQUE INDEX UID_FIREBASE_ADMIN_PK ON UID_FIREBASE_ADMIN
(ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE UID_FIREBASE_ADMIN ADD (
  CONSTRAINT UID_FIREBASE_ADMIN_PK
  PRIMARY KEY
  (ID)
  USING INDEX UID_FIREBASE_ADMIN_PK
  ENABLE VALIDATE);



--
-- FAQ_INDEX1  (Index) 
--
--  Dependencies: 
--   FAQ (Table)
--
CREATE INDEX FAQ_INDEX1 ON FAQ
(ID_UID_FIREBASE_ADMIN)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- FAQ_INDEX2  (Index) 
--
--  Dependencies: 
--   FAQ (Table)
--
CREATE INDEX FAQ_INDEX2 ON FAQ
(PUBBLICATA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- FAQ_INDEX3  (Index) 
--
--  Dependencies: 
--   FAQ (Table)
--
CREATE INDEX FAQ_INDEX3 ON FAQ
(CANCELLATO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- FAQ_INDEX4  (Index) 
--
--  Dependencies: 
--   FAQ (Table)
--
CREATE INDEX FAQ_INDEX4 ON FAQ
(ID_CATEGORIA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IDX_COD_BELFIORE  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IDX_COD_BELFIORE ON COMUNE
(COD_CF)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IDX_ID_DOMANDA  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE INDEX IDX_ID_DOMANDA ON DOMANDA_SCONTI
(ID_DOMANDA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ACC_ANAG_CF  (Index) 
--
--  Dependencies: 
--   ACCOUNT_ANAGRAFICA (Table)
--
CREATE INDEX IX_ACC_ANAG_CF ON ACCOUNT_ANAGRAFICA
(CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ACC_ANAG_DATA_REC  (Index) 
--
--  Dependencies: 
--   ACCOUNT_ANAGRAFICA (Table)
--
CREATE INDEX IX_ACC_ANAG_DATA_REC ON ACCOUNT_ANAGRAFICA
(DATA_REGISTRAZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ALLEGATI_DOCUMENTO  (Index) 
--
--  Dependencies: 
--   ALLEGATI (Table)
--
CREATE INDEX IX_ALLEGATI_DOCUMENTO ON ALLEGATI
(ID_DOCUMENTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ALLEGATI_DOMANDA  (Index) 
--
--  Dependencies: 
--   ALLEGATI (Table)
--
CREATE INDEX IX_ALLEGATI_DOMANDA ON ALLEGATI
(ID_DOMANDA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ALLEGATI_TIPODOCUMENTO  (Index) 
--
--  Dependencies: 
--   ALLEGATI (Table)
--
CREATE INDEX IX_ALLEGATI_TIPODOCUMENTO ON ALLEGATI
(TIPO_DOCUMENTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_AUTORIZZAZIONE  (Index) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--
CREATE INDEX IX_AUTORIZZAZIONE ON ACCOUNT
(AUTORIZZAZIONE_TRATTAMENTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_BANDI_FC  (Index) 
--
--  Dependencies: 
--   BANDI (Table)
--
CREATE INDEX IX_BANDI_FC ON BANDI
(FINE_CLICKDAY)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_BANDI_FP  (Index) 
--
--  Dependencies: 
--   BANDI (Table)
--
CREATE INDEX IX_BANDI_FP ON BANDI
(FINE_PREPARAZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_BANDI_IC  (Index) 
--
--  Dependencies: 
--   BANDI (Table)
--
CREATE INDEX IX_BANDI_IC ON BANDI
(INIZIO_CLICKDAY)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_BANDI_IP  (Index) 
--
--  Dependencies: 
--   BANDI (Table)
--
CREATE INDEX IX_BANDI_IP ON BANDI
(INIZIO_PREPARAZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_CODICE_FISCALE_CS  (Index) 
--
--  Dependencies: 
--   CUSTOMER_SATISFACTION (Table)
--
CREATE INDEX IX_CODICE_FISCALE_CS ON CUSTOMER_SATISFACTION
(CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_COMUNE_ATTIVO  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_COMUNE_ATTIVO ON COMUNE
(ATTIVO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_COMUNE_CODICE_PROV  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_COMUNE_CODICE_PROV ON COMUNE
(CODICE_PROVINCIA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_COMUNE_DESCRIZIONE  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_COMUNE_DESCRIZIONE ON COMUNE
(DESCRIZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_COMUNE_ISTAT  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_COMUNE_ISTAT ON COMUNE
(CODICE_ISTAT)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_COMUNE_REGIONE  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_COMUNE_REGIONE ON COMUNE
(REGIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_DOCUMENTI_BANDO_FASE  (Index) 
--
--  Dependencies: 
--   DOCUMENTI_BANDO (Table)
--
CREATE INDEX IX_DOCUMENTI_BANDO_FASE ON DOCUMENTI_BANDO
(FASE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_DOCUMENTI_BANDO_OBBLIGO  (Index) 
--
--  Dependencies: 
--   DOCUMENTI_BANDO (Table)
--
CREATE INDEX IX_DOCUMENTI_BANDO_OBBLIGO ON DOCUMENTI_BANDO
(OBBLIGO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_DOCUMENTI_BANDO_PRIORITA  (Index) 
--
--  Dependencies: 
--   DOCUMENTI_BANDO (Table)
--
CREATE INDEX IX_DOCUMENTI_BANDO_PRIORITA ON DOCUMENTI_BANDO
(PRIORITA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_DOMANDA_LOTTO  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE INDEX IX_DOMANDA_LOTTO ON DOMANDA_SCONTI
(LOTTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_DOMANDA_SCONTI_PRIORITY  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE INDEX IX_DOMANDA_SCONTI_PRIORITY ON DOMANDA_SCONTI
(PRIORITY)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FAQ_UT_ACC  (Index) 
--
--  Dependencies: 
--   FAQ_UTENTI (Table)
--
CREATE INDEX IX_FAQ_UT_ACC ON FAQ_UTENTI
(ACCOUNT)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FAQ_UT_CAT  (Index) 
--
--  Dependencies: 
--   FAQ_UTENTI (Table)
--
CREATE INDEX IX_FAQ_UT_CAT ON FAQ_UTENTI
(ID_CATEGORIA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FAQ_UT_DATAI  (Index) 
--
--  Dependencies: 
--   FAQ_UTENTI (Table)
--
CREATE INDEX IX_FAQ_UT_DATAI ON FAQ_UTENTI
(DATA_INSERIMENTO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FIREBASE_ADMIN_CODICE_FISCALE  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE INDEX IX_FIREBASE_ADMIN_CODICE_FISCALE ON UID_FIREBASE_ADMIN
(CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FIREBASE_ADMIN_EMAIL  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE INDEX IX_FIREBASE_ADMIN_EMAIL ON UID_FIREBASE_ADMIN
(EMAIL)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FIREBASE_ADMIN_GROUP  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE INDEX IX_FIREBASE_ADMIN_GROUP ON UID_FIREBASE_ADMIN
(GROUP_ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FIREBASE_ADMIN_GUID  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE INDEX IX_FIREBASE_ADMIN_GUID ON UID_FIREBASE_ADMIN
(GUID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_FIREBASE_ADMIN_SU  (Index) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--
CREATE INDEX IX_FIREBASE_ADMIN_SU ON UID_FIREBASE_ADMIN
(SUPER_USER)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ID_DOMANAD  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_IMPORTI_LOG (Table)
--
CREATE INDEX IX_ID_DOMANAD ON DOMANDA_SCONTI_IMPORTI_LOG
(ID_DOMANDA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_ID_DOMANDA_SCONTI_LOG  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_IMPORTI_LOG (Table)
--
CREATE INDEX IX_ID_DOMANDA_SCONTI_LOG ON DOMANDA_SCONTI_IMPORTI_LOG
(ID_DOMANDA_SCONTI)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_IMPERSONIFICAZIONE  (Index) 
--
--  Dependencies: 
--   LOGS (Table)
--
CREATE INDEX IX_IMPERSONIFICAZIONE ON LOGS
(IMPERSONIFICAZIONE_GUID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_LOTTO_INTEGRAZIONE  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--
CREATE INDEX IX_LOTTO_INTEGRAZIONE ON DOMANDA_SCONTI_INTEGRAZIONE
(LOTTO_INTEGRAZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_OBBLIGO  (Index) 
--
--  Dependencies: 
--   ANAG_DICHIARAZIONI (Table)
--
CREATE INDEX IX_OBBLIGO ON ANAG_DICHIARAZIONI
(OBBLIGO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_POSIZIONE  (Index) 
--
--  Dependencies: 
--   ANAG_DICHIARAZIONI (Table)
--
CREATE INDEX IX_POSIZIONE ON ANAG_DICHIARAZIONI
(POSIZIONE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_SA_CF  (Index) 
--
--  Dependencies: 
--   SPID_ACCESSI (Table)
--
CREATE INDEX IX_SA_CF ON SPID_ACCESSI
(CODICE_FISCALE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_SA_DATA  (Index) 
--
--  Dependencies: 
--   SPID_ACCESSI (Table)
--
CREATE INDEX IX_SA_DATA ON SPID_ACCESSI
(DATA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_SEARCH  (Index) 
--
--  Dependencies: 
--   COMUNE (Table)
--
CREATE INDEX IX_SEARCH ON COMUNE
(SEARCH)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_STATO_PRATICA  (Index) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--
CREATE INDEX IX_STATO_PRATICA ON DOMANDA_SCONTI
(STATO)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_USER_ACCOUNT  (Index) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--
CREATE INDEX IX_USER_ACCOUNT ON ACCOUNT
(USERNAME)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- IX_VALORE_CS  (Index) 
--
--  Dependencies: 
--   CUSTOMER_SATISFACTION (Table)
--
CREATE INDEX IX_VALORE_CS ON CUSTOMER_SATISFACTION
(VALORE)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- MD_APP_FILE_TYPE_IDX  (Index) 
--
--  Dependencies: 
--   MD_APPLICATIONFILES (Table)
--
CREATE INDEX MD_APP_FILE_TYPE_IDX ON MD_APPLICATIONFILES
(TYPE, ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- MD_STATE_TYPE__ID  (Index) 
--
--  Dependencies: 
--   MD_APPLICATIONFILES (Table)
--
CREATE INDEX MD_STATE_TYPE__ID ON MD_APPLICATIONFILES
(STATE, TYPE, ID)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

--
-- AGGIORNA_LOTTO_DOMANDA_SCONTI  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   ESPORTAZIONI (Table)
--   DBMS_STANDARD (Package)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE AGGIORNA_LOTTO_DOMANDA_SCONTI (
    LOTTO_FROM IN NUMBER,
    LOTTO_TO   IN NUMBER
) AS
    V_DATA_CREAZIONE     ESPORTAZIONI.DATA_CREAZIONE%TYPE;
    V_NOTE_PRECEDENTE    ESPORTAZIONI.NOTE%TYPE;
    V_TIPO_FROM          ESPORTAZIONI.TIPO%TYPE;
    V_TIPO_TO            ESPORTAZIONI.TIPO%TYPE;
BEGIN
    -- Recupero TIPO dei due lotti e controllo corrispondenza
    SELECT TIPO INTO V_TIPO_FROM FROM ESPORTAZIONI WHERE LOTTO = LOTTO_FROM;
    SELECT TIPO INTO V_TIPO_TO   FROM ESPORTAZIONI WHERE LOTTO = LOTTO_TO;

    IF V_TIPO_FROM != V_TIPO_TO THEN
        RAISE_APPLICATION_ERROR(-20003, 'I lotti specificati non appartengono allo stesso TIPO.');
    END IF;

    -- Recupero della DATA_CREAZIONE del lotto_to
    SELECT DATA_CREAZIONE
    INTO V_DATA_CREAZIONE
    FROM ESPORTAZIONI
    WHERE LOTTO = LOTTO_TO;

    -- Aggiornamento della tabella DOMANDA_SCONTI
    UPDATE DOMANDA_SCONTI
    SET 
        LOTTO = LOTTO_TO,
        DATA_ESPORTAZIONE = V_DATA_CREAZIONE,
        DATA_ESITO = null
    WHERE LOTTO = LOTTO_FROM AND STATO = 1;

    -- Recupera eventuale nota precedente del lotto_from
    SELECT NOTE
    INTO V_NOTE_PRECEDENTE
    FROM ESPORTAZIONI
    WHERE LOTTO = LOTTO_FROM;

    -- Aggiunge l'annotazione nella colonna NOTE del lotto_from
    UPDATE ESPORTAZIONI
    SET NOTE = NVL(V_NOTE_PRECEDENTE || ' | ', '') || 
               'Domande spostate nel lotto ' || LOTTO_TO || ' in data ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
    WHERE LOTTO = LOTTO_FROM;

    COMMIT;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20001, 'Lotto_from o lotto_to non trovato nella tabella ESPORTAZIONI');
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20002, 'Errore durante l''aggiornamento: ' || SQLERRM);
END;
/


--
-- SPAEROPORTISAVE  (Procedure) 
--
--  Dependencies: 
--   AEROPORTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPAEROPORTISAVE" 
(
    P_CODICE  VARCHAR2,
    P_NOME  VARCHAR2,
    P_REGIONE NUMBER 
) AS 
INSUPDATE  NUMBER;
BEGIN

SELECT COUNT(*) INTO INSUPDATE  FROM AEROPORTI WHERE CODICE = P_CODICE;

IF INSUPDATE <= 0 THEN
        INSERT INTO AEROPORTI (CODICE, NOME, REGIONE) VALUES (P_CODICE, P_NOME, P_REGIONE);
ELSE
        UPDATE AEROPORTI SET NOME = P_NOME, REGIONE = P_REGIONE WHERE CODICE = P_CODICE;
END IF;

END SPAEROPORTISAVE;
/


--
-- SPDICHIARAZIONISAVE  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_DICHIARAZIONI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPDICHIARAZIONISAVE" 
(
  P_ID_DOMANDA  INT 
, P_ID_ANAG_DICHIARAZIONI INT
) AS 

BEGIN

INSERT INTO DOMANDA_DICHIARAZIONI (ID_DOMANDA, ID_ANAG_DICHIARAZIONI ) VALUES (P_ID_DOMANDA, P_ID_ANAG_DICHIARAZIONI);

END SPDICHIARAZIONISAVE;
/


--
-- SPLOGSBESAVE  (Procedure) 
--
--  Dependencies: 
--   LOGS_BE (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPLOGSBESAVE" 
(
  P_ID_OPERATORE IN VARCHAR2 
, P_IP IN VARCHAR2 
, P_USERNAME IN VARCHAR2 
, P_MODULE IN VARCHAR2 
, P_ACTION IN VARCHAR2 
, P_OPERATION IN VARCHAR2 
, P_INFO IN CLOB 
, P_OLDVALUE IN CLOB 
) AS 
BEGIN
  INSERT INTO LOGS_BE
    (ID_OPERATORE, IP, USERNAME, DATA, MODULE, ACTION, OPERATION, INFO, OLDVALUE)
  	VALUES
    (P_ID_OPERATORE, P_IP, P_USERNAME, SYSTIMESTAMP, P_MODULE, P_ACTION, P_OPERATION, P_INFO, P_OLDVALUE);
END SPLOGSBESAVE;
/


--
-- SPLOGSP7MSAVE  (Procedure) 
--
--  Dependencies: 
--   LOGS_P7M (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPLOGSP7MSAVE" 
(
  P_ID_DOMANDA IN NUMBER
, P_ERRORE IN VARCHAR2 
, P_FILEPATH IN VARCHAR2 
, P_FASE IN NUMBER
) AS 
BEGIN
  INSERT INTO LOGS_P7M
    (ID_DOMANDA, ERRORE, FILEPATH, DATA, FASE)
  	VALUES
    (P_ID_DOMANDA, P_ERRORE, P_FILEPATH, SYSTIMESTAMP, P_FASE);
END SPLOGSP7MSAVE;
/


--
-- SPLOGSSAVE  (Procedure) 
--
--  Dependencies: 
--   LOGS (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPLOGSSAVE" 
(
  P_ID_OPERATORE IN VARCHAR2 
, P_IP IN VARCHAR2 
, P_USERNAME IN VARCHAR2 
, P_MODULE IN VARCHAR2 
, P_ACTION IN VARCHAR2 
, P_OPERATION IN VARCHAR2 
, P_INFO IN CLOB 
, P_OLDVALUE IN CLOB
, P_GUID IN VARCHAR2  
) AS 
BEGIN
  INSERT INTO LOGS
    (ID_OPERATORE, IP, USERNAME, DATA, MODULE, ACTION, OPERATION, INFO, OLDVALUE, IMPERSONIFICAZIONE_GUID)
  	VALUES
    (P_ID_OPERATORE, P_IP, P_USERNAME, SYSTIMESTAMP, P_MODULE, P_ACTION, P_OPERATION, P_INFO, P_OLDVALUE, P_GUID);
END SPLOGSSAVE;
/


--
-- SP_APPROVA  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   ESPORTAZIONI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SP_APPROVA" 
(
  P_NUM_LOTTO INT
) AS 
    CTR_LOTTO INT;
BEGIN
CTR_LOTTO:=0;

SELECT LOTTO INTO CTR_LOTTO FROM ESPORTAZIONI WHERE LOTTO = P_NUM_LOTTO;


IF CTR_LOTTO > 0 THEN
    
    UPDATE DOMANDA_SCONTI SET
        STATO = 2,    
        DATA_ESITO = SYSTIMESTAMP  
    WHERE LOTTO = P_NUM_LOTTO AND STATO = 1; 
END IF;


END SP_APPROVA;
/


--
-- SP_DISAPPROVA  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   ESPORTAZIONI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SP_DISAPPROVA" 
(
  P_NUM_LOTTO INT
) AS 
    CTR_LOTTO INT;
BEGIN
CTR_LOTTO:=0;

SELECT LOTTO INTO CTR_LOTTO FROM ESPORTAZIONI WHERE LOTTO = P_NUM_LOTTO;


IF CTR_LOTTO > 0 THEN
    
    UPDATE DOMANDA_SCONTI SET
        STATO = 1,    
        DATA_ESITO = null, 
        DATA_ESPORTAZIONE = SYSTIMESTAMP
    WHERE LOTTO = P_NUM_LOTTO AND STATO = 2; 
END IF;


END SP_DISAPPROVA;
/


--
-- SP_EROGA  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   ESPORTAZIONI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SP_EROGA" 
(
  P_NUM_LOTTO INT
) AS 
    CTR_LOTTO INT;
BEGIN
CTR_LOTTO:=0;

SELECT LOTTO INTO CTR_LOTTO FROM ESPORTAZIONI WHERE LOTTO = P_NUM_LOTTO;


IF CTR_LOTTO > 0 THEN
    
    UPDATE DOMANDA_SCONTI SET
        STATO = 3,    
        DATA_EROGAZIONE = SYSTIMESTAMP  
    WHERE LOTTO = P_NUM_LOTTO AND STATO = 2; 
END IF;


END SP_EROGA;
/


--
-- SP_FORZA_RESIDENZA  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SP_FORZA_RESIDENZA" 
(
  P_ID INT,
  P_FORZA INT
) AS 
BEGIN

IF P_ID > 0 THEN
    
    UPDATE DOMANDA_SCONTI SET
        FORZA_RESIDENZA = P_FORZA            
    WHERE ID = P_ID; 
END IF;

END SP_FORZA_RESIDENZA;
/


--
-- CALCOLAFRAZIONEANNO  (Function) 
--
--  Dependencies: 
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "CALCOLAFRAZIONEANNO" (
P_DATA_INIZIO IN DATE, 
P_DATA_FINE IN DATE
) RETURN NUMBER IS
ANNI NUMBER;
MESI NUMBER;
GIORNI NUMBER;
PLUS NUMBER;
--DATA_INIZIO DATE;
DATA_FINE DATE;

BEGIN
   ANNI := 0;
   MESI := 0;
   PLUS := 0;
   --DATA_INIZIO := TO_DATE('01/01/2000 00:00:00','dd/mm/YYYY hh24:mi:ss');
   DATA_FINE := P_DATA_FINE+1; -- AGGIUNGO IL GIORNO ESTREMO DEL PERIODO

   /*SELECT 
    TRUNC (MONTHS_BETWEEN (P_DATA_FINE, P_DATA_INIZIO) / 12),
    MOD (TRUNC (MONTHS_BETWEEN (P_DATA_FINE, P_DATA_INIZIO)), 12),
    (P_DATA_FINE - ADD_MONTHS (P_DATA_INIZIO, TRUNC(MONTHS_BETWEEN (P_DATA_FINE,P_DATA_INIZIO))))
    INTO ANNI, MESI, GIORNI FROM DUAL;*/

    WITH T (START_DATE, END_DATE) AS (
      SELECT P_DATA_INIZIO, DATA_FINE FROM DUAL
    )
    SELECT
      TRUNC(MONTH_DIFF/12),
      TRUNC(MOD(MONTH_DIFF, 12)),
    (END_DATE - ADD_MONTHS(START_DATE, MONTH_DIFF)) INTO ANNI, MESI, GIORNI
    FROM (
      SELECT START_DATE, END_DATE,
        TRUNC(MONTHS_BETWEEN(END_DATE, START_DATE)) AS MONTH_DIFF
      FROM T
    );

   --GIORNI := GIORNI+1;

   IF GIORNI = 30 THEN
    MESI := MESI+1;
    IF MESI = 12 THEN
        MESI := 0;
        ANNI := ANNI+1;    
    END IF;    
   END IF;


   IF MESI >= 6 THEN
   PLUS := 1;
   ELSE
   PLUS := 0;
   END IF;
   RETURN (ANNI+PLUS);

END CALCOLAFRAZIONEANNO;
/


--
-- CONVERTI_OMO_CODICE  (Function) 
--
--  Dependencies: 
--   STANDARD (Package)
--
CREATE OR REPLACE FUNCTION "CONVERTI_OMO_CODICE" (
    P_CODICE_FISCALE IN VARCHAR2
) RETURN VARCHAR2 IS
    V_RESULT VARCHAR2(16); -- Variabile per il codice risultante
    V_LETTERE CONSTANT VARCHAR2(10) := 'LMNPQRSTUV'; -- Mappa lettere
    V_NUMERI CONSTANT VARCHAR2(10) := '0123456789'; -- Mappa numeri
    I PLS_INTEGER; -- Contatore per le posizioni
    V_CHAR CHAR(1); -- Carattere corrente
BEGIN
    -- Copia il codice fiscale originale
    V_RESULT := P_CODICE_FISCALE;

    -- Cicla sulle posizioni numeriche del codice fiscale (7, 8)
    FOR I IN 7..8 LOOP
        -- Controlla se il carattere è una lettera omocodica
        V_CHAR := SUBSTR(V_RESULT, I, 1);
        IF INSTR(V_LETTERE, V_CHAR) > 0 THEN
            -- Sostituisci la lettera con il numero corrispondente
            V_RESULT := SUBSTR(V_RESULT, 1, I - 1) ||
                        SUBSTR(V_NUMERI, INSTR(V_LETTERE, V_CHAR), 1) ||
                        SUBSTR(V_RESULT, I + 1);
        END IF;
    END LOOP;
    
    -- Cicla sulle posizioni numeriche del codice fiscale (10, 11)
    FOR I IN 10..11 LOOP
        -- Controlla se il carattere è una lettera omocodica
        V_CHAR := SUBSTR(V_RESULT, I, 1);
        IF INSTR(V_LETTERE, V_CHAR) > 0 THEN
            -- Sostituisci la lettera con il numero corrispondente
            V_RESULT := SUBSTR(V_RESULT, 1, I - 1) ||
                        SUBSTR(V_NUMERI, INSTR(V_LETTERE, V_CHAR), 1) ||
                        SUBSTR(V_RESULT, I + 1);
        END IF;
    END LOOP;

    -- Cicla per le posizioni 13, 14, 15
    FOR I IN 13..15 LOOP
        -- Controlla se il carattere è una lettera omocodica
        V_CHAR := SUBSTR(V_RESULT, I, 1);
        IF INSTR(V_LETTERE, V_CHAR) > 0 THEN
            -- Sostituisci la lettera con il numero corrispondente
            V_RESULT := SUBSTR(V_RESULT, 1, I - 1) ||
                        SUBSTR(V_NUMERI, INSTR(V_LETTERE, V_CHAR), 1) ||
                        SUBSTR(V_RESULT, I + 1);
        END IF;
    END LOOP;

    RETURN V_RESULT;
EXCEPTION
    -- Gestione errori
    WHEN OTHERS THEN
        RETURN NULL; -- Restituisci NULL in caso di errore
END CONVERTI_OMO_CODICE;
/


--
-- FNGETINTEGRAZIONE_POST  (Function) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETINTEGRAZIONE_POST" (    
    P_ID IN NUMBER
) RETURN VARCHAR IS
COSTO_VOLO NUMBER;
SCONTO_RESIDENTI NUMBER;
INTEGRAZIONE NUMBER;
PERC_NATIVITA NUMBER;
MINIMO_COSTO NUMBER;
SCONTO_MASSIMO NUMBER;
T_SCONTO_EROGATO NUMBER;
RESULT VARCHAR(255);
BEGIN
    MINIMO_COSTO := 1;   
    SCONTO_MASSIMO := 250;
    PERC_NATIVITA := 50;
       
    SELECT 
       COSTO_TRATTA, SCONTO_TOTALE INTO  
       COSTO_VOLO, T_SCONTO_EROGATO FROM DOMANDA_SCONTI WHERE ID = P_ID;
     
           
    
    SCONTO_RESIDENTI := ROUND((COSTO_VOLO*PERC_NATIVITA/100), 2);
    
    IF SCONTO_RESIDENTI > SCONTO_MASSIMO THEN
        SCONTO_RESIDENTI := SCONTO_MASSIMO;
    END IF;
   
    INTEGRAZIONE := SCONTO_RESIDENTI - T_SCONTO_EROGATO ;
        
    RESULT := INTEGRAZIONE;

                   

    RETURN RESULT;

END FNGETINTEGRAZIONE_POST;
/


--
-- FNGETINTEGRAZIONE_PRE  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETINTEGRAZIONE_PRE" (    
    P_ID IN NUMBER
) RETURN VARCHAR IS
T_ID_DOMANDA INT;
T_ISEE INT;
T_PRIORITY NUMBER;
T_BENEFICIARIO VARCHAR(255);
COSTO_VOLO NUMBER;
--TMP_COSTO_VOLO NUMBER;
T_COMPAGNIA_ID INT;
CATEGORIA_PRIORITARIA NUMBER;
SCONTO_RESIDENTI NUMBER;
SCONTO_PRIORITARI NUMBER;
SCONTO_TOTALE NUMBER;
INTEGRAZIONE NUMBER;
PERC_RESIDENTI NUMBER;
PERC_PRIORITARI NUMBER;
MINIMO_COSTO NUMBER;
SCONTO_MASSIMO NUMBER;
CTR_STATO INT;
--CTR_ADESIONE INT;
T_DATA_VOLO DATE;
--T_DATA_ADESIONE DATE;
T_DATA_ACQUISTO DATE;
T_ID_ACCOUNT INT;
T_SCONTO_EROGATO NUMBER;
--NUOVA_TRATTA INT;
RESULT VARCHAR(255);
BEGIN
    MINIMO_COSTO := 1;   
    SCONTO_MASSIMO := 75;
    PERC_RESIDENTI := 25;
    PERC_PRIORITARI := 25;
    SCONTO_PRIORITARI :=0;
    --CTR_ADESIONE :=0;
    --NUOVA_TRATTA :=0;
    
    -- verifico se siamo in presenza di una nuova tratta
    /*SELECT COUNT(ID) INTO NUOVA_TRATTA FROM DOMANDA_SCONTI WHERE ID = P_ID AND 
    (
        AEROPORTO_PARTENZA_CODICE NOT IN ('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY') OR 
        AEROPORTO_DESTINAZIONE_CODICE NOT IN('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY')
    );*/
       
    SELECT 
       ID_DOMANDA, STATO, CODICE_FISCALE, COSTO_TRATTA, ISEE, 
       COMPAGNIA_ID, DATA_VOLO, DATA_ACQUISTO, SCONTO_TOTALE, PRIORITY INTO T_ID_DOMANDA, CTR_STATO, T_BENEFICIARIO, 
       COSTO_VOLO, T_ISEE, T_COMPAGNIA_ID, T_DATA_VOLO, T_DATA_ACQUISTO, T_SCONTO_EROGATO, T_PRIORITY FROM DOMANDA_SCONTI WHERE ID = P_ID;
       -- se lo stato della richiesta di sconto è = 0 
    IF CTR_STATO = 0 THEN
        SELECT  ISEE, ID_ACCOUNT INTO T_ISEE, T_ID_ACCOUNT FROM DOMANDA WHERE ID = T_ID_DOMANDA;
        SELECT  PRIORITY INTO T_PRIORITY FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO AND ID_ACCOUNT = T_ID_ACCOUNT;  
         
    END IF;
       
    /*IF T_COMPAGNIA_ID > 0 THEN
       SELECT ADESIONE, DATA_ADESIONE INTO CTR_ADESIONE, T_DATA_ADESIONE FROM ANAG_COMPAGNIE WHERE ID = T_COMPAGNIA_ID;
    END IF;*/
       
    IF T_PRIORITY > 0 OR T_ISEE > 0 THEN
        CATEGORIA_PRIORITARIA := 1;
    ELSE 
        CATEGORIA_PRIORITARIA := 0;
    END IF;
   
   
    
    SCONTO_RESIDENTI := ROUND((COSTO_VOLO*PERC_RESIDENTI/100), 2);
    
   
   
    IF CATEGORIA_PRIORITARIA = 1 THEN 
        SCONTO_PRIORITARI := ROUND((COSTO_VOLO*PERC_PRIORITARI/100), 2);
    END IF;
   
   
    SCONTO_TOTALE := SCONTO_RESIDENTI+SCONTO_PRIORITARI;
    
    IF SCONTO_TOTALE > SCONTO_MASSIMO THEN
        SCONTO_TOTALE := SCONTO_MASSIMO;
    END IF;
    
    INTEGRAZIONE := (SCONTO_TOTALE)-T_SCONTO_EROGATO;
    
    
        
    RESULT := INTEGRAZIONE;

                   

    RETURN RESULT;

END FNGETINTEGRAZIONE_PRE;
/


--
-- FNGETSCONTO_MANUALE  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   ANAG_COMPAGNIE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETSCONTO_MANUALE" (    
    P_ID IN NUMBER,
    P_BY_PASS_STATO IN INT,
    P_FORZARESIDENZA IN INT
) RETURN VARCHAR IS
T_ID_DOMANDA INT;
T_ISEE INT;
T_PRIORITY NUMBER;
T_BENEFICIARIO VARCHAR(255);
COSTO_VOLO NUMBER;
TMP_COSTO_VOLO NUMBER;
T_COMPAGNIA_ID INT;
CATEGORIA_PRIORITARIA NUMBER;
SCONTO_RESIDENTI NUMBER;
SCONTO_PRIORITARI NUMBER;
SCONTO_TOTALE NUMBER;
PERC_RESIDENTI NUMBER;
PERC_PRIORITARI NUMBER;
MINIMO_COSTO NUMBER;
SCONTO_MASSIMO NUMBER;
SCONTO_MASSIMO_RESIDENTI NUMBER;
CTR_STATO INT;
CTR_ADESIONE INT;
T_DATA_VOLO DATE;
T_DATA_ADESIONE DATE;
T_DATA_ACQUISTO DATE;
T_ID_ACCOUNT INT;
NUOVA_TRATTA INT;
T_FORZA_RESIDENZA INT;
RESULT VARCHAR(255);
BEGIN
    MINIMO_COSTO := 1;   
    SCONTO_MASSIMO := 75;
    SCONTO_MASSIMO_RESIDENTI :=37.50;
    PERC_RESIDENTI := 25;
    PERC_PRIORITARI := 25;
    SCONTO_PRIORITARI :=0;
    CTR_ADESIONE :=0;
    NUOVA_TRATTA :=0;
    T_FORZA_RESIDENZA :=0;
    
    -- verifico se siamo in presenza di una nuova tratta
    SELECT COUNT(ID) INTO NUOVA_TRATTA FROM DOMANDA_SCONTI WHERE ID = P_ID AND 
    (
        AEROPORTO_PARTENZA_CODICE NOT IN ('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY') OR 
        AEROPORTO_DESTINAZIONE_CODICE NOT IN('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY')
    );
       
    SELECT 
       ID_DOMANDA, STATO, CODICE_FISCALE, COSTO_TRATTA, ISEE, 
       COMPAGNIA_ID, DATA_VOLO, DATA_ACQUISTO, FORZA_RESIDENZA, PRIORITY INTO T_ID_DOMANDA, CTR_STATO, T_BENEFICIARIO, 
       COSTO_VOLO, T_ISEE, T_COMPAGNIA_ID, T_DATA_VOLO, T_DATA_ACQUISTO, T_FORZA_RESIDENZA, T_PRIORITY FROM DOMANDA_SCONTI WHERE ID = P_ID;
       -- se lo stato della richiesta di sconto è = 0 
    IF CTR_STATO = 0 AND P_BY_PASS_STATO = 0 THEN
        SELECT  ISEE, ID_ACCOUNT INTO T_ISEE, T_ID_ACCOUNT FROM DOMANDA WHERE ID = T_ID_DOMANDA;
        SELECT  PRIORITY INTO T_PRIORITY FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO AND ID_ACCOUNT = T_ID_ACCOUNT;  
         
    END IF;
       
    IF T_COMPAGNIA_ID > 0 THEN
       SELECT ADESIONE, DATA_ADESIONE INTO CTR_ADESIONE, T_DATA_ADESIONE FROM ANAG_COMPAGNIE WHERE ID = T_COMPAGNIA_ID;
    END IF;
       
    IF T_PRIORITY > 0 OR T_ISEE > 0 THEN
        CATEGORIA_PRIORITARIA := 1;
    ELSE 
        CATEGORIA_PRIORITARIA := 0;
        SCONTO_MASSIMO := SCONTO_MASSIMO_RESIDENTI;
    END IF;
   
    IF P_FORZARESIDENZA = 1 THEN 
        T_FORZA_RESIDENZA := 1;
    ELSE
        T_FORZA_RESIDENZA := T_FORZA_RESIDENZA;
    END IF;
    
    -- SE LA COMPAGNIA HA ADERITO ALLO SCONTO DEL 25% GIA APPLICATO AL PREZZO DEL BIGLIETTO NON CONSIDERO LO SCONTO RESIDENTI
    IF NUOVA_TRATTA = 0 AND T_FORZA_RESIDENZA = 0 AND CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_ACQUISTO THEN
    -- IF CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_ACQUISTO THEN   
        TMP_COSTO_VOLO := (COSTO_VOLO/(1-(PERC_RESIDENTI/100)));
        SCONTO_MASSIMO := SCONTO_MASSIMO_RESIDENTI;
        IF (TMP_COSTO_VOLO - COSTO_VOLO) > SCONTO_MASSIMO THEN
            COSTO_VOLO := (COSTO_VOLO+SCONTO_MASSIMO);  
        ELSE 
            COSTO_VOLO := (COSTO_VOLO/(1-(PERC_RESIDENTI/100)));  
        END IF;
             
        SCONTO_RESIDENTI := 0;
    ELSE
        SCONTO_RESIDENTI := ROUND((COSTO_VOLO*PERC_RESIDENTI/100), 2);
    END IF;
   
   
    IF CATEGORIA_PRIORITARIA = 1 THEN 
        SCONTO_PRIORITARI := ROUND((COSTO_VOLO*PERC_PRIORITARI/100), 2);
    END IF;
   
   
    SCONTO_TOTALE := SCONTO_RESIDENTI+SCONTO_PRIORITARI;
    
    IF SCONTO_TOTALE > SCONTO_MASSIMO THEN
        SCONTO_TOTALE := SCONTO_MASSIMO;
    END IF; 

    
    RESULT := SCONTO_TOTALE;

                   

    RETURN RESULT;

END FNGETSCONTO_MANUALE;
/


--
-- FNGETSCONTO_OLD  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   ANAG_COMPAGNIE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--
CREATE OR REPLACE FUNCTION "FNGETSCONTO_OLD" (    
    P_ID IN NUMBER,
    P_TIPO IN VARCHAR
) RETURN VARCHAR IS
T_ID_DOMANDA INT;
T_ISEE NUMBER;
T_STUDENTE NUMBER;
T_DISABILE NUMBER;
T_BENEFICIARIO VARCHAR(255);
COSTO_VOLO NUMBER;
T_COMPAGNIA_ID INT;
CATEGORIA_PRIORITARIA NUMBER;
SCONTO_RESIDENTI NUMBER;
SCONTO_PRIORITARI NUMBER;
SCONTO_TOTALE NUMBER;
TRATTA_SCONTATA NUMBER;
CONTRIBUTO_TEORICO NUMBER;
CONTRIBUTO_REALE NUMBER;
PERC_RESIDENTI NUMBER;
PERC_PRIORITARI NUMBER;
MINIMO_COSTO NUMBER;
COSTO_MED NUMBER;
SCONTO_MASSIMO NUMBER;
CTR_STATO INT;
CTR_ADESIONE INT;
T_DATA_VOLO DATE;
T_DATA_ADESIONE DATE;
SCONTO_RESIDENTI_ADESIONE NUMBER;
COSTO_FINALE_VOLO NUMBER;
CTR_ADESIONE_SC_MAX NUMBER;
CONTRIBUTO_REALE_ADESIONE NUMBER;
RESULT VARCHAR(255);
BEGIN
   MINIMO_COSTO := 50;
   COSTO_MED := 62.5;
   SCONTO_MASSIMO := 75;
   PERC_RESIDENTI := 25;
   PERC_PRIORITARI := 25;
   SCONTO_PRIORITARI :=0;
   CTR_ADESIONE :=0;
   SCONTO_RESIDENTI_ADESIONE := 0;
   
   SELECT 
   ID_DOMANDA, STATO, CODICE_FISCALE, STUDENTE, DISABILE, COSTO_TRATTA, ISEE, 
   COMPAGNIA_ID, DATA_VOLO INTO T_ID_DOMANDA, CTR_STATO, T_BENEFICIARIO, T_STUDENTE, T_DISABILE, 
   COSTO_VOLO, T_ISEE, T_COMPAGNIA_ID, T_DATA_VOLO FROM DOMANDA_SCONTI WHERE ID = P_ID;
   -- se lo stato della richiesta di sconto è = 0 
   IF CTR_STATO = 0 THEN
        SELECT  STUDENTE, DISABILE INTO T_STUDENTE, T_DISABILE FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO;   
        SELECT  ISEE INTO T_ISEE FROM DOMANDA WHERE ID = T_ID_DOMANDA; 
   END IF;
   
   IF T_COMPAGNIA_ID > 0 THEN
   SELECT ADESIONE, DATA_ADESIONE INTO CTR_ADESIONE, T_DATA_ADESIONE FROM ANAG_COMPAGNIE WHERE ID = T_COMPAGNIA_ID;
   END IF;
   
   IF T_STUDENTE > 0 OR T_DISABILE > 0 OR T_ISEE > 0 THEN
        CATEGORIA_PRIORITARIA := 1;
   ELSE 
        CATEGORIA_PRIORITARIA := 0;
   END IF;
   
   
   -- SE LA COMPAGNIA HA ADERITO ALLO SCONTO DEL 25% GIA APPLICATO AL PREZZO DEL BIGLIETTO NON CONSIDERO LO SCONTO RESIDENTI
   IF CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_VOLO THEN   
        COSTO_VOLO := (COSTO_VOLO/(1-(PERC_RESIDENTI/100)));       
        SCONTO_RESIDENTI := 0;
   ELSE
        SCONTO_RESIDENTI := (COSTO_VOLO*PERC_RESIDENTI/100);
   END IF;
   
   
   IF CATEGORIA_PRIORITARIA = 1 THEN 
     SCONTO_PRIORITARI := (COSTO_VOLO*PERC_PRIORITARI/100);
   END IF;
   
   
   SCONTO_TOTALE := SCONTO_RESIDENTI+SCONTO_PRIORITARI;
   
   TRATTA_SCONTATA:= COSTO_VOLO-SCONTO_TOTALE;
   CONTRIBUTO_TEORICO := COSTO_VOLO-TRATTA_SCONTATA;
   
   IF (COSTO_VOLO - CONTRIBUTO_TEORICO) < MINIMO_COSTO THEN
        CONTRIBUTO_REALE := (COSTO_VOLO - MINIMO_COSTO);
   ELSE 
        IF CONTRIBUTO_TEORICO > SCONTO_MASSIMO  THEN
            CONTRIBUTO_REALE := SCONTO_MASSIMO;
        ELSE
            CONTRIBUTO_REALE := CONTRIBUTO_TEORICO;    
        END IF;
   END IF;
   
    /*CASE 
    WHEN (COSTO_VOLO - CONTRIBUTO_TEORICO) < MINIMO_COSTO THEN
        CONTRIBUTO_REALE := (COSTO_VOLO - MINIMO_COSTO);
    WHEN (COSTO_VOLO - CONTRIBUTO_TEORICO) > MINIMO_COSTO  THEN --AND (COSTO_VOLO - CONTRIBUTO_TEORICO) < SCONTO_MASSIMO
        CONTRIBUTO_REALE := CONTRIBUTO_TEORICO;    
    WHEN CONTRIBUTO_TEORICO > SCONTO_MASSIMO THEN
        CONTRIBUTO_REALE := SCONTO_MASSIMO;
    ELSE     
        CONTRIBUTO_REALE := 0;
    END CASE;*/
    
    IF CONTRIBUTO_REALE < 0 THEN
        CONTRIBUTO_REALE :=0;
    END IF;
    
    COSTO_FINALE_VOLO :=  (COSTO_VOLO - CONTRIBUTO_REALE);
    -- SE LA COMPAGNIA HA ADERITO ALLO SCONTO DEL 25% GIA APPLICATO AL PREZZO DEL BIGLIETTO
    IF CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_VOLO THEN
        
        COSTO_FINALE_VOLO :=  (COSTO_VOLO - CONTRIBUTO_REALE);
        
        IF (COSTO_FINALE_VOLO-CONTRIBUTO_REALE)>MINIMO_COSTO THEN        
            CTR_ADESIONE_SC_MAX := CONTRIBUTO_REALE;
        ELSE
            CTR_ADESIONE_SC_MAX := COSTO_FINALE_VOLO - MINIMO_COSTO;
        END IF;
        
        IF (CTR_ADESIONE_SC_MAX+CONTRIBUTO_REALE) > SCONTO_MASSIMO THEN
            CONTRIBUTO_REALE_ADESIONE := SCONTO_MASSIMO-CONTRIBUTO_REALE;
        ELSE
            CONTRIBUTO_REALE_ADESIONE := CTR_ADESIONE_SC_MAX;
        END IF;
        
        CONTRIBUTO_REALE:= CONTRIBUTO_REALE_ADESIONE;
        
        IF CONTRIBUTO_REALE < 0 THEN
            CONTRIBUTO_REALE :=0;
        END IF;
                    
    END IF;
    
   

    CASE WHEN P_TIPO = 'CATEGORIA_PRIORITARIA' THEN     
        -- Restituisce solo L'INCIDENZA
        RESULT := CATEGORIA_PRIORITARIA;
    WHEN P_TIPO = 'SCONTO_TOTALE' THEN
        -- Restituisce solo PERCENTUALE CONTRIBUTO
        RESULT := SCONTO_TOTALE;
    WHEN P_TIPO = 'CONTRIBUTO_TEORICO' THEN
        -- Restituisce solo CONTRIBUTO TEORICO
        RESULT := CONTRIBUTO_TEORICO;    
    WHEN P_TIPO = 'SCONTO_PRIORITARI' THEN
        -- Restituisce solo CONTRIBUTO TEORICO
        RESULT := SCONTO_PRIORITARI;    
    WHEN P_TIPO = 'TRATTA_SCONTATA' THEN
        -- Restituisce solo CONTRIBUTO TEORICO
        RESULT := TRATTA_SCONTATA;    
    ELSE    
        RESULT := CONTRIBUTO_REALE;

    END CASE;               

    RETURN RESULT;

END FNGETSCONTO_OLD;
/


--
-- FNGETSCONTO_POST  (Function) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETSCONTO_POST" (    
    P_ID IN NUMBER,
    P_TIPO IN VARCHAR
) RETURN VARCHAR IS

COSTO_VOLO NUMBER;
PERC_NATIVITA NUMBER;
SCONTO_NATIVITA NUMBER;
SCONTO_TOTALE NUMBER;
MINIMO_COSTO NUMBER;
SCONTO_MASSIMO NUMBER;
RESULT VARCHAR(255);
BEGIN
    MINIMO_COSTO := 1;   
    SCONTO_MASSIMO := 250;
    PERC_NATIVITA := 50;
       
    SELECT 
       COSTO_TRATTA INTO 
       COSTO_VOLO FROM DOMANDA_SCONTI WHERE ID = P_ID;
    
    SCONTO_NATIVITA := ROUND((COSTO_VOLO*PERC_NATIVITA/100), 2);
   
    SCONTO_TOTALE := SCONTO_NATIVITA;
    
    IF SCONTO_TOTALE > SCONTO_MASSIMO THEN
        SCONTO_TOTALE := SCONTO_MASSIMO;
    END IF; 

      
    RESULT := SCONTO_TOTALE;
                   

    RETURN RESULT;

END FNGETSCONTO_POST;
/


--
-- FNGETSCONTO_PRE  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   ANAG_COMPAGNIE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETSCONTO_PRE" (    
    P_ID IN NUMBER,
    P_TIPO IN VARCHAR
) RETURN VARCHAR IS
T_ID_DOMANDA INT;
T_ISEE INT;
T_PRIORITY NUMBER;
T_BENEFICIARIO VARCHAR(255);
COSTO_VOLO NUMBER;
TMP_COSTO_VOLO NUMBER;
T_COMPAGNIA_ID INT;
CATEGORIA_PRIORITARIA NUMBER;
SCONTO_RESIDENTI NUMBER;
SCONTO_PRIORITARI NUMBER;
SCONTO_TOTALE NUMBER;
PERC_RESIDENTI NUMBER;
PERC_PRIORITARI NUMBER;
MINIMO_COSTO NUMBER;
SCONTO_MASSIMO NUMBER;
SCONTO_MASSIMO_RESIDENTI NUMBER;
CTR_STATO INT;
CTR_ADESIONE INT;
T_DATA_VOLO DATE;
T_DATA_ADESIONE DATE;
T_DATA_ACQUISTO DATE;
T_ID_ACCOUNT INT;
NUOVA_TRATTA INT;
T_FORZA_RESIDENZA INT;
T_COMPAGNIA_NOSCORPORO INT;
RESULT VARCHAR(255);
BEGIN
    MINIMO_COSTO := 1;   
    SCONTO_MASSIMO := 75;
    SCONTO_MASSIMO_RESIDENTI :=37.50;
    PERC_RESIDENTI := 25;
    PERC_PRIORITARI := 25;
    SCONTO_PRIORITARI :=0;
    CTR_ADESIONE :=0;
    NUOVA_TRATTA :=0;
    T_FORZA_RESIDENZA :=0;
    T_COMPAGNIA_NOSCORPORO :=28; -- ITA AIRWAYS non deve essere effettualo lo scorporo dello sconto residenti
    -- verifico se siamo in presenza di una nuova tratta
    SELECT COUNT(ID) INTO NUOVA_TRATTA FROM DOMANDA_SCONTI WHERE ID = P_ID AND 
    (
        AEROPORTO_PARTENZA_CODICE NOT IN ('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY') OR 
        AEROPORTO_DESTINAZIONE_CODICE NOT IN('CIA','FCO','LIN','MXP','BGY', 'CTA','PMO','TPS','LMP','PNL','CIY')
    );
       
    SELECT 
       ID_DOMANDA, STATO, CODICE_FISCALE, COSTO_TRATTA, ISEE, 
       COMPAGNIA_ID, DATA_VOLO, DATA_ACQUISTO, FORZA_RESIDENZA, PRIORITY INTO T_ID_DOMANDA, CTR_STATO, T_BENEFICIARIO, 
       COSTO_VOLO, T_ISEE, T_COMPAGNIA_ID, T_DATA_VOLO, T_DATA_ACQUISTO, T_FORZA_RESIDENZA, T_PRIORITY FROM DOMANDA_SCONTI WHERE ID = P_ID;
       -- se lo stato della richiesta di sconto è = 0 
    IF CTR_STATO = 0 THEN
        SELECT  ISEE, ID_ACCOUNT INTO T_ISEE, T_ID_ACCOUNT FROM DOMANDA WHERE ID = T_ID_DOMANDA;
        SELECT  PRIORITY INTO T_PRIORITY FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO AND ID_ACCOUNT = T_ID_ACCOUNT;  
         
    END IF;
       
    IF T_COMPAGNIA_ID > 0 THEN
       SELECT ADESIONE, DATA_ADESIONE INTO CTR_ADESIONE, T_DATA_ADESIONE FROM ANAG_COMPAGNIE WHERE ID = T_COMPAGNIA_ID;
    END IF;
       
    IF T_PRIORITY > 0 OR T_ISEE > 0 THEN
        CATEGORIA_PRIORITARIA := 1;
    ELSE 
        CATEGORIA_PRIORITARIA := 0;
        SCONTO_MASSIMO := SCONTO_MASSIMO_RESIDENTI;
    END IF;
   
   
    -- SE LA COMPAGNIA HA ADERITO ALLO SCONTO DEL 25% GIA APPLICATO AL PREZZO DEL BIGLIETTO NON CONSIDERO LO SCONTO RESIDENTI
    IF NUOVA_TRATTA = 0 AND T_FORZA_RESIDENZA = 0 AND CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_ACQUISTO THEN
    -- IF CTR_ADESIONE = 1 AND T_DATA_ADESIONE <= T_DATA_ACQUISTO THEN
        SCONTO_MASSIMO := SCONTO_MASSIMO_RESIDENTI;
        SCONTO_RESIDENTI := 0;   
        IF (T_COMPAGNIA_NOSCORPORO != T_COMPAGNIA_ID) THEN  
            TMP_COSTO_VOLO := (COSTO_VOLO/(1-(PERC_RESIDENTI/100)));
            IF (TMP_COSTO_VOLO - COSTO_VOLO) > SCONTO_MASSIMO THEN
                COSTO_VOLO := (COSTO_VOLO+SCONTO_MASSIMO);  
            ELSE 
                COSTO_VOLO := (COSTO_VOLO/(1-(PERC_RESIDENTI/100)));  
            END IF;
        END IF;
    ELSE
        SCONTO_RESIDENTI := ROUND((COSTO_VOLO*PERC_RESIDENTI/100), 2);
    END IF;
   
   
    IF CATEGORIA_PRIORITARIA = 1 THEN 
        SCONTO_PRIORITARI := ROUND((COSTO_VOLO*PERC_PRIORITARI/100), 2);
    END IF;
   
   
    SCONTO_TOTALE := SCONTO_RESIDENTI+SCONTO_PRIORITARI;
    
    IF SCONTO_TOTALE > SCONTO_MASSIMO THEN
        SCONTO_TOTALE := SCONTO_MASSIMO;
    END IF; 

    CASE WHEN P_TIPO = 'CATEGORIA_PRIORITARIA' THEN     
        -- Restituisce solo L'INCIDENZA
        RESULT := CATEGORIA_PRIORITARIA;
    WHEN P_TIPO = 'SCONTO_PRIORITARI' THEN

        RESULT := SCONTO_PRIORITARI;    
    WHEN P_TIPO = 'SCONTO_RESIDENTI' THEN
        
        RESULT := SCONTO_RESIDENTI;    
    ELSE    
        RESULT := SCONTO_TOTALE;

    END CASE;               

    RETURN RESULT;

END FNGETSCONTO_PRE;
/


--
-- GETPERIODOANNIMESIGIORNI  (Function) 
--
--  Dependencies: 
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "GETPERIODOANNIMESIGIORNI" (
P_DATA_INIZIO IN DATE, 
P_DATA_FINE IN DATE,
P_TIPO IN VARCHAR
) RETURN NUMBER IS
ANNI NUMBER;
MESI NUMBER;
GIORNI NUMBER;
PLUS NUMBER;
RESULT NUMBER;
DATA_FINE DATE;

BEGIN
   ANNI := 0;
   MESI := 0;
   GIORNI := 0;
   PLUS := 0;
   RESULT := 0;
   --DATA_INIZIO := TO_DATE('01/01/2000 00:00:00','dd/mm/YYYY hh24:mi:ss');
   DATA_FINE := P_DATA_FINE; -- AGGIUNGO IL GIORNO ESTREMO DEL PERIODO

   /*SELECT 
    TRUNC (MONTHS_BETWEEN (P_DATA_FINE, P_DATA_INIZIO) / 12),
    MOD (TRUNC (MONTHS_BETWEEN (P_DATA_FINE, P_DATA_INIZIO)), 12),
    (P_DATA_FINE - ADD_MONTHS (P_DATA_INIZIO, TRUNC(MONTHS_BETWEEN (P_DATA_FINE,P_DATA_INIZIO))))
    INTO ANNI, MESI, GIORNI FROM DUAL;
   */
    WITH T (START_DATE, END_DATE) AS (
      SELECT P_DATA_INIZIO, DATA_FINE FROM DUAL
    )
    SELECT
      TRUNC(MONTH_DIFF/12),
      TRUNC(MOD(MONTH_DIFF, 12)),
      TRUNC(END_DATE - ADD_MONTHS(START_DATE, MONTH_DIFF)) INTO ANNI, MESI, GIORNI
    FROM (
      SELECT START_DATE, END_DATE,
        TRUNC(MONTHS_BETWEEN(END_DATE, START_DATE)) AS MONTH_DIFF
      FROM T
    );
    --GIORNI := GIORNI+1;

   IF GIORNI = 30 THEN
        GIORNI := 0;
        MESI := (MESI + 1);
        IF MESI = 12 THEN
            MESI := 0;
            ANNI := (ANNI + 1);
        END IF;

   END IF;



   CASE WHEN P_TIPO = 'ANNI' THEN     
        -- Restituisce solo il numero di anni
        RESULT := ANNI;
    WHEN P_TIPO = 'MESI' THEN
        -- Restituisce solo il numero di mesi
        RESULT := MESI;
    WHEN P_TIPO = 'GIORNI' THEN
        -- Restituisce solo il numero di giorni
        RESULT := GIORNI;    
   ELSE    
        -- Restituisce solo il numero di anni frazionati sommando 
        IF MESI >= 6 THEN
            PLUS := 1;
        ELSE
           PLUS := 0;
        END IF;
        RESULT := (ANNI+PLUS);

    END CASE;               

   RETURN RESULT ;

END GETPERIODOANNIMESIGIORNI;
/


--
-- GET_IDENTIFICATIVO  (Function) 
--
--  Dependencies: 
--   STANDARD (Package)
--
CREATE OR REPLACE FUNCTION "GET_IDENTIFICATIVO" (
P_ID IN NUMBER,
P_DATA_REGISTRAZIONE IN TIMESTAMP
)
RETURN VARCHAR2 IS
    IDENTIFICATIVO VARCHAR2(30);
BEGIN 
    IDENTIFICATIVO := 'D'||TO_CHAR(P_DATA_REGISTRAZIONE,'YYYYmm')||LPAD(to_char(P_ID), 6, '0' );   
    RETURN IDENTIFICATIVO;
END;
/


--
-- VIEW_EXPORT_SCONTI_OPT  (View) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--   FNGETSCONTO_MANUALE (Function)
--
CREATE OR REPLACE FORCE VIEW VIEW_EXPORT_SCONTI_OPT
(ID, ID_DOMANDA, COGNOME, NOME, DATA_NASCITA, 
 RAPPORTO_PARENTELA, CODICE_FISCALE, COMUNE_RESIDENZA, PROV_RESIDENZA, CAP_RESIDENZA, 
 COMPAGNIA_AEREA, NUMERO_VOLO, DATA_VOLO, COSTO_TRATTA, AEROPORTO_PARTENZA, 
 AEROPORTO_PARTENZA_CODICE, AEROPORTO_DESTINAZIONE, AEROPORTO_DESTINAZIONE_CODICE, FILEPATH_BIGLIETTO, FILEPATH_CARTAIMBARCO, 
 ISEE, DATA_RILASCIO_ISEE, IBAN, ISTITUTO_CREDITO, FILIALE_CREDITO, 
 STATO, DATA_REGISTRAZIONE, ID_UID_FIREBASE, DATA_ESPORTAZIONE, DATA_ESITO, 
 DATA_EROGAZIONE, NOTE, SCONTO_TOTALE, COMPAGNIA_ID, DATA_ACQUISTO, 
 LOTTO, FLAG, PRIORITA, ID_ACCOUNT, FORZA_RESIDENZA, 
 CITTADINANZA, LOTTO_INTEGRAZIONE)
BEQUEATH DEFINER
AS 
WITH
        StatoCalcolato (ID, ID_DOMANDA, STATO_ATTIVO)
        AS
            (SELECT ID,
                    ID_DOMANDA,
                    CASE WHEN STATO >= 1 THEN 1 ELSE 0 END    AS STATO_ATTIVO
               FROM DOMANDA_SCONTI)
    SELECT DS.ID,
           DS.ID_DOMANDA,
           DS.COGNOME,
           DS.NOME,
           DS.DATA_NASCITA,
           DS.RAPPORTO_PARENTELA,
           DS.CODICE_FISCALE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.COMUNE_RESIDENZA
               ELSE AF.COMUNE_RESIDENZA
           END
               AS COMUNE_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.PROV_RESIDENZA
               ELSE AF.PROV_RESIDENZA
           END
               AS PROV_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.CAP_RESIDENZA
               ELSE AF.CAP_RESIDENZA
           END
               AS CAP_RESIDENZA,
           DS.COMPAGNIA_AEREA,
           DS.NUMERO_VOLO,
           DS.DATA_VOLO,
           DS.COSTO_TRATTA,
           DS.AEROPORTO_PARTENZA,
           DS.AEROPORTO_PARTENZA_CODICE,
           DS.AEROPORTO_DESTINAZIONE,
           DS.AEROPORTO_DESTINAZIONE_CODICE,
           DS.FILEPATH_BIGLIETTO,
           DS.FILEPATH_CARTAIMBARCO,
           CASE WHEN DS.STATO >= 1 THEN DS.ISEE ELSE D.ISEE END
               AS ISEE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.DATA_RILASCIO_ISEE
               ELSE D.DATA_RILASCIO_ISEE
           END
               AS DATA_RILASCIO_ISEE,
           CASE WHEN DS.STATO >= 1 THEN DS.IBAN ELSE D.IBAN END
               AS IBAN,
           CASE
               WHEN DS.STATO >= 1 THEN DS.ISTITUTO_CREDITO
               ELSE D.ISTITUTO_CREDITO
           END
               AS ISTITUTO_CREDITO,
           CASE
               WHEN DS.STATO >= 1 THEN DS.FILIALE_CREDITO
               ELSE D.FILIALE_CREDITO
           END
               AS FILIALE_CREDITO,
           DS.STATO,
           DS.DATA_REGISTRAZIONE,
           DS.ID_UID_FIREBASE,
           DS.DATA_ESPORTAZIONE,
           DS.DATA_ESITO,
           DS.DATA_EROGAZIONE,
           DS.NOTE,
           TO_NUMBER (FNGETSCONTO_MANUALE (DS.ID, 1, 0))
               AS SCONTO_TOTALE,
           DS.COMPAGNIA_ID,
           DS.DATA_ACQUISTO,
           DS.LOTTO,
           CASE WHEN DS.STATO >= 1 THEN AF.FLAG ELSE DS.FLAG END
               AS FLAG,
           CASE WHEN DS.STATO >= 1 THEN DS.PRIORITY ELSE AF.PRIORITY END
               AS PRIORITA,
           D.ID_ACCOUNT,
           DS.FORZA_RESIDENZA,
           DS.CITTADINANZA,
           DI.LOTTO_INTEGRAZIONE
      FROM DOMANDA_SCONTI  DS
           LEFT JOIN DOMANDA_SCONTI_INTEGRAZIONE DI
               ON DI.ID_RICHIESTA = DS.ID
           INNER JOIN DOMANDA D ON DS.ID_DOMANDA = D.ID
           INNER JOIN ACCOUNT_NUCLEO_FAMILIARE AF
               ON     AF.ID_ACCOUNT = D.ID_ACCOUNT
                  AND DS.CODICE_FISCALE = AF.CODICE_FISCALE;


--
-- VIEW_TRATTE  (View) 
--
--  Dependencies: 
--   AEROPORTI (Table)
--
CREATE OR REPLACE FORCE VIEW VIEW_TRATTE
(A_CODICE, A_NOME, R_CODICE, R_NOME)
BEQUEATH DEFINER
AS 
SELECT A.CODICE AS A_CODICE, A.NOME AS A_NOME, R.CODICE AS R_CODICE, R.NOME AS R_NOME  
FROM AEROPORTI A
CROSS JOIN AEROPORTI R
WHERE A.REGIONE = 19 AND R.REGIONE != 19
UNION
SELECT R.CODICE AS A_CODICE, R.NOME AS A_NOME, A.CODICE AS R_CODICE, A.NOME AS R_NOME  
FROM AEROPORTI R
CROSS JOIN AEROPORTI A
WHERE A.REGIONE = 19 AND R.REGIONE != 19;


--
-- ACCOUNT_ANAGRAFICA_BI  (Trigger) 
--
--  Dependencies: 
--   ACCOUNT_ANAGRAFICA (Table)
--   ACCOUNT_ANAG_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ACCOUNT_ANAGRAFICA_BI 
BEFORE INSERT ON ACCOUNT_ANAGRAFICA
FOR EACH ROW
BEGIN
  SELECT ACCOUNT_ANAG_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- ACCOUNT_BI  (Trigger) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--   ACCOUNT_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ACCOUNT_BI 
BEFORE INSERT ON ACCOUNT
FOR EACH ROW
BEGIN
  SELECT ACCOUNT_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- ACCOUNT_NUCLEO_BI  (Trigger) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   ACCOUNT_NUCLEO_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ACCOUNT_NUCLEO_BI 
BEFORE INSERT ON ACCOUNT_NUCLEO_FAMILIARE
FOR EACH ROW
BEGIN
  SELECT ACCOUNT_NUCLEO_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- ALLEGATI_BI  (Trigger) 
--
--  Dependencies: 
--   ALLEGATI (Table)
--   ALLEGATI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ALLEGATI_BI 
BEFORE INSERT ON ALLEGATI
FOR EACH ROW
BEGIN
  SELECT ALLEGATI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- ANAG_COMPAGNIE_TRG  (Trigger) 
--
--  Dependencies: 
--   ANAG_COMPAGNIE (Table)
--   ANAG_COMPAGNIE_SEQ (Sequence)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ANAG_COMPAGNIE_TRG 
BEFORE INSERT
ON ANAG_COMPAGNIE
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
-- For Toad:  Highlight column ID
  :new.ID := ANAG_COMPAGNIE_SEQ.nextval;
END ANAG_COMPAGNIE_TRG;
/


--
-- ANAG_DICHIARAZIONI_BI  (Trigger) 
--
--  Dependencies: 
--   ANAG_DICHIARAZIONI (Table)
--   ANAG_DICHIARAZIONI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ANAG_DICHIARAZIONI_BI 
BEFORE INSERT ON ANAG_DICHIARAZIONI
FOR EACH ROW
BEGIN
  SELECT ANAG_DICHIARAZIONI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- AUDIT_RICHIESTA_INTEGRAZIONE_BI  (Trigger) 
--
--  Dependencies: 
--   AUDIT_RICHIESTA_INTEGRAZIONE (Table)
--   AUDIT_RICHIESTA_INTEGRAZIONE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER AUDIT_RICHIESTA_INTEGRAZIONE_BI
BEFORE INSERT ON AUDIT_RICHIESTA_INTEGRAZIONE
FOR EACH ROW
BEGIN
  SELECT AUDIT_RICHIESTA_INTEGRAZIONE_ID_SEQ.nextval
  INTO :new.ID_AUDIT
  FROM dual;
END;
/


--
-- BANDI_BI  (Trigger) 
--
--  Dependencies: 
--   BANDI (Table)
--   BANDI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER BANDI_BI 
BEFORE INSERT ON BANDI
FOR EACH ROW
BEGIN
  SELECT BANDI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- COMUNE_BI  (Trigger) 
--
--  Dependencies: 
--   COMUNE (Table)
--   COMUNE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER COMUNE_BI 
BEFORE INSERT ON COMUNE
FOR EACH ROW
BEGIN
  SELECT COMUNE_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- CUSTOMER_SATISFACTION_BI  (Trigger) 
--
--  Dependencies: 
--   CUSTOMER_SATISFACTION (Table)
--   CUSTOMER_SATISFACTION_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER CUSTOMER_SATISFACTION_BI
BEFORE INSERT ON CUSTOMER_SATISFACTION
FOR EACH ROW
BEGIN
  SELECT CUSTOMER_SATISFACTION_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOCUMENTIBANDO_BI  (Trigger) 
--
--  Dependencies: 
--   DOCUMENTI_BANDO (Table)
--   DOCUMENTIBANDO_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOCUMENTIBANDO_BI 
BEFORE INSERT ON DOCUMENTI_BANDO
FOR EACH ROW
BEGIN
  SELECT DOCUMENTIBANDO_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOMANDA_BI  (Trigger) 
--
--  Dependencies: 
--   DOMANDA (Table)
--   DOMANDA_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOMANDA_BI 
BEFORE INSERT ON DOMANDA
FOR EACH ROW
BEGIN
  SELECT DOMANDA_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOMANDA_EMAIL_BI  (Trigger) 
--
--  Dependencies: 
--   DOMANDA_EMAIL (Table)
--   DOMANDA_EMAIL_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOMANDA_EMAIL_BI 
BEFORE INSERT ON DOMANDA_EMAIL
FOR EACH ROW
BEGIN
  SELECT DOMANDA_EMAIL_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOMANDA_SCONTI_BI  (Trigger) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   DOMANDA_SCONTI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOMANDA_SCONTI_BI 
BEFORE INSERT ON DOMANDA_SCONTI
FOR EACH ROW
BEGIN
  SELECT DOMANDA_SCONTI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOMANDA_SCONTI_CONTROLLI_BI  (Trigger) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_CONTROLLI (Table)
--   DOMANDA_SCONTI_CONTROLLI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOMANDA_SCONTI_CONTROLLI_BI
BEFORE INSERT ON DOMANDA_SCONTI_CONTROLLI
FOR EACH ROW
BEGIN
  SELECT DOMANDA_SCONTI_CONTROLLI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- DOMANDA_SCONTI_IMPORTI_LOG_BI  (Trigger) 
--
--  Dependencies: 
--   DOMANDA_SCONTI_IMPORTI_LOG (Table)
--   DOMANDA_SCONTI_IMPORTI_LOG_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER DOMANDA_SCONTI_IMPORTI_LOG_BI
BEFORE INSERT
ON DOMANDA_SCONTI_IMPORTI_LOG
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
  SELECT DOMANDA_SCONTI_IMPORTI_LOG_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- ESPORTAZIONI_TRG  (Trigger) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER ESPORTAZIONI_TRG 
BEFORE INSERT
ON ESPORTAZIONI
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
BEGIN
-- For Toad:  Highlight column LOTTO
  :new.LOTTO := ESPORTAZIONI_SEQ.nextval;
END ESPORTAZIONI_TRG;
/


--
-- FAQ_BI  (Trigger) 
--
--  Dependencies: 
--   FAQ (Table)
--   FAQ_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER FAQ_BI 
BEFORE INSERT ON FAQ
FOR EACH ROW
BEGIN
  SELECT FAQ_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- FAQ_UTENTI_BI  (Trigger) 
--
--  Dependencies: 
--   FAQ_UTENTI (Table)
--   FAQ_UTENTI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER FAQ_UTENTI_BI 
BEFORE INSERT ON FAQ_UTENTI
FOR EACH ROW
BEGIN
  SELECT FAQ_UTENTI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- IMPERSONIFICAZIONE_BI  (Trigger) 
--
--  Dependencies: 
--   IMPERSONIFICAZIONE (Table)
--   IMPERSONIFICAZIONE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER IMPERSONIFICAZIONE_BI
BEFORE INSERT ON IMPERSONIFICAZIONE
FOR EACH ROW
BEGIN
  SELECT IMPERSONIFICAZIONE_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;

-- ##############
/


--
-- INTEGRAZIONI_EMAIL_QUEUE_BI  (Trigger) 
--
--  Dependencies: 
--   INTEGRAZIONI_EMAIL_QUEUE (Table)
--   INTEGRAZIONI_EMAIL_QUEUE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER INTEGRAZIONI_EMAIL_QUEUE_BI
BEFORE INSERT ON INTEGRAZIONI_EMAIL_QUEUE
FOR EACH ROW
BEGIN
  SELECT INTEGRAZIONI_EMAIL_QUEUE_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;



--##########################
/


--
-- LOGS_BE_BI  (Trigger) 
--
--  Dependencies: 
--   LOGS_BE (Table)
--   LOGS_BE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER LOGS_BE_BI 
BEFORE INSERT ON LOGS_BE
FOR EACH ROW
BEGIN
  SELECT LOGS_BE_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- LOGS_BI  (Trigger) 
--
--  Dependencies: 
--   LOGS (Table)
--   LOGS_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER LOGS_BI 
BEFORE INSERT ON LOGS
FOR EACH ROW
BEGIN
  SELECT LOGS_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- LOGS_P7M_BI  (Trigger) 
--
--  Dependencies: 
--   LOGS_P7M (Table)
--   LOGS_P7M_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER LOGS_P7M_BI 
BEFORE INSERT ON LOGS_P7M
FOR EACH ROW
BEGIN
  SELECT LOGS_P7M_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- RICHIESTA_INTEGRAZIONE_BI  (Trigger) 
--
--  Dependencies: 
--   RICHIESTA_INTEGRAZIONE (Table)
--   RICHIESTA_INTEGRAZIONE_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER RICHIESTA_INTEGRAZIONE_BI
BEFORE INSERT ON RICHIESTA_INTEGRAZIONE
FOR EACH ROW
BEGIN
  SELECT RICHIESTA_INTEGRAZIONE_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- SPID_ACCESSI_BI  (Trigger) 
--
--  Dependencies: 
--   SPID_ACCESSI (Table)
--   SPID_ACCESSI_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER SPID_ACCESSI_BI 
BEFORE INSERT ON SPID_ACCESSI
FOR EACH ROW
BEGIN
  SELECT SPID_ACCESSI_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- TRG_AUDIT_RICHIESTA_INTEGRAZIONE  (Trigger) 
--
--  Dependencies: 
--   RICHIESTA_INTEGRAZIONE (Table)
--   AUDIT_RICHIESTA_INTEGRAZIONE (Table)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER TRG_AUDIT_RICHIESTA_INTEGRAZIONE
BEFORE UPDATE OF STATO ON RICHIESTA_INTEGRAZIONE
FOR EACH ROW
BEGIN
  IF (:OLD.STATO IS NULL AND :NEW.STATO IS NOT NULL)
     OR (:OLD.STATO IS NOT NULL AND :NEW.STATO IS NULL)
     OR (:OLD.STATO != :NEW.STATO) THEN

    INSERT INTO AUDIT_RICHIESTA_INTEGRAZIONE (
      ID_INTEGRAZIONE,
      STATO_PRECEDENTE,
      STATO_ATTUALE,
      ORIGINE
    )
    VALUES (
      :OLD.ID,
      :OLD.STATO,
      :NEW.STATO,
      'TRIGGER'
    );

  END IF;
END;
/


--
-- TRG_CAMBIA_STATO_SU_INSERIMENTO  (Trigger) 
--
--  Dependencies: 
--   RICHIESTA_INTEGRAZIONE (Table)
--   DOMANDA_SCONTI (Table)
--   DBMS_OUTPUT (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER TRG_CAMBIA_STATO_SU_INSERIMENTO
AFTER INSERT ON RICHIESTA_INTEGRAZIONE
FOR EACH ROW
DECLARE
  v_count NUMBER;
BEGIN
  -- Controlla se esiste la domanda
  SELECT COUNT(*) INTO v_count
  FROM DOMANDA_SCONTI
  WHERE ID = :NEW.ID_DOMANDA_SCONTI;

  IF v_count = 1 THEN
    -- Se esiste, aggiorna lo stato a 33
    UPDATE DOMANDA_SCONTI
    SET STATO = 33
    WHERE ID = :NEW.ID_DOMANDA_SCONTI;
  ELSE
    -- Altrimenti segnala errore (DBMS_OUTPUT visibile solo se abilitato)
    DBMS_OUTPUT.PUT_LINE('ID_DOMANDA_SCONTI ' || :NEW.ID_DOMANDA_SCONTI || ' non trovato in DOMANDA_SCONTI');
  END IF;

EXCEPTION
  WHEN OTHERS THEN
    -- In caso di errore inaspettato, logga il messaggio
    DBMS_OUTPUT.PUT_LINE('Errore nel trigger TRG_CAMBIA_STATO_SU_INSERIMENTO: ' || SQLERRM);
END;
/


--
-- UID_FIREBASE_ADMIN_BI  (Trigger) 
--
--  Dependencies: 
--   UID_FIREBASE_ADMIN (Table)
--   UID_FIREBASE_ADMIN_ID_SEQ (Sequence)
--   DUAL (Synonym)
--   STANDARD (Package)
--
CREATE OR REPLACE TRIGGER UID_FIREBASE_ADMIN_BI 
BEFORE INSERT ON UID_FIREBASE_ADMIN
FOR EACH ROW
BEGIN
  SELECT UID_FIREBASE_ADMIN_ID_SEQ.nextval
  INTO :new.ID
  FROM dual;
END;
/


--
-- AEROPORTI_COMPAGNIE  (Table) 
--
--  Dependencies: 
--   AEROPORTI (Table)
--   ANAG_COMPAGNIE (Table)
--
--   Row Count: 88
CREATE TABLE AEROPORTI_COMPAGNIE
(
  AEROPORTO  VARCHAR2(3 BYTE),
  COMPAGNIA  INTEGER
)
TABLESPACE BANDO_VOLI_TBS
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );


--
-- AERO_COMP_PK  (Index) 
--
--  Dependencies: 
--   AEROPORTI_COMPAGNIE (Table)
--
CREATE UNIQUE INDEX AERO_COMP_PK ON AEROPORTI_COMPAGNIE
(AEROPORTO, COMPAGNIA)
TABLESPACE BANDO_VOLI_TBS
PCTFREE    10
INITRANS   2
MAXTRANS   255
STORAGE    (
            INITIAL          64K
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            BUFFER_POOL      DEFAULT
           );

ALTER TABLE AEROPORTI_COMPAGNIE ADD (
  CONSTRAINT AERO_COMP_PK
  PRIMARY KEY
  (AEROPORTO, COMPAGNIA)
  USING INDEX AERO_COMP_PK
  ENABLE VALIDATE);



--
-- SPAEROCOMPAGNIESAVE  (Procedure) 
--
--  Dependencies: 
--   AEROPORTI_COMPAGNIE (Table)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPAEROCOMPAGNIESAVE" 
(
    P_AEROPORTO  VARCHAR2,
    P_COMPAGNIA  INT 
) AS 
INSUPDATE  NUMBER;
BEGIN

SELECT COUNT(*) INTO INSUPDATE  FROM AEROPORTI_COMPAGNIE WHERE AEROPORTO = P_AEROPORTO AND COMPAGNIA = P_COMPAGNIA;

IF INSUPDATE <= 0 THEN
        INSERT INTO AEROPORTI_COMPAGNIE (AEROPORTO, COMPAGNIA) VALUES (P_AEROPORTO, P_COMPAGNIA);
END IF;

END SPAEROCOMPAGNIESAVE;
/


--
-- CALCOLAETAFROMTODATE  (Function) 
--
--  Dependencies: 
--   GETPERIODOANNIMESIGIORNI (Function)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION CALCOLAETAFROMTODATE (
P_START_DATA IN VARCHAR2,
P_END_DATA IN VARCHAR2
)
RETURN number IS
    ETA number;
    START_DATA_CALCOLO date;
    END_DATA_CALCOLO date;
BEGIN 
    ETA := 0;-- Punti per Età
    START_DATA_CALCOLO := TO_DATE(P_START_DATA,'dd/mm/YYYY hh24:mi:ss');-- Data definita dall'accordo sindacale    
    END_DATA_CALCOLO := TO_DATE(P_END_DATA,'dd/mm/YYYY hh24:mi:ss');-- Data definita dall'accordo sindacale
    
    -- Calcolo del punteggio per anzianità di posizione
    --SELECT (ROUND((END_DATA_CALCOLO - DATA_NASCITA)/365))
    SELECT GETPERIODOANNIMESIGIORNI(START_DATA_CALCOLO, END_DATA_CALCOLO, 'ANNI') 
    INTO ETA
    from DUAL;
    
    IF ETA IS NULL THEN
        ETA := 0;    
    END IF;

    RETURN ETA;
END;
/


--
-- FNGETINTEGRAZIONE  (Function) 
--
--  Dependencies: 
--   FNGETINTEGRAZIONE_POST (Function)
--   FNGETINTEGRAZIONE_PRE (Function)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETINTEGRAZIONE" (    
	P_ID IN NUMBER,
	P_DATA_VOLO IN DATE
) RETURN VARCHAR IS
	T_DAL DATE;
	T_AL DATE;
    RESULT VARCHAR(255);
BEGIN
	T_DAL := TO_DATE('2024-12-07', 'YYYY-MM-DD'); 
	T_AL := TO_DATE('2025-01-06', 'YYYY-MM-DD');
	 
    IF P_DATA_VOLO BETWEEN T_DAL AND T_AL THEN
        RESULT := FNGETINTEGRAZIONE_POST(P_ID);
    ELSE
        RESULT := FNGETINTEGRAZIONE_PRE(P_ID);
    END IF;
    RETURN RESULT;

END FNGETINTEGRAZIONE;
/


--
-- FNGETSCONTO  (Function) 
--
--  Dependencies: 
--   FNGETSCONTO_POST (Function)
--   FNGETSCONTO_PRE (Function)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FNGETSCONTO" (    
	P_ID IN NUMBER,
	P_DATA_VOLO IN DATE
) RETURN VARCHAR IS
	T_DAL DATE;
	T_AL DATE;
    RESULT VARCHAR(255);
BEGIN
	T_DAL := TO_DATE('2024-12-07', 'YYYY-MM-DD'); 
	T_AL := TO_DATE('2025-01-06', 'YYYY-MM-DD');
	 
    IF P_DATA_VOLO BETWEEN T_DAL AND T_AL THEN
        RESULT := FNGETSCONTO_POST(P_ID, '');
    ELSE
        RESULT := FNGETSCONTO_PRE(P_ID, '');
    END IF;
    RETURN RESULT;

END FNGETSCONTO;
/


--
-- VIEW_EXPORT_IBAN_AGGIORNATI  (View) 
--
--  Dependencies: 
--   ACCOUNT (Table)
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--   FNGETINTEGRAZIONE (Function)
--   FNGETSCONTO (Function)
--
CREATE OR REPLACE FORCE VIEW VIEW_EXPORT_IBAN_AGGIORNATI
(ID, ID_DOMANDA, COGNOME, NOME, DATA_NASCITA, 
 RAPPORTO_PARENTELA, CODICE_FISCALE, BENEFICIARIO_BONIFICO, COMUNE_RESIDENZA, PROV_RESIDENZA, 
 CAP_RESIDENZA, COMPAGNIA_AEREA, NUMERO_VOLO, DATA_VOLO, COSTO_TRATTA, 
 AEROPORTO_PARTENZA, AEROPORTO_PARTENZA_CODICE, AEROPORTO_DESTINAZIONE, AEROPORTO_DESTINAZIONE_CODICE, FILEPATH_BIGLIETTO, 
 FILEPATH_CARTAIMBARCO, ISEE, DATA_RILASCIO_ISEE, IBAN, ISTITUTO_CREDITO, 
 FILIALE_CREDITO, STATO, DATA_REGISTRAZIONE, ID_UID_FIREBASE, DATA_ESPORTAZIONE, 
 DATA_ESITO, DATA_EROGAZIONE, NOTE, SCONTO_TOTALE, COMPAGNIA_ID, 
 DATA_ACQUISTO, LOTTO, FLAG, PRIORITA, ID_ACCOUNT, 
 FORZA_RESIDENZA, CITTADINANZA, LOTTO_INTEGRAZIONE, FILEPATH_BIGLIETTO_HASH, FILEPATH_CARTAIMBARCO_HASH)
BEQUEATH DEFINER
AS 
SELECT DS.ID,
           DS.ID_DOMANDA,
           DS.COGNOME,
           DS.NOME,
           DS.DATA_NASCITA,
           DS.RAPPORTO_PARENTELA,
           DS.CODICE_FISCALE,
           CASE WHEN DS.RAPPORTO_PARENTELA > 0 
                THEN (SELECT CODICE_FISCALE FROM ACCOUNT WHERE ID = D.ID_ACCOUNT)
                ELSE DS.CODICE_FISCALE END AS BENEFICIARIO_BONIFICO,
           CASE
               WHEN DS.STATO >= 1 THEN DS.COMUNE_RESIDENZA
               ELSE AF.COMUNE_RESIDENZA
           END
               AS COMUNE_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.PROV_RESIDENZA
               ELSE AF.PROV_RESIDENZA
           END
               AS PROV_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.CAP_RESIDENZA
               ELSE AF.CAP_RESIDENZA
           END
               AS CAP_RESIDENZA,
           DS.COMPAGNIA_AEREA,
           DS.NUMERO_VOLO,
           DS.DATA_VOLO,
           DS.COSTO_TRATTA,
           DS.AEROPORTO_PARTENZA,
           DS.AEROPORTO_PARTENZA_CODICE,
           DS.AEROPORTO_DESTINAZIONE,
           DS.AEROPORTO_DESTINAZIONE_CODICE,
           DS.FILEPATH_BIGLIETTO,
           DS.FILEPATH_CARTAIMBARCO,
           CASE WHEN DS.STATO >= 1 THEN DS.ISEE ELSE D.ISEE END
               AS ISEE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.DATA_RILASCIO_ISEE
               ELSE D.DATA_RILASCIO_ISEE
           END
               AS DATA_RILASCIO_ISEE,
           D.IBAN,
           D.ISTITUTO_CREDITO,
           D.FILIALE_CREDITO,
           DS.STATO,
           DS.DATA_REGISTRAZIONE,
           DS.ID_UID_FIREBASE,
           DS.DATA_ESPORTAZIONE,
           DS.DATA_ESITO,
           DS.DATA_EROGAZIONE,
           DS.NOTE,
           CASE
               WHEN DS.STATO >= 1
               THEN
                   CASE
                       WHEN DI.ID_RICHIESTA IS NOT NULL
                       THEN
                           (  DS.SCONTO_TOTALE
                            + TO_NUMBER (
                                  FNGETINTEGRAZIONE (DS.ID, DS.DATA_VOLO)))
                       ELSE
                           DS.SCONTO_TOTALE
                   END
               ELSE
                   TO_NUMBER (FNGETSCONTO (DS.ID, DS.DATA_VOLO))
           END
               AS SCONTO_TOTALE,
           DS.COMPAGNIA_ID,
           DS.DATA_ACQUISTO,
           DS.LOTTO,
           CASE WHEN DS.STATO >= 1 THEN AF.FLAG ELSE DS.FLAG END
               AS FLAG,
           CASE WHEN DS.STATO >= 1 THEN DS.PRIORITY ELSE AF.PRIORITY END
               AS PRIORITA,
           D.ID_ACCOUNT,
           DS.FORZA_RESIDENZA,
           DS.CITTADINANZA,
           DI.LOTTO_INTEGRAZIONE,
           DS.FILEPATH_BIGLIETTO_HASH,
           DS.FILEPATH_CARTAIMBARCO_HASH
      FROM DOMANDA_SCONTI  DS
           LEFT JOIN DOMANDA_SCONTI_INTEGRAZIONE DI
               ON DI.ID_RICHIESTA = DS.ID
           INNER JOIN DOMANDA D ON DS.ID_DOMANDA = D.ID
           INNER JOIN ACCOUNT_NUCLEO_FAMILIARE AF
               ON     AF.ID_ACCOUNT = D.ID_ACCOUNT
                  AND DS.CODICE_FISCALE = AF.CODICE_FISCALE;


--
-- VIEW_EXPORT_INTEGRAZIONI  (View) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--   FNGETINTEGRAZIONE (Function)
--   FNGETSCONTO (Function)
--
CREATE OR REPLACE FORCE VIEW VIEW_EXPORT_INTEGRAZIONI
(ID, ID_DOMANDA, COGNOME, NOME, DATA_NASCITA, 
 RAPPORTO_PARENTELA, CODICE_FISCALE, COMUNE_RESIDENZA, PROV_RESIDENZA, CAP_RESIDENZA, 
 COMPAGNIA_AEREA, NUMERO_VOLO, DATA_VOLO, COSTO_TRATTA, AEROPORTO_PARTENZA, 
 AEROPORTO_PARTENZA_CODICE, AEROPORTO_DESTINAZIONE, AEROPORTO_DESTINAZIONE_CODICE, FILEPATH_BIGLIETTO, FILEPATH_CARTAIMBARCO, 
 ISEE, DATA_RILASCIO_ISEE, IBAN, ISTITUTO_CREDITO, FILIALE_CREDITO, 
 STATO, DATA_REGISTRAZIONE, ID_UID_FIREBASE, DATA_ESPORTAZIONE, DATA_ESITO, 
 DATA_EROGAZIONE, NOTE, SCONTO_TOTALE, COMPAGNIA_ID, DATA_ACQUISTO, 
 LOTTO, FLAG, PRIORITA, ID_ACCOUNT, FORZA_RESIDENZA, 
 CITTADINANZA, LOTTO_INTEGRAZIONE, INTEGRAZIONE, SCONTO_ORIGIN, FILEPATH_BIGLIETTO_HASH, 
 FILEPATH_CARTAIMBARCO_HASH)
BEQUEATH DEFINER
AS 
SELECT DS.ID,
           DS.ID_DOMANDA,
           DS.COGNOME,
           DS.NOME,
           DS.DATA_NASCITA,
           DS.RAPPORTO_PARENTELA,
           DS.CODICE_FISCALE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.COMUNE_RESIDENZA
               ELSE AF.COMUNE_RESIDENZA
           END
               AS COMUNE_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.PROV_RESIDENZA
               ELSE AF.PROV_RESIDENZA
           END
               AS PROV_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.CAP_RESIDENZA
               ELSE AF.CAP_RESIDENZA
           END
               AS CAP_RESIDENZA,
           DS.COMPAGNIA_AEREA,
           DS.NUMERO_VOLO,
           DS.DATA_VOLO,
           DS.COSTO_TRATTA,
           DS.AEROPORTO_PARTENZA,
           DS.AEROPORTO_PARTENZA_CODICE,
           DS.AEROPORTO_DESTINAZIONE,
           DS.AEROPORTO_DESTINAZIONE_CODICE,
           DS.FILEPATH_BIGLIETTO,
           DS.FILEPATH_CARTAIMBARCO,
           CASE WHEN DS.STATO >= 1 THEN DS.ISEE ELSE D.ISEE END
               AS ISEE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.DATA_RILASCIO_ISEE
               ELSE D.DATA_RILASCIO_ISEE
           END
               AS DATA_RILASCIO_ISEE,
           CASE WHEN DS.STATO >= 1 THEN DS.IBAN ELSE D.IBAN END
               AS IBAN,
           CASE
               WHEN DS.STATO >= 1 THEN DS.ISTITUTO_CREDITO
               ELSE D.ISTITUTO_CREDITO
           END
               AS ISTITUTO_CREDITO,
           CASE
               WHEN DS.STATO >= 1 THEN DS.FILIALE_CREDITO
               ELSE D.FILIALE_CREDITO
           END
               AS FILIALE_CREDITO,
           DS.STATO,
           DS.DATA_REGISTRAZIONE,
           DS.ID_UID_FIREBASE,
           DS.DATA_ESPORTAZIONE,
           DS.DATA_ESITO,
           DS.DATA_EROGAZIONE,
           DS.NOTE,
           CASE
               WHEN DS.STATO >= 1 THEN 
               CASE
                   WHEN DI.ID_RICHIESTA IS NOT NULL
                   THEN
                       (  DS.SCONTO_TOTALE
                        + TO_NUMBER (FNGETINTEGRAZIONE (DS.ID, DS.DATA_VOLO)))
                   ELSE
                       DS.SCONTO_TOTALE
               END
               ELSE TO_NUMBER (FNGETSCONTO (DS.ID, DS.DATA_VOLO))
           END
               AS SCONTO_TOTALE,
           DS.COMPAGNIA_ID,
           DS.DATA_ACQUISTO,
           DS.LOTTO,
           CASE WHEN DS.STATO >= 1 THEN AF.FLAG ELSE DS.FLAG END
               AS FLAG,
           CASE WHEN DS.STATO >= 1 THEN DS.PRIORITY ELSE AF.PRIORITY END
               AS PRIORITA,
           D.ID_ACCOUNT,
           DS.FORZA_RESIDENZA,
           DS.CITTADINANZA, 
           DI.LOTTO_INTEGRAZIONE,
           TO_NUMBER (FNGETINTEGRAZIONE(DS.ID, DS.DATA_VOLO)) AS INTEGRAZIONE,
           DS.SCONTO_TOTALE AS SCONTO_ORIGIN,
           DS.FILEPATH_BIGLIETTO_HASH,
           DS.FILEPATH_CARTAIMBARCO_HASH
      FROM DOMANDA_SCONTI  DS
           LEFT JOIN DOMANDA_SCONTI_INTEGRAZIONE DI ON DI.ID_RICHIESTA = DS.ID
           INNER JOIN DOMANDA D ON DS.ID_DOMANDA = D.ID
           INNER JOIN ACCOUNT_NUCLEO_FAMILIARE AF
               ON     AF.ID_ACCOUNT = D.ID_ACCOUNT
                  AND DS.CODICE_FISCALE = AF.CODICE_FISCALE;


--
-- VIEW_EXPORT_SCONTI  (View) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   DOMANDA (Table)
--   DOMANDA_SCONTI (Table)
--   DOMANDA_SCONTI_INTEGRAZIONE (Table)
--   FNGETINTEGRAZIONE (Function)
--   FNGETSCONTO (Function)
--
CREATE OR REPLACE FORCE VIEW VIEW_EXPORT_SCONTI
(ID, ID_DOMANDA, COGNOME, NOME, DATA_NASCITA, 
 RAPPORTO_PARENTELA, CODICE_FISCALE, COMUNE_RESIDENZA, PROV_RESIDENZA, CAP_RESIDENZA, 
 COMPAGNIA_AEREA, NUMERO_VOLO, DATA_VOLO, COSTO_TRATTA, AEROPORTO_PARTENZA, 
 AEROPORTO_PARTENZA_CODICE, AEROPORTO_DESTINAZIONE, AEROPORTO_DESTINAZIONE_CODICE, FILEPATH_BIGLIETTO, FILEPATH_CARTAIMBARCO, 
 ISEE, DATA_RILASCIO_ISEE, IBAN, ISTITUTO_CREDITO, FILIALE_CREDITO, 
 STATO, DATA_REGISTRAZIONE, ID_UID_FIREBASE, DATA_ESPORTAZIONE, DATA_ESITO, 
 DATA_EROGAZIONE, NOTE, SCONTO_TOTALE, COMPAGNIA_ID, DATA_ACQUISTO, 
 LOTTO, FLAG, PRIORITA, ID_ACCOUNT, FORZA_RESIDENZA, 
 CITTADINANZA, LOTTO_INTEGRAZIONE, FILEPATH_BIGLIETTO_HASH, FILEPATH_CARTAIMBARCO_HASH)
BEQUEATH DEFINER
AS 
SELECT DS.ID,
           DS.ID_DOMANDA,
           DS.COGNOME,
           DS.NOME,
           DS.DATA_NASCITA,
           DS.RAPPORTO_PARENTELA,
           DS.CODICE_FISCALE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.COMUNE_RESIDENZA
               ELSE AF.COMUNE_RESIDENZA
           END
               AS COMUNE_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.PROV_RESIDENZA
               ELSE AF.PROV_RESIDENZA
           END
               AS PROV_RESIDENZA,
           CASE
               WHEN DS.STATO >= 1 THEN DS.CAP_RESIDENZA
               ELSE AF.CAP_RESIDENZA
           END
               AS CAP_RESIDENZA,
           DS.COMPAGNIA_AEREA,
           DS.NUMERO_VOLO,
           DS.DATA_VOLO,
           DS.COSTO_TRATTA,
           DS.AEROPORTO_PARTENZA,
           DS.AEROPORTO_PARTENZA_CODICE,
           DS.AEROPORTO_DESTINAZIONE,
           DS.AEROPORTO_DESTINAZIONE_CODICE,
           DS.FILEPATH_BIGLIETTO,
           DS.FILEPATH_CARTAIMBARCO,
           CASE WHEN DS.STATO >= 1 THEN DS.ISEE ELSE D.ISEE END
               AS ISEE,
           CASE
               WHEN DS.STATO >= 1 THEN DS.DATA_RILASCIO_ISEE
               ELSE D.DATA_RILASCIO_ISEE
           END
               AS DATA_RILASCIO_ISEE,
           CASE WHEN DS.STATO >= 1 THEN DS.IBAN ELSE D.IBAN END
               AS IBAN,
           CASE
               WHEN DS.STATO >= 1 THEN DS.ISTITUTO_CREDITO
               ELSE D.ISTITUTO_CREDITO
           END
               AS ISTITUTO_CREDITO,
           CASE
               WHEN DS.STATO >= 1 THEN DS.FILIALE_CREDITO
               ELSE D.FILIALE_CREDITO
           END
               AS FILIALE_CREDITO,
           DS.STATO,
           DS.DATA_REGISTRAZIONE,
           DS.ID_UID_FIREBASE,
           DS.DATA_ESPORTAZIONE,
           DS.DATA_ESITO,
           DS.DATA_EROGAZIONE,
           DS.NOTE,
           CASE
               WHEN DS.STATO >= 1
               THEN
                   CASE
                       WHEN DI.ID_RICHIESTA IS NOT NULL
                       THEN
                           (  DS.SCONTO_TOTALE
                            + TO_NUMBER (
                                  FNGETINTEGRAZIONE (DS.ID, DS.DATA_VOLO)))
                       ELSE
                           DS.SCONTO_TOTALE
                   END
               ELSE
                   TO_NUMBER (FNGETSCONTO (DS.ID, DS.DATA_VOLO))
           END
               AS SCONTO_TOTALE,
           DS.COMPAGNIA_ID,
           DS.DATA_ACQUISTO,
           DS.LOTTO,
           CASE WHEN DS.STATO >= 1 THEN AF.FLAG ELSE DS.FLAG END
               AS FLAG,
           CASE WHEN DS.STATO >= 1 THEN DS.PRIORITY ELSE AF.PRIORITY END
               AS PRIORITA,
           D.ID_ACCOUNT,
           DS.FORZA_RESIDENZA,
           DS.CITTADINANZA,
           DI.LOTTO_INTEGRAZIONE,
           DS.FILEPATH_BIGLIETTO_HASH,
           DS.FILEPATH_CARTAIMBARCO_HASH
      FROM DOMANDA_SCONTI  DS
           LEFT JOIN DOMANDA_SCONTI_INTEGRAZIONE DI
               ON DI.ID_RICHIESTA = DS.ID
           INNER JOIN DOMANDA D ON DS.ID_DOMANDA = D.ID
           INNER JOIN ACCOUNT_NUCLEO_FAMILIARE AF
               ON     AF.ID_ACCOUNT = D.ID_ACCOUNT
                  AND DS.CODICE_FISCALE = AF.CODICE_FISCALE;


--
-- PRC_RICALCOLA_SCONTO  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   FNGETSCONTO (Function)
--   DBMS_OUTPUT (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE PRC_RICALCOLA_SCONTO (
    p_id IN DOMANDA_SCONTI.ID%TYPE
) IS
    v_data_volo   DOMANDA_SCONTI.DATA_VOLO%TYPE;
    v_sconto      VARCHAR2(255);
BEGIN
    -- Recupero la data del volo
    SELECT DATA_VOLO
    INTO v_data_volo
    FROM DOMANDA_SCONTI
    WHERE ID = p_id;

    -- Calcolo lo sconto
    v_sconto := FNGETSCONTO(p_id, v_data_volo);

    -- Aggiorno il campo (convertendo in numero)
    UPDATE DOMANDA_SCONTI
    SET SCONTO_TOTALE = TO_NUMBER(v_sconto)
    WHERE ID = p_id;

    COMMIT;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('Nessun record trovato per ID=' || p_id);
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Errore: ' || SQLERRM);
        ROLLBACK;
END PRC_RICALCOLA_SCONTO;
/


--
-- SPESPORTASCONTI  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   FNGETSCONTO (Function)
--   VIEW_EXPORT_SCONTI (View)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE "SPESPORTASCONTI" 
(
  P_ID  INT,
  P_NUM_LOTTO INT
) AS 
CTR_STATO INT;
CTR_PRES_ACC INT;
T_ID_DOMANDA INT;
T_ID_ACCOUNT INT;
T_BENEFICIARIO VARCHAR2(255);
T_COMUNE_RESIDENZA VARCHAR2(255);
T_PROV_RESIDENZA  VARCHAR2(2);
T_CAP_RESIDENZA  VARCHAR2(5);
T_FLAG VARCHAR2(1000);
T_ISEE INT;
T_PRIORITY INT;
T_DATA_RILASCIO_ISEE DATE;
T_IBAN VARCHAR2(255);
T_ISTITUTO_CREDITO VARCHAR2(255);
T_FILIALE_CREDITO VARCHAR2(255);
T_SCONTO_TOTALE NUMBER;
T_DATA_VOLO DATE;
BEGIN
CTR_PRES_ACC :=0;

SELECT STATO, ID_DOMANDA, CODICE_FISCALE, ID_ACCOUNT,ISEE,DATA_RILASCIO_ISEE,IBAN,ISTITUTO_CREDITO,FILIALE_CREDITO, COMUNE_RESIDENZA,PROV_RESIDENZA,CAP_RESIDENZA,FLAG,PRIORITA, DATA_VOLO 
INTO CTR_STATO, T_ID_DOMANDA, T_BENEFICIARIO, T_ID_ACCOUNT,T_ISEE,T_DATA_RILASCIO_ISEE,T_IBAN,T_ISTITUTO_CREDITO,T_FILIALE_CREDITO,T_COMUNE_RESIDENZA,T_PROV_RESIDENZA,T_CAP_RESIDENZA,T_FLAG,T_PRIORITY, T_DATA_VOLO
FROM VIEW_EXPORT_SCONTI WHERE ID = P_ID;

-- SELECT STATO, ID_DOMANDA, CODICE_FISCALE INTO CTR_STATO, T_ID_DOMANDA, T_BENEFICIARIO FROM DOMANDA_SCONTI WHERE ID = P_ID;
/*Verifico la presenza del beneficiario nel nucleo familiare*/
--SELECT NVL(ID,0) INTO CTR_PRES_ACC FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO;  

--SELECT COUNT(*) INTO CTR_PRES_ACC FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO;
    
-- IF CTR_STATO = 0 AND CTR_PRES_ACC > 0 THEN
    IF CTR_STATO = 0 THEN
     
    /*SELECT 
        ID_ACCOUNT,ISEE,DATA_RILASCIO_ISEE,IBAN,ISTITUTO_CREDITO,FILIALE_CREDITO
        INTO 
        T_ID_ACCOUNT,T_ISEE,T_DATA_RILASCIO_ISEE,T_IBAN,T_ISTITUTO_CREDITO,T_FILIALE_CREDITO
    FROM DOMANDA WHERE ID = T_ID_DOMANDA; 
    SELECT 
        COMUNE_RESIDENZA,PROV_RESIDENZA,CAP_RESIDENZA, FLAG, PRIORITY
        INTO 
        T_COMUNE_RESIDENZA,T_PROV_RESIDENZA,T_CAP_RESIDENZA,T_FLAG, T_PRIORITY
    FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO AND ID_ACCOUNT = T_ID_ACCOUNT;*/ 
    
    T_SCONTO_TOTALE := TO_NUMBER(FNGETSCONTO(P_ID, T_DATA_VOLO));

    UPDATE DOMANDA_SCONTI SET 
        COMUNE_RESIDENZA = T_COMUNE_RESIDENZA, 
        PROV_RESIDENZA = T_PROV_RESIDENZA, 
        CAP_RESIDENZA = T_CAP_RESIDENZA,        
        FLAG = T_FLAG,        
        ISEE = T_ISEE,
        DATA_RILASCIO_ISEE = T_DATA_RILASCIO_ISEE,
        IBAN = T_IBAN,
        ISTITUTO_CREDITO = T_ISTITUTO_CREDITO,
        FILIALE_CREDITO = T_FILIALE_CREDITO,
        STATO = 1,    
        DATA_ESPORTAZIONE = SYSTIMESTAMP,
        SCONTO_TOTALE = T_SCONTO_TOTALE,
        LOTTO = P_NUM_LOTTO, 
        PRIORITY = T_PRIORITY        
    WHERE ID = P_ID; 
END IF;


END SPESPORTASCONTI;
/


--
-- SPPRESAINCARICO_DDG_NATALIZIO  (Procedure) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   SPESPORTASCONTI (Procedure)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO_DDG_NATALIZIO (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE
) AS
    -- Dichiarazione delle variabili
    V_ID VIEW_EXPORT_SCONTI.ID%TYPE;
    V_NUM_LOTTO INT;
    
    -- Cursor per la SELECT
    CURSOR C_CURSOR IS
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE DATA_REGISTRAZIONE BETWEEN DATA_INIZIO AND DATA_FINE 
        AND DATA_VOLO BETWEEN TO_DATE('07/12/2024 00:00:00','dd/mm/yyyy hh24:mi:ss') AND TO_DATE('06/01/2025 23:59:59','dd/mm/yyyy hh24:mi:ss') AND STATO = 0;

BEGIN    
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO) VALUES (0, DATA_FINE, 10);
    
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;
    
    -- Apertura del cursore
    OPEN C_CURSOR;  
    

    -- Loop attraverso i risultati della SELECT
    LOOP
        -- Recupero dei valori dalla riga corrente
        FETCH C_CURSOR INTO V_ID;

        -- Uscita dal loop quando non ci sono più righe
        EXIT WHEN C_CURSOR%NOTFOUND;

        -- Chiamata alla funzione con i valori recuperati
        SPESPORTASCONTI(V_ID, V_NUM_LOTTO);

    END LOOP;

    -- Chiusura del cursore
    CLOSE C_CURSOR;
END SPPRESAINCARICO_DDG_NATALIZIO;
/


--
-- SPPRESAINCARICO_PRIORITARI  (Procedure) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   SPESPORTASCONTI (Procedure)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO_PRIORITARI (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE
) AS
    -- Dichiarazione delle variabili
    V_ID VIEW_EXPORT_SCONTI.ID%TYPE;
    V_NUM_LOTTO INT;
    
    -- Cursor per la SELECT
    CURSOR C_CURSOR IS
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE DATA_REGISTRAZIONE BETWEEN DATA_INIZIO AND DATA_FINE AND (ISEE = 1 OR PRIORITA = 1) AND STATO = 0;

BEGIN    
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO) VALUES (0, DATA_FINE, 1);
    
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;
    
    -- Apertura del cursore
    OPEN C_CURSOR;  
    

    -- Loop attraverso i risultati della SELECT
    LOOP
        -- Recupero dei valori dalla riga corrente
        FETCH C_CURSOR INTO V_ID;

        -- Uscita dal loop quando non ci sono più righe
        EXIT WHEN C_CURSOR%NOTFOUND;

        -- Chiamata alla funzione con i valori recuperati
        SPESPORTASCONTI(V_ID, V_NUM_LOTTO);

    END LOOP;

    -- Chiusura del cursore
    CLOSE C_CURSOR;
END SPPRESAINCARICO_PRIORITARI;
/


--
-- SPPRESAINCARICO_PRIORITARI_NATALE  (Procedure) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   SPESPORTASCONTI (Procedure)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO_PRIORITARI_NATALE (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE
) AS
    -- Dichiarazione delle variabili
    V_ID VIEW_EXPORT_SCONTI.ID%TYPE;
    V_NUM_LOTTO INT;
    
    -- Cursor per la SELECT
    CURSOR C_CURSOR IS
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE DATA_REGISTRAZIONE BETWEEN DATA_INIZIO AND DATA_FINE AND DATA_VOLO < TO_DATE('07/12/2024 00:00:00','dd/mm/yyyy hh24:mi:ss') AND (ISEE = 1 OR PRIORITA = 1) AND STATO = 0;

BEGIN    
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO) VALUES (0, DATA_FINE, 1);
    
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;
    
    -- Apertura del cursore
    OPEN C_CURSOR;  
    

    -- Loop attraverso i risultati della SELECT
    LOOP
        -- Recupero dei valori dalla riga corrente
        FETCH C_CURSOR INTO V_ID;

        -- Uscita dal loop quando non ci sono più righe
        EXIT WHEN C_CURSOR%NOTFOUND;

        -- Chiamata alla funzione con i valori recuperati
        SPESPORTASCONTI(V_ID, V_NUM_LOTTO);

    END LOOP;

    -- Chiusura del cursore
    CLOSE C_CURSOR;
END SPPRESAINCARICO_PRIORITARI_NATALE;
/


--
-- SPPRESAINCARICO_RESIDENTI  (Procedure) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   SPESPORTASCONTI (Procedure)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO_RESIDENTI (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE
) AS
    -- Dichiarazione delle variabili
    V_ID VIEW_EXPORT_SCONTI.ID%TYPE;
    V_NUM_LOTTO INT;
    
    -- Cursor per la SELECT
    CURSOR C_CURSOR IS
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE DATA_REGISTRAZIONE BETWEEN DATA_INIZIO AND DATA_FINE AND ISEE = 0 AND PRIORITA = 0 AND STATO = 0;

BEGIN    
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO) VALUES (0, DATA_FINE, 0);
    
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;
    
    -- Apertura del cursore
    OPEN C_CURSOR;  
    

    -- Loop attraverso i risultati della SELECT
    LOOP
        -- Recupero dei valori dalla riga corrente
        FETCH C_CURSOR INTO V_ID;

        -- Uscita dal loop quando non ci sono più righe
        EXIT WHEN C_CURSOR%NOTFOUND;

        -- Chiamata alla funzione con i valori recuperati
        SPESPORTASCONTI(V_ID, V_NUM_LOTTO);

    END LOOP;

    -- Chiusura del cursore
    CLOSE C_CURSOR;
END SPPRESAINCARICO_RESIDENTI;
/


--
-- SPPRESAINCARICO_RESIDENTI_NATALE  (Procedure) 
--
--  Dependencies: 
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   SPESPORTASCONTI (Procedure)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO_RESIDENTI_NATALE (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE
) AS
    -- Dichiarazione delle variabili
    V_ID VIEW_EXPORT_SCONTI.ID%TYPE;
    V_NUM_LOTTO INT;
    
    -- Cursor per la SELECT
    CURSOR C_CURSOR IS
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE DATA_REGISTRAZIONE BETWEEN DATA_INIZIO AND DATA_FINE AND DATA_VOLO < TO_DATE('07/12/2024 00:00:00','dd/mm/yyyy hh24:mi:ss') AND ISEE = 0 AND PRIORITA = 0 AND STATO = 0;

BEGIN    
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO) VALUES (0, DATA_FINE, 0);
    
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;
    
    -- Apertura del cursore
    OPEN C_CURSOR;  
    

    -- Loop attraverso i risultati della SELECT
    LOOP
        -- Recupero dei valori dalla riga corrente
        FETCH C_CURSOR INTO V_ID;

        -- Uscita dal loop quando non ci sono più righe
        EXIT WHEN C_CURSOR%NOTFOUND;

        -- Chiamata alla funzione con i valori recuperati
        SPESPORTASCONTI(V_ID, V_NUM_LOTTO);

    END LOOP;

    -- Chiusura del cursore
    CLOSE C_CURSOR;
END SPPRESAINCARICO_RESIDENTI_NATALE;
/


--
-- SP_CONFERMA_VALIDATI  (Procedure) 
--
--  Dependencies: 
--   DOMANDA_SCONTI (Table)
--   ESPORTAZIONI (Table)
--   ESPORTAZIONI_SEQ (Sequence)
--   VIEW_EXPORT_SCONTI (View)
--   DUAL (Synonym)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SP_CONFERMA_VALIDATI (
    LOTTO_FROM IN NUMBER
) AS
    V_NUM_LOTTO NUMBER;
    V_DATA_FILTRO DATE;
BEGIN
    -- Recupero della data filtro dal lotto specificato
    SELECT DATA_FILTRO INTO V_DATA_FILTRO
    FROM ESPORTAZIONI
    WHERE LOTTO = LOTTO_FROM;

    -- Inserimento di un nuovo record in ESPORTAZIONI
    INSERT INTO ESPORTAZIONI (LOTTO, DATA_FILTRO, TIPO)
    VALUES (0, V_DATA_FILTRO, 0);

    -- Recupero del valore corrente della sequenza
    SELECT ESPORTAZIONI_SEQ.CURRVAL INTO V_NUM_LOTTO FROM DUAL;

    -- Loop attraverso i risultati della SELECT
    FOR rec IN (
        SELECT ID
        FROM VIEW_EXPORT_SCONTI
        WHERE LOTTO = LOTTO_FROM AND NOTE LIKE '%[VALIDATA]%' AND STATO = 1
    ) LOOP
        -- Aggiornamento della tabella DOMANDA_SCONTI
        UPDATE DOMANDA_SCONTI
        SET LOTTO = V_NUM_LOTTO,
        STATO = 2,
        DATA_ESITO = SYSTIMESTAMP  
        WHERE ID = rec.ID;
    END LOOP;
END SP_CONFERMA_VALIDATI;
/


--
-- FN_ISCITTADINOUE  (Function) 
--
--  Dependencies: 
--   COMUNE (Table)
--   CONVERTI_OMO_CODICE (Function)
--   VIEW_EXPORT_SCONTI (View)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FN_ISCITTADINOUE" (
    P_ID IN NUMBER
) RETURN NUMBER IS
    T_COD_CF VARCHAR2(4); -- Variabile per il codice comune
    T_REGIONE VARCHAR2(255);     -- Variabile per la regione
    T_CITTADINANZA VARCHAR2(255);     -- Variabile per la cittadinanza
BEGIN

    -- Estrarre il codice comune direttamente
    SELECT SUBSTR(CONVERTI_OMO_CODICE(CODICE_FISCALE), 12, 4), CITTADINANZA
    INTO T_COD_CF, T_CITTADINANZA
    FROM VIEW_EXPORT_SCONTI
    WHERE ID = P_ID;

    
    IF T_CITTADINANZA != '' THEN 
        SELECT CODICE_REGIONE
        INTO T_REGIONE
        FROM COMUNE
        WHERE DESCRIZIONE = T_CITTADINANZA AND ATTIVO = 1;
    ELSE 
        SELECT CODICE_REGIONE
        INTO T_REGIONE
        FROM COMUNE
        WHERE COD_CF = T_COD_CF AND ATTIVO = 1;
    END IF;
    
    
    RETURN CASE
        WHEN T_REGIONE = '' THEN 0
        ELSE 1
    END;
    
EXCEPTION
    -- Gestione delle eccezioni (es. nessun record trovato)
    WHEN NO_DATA_FOUND THEN
        RETURN 0; -- Restituire 0 se non ci sono dati
    WHEN OTHERS THEN
        -- Log dell'errore se necessario (facoltativo)
        RAISE; -- Ritornare l'errore originale
END FN_ISCITTADINOUE;
/


--
-- FN_ISNATIVO  (Function) 
--
--  Dependencies: 
--   COMUNE (Table)
--   CONVERTI_OMO_CODICE (Function)
--   VIEW_EXPORT_SCONTI (View)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FN_ISNATIVO" (
    P_ID IN NUMBER
) RETURN NUMBER IS
    T_COD_CF VARCHAR2(4); -- Variabile per il codice comune
    T_REGIONE NUMBER;     -- Variabile per la regione
BEGIN
    -- Estrarre il codice comune direttamente
    SELECT SUBSTR(CONVERTI_OMO_CODICE(CODICE_FISCALE), 12, 4)
    INTO T_COD_CF
    FROM VIEW_EXPORT_SCONTI
    WHERE ID = P_ID;

    -- Verificare ed estrarre la regione associata al codice comune
    SELECT REGIONE
    INTO T_REGIONE
    FROM COMUNE
    WHERE COD_CF = T_COD_CF AND REGIONE = 19;

    -- Restituire 1 se la regione è 19, altrimenti 0
    RETURN CASE
        WHEN T_REGIONE = 19 THEN 1
        ELSE 0
    END;
    
EXCEPTION
    -- Gestione delle eccezioni (es. nessun record trovato)
    WHEN NO_DATA_FOUND THEN
        RETURN 0; -- Restituire 0 se non ci sono dati
    WHEN OTHERS THEN
        -- Log dell'errore se necessario (facoltativo)
        RAISE; -- Ritornare l'errore originale
END FN_ISNATIVO;
/


--
-- FN_ISRESIDENTE  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   COMUNE (Table)
--   DOMANDA (Table)
--   VIEW_EXPORT_SCONTI (View)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FN_ISRESIDENTE" (
    P_ID IN NUMBER
) RETURN NUMBER IS
    T_REGIONE NUMBER;     -- Variabile per la regione    
    CTR_STATO INT;
    T_ID_DOMANDA INT;
    T_ID_ACCOUNT INT;
    T_BENEFICIARIO VARCHAR2(255);
    T_COMUNE_RESIDENZA VARCHAR2(255);
BEGIN
    
    -- Estrarre il codice comune direttamente
    SELECT ID_DOMANDA, STATO, CODICE_FISCALE, COMUNE_RESIDENZA
    INTO T_ID_DOMANDA, CTR_STATO, T_BENEFICIARIO, T_COMUNE_RESIDENZA
    FROM VIEW_EXPORT_SCONTI
    WHERE ID = P_ID;

    
    IF CTR_STATO = 0 THEN 
        SELECT  ID_ACCOUNT INTO T_ID_ACCOUNT FROM DOMANDA WHERE ID = T_ID_DOMANDA;
        SELECT  DISTINCT(COMUNE_RESIDENZA) INTO T_COMUNE_RESIDENZA FROM ACCOUNT_NUCLEO_FAMILIARE WHERE CODICE_FISCALE = T_BENEFICIARIO AND ID_ACCOUNT = T_ID_ACCOUNT; 
        
    END IF;
    
    -- Verificare ed estrarre la regione associata al codice comune
    SELECT REGIONE
    INTO T_REGIONE
    FROM COMUNE
    WHERE UPPER(DESCRIZIONE) = UPPER(T_COMUNE_RESIDENZA) AND REGIONE = 19 AND ATTIVO = 1;
    

    -- Restituire 1 se CODICE_REGIONE è un comune italiano o di uno stato UE, altrimenti 0
    RETURN CASE
        WHEN T_REGIONE = 19 THEN 1
        ELSE 0
    END;
    
EXCEPTION
    -- Gestione delle eccezioni (es. nessun record trovato)
    WHEN NO_DATA_FOUND THEN
        RETURN 0; -- Restituire 0 se non ci sono dati
    WHEN OTHERS THEN
        -- Log dell'errore se necessario (facoltativo)
        RAISE; -- Ritornare l'errore originale
END FN_ISRESIDENTE;
/


--
-- FN_ISRESIDENTE_OPT  (Function) 
--
--  Dependencies: 
--   ACCOUNT_NUCLEO_FAMILIARE (Table)
--   COMUNE (Table)
--   DOMANDA (Table)
--   VIEW_EXPORT_SCONTI (View)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE FUNCTION "FN_ISRESIDENTE_OPT" (
    P_ID IN NUMBER
) RETURN NUMBER IS
    T_REGIONE NUMBER;     
    T_COMUNE_RESIDENZA VARCHAR2(255);
BEGIN
    -- Recupero i dettagli necessari in una singola query
    SELECT 
        NVL(COMUNE_RESIDENZA, ''), REGIONE
    INTO 
        T_COMUNE_RESIDENZA, T_REGIONE
    FROM (
        SELECT 
            VE.COMUNE_RESIDENZA, 
            C.REGIONE
        FROM 
            VIEW_EXPORT_SCONTI VE
            LEFT JOIN DOMANDA D ON VE.ID_DOMANDA = D.ID
            LEFT JOIN ACCOUNT_NUCLEO_FAMILIARE ANF ON ANF.CODICE_FISCALE = VE.CODICE_FISCALE AND ANF.ID_ACCOUNT = D.ID_ACCOUNT
            LEFT JOIN COMUNE C ON UPPER(C.DESCRIZIONE) = UPPER(VE.COMUNE_RESIDENZA) AND C.ATTIVO = 1
        WHERE 
            VE.ID = P_ID AND VE.STATO = 0
    ) DATA;

    -- Ritorna 1 se la regione è valida, altrimenti 0
    RETURN CASE
        WHEN T_REGIONE = 19 THEN 1
        ELSE 0
    END;
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        RETURN 0; -- Nessun dato trovato
    WHEN OTHERS THEN
        RETURN 0; -- Opzionalmente logga errori qui
END FN_ISRESIDENTE_OPT;
/


--
-- SPPRESAINCARICO  (Procedure) 
--
--  Dependencies: 
--   SPPRESAINCARICO_DDG_NATALIZIO (Procedure)
--   SPPRESAINCARICO_PRIORITARI (Procedure)
--   SPPRESAINCARICO_RESIDENTI (Procedure)
--   STANDARD (Package)
--   SYS_STUB_FOR_PURITY_ANALYSIS (Package)
--
CREATE OR REPLACE PROCEDURE SPPRESAINCARICO (
    DATA_INIZIO IN DATE,
    DATA_FINE IN DATE,
    TIPO IN INT
) AS
    
BEGIN

    CASE TIPO
    WHEN 0 THEN
        SPPRESAINCARICO_RESIDENTI(DATA_INIZIO, DATA_FINE);
    WHEN 1 THEN
        SPPRESAINCARICO_PRIORITARI(DATA_INIZIO, DATA_FINE);
    ELSE
        SPPRESAINCARICO_DDG_NATALIZIO(DATA_INIZIO, DATA_FINE);
END CASE;
END SPPRESAINCARICO;
/


ALTER TABLE ACCOUNT_NUCLEO_FAMILIARE ADD (
  CONSTRAINT FK_ACCOUNT_NUCLEO 
  FOREIGN KEY (ID_ACCOUNT) 
  REFERENCES ACCOUNT (ID)
  ENABLE VALIDATE);


ALTER TABLE DOMANDA ADD (
  CONSTRAINT ACCOUNT_DOMANDA_R01 
  FOREIGN KEY (ID_ACCOUNT) 
  REFERENCES ACCOUNT (ID)
  ENABLE VALIDATE);


ALTER TABLE DOMANDA_EMAIL ADD (
  FOREIGN KEY (ID_DOMANDA) 
  REFERENCES DOMANDA (ID)
  ENABLE VALIDATE);


ALTER TABLE DOMANDA_SCONTI ADD (
  FOREIGN KEY (ID_DOMANDA) 
  REFERENCES DOMANDA (ID)
  ENABLE VALIDATE);


ALTER TABLE DOMANDA_SCONTI_IMPORTI_LOG ADD (
  CONSTRAINT DOMANDA_SCONTI_IMPORTI_LOG_R01 
  FOREIGN KEY (ID_DOMANDA_SCONTI) 
  REFERENCES DOMANDA_SCONTI (ID)
  ENABLE VALIDATE);

ALTER TABLE DOMANDA_SCONTI_IMPORTI_LOG ADD (
  CONSTRAINT FK_ID_DOMANDA_SCONTI 
  FOREIGN KEY (ID_DOMANDA) 
  REFERENCES DOMANDA (ID)
  ENABLE VALIDATE);


ALTER TABLE DOMANDA_SCONTI_INTEGRAZIONE ADD (
  CONSTRAINT DOMANDA_SCONTI_INTEGRAZIONE_R01 
  FOREIGN KEY (ID_RICHIESTA) 
  REFERENCES DOMANDA_SCONTI (ID)
  ENABLE VALIDATE);


ALTER TABLE RICHIESTA_INTEGRAZIONE ADD (
  CONSTRAINT FK_INTEGRAZIONE_DOMANDA 
  FOREIGN KEY (ID_DOMANDA_SCONTI) 
  REFERENCES DOMANDA_SCONTI (ID)
  ENABLE VALIDATE);


ALTER TABLE AEROPORTI_COMPAGNIE ADD (
  CONSTRAINT AEROPORTI_COMPAGNIE_R01 
  FOREIGN KEY (AEROPORTO) 
  REFERENCES AEROPORTI (CODICE)
  ENABLE VALIDATE);

ALTER TABLE AEROPORTI_COMPAGNIE ADD (
  CONSTRAINT AEROPORTI_COMPAGNIE_R02 
  FOREIGN KEY (COMPAGNIA) 
  REFERENCES ANAG_COMPAGNIE (ID)
  ENABLE VALIDATE);
