Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create or replace package body Gruppo1 as
- ------- INIZIO ALESSANDRO PUCCIA
- TYPE array_int IS VARRAY(12) OF INTEGER;
- TYPE nested_fasce IS TABLE OF INTEGER;
- TYPE rec_prenot IS RECORD (
- var_conPrenotazione INTEGER,
- var_senzaPrenotazione INTEGER,
- var_totale INTEGER,
- var_percentuale NUMBER(5,2)
- );
- ----- FINE ALESSANDRO PUCCIA ---------
- ----- INIZIO FRANCESCO CONSONNI------
- /*
- * cronologiaMulte - FRANCESCO CONSONNI
- * La procedura permette di filtrare la cronologia delle multe
- */
- PROCEDURE CRONOLOGIAMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2)
- IS
- minimportoquery NUMBER DEFAULT -1;
- maximportoquery NUMBER DEFAULT -1;
- BEGIN
- modGUI.apripagina('HoC | Cronologia Multe', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('CRONOLOGIA MULTE');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- modGUI.apriform(gruppo1||'.cronologiaMulteDisplay');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
- modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
- modGUI.inserisciradiobutton('VISUALIZZA LE MULTE PER L` AUTORIMESSA', 'filtrodati', 'auto', TRUE);
- modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
- modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
- FOR autorimessequery IN (SELECT IDautorimessa,
- INDIRIZZO
- FROM AUTORIMESSE
- ORDER BY IDautorimessa) LOOP
- modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
- autorimessequery.indirizzo, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
- modGUI.apriselect('responsabile', 'Scegli un responsabile');
- FOR responsabiliquery IN (SELECT PERSONE.cognome AS var_cognome,
- PERSONE.nome AS var_nome,
- DIPENDENTI.IDDIPENDENTE AS idresponsabile
- FROM PERSONE
- inner join DIPENDENTI
- ON DIPENDENTI.IDPERSONA =
- PERSONE.IDPERSONA
- WHERE DIPENDENTI.TIPODIPENDENTE = 'R'
- AND DIPENDENTI.CANCELLATO = 'F') LOOP
- modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- SELECT MIN(IMPORTO),
- MAX(IMPORTO)
- INTO minimportoquery, maximportoquery
- FROM MULTE
- WHERE MULTE.CANCELLATO = 'F';
- modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
- modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
- modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
- modGUI.inseriscitesto('FILTRA TRA I CLIENTI');
- modGUI.inserisciinput('filtrocliente', 'NOME O COGNOME CLIENTE', 'text', FALSE);
- --modGUI.inseriscitesto('Mostra Multe:');
- modGUI.inserisciradiobutton('MOSTRA MULTE PAGATE E NON PAGATE', 'pagamento', 'TF', TRUE);
- modGUI.inserisciradiobutton('MOSTRA SOLO MULTE PAGATE', 'pagamento', 'T', FALSE);
- modGUI.inserisciradiobutton('MOSTRA SOLO MULTE NON PAGATE', 'pagamento', 'F', FALSE);
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('CERCA');
- modGUI.chiudiform;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END cronologiamulte;
- /*
- * cronologiaMulteDisplay - FRANCESCO CONSONNI
- * La procedura mostra la cronologia delle multe filtrata con i parametri visti in precedenza
- *
- * Parametri
- * @datada: data di inizio intervallo di ricerca
- * @dataa: data di fine intervallo di ricerca
- * @filtrodati: variabile che stabilisce se si filtrera' in base alle autorimesse o ai responsabili
- * @autorimessa: id della autorimessa del filtro
- * @responsabile: id del responsabile del filtro
- * @pagamento: filtro per determinare se mostrare multe pagate, non pagate o entrambe
- * @minImporto: importo delle multe minimo su cui filtrare
- * @maxImporto: importo delle multe massimo su cui filtrare
- * @filtrocliente: stringa su cui filtrare il nome del cliente con LIKE
- */
- PROCEDURE CRONOLOGIAMULTEDISPLAY(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtrodati VARCHAR2,
- autorimessa INTEGER,
- responsabile INTEGER,
- pagamento VARCHAR2,
- minimporto INTEGER,
- maximporto INTEGER,
- filtrocliente VARCHAR2)
- IS
- var_autorimessa INTEGER DEFAULT NULL;
- var_responsabile INTEGER DEFAULT NULL;
- pagatotrue INTEGER DEFAULT 0;
- pagatofalse INTEGER DEFAULT 0;
- descautorimessa VARCHAR2(100) DEFAULT NULL;
- descresponsabile VARCHAR2(100) DEFAULT NULL;
- var_datada DATE;
- var_dataa DATE;
- conteggiomulte INTEGER DEFAULT 0;
- BEGIN
- IF INSTR(PAGAMENTO, 'T') != 0 THEN
- PAGATOTRUE := 1;
- END IF;
- IF INSTR(PAGAMENTO, 'F') != 0 THEN
- PAGATOFALSE := 1;
- END IF;
- var_datada := TO_DATE(datada, 'yyyy-mm-dd');
- var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
- IF filtrodati = 'auto' THEN
- var_autorimessa := autorimessa;
- IF var_autorimessa != 0 THEN
- SELECT AUTORIMESSE.INDIRIZZO
- INTO descautorimessa
- FROM AUTORIMESSE
- WHERE AUTORIMESSE.IDautorimessa = var_autorimessa;
- ELSE
- descautorimessa := 'Tutte le autorimesse';
- END IF;
- ELSE
- var_responsabile := responsabile;
- SELECT PERSONE.cognome
- ||' '
- ||PERSONE.nome
- INTO descresponsabile
- FROM PERSONE,
- DIPENDENTI
- WHERE PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
- AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
- END IF;
- modGUI.apripagina('HoC | Cronologia Multe - Risultati Ricerca', id_sessione,nome, ruolo);
- SELECT COUNT(IDMULTA)
- INTO conteggiomulte
- FROM VISTACRONOLOGIAMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND ( ( PAGATOTRUE = 1
- AND PAGATA IS NOT NULL )
- OR ( PAGATOFALSE = 1
- AND PAGATA IS NULL ) )
- AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
- AND UPPER(nomeCLIENTE
- ||' '
- ||cognomeCLIENTE) LIKE UPPER('%'
- ||filtrocliente
- ||'%')
- AND CANCELLATO = 'F';
- IF var_datada > var_dataa THEN
- modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`INFERIORE A QUELLA DI INIZIO INTERVALLO');
- ELSIF minimporto > maximporto THEN
- modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`INFERIORE A IMPORTO MASSIMO');
- ELSE
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('CRONOLOGIA MULTE - RISULTATI RICERCA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('CRONOLOGIA DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- IF filtrodati = 'auto' THEN
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSA DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descautorimessa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- ELSE
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descresponsabile);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END IF;
- modGUI.chiuditabella;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA EMISSIONE');
- modGUI.intestazionetabella('DATA PAGAMENTO');
- modGUI.intestazionetabella('IMPORTO');
- modGUI.intestazionetabella('CAUSA');
- modGUI.intestazionetabella('CLIENTE MULTATO');
- modGUI.intestazionetabella('VISUALIZZA DETTAGLI');
- modGUI.chiudirigatabella;
- IF CONTEGGIOMULTE = 0 THEN
- modGUI.chiuditabella();
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('NESSUNA MULTA TROVATA');
- modGUI.chiudidiv;
- ELSE
- FOR righemulte IN (SELECT *
- FROM VISTACRONOLOGIAMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN
- var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND ( ( PAGATOTRUE = 1
- AND PAGATA IS NOT NULL )
- OR ( PAGATOFALSE = 1
- AND PAGATA IS NULL ) )
- AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
- AND UPPER(nomeCLIENTE
- ||' '
- ||cognomeCLIENTE) LIKE UPPER('%'
- ||filtrocliente
- ||'%')
- AND CANCELLATO = 'F'
- ORDER BY dataaSSEGNAZIONE DESC) LOOP
- modGUI.apririgatabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(TO_CHAR(RIGHEMULTE.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(RIGHEMULTE.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella('€ '||TO_CHAR(RIGHEMULTE.importo, '9990D99'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(RIGHEMULTE.causa);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(RIGHEMULTE.nomecliente||' '||RIGHEMULTE.cognomecliente);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscilente(gruppo1||'.dettagliomulte', id_sessione, nome, ruolo,
- RIGHEMULTE.idmulta);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END LOOP;
- modGUI.chiuditabella;
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END cronologiamultedisplay;
- /*
- * dettaglioCampiMulte - FRANCESCO CONSONNI
- * La procedura mostra banalmente i campi delle multe
- *
- * Parametri
- * @idriga: id della multa di cui mostrare i dati
- */
- PROCEDURE DETTAGLIOCAMPIMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga INTEGER)
- IS
- controlloabbonamento INTEGER DEFAULT 0;
- dettagliomulte multe%ROWTYPE;
- esistenzamulta INTEGER DEFAULT 0;
- BEGIN
- --apro la pagina
- modGUI.apripagina('HoC | Dettaglio Campi Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO CAMPI MULTA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSE
- SELECT MULTE.*
- INTO dettagliomulte
- FROM MULTE
- WHERE IDMULTA = idriga;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('IDENTIFICATIVO MULTA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliomulte.idmulta);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA EMISSIONE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(TO_CHAR(dettagliomulte.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA PAGAMENTO');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettagliomulte.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('IMPORTO');
- modGUI.aprielementotabella;
- modGUI.elementotabella('€ '||TO_CHAR(dettagliomulte.importo, '9990D99'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('CAUSA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliomulte.causa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.visualizzaMulte');
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END dettagliocampimulte;
- /*
- * dettagliomulte - FRANCESCO CONSONNI
- * La procedura mostra i dettagli della multa e dettagli associati ad essa
- *
- * Parametri
- * @idriga: id della multa di cui si mostreranno i dettagli
- */
- PROCEDURE dettagliomulte(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga INTEGER)
- IS
- controlloabbonamento INTEGER DEFAULT 0;
- tipoingresso VARCHAR(3);
- dettagliomulte multe%ROWTYPE;
- dettagliopersone persone%ROWTYPE;
- dettaglioveicoli veicoli%ROWTYPE;
- dettagliobox box%ROWTYPE;
- dettaglioautorimesse VARCHAR(100);
- dettagliosedi VARCHAR(100);
- codAutorimessa INTEGER;
- dettaglioingressiabbonamenti ingressiabbonamenti%ROWTYPE;
- dettaglioingressiorari ingressiorari%ROWTYPE;
- dettaglioresponsabilenome VARCHAR(100);
- dettaglioresponsabilecognome VARCHAR(100);
- esistenzamulta INTEGER DEFAULT NULL;
- dettaglioidcliente INTEGER;
- BEGIN
- --controlloabbonamenti per determinare se è un abbonamento o un orario
- SELECT COUNT(IDMULTA)
- INTO controlloabbonamento
- FROM INGRESSIABBONAMENTI
- WHERE IDMULTA = idriga;
- modGUI.apripagina('HoC | Dettaglio Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO MULTA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSE
- SELECT MULTE.*
- INTO dettagliomulte
- FROM MULTE
- WHERE IDMULTA = idriga;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA EMISSIONE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(TO_CHAR(dettagliomulte.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA PAGAMENTO');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettagliomulte.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('IMPORTO');
- modGUI.aprielementotabella;
- modGUI.elementotabella('€'||TO_CHAR(dettagliomulte.importo, '9990D99'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('CAUSA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliomulte.causa);
- modGUI.chiudielementotabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- modGUI.inseriscilente(gruppo1||'.dettaglioCampiMulte', id_sessione, nome, ruolo,idriga);
- IF ruolo != 'C' THEN
- modGUI.inseriscipenna(gruppo1||'.modificaCampiMulte', id_sessione, nome, ruolo, idriga);
- IF controlloabbonamento > 0 THEN
- modGUI.inseriscicestino(gruppo1||'.rimuoviMulteConferma', id_sessione, nome,ruolo,idriga, '&'||'tipoingresso=A');
- ELSE
- modGUI.inseriscicestino(gruppo1||'.rimuoviMulteConferma', id_sessione, nome,ruolo,idriga, '&'||'tipoingresso=O');
- END IF;
- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- --dettagli cliente
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO CLIENTE');
- modGUI.chiudiintestazione(2);
- --dettagli cliente + idcliente
- SELECT PERSONE.*
- INTO dettagliopersone
- FROM MULTE
- left outer join INGRESSIORARI
- ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
- left outer join INGRESSIABBONAMENTI
- ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
- left outer join EFFETTUAINGRESSIABBONAMENTI
- ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
- EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
- left outer join EFFETTUAINGRESSIORARI
- ON INGRESSIORARI.IDINGRESSOORARIO =
- EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
- join CLIENTI
- ON EFFETTUAINGRESSIABBONAMENTI.IDCLIENTE = CLIENTI.IDCLIENTE
- OR EFFETTUAINGRESSIORARI.IDCLIENTE = CLIENTI.IDCLIENTE
- join PERSONE
- ON CLIENTI.IDPERSONA = PERSONE.IDPERSONA
- WHERE MULTE.IDMULTA = idriga;
- SELECT CLIENTI.IDCLIENTE
- INTO dettaglioidcliente
- FROM MULTE
- left outer join INGRESSIORARI
- ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
- left outer join INGRESSIABBONAMENTI
- ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
- left outer join EFFETTUAINGRESSIABBONAMENTI
- ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
- EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
- left outer join EFFETTUAINGRESSIORARI
- ON INGRESSIORARI.IDINGRESSOORARIO =
- EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
- join CLIENTI
- ON EFFETTUAINGRESSIABBONAMENTI.IDCLIENTE = CLIENTI.IDCLIENTE
- OR EFFETTUAINGRESSIORARI.IDCLIENTE = CLIENTI.IDCLIENTE
- WHERE MULTE.IDMULTA = idriga;
- --dettagli veicolo
- SELECT VEICOLI.*
- INTO dettaglioveicoli
- FROM MULTE
- left outer join INGRESSIORARI
- ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
- left outer join INGRESSIABBONAMENTI
- ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
- left outer join EFFETTUAINGRESSIABBONAMENTI
- ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
- EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
- left outer join EFFETTUAINGRESSIORARI
- ON INGRESSIORARI.IDINGRESSOORARIO =
- EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
- join VEICOLI
- ON EFFETTUAINGRESSIABBONAMENTI.IDVEICOLO = VEICOLI.IDVEICOLO
- OR EFFETTUAINGRESSIORARI.IDVEICOLO = VEICOLI.IDVEICOLO
- WHERE MULTE.IDMULTA = idriga;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('CODICE FISCALE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliopersone.codicefiscale);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('COGNOME');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliopersone.cognome);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('NOME');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliopersone.nome);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- modGUI.inseriscilente('gruppo5.moreInfoClient', id_sessione, nome, ruolo, dettaglioidcliente); --tutti
- --modGUI.inseriscipenna('##ModificaCampiCliente##', id_sessione, nome, ruolo, dettaglioidcliente); --tutti
- -- IF ruolo='C' THEN
- --modGUI.inseriscicestino('##RimuoviCliente##', id_sessione, nome, ruolo, dettaglioidcliente); -- solo cliente
- -- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO VEICOLO');
- modGUI.chiudiintestazione(2);
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('TARGA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettaglioveicoli.targa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('MODELLO');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettaglioveicoli.produttore||' '||dettaglioveicoli.modello);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('COLORE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettaglioveicoli.colore);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ALIMENTAZIONE');
- modGUI.aprielementotabella;
- IF( dettaglioveicoli.alimentazione = 'N' ) THEN
- modGUI.elementotabella('Benzina o Diesel');
- ELSE
- modGUI.elementotabella(dettaglioveicoli.alimentazione);
- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ANNOTAZIONI');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(dettaglioveicoli.annotazione, '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- modGUI.inseriscilente('gruppo5.moreInfoCar', id_sessione, nome, ruolo, dettaglioveicoli.idveicolo); --tutti
- --modGUI.inseriscipenna('##ModificaCampiVeicolo##', id_sessione, nome, ruolo, idriga); --tutti
- --IF ruolo='C' OR ruolo='O' THEN
- --modGUI.inseriscicestino('##RimuoviVeicolo##', id_sessione, nome, ruolo, idriga); --cliente operatore
- --END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- --dettagli autorimessa
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO AUTORIMESSA');
- modGUI.chiudiintestazione(2);
- --dettagli box e autorimesse
- SELECT BOX.*
- INTO dettagliobox
- FROM MULTE
- left outer join INGRESSIORARI
- ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
- left outer join INGRESSIABBONAMENTI
- ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
- inner join BOX
- ON INGRESSIABBONAMENTI.IDBOX = BOX.IDBOX
- OR INGRESSIORARI.IDBOX = BOX.IDBOX
- WHERE MULTE.IDMULTA = idriga;
- SELECT SEDI.INDIRIZZO,
- AUTORIMESSE.INDIRIZZO,
- PERSONE.cognome,
- PERSONE.nome,
- AUTORIMESSE.idAutorimessa
- INTO dettagliosedi, dettaglioautorimesse, dettaglioresponsabilecognome,
- dettaglioresponsabilenome, codAutorimessa
- FROM MULTE
- left outer join INGRESSIORARI
- ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
- left outer join INGRESSIABBONAMENTI
- ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
- inner join BOX
- ON INGRESSIABBONAMENTI.IDBOX = BOX.IDBOX
- OR INGRESSIORARI.IDBOX = BOX.IDBOX
- join AREE
- ON AREE.IDAREA = BOX.IDAREA
- join AUTORIMESSE
- ON AUTORIMESSE.IDautorimessa = AREE.IDautorimessa
- join SEDI
- ON SEDI.IDSEDE = AUTORIMESSE.IDSEDE
- join DIPENDENTI
- ON DIPENDENTI.IDDIPENDENTE = SEDI.IDDIPENDENTE
- join PERSONE
- ON DIPENDENTI.IDPERSONA = PERSONE.IDPERSONA
- WHERE MULTE.IDMULTA = idriga;
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('INDIRIZZO SEDE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliosedi);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('INDIRIZZO AUTORIMESSA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettaglioautorimesse);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('RESPONSABILE SEDE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettaglioresponsabilecognome||' '||dettaglioresponsabilenome);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('NUMERO AREA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliobox.idarea);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('COORDINATA BOX (NUMERO BOX - COLONNA - PIANO');
- modGUI.aprielementotabella;
- modGUI.elementotabella(dettagliobox.numero||' - '||dettagliobox.numerocolonna||' - '||dettagliobox.piano);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- modGUI.inseriscilente('gruppo2.visualizzaAutorimessa', id_sessione, nome, ruolo, codAutorimessa);
- --modGUI.inseriscipenna(gruppo1||'.modificaAutorimessa', id_sessione, nome, ruolo, codAutorimessa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- --dettagli ingresso
- --devo controllare se è ingresso orario o abbonamento
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('DETTAGLIO INGRESSO');
- modGUI.chiudiintestazione(2);
- IF controlloabbonamento > 0 THEN
- SELECT INGRESSIABBONAMENTI.*
- INTO dettaglioingressiabbonamenti
- FROM INGRESSIABBONAMENTI
- WHERE INGRESSIABBONAMENTI.IDMULTA = idriga;
- --tabella
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('TIPO INGRESSO');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Abbonamento');
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ORA ENTRATA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiabbonamenti.oraentrata, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ORA USCITA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiabbonamenti.orauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- IF ruolo != 'C' THEN
- modGUI.inseriscilente('gruppo3.DettagliIngressoAbbonamento', id_sessione, nome, ruolo, dettaglioingressiabbonamenti.idingressoabbonamento); --no cliente
- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- ELSE
- SELECT INGRESSIORARI.*
- INTO dettaglioingressiorari
- FROM INGRESSIORARI
- WHERE INGRESSIORARI.IDMULTA = idriga;
- --tabella
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('TIPO INGRESSO');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Orario');
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ORA ENTRATA PREVISTA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.entrataprevista, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ORA ENTRATA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.oraentrata, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('ORA USCITA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.orauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('OPERAZIONI');
- modGUI.aprielementotabella;
- IF ruolo!='C' THEN
- modGUI.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, dettaglioINGRESSIORARI.IDIngressoorario); --non cliente
- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- END IF;
- modGUI.chiudidiv;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA', gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudipagina;
- END dettagliomulte;
- /*
- * inserisciCampiMulte - FRANCESCO CONSONNI
- * La procedura permette di specificare i causa e importo di una multa da inserire nel sistema
- *
- * Parametri
- * @idriga: stringa opportunamente codificata che contiene id dell'ingresso a cui passare i parametri
- * e se è un ingresso orario o abbonamento
- */
- PROCEDURE INSERISCICAMPIMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga VARCHAR2)
- IS
- dettagliomulte multe%ROWTYPE;
- var_idriga VARCHAR2(8);
- var_tipoingresso VARCHAR2(1);
- esistenzaingresso INTEGER DEFAULT 0;
- BEGIN
- modGUI.apripagina('HoC | Inserimento Campi Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('INSERIMENTO CAMPI MULTA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- --rimuovo A e O da idriga per avere il vero id riga
- var_tipoingresso := SUBSTR(idriga, -1);
- VAR_idriga := TRIM(BOTH 'A' FROM idriga);
- VAR_idriga := TRIM(BOTH 'O' FROM VAR_idriga);
- --devo controllare se l'ingresso esiste nel sistema
- IF var_tipoingresso = 'A' THEN
- SELECT COUNT(INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO)
- INTO esistenzaingresso
- FROM INGRESSIABBONAMENTI
- WHERE INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = VAR_idriga;
- ELSIF var_tipoingresso = 'O' THEN
- SELECT COUNT(INGRESSIORARI.IDINGRESSOORARIO)
- INTO esistenzaingresso
- FROM INGRESSIORARI
- WHERE INGRESSIORARI.IDINGRESSOORARIO = VAR_idriga;
- ELSE
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- END IF;
- IF esistenzaingresso = 0 THEN
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- ELSE
- modGUI.apriform(gruppo1||'.inserisciMulteExec');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinputhidden('idriga', VAR_idriga);
- modGUI.inserisciinputhidden('tipoingresso', var_tipoingresso);
- --modGUI.inseriscitesto('Importo');
- modGUI.inserisciinput('nuovoimporto', 'IMPORTO', 'number', TRUE);
- --modGUI.inseriscitesto('Causa');
- modGUI.inserisciinput('nuovacausa', 'CAUSA', 'text', TRUE);
- modGUI.INSERISCIBOTTONERESET('RESET');
- --modGUI.inserisciBottoneForm('Submit','Submit','SUBMIT');
- modGUI.INSERISCIBOTTONEFORM('CREA MULTA');
- modGUI.chiudiform;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'ANNULLA',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END inseriscicampimulte;
- /*
- * inserisciMulte - FRANCESCO CONSONNI
- * La procedura permette di filtrare tra gli ingressi sui quali potranno essere inserite multe
- */
- PROCEDURE INSERISCIMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2)
- IS
- BEGIN
- modGUI.apripagina('HoC | Inserimento Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('INSERIMENTO MULTA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- modGUI.apriform(gruppo1||'.inserisciMulteDisplay');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
- modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
- modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
- modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
- modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
- FOR autorimessequery IN (SELECT IDautorimessa,
- INDIRIZZO
- FROM AUTORIMESSE
- ORDER BY IDautorimessa) LOOP
- modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
- autorimessequery.indirizzo, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
- modGUI.apriselect('responsabile', 'Scegli un responsabile');
- FOR responsabiliquery IN (SELECT PERSONE.cognome AS var_cognome,
- PERSONE.nome AS var_nome,
- DIPENDENTI.IDDIPENDENTE AS idresponsabile
- FROM PERSONE
- inner join DIPENDENTI
- ON DIPENDENTI.IDPERSONA =
- PERSONE.IDPERSONA
- WHERE DIPENDENTI.TIPODIPENDENTE = 'R'
- AND DIPENDENTI.CANCELLATO = 'F') LOOP
- modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
- modGUI.inserisciinput('filtrocliente', 'nome o cognome Cliente', 'text', FALSE);
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('CERCA');
- modGUI.chiudiform;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END inseriscimulte;
- /*
- * inserisciMulteDisplay - FRANCESCO CONSONNI
- * La procedura mostra la cronologia degli ingressi per i quali è possibile inserire una multa
- *
- * Parametri
- * @datada: data di inizio intervallo di ricerca
- * @dataa: data di fine intervallo di ricerca
- * @filtrodati: variabile che determina se si filtra per autorimessa o responsabile
- * @autorimessa: id della autorimessa su cui filtrare
- * @responsabile: id del responsabile su cui filtrare
- * @filtrocliente: stringa su cui effettuare una ricerca di tipo LIKE per nome o cognome cliente
- */
- PROCEDURE INSERISCIMULTEDISPLAY(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtrodati VARCHAR2,
- autorimessa INTEGER,
- responsabile INTEGER,
- filtrocliente VARCHAR2)
- IS
- var_autorimessa INTEGER DEFAULT NULL;
- var_responsabile INTEGER DEFAULT NULL;
- tipoabbonamento INTEGER DEFAULT 0;
- tipoorario INTEGER DEFAULT 0;
- descautorimessa VARCHAR2(100) DEFAULT NULL;
- descresponsabile VARCHAR2(100) DEFAULT NULL;
- var_datada DATE;
- var_dataa DATE;
- containgressi INTEGER DEFAULT 0;
- BEGIN
- var_datada := TO_DATE(datada, 'yyyy-mm-dd');
- var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
- modGUI.apripagina('HoC | Inserimento Multa - Risultati Ricerca', id_sessione,nome, ruolo);
- IF filtrodati = 'auto' THEN
- var_autorimessa := autorimessa;
- IF var_autorimessa != 0 THEN
- SELECT AUTORIMESSE.INDIRIZZO
- INTO descautorimessa
- FROM AUTORIMESSE
- WHERE AUTORIMESSE.IDautorimessa = var_autorimessa;
- ELSE
- descautorimessa := 'Tutte le autorimesse';
- END IF;
- ELSE
- var_responsabile := responsabile;
- SELECT PERSONE.cognome||' '||PERSONE.nome
- INTO descresponsabile
- FROM PERSONE,
- DIPENDENTI
- WHERE PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
- AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
- END IF;
- SELECT COUNT(IDINGRESSO)
- INTO containgressi
- FROM VISTAINSERISCIMULTEDISPLAY
- WHERE TRUNC(DATAENTRATA) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND UPPER(var_nome||' '||var_cognome) LIKE UPPER('%'||filtrocliente||'%')
- AND CANCELLATO = 'F';
- IF var_datada > var_dataa THEN
- modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E` MINORE DI QUELLA DI INIZIO INTERVALLO');
- ELSE
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('INSERIMENTO MULTA - RISULTATI RICERCA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- --tabella di intestazione
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('STATISTICHE DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- IF filtrodati = 'auto' THEN
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSA DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descautorimessa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- ELSE
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descresponsabile);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END IF;
- modGUI.chiuditabella;
- -- tabella di tutte le multe
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA INGRESSO');
- modGUI.intestazionetabella('DATA USCITA');
- modGUI.intestazionetabella('CLIENTE');
- modGUI.intestazionetabella('ABBONAMENTO USATO');
- modGUI.intestazionetabella('AGGIUNGI MULTA');
- modGUI.chiudirigatabella;
- IF containgressi = 0 THEN
- modGUI.chiuditabella();
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('NESSUN INGRESSO TROVATO');
- modGUI.chiudidiv;
- ELSE
- FOR righeingressi IN(SELECT *
- FROM VISTAINSERISCIMULTEDISPLAY
- WHERE
- TRUNC(DATAENTRATA) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND UPPER(var_nome||' '||var_cognome) LIKE UPPER('%'||filtrocliente||'%')
- AND CANCELLATO = 'F'
- ORDER BY DATAENTRATA DESC) LOOP
- modGUI.apririgatabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(TO_CHAR(RIGHEINGRESSI.dataentrata, 'DD-MON-YY HH24:MI:SS'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(TO_CHAR(RIGHEINGRESSI.datauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(RIGHEINGRESSI.var_nome||' '||RIGHEINGRESSI.var_cognome);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(NVL(RIGHEINGRESSI.nomeabbonamento, '--'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscipenna(gruppo1||'.inserisciCampiMulte', id_sessione, nome, ruolo, RIGHEINGRESSI.idingresso);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END LOOP;
- modGUI.chiuditabella();
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END inseriscimultedisplay;
- /*
- * inserisciMulteExec - FRANCESCO CONSONNI
- * La procedura esegue l'istruzione SQL che inserisce una nuova multa con dataassegnazione uguale a SYSTIMESTAMP
- *
- * Parametri
- * @idriga: id dell'ingresso da multare
- * @nuovoimporto: importo della multa da inserire
- * @nuovacausa: causa della multa da inserire
- * @tipoingresso: determina se l'ingresso da multare è un ingresso orario o un abbonamento
- */
- PROCEDURE INSERISCIMULTEEXEC(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga VARCHAR2,
- tipoingresso VARCHAR2,
- nuovoimporto NUMBER,
- nuovacausa VARCHAR2)
- IS
- var_tipoingresso VARCHAR2(1);
- esistenzaingresso INTEGER DEFAULT 0;
- BEGIN
- --apro la pagina
- modGUI.apripagina('HoC | Inserimento Multa - Esito', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('INSERIMENTO MULTA - ESITO');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv();
- --devo controllare se l'ingresso esiste nel sistema
- IF tipoingresso = 'A' THEN
- SELECT COUNT(INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO)
- INTO esistenzaingresso
- FROM INGRESSIABBONAMENTI
- WHERE INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = idriga;
- ELSIF tipoingresso = 'O' THEN
- SELECT COUNT(INGRESSIORARI.IDINGRESSOORARIO)
- INTO esistenzaingresso
- FROM INGRESSIORARI
- WHERE INGRESSIORARI.IDINGRESSOORARIO = idriga;
- ELSE
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- END IF;
- IF esistenzaingresso = 0 THEN
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- modGUI.chiudidiv;
- ELSE
- IF tipoingresso = 'A' THEN
- INSERT INTO MULTE
- VALUES (multeseq.NEXTVAL,
- SYSTIMESTAMP,
- nuovoimporto,
- nuovacausa,
- NULL,
- 'F');
- UPDATE INGRESSIABBONAMENTI
- SET INGRESSIABBONAMENTI.IDMULTA = multeseq.CURRVAL
- WHERE INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = idriga;
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'MULTA INSERITA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
- ELSE
- modGUI.esitooperazione('OK', 'ERRORE NELL`INSERIMENTO DELLA MULTA');
- END IF;
- ELSE --ingresso orario
- INSERT INTO MULTE
- VALUES (multeseq.NEXTVAL,
- SYSTIMESTAMP,
- nuovoimporto,
- nuovacausa,
- NULL,
- 'F');
- UPDATE INGRESSIORARI
- SET INGRESSIORARI.IDMULTA = multeseq.CURRVAL
- WHERE INGRESSIORARI.IDINGRESSOORARIO = idriga;
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'MULTA INSERITA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
- ELSE
- modGUI.esitooperazione('KO', 'ERRORE NELL`INSERIMENTO DELLA MULTA');
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
- --modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A CRONOLOGIA', 'cronologiaMulte');
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A DETTAGLIO',gruppo1||'.dettagliomulte', '&'||'idriga='|| multeseq.CURRVAL);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END inseriscimulteexec;
- /*
- * modificaCampiMulte - FRANCESCO CONSONNI
- * La procedura permette di impostare le modifiche ai campi di una multa
- *
- * Parametri
- * @idriga: id della multa di cui modificare i campi
- */
- PROCEDURE MODIFICACAMPIMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga INTEGER)
- IS
- esistenzamulta INTEGER DEFAULT 0;
- controlloabbonamento INTEGER DEFAULT 0;
- dettagliomulte multe%ROWTYPE;
- BEGIN
- modGUI.apripagina('HoC | Modifica Campi Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('MODIFICA CAMPI MULTA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSE
- modGUI.apriform(gruppo1||'.modificaCampiMulteExec');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinputhidden('idriga', idriga);
- --data e ora sono separati perchè non c'è altro modo di visualizzare i dati già esistenti
- FOR dettagliomulte IN (SELECT MULTE.*
- FROM MULTE
- WHERE IDMULTA = idriga) LOOP
- modGUI.inseriscitesto('NUOVA DATA EMSSIONE MULTA');
- modGUI.acapo();
- modGUI.inserisciinput('nuovaDataEmissione', 'DATA', 'date', TRUE,TO_CHAR(dettagliomulte.dataassegnazione, 'YYYY-MM-DD'));
- modGUI.inserisciinput('nuovaOraEmissione', 'ORA', 'time', TRUE,TO_CHAR(dettagliomulte.dataassegnazione, 'hh24:mi'));
- modGUI.acapo();
- IF( dettagliomulte.pagata IS NULL ) THEN
- modGUI.inserisciradiobutton('NON PAGATA', 'pagamento', 'F', TRUE);
- modGUI.inserisciradiobutton('PAGATA', 'pagamento', 'T', FALSE);
- modGUI.inseriscitesto('NUOVA DATA PAGAMENTO MULTA');
- modGUI.inserisciinput('nuovaDataPagamento', 'DATA', 'date', TRUE,TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD'));
- modGUI.inserisciinput('nuovaOraPagamento', 'ORA', 'time', TRUE,TO_CHAR(SYSTIMESTAMP, 'hh24:mi'));
- ELSE
- modGUI.inserisciradiobutton('MULTA NON PAGATA', 'pagamento', 'F', FALSE);
- modGUI.inserisciradiobutton('MULTA PAGATA', 'pagamento', 'T', TRUE);
- modGUI.inseriscitesto('NUOVA DATA PAGAMENTO MULTA');
- modGUI.inserisciinput('nuovaDataPagamento', 'DATA', 'date', TRUE,TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD'));
- modGUI.inserisciinput('nuovaOraPagamento', 'ORA', 'time', TRUE,TO_CHAR(SYSTIMESTAMP, 'hh24:mi'));
- END IF;
- modGUI.acapo();
- --modGUI.inseriscitesto('Nuovo Importo');
- modGUI.inserisciinput('nuovoimporto', 'NUOVO IMPORTO', 'number', TRUE,dettagliomulte.importo);
- --modGUI.inseriscitesto('Nuova Causa');
- modGUI.inserisciinput('nuovacausa', 'NUOVA CAUSA', 'text', TRUE,dettagliomulte.causa);
- END LOOP;
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('MODIFICA MULTA');
- modGUI.chiudiform;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'ANNULLA',gruppo1||'.dettagliomulte','&'||'idriga='|| idriga);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END modificacampimulte;
- /*
- * modificaCampiMulteExec - FRANCESCO CONSONNI
- * La procedura esegue il codice SQL che cambia i dati di una certa multa
- *
- * Parametri
- * @nuovaDataEmissione: nuova data di emissione della multa
- * @nuovaOraEmissione: nuova ora di emissione della multa
- * @nuovaDataPagamento: nuova data di pagamento della multa
- * @nuovaOraPagamento: nuova ora di pagamento della multa
- * @nuovoimporto: nuovo importo della multa
- * @nuovacausa: nuova causa della multa
- * @pagamento: variabile che stabilisce se la multa è stata pagata o meno
- */
- PROCEDURE MODIFICACAMPIMULTEEXEC(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga INTEGER,
- pagamento VARCHAR2,
- nuovadataemissione VARCHAR2,
- nuovaoraemissione VARCHAR2,
- nuovadatapagamento VARCHAR2,
- nuovaorapagamento VARCHAR2,
- nuovoimporto NUMBER,
- nuovacausa VARCHAR2)
- IS
- --devo sostituire il carattere dei due punti che viene massacrato nel passaggio attraverso le pagine
- var_oraemissione VARCHAR2(8) := REPLACE(NUOVAORAEMISSIONE, '%3A', ':');
- var_orapagamento VARCHAR2(8) := REPLACE(NUOVAORAPAGAMENTO, '%3A', ':');
- --concateno data e ora per ricostruire l'ora finale
- var_dataemissione DATE := TO_DATE(NUOVADATAEMISSIONE||VAR_ORAEMISSIONE, 'yyyy-mm-ddhh24:mi');
- var_datapagata DATE := TO_DATE(NUOVADATAPAGAMENTO||VAR_ORAPAGAMENTO, 'yyyy-mm-ddhh24:mi');
- esistenzamulta INTEGER DEFAULT 0;
- BEGIN
- IF PAGAMENTO = 'F' THEN
- VAR_DATAPAGATA := NULL;
- END IF;
- modGUI.apripagina('HoC | Modifica Campi Multa - Esito', id_sessione, nome,ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('MODIFICA CAMPI MULTA - ESITO');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSIF var_datapagata < var_dataemissione THEN
- modGUI.esitooperazione('KO', 'LA DATA DI PAGAMENTO DEVE ESSERE SUCCESSIVA A QUELLA DI EMISSIONE');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA RICERCA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSE
- UPDATE MULTE
- SET MULTE.dataaSSEGNAZIONE = VAR_DATAEMISSIONE,
- MULTE.IMPORTO = nuovoimporto,
- MULTE.CAUSA = nuovacausa,
- MULTE.PAGATA = VAR_DATAPAGATA
- WHERE MULTE.IDMULTA = idriga;
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'CAMPI AGGIORNATI CON SUCCESSO');
- ELSE
- modGUI.esitooperazione('KO', 'ERRORE NELL`AGGIORNAMENTO DEI CAMPI');
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END modificacampimulteexec;
- /*
- * pagamentoMulte - FRANCESCO CONSONNI
- * La procedura permette di filtrare sulle multe che possono essere pagate
- */
- PROCEDURE PAGAMENTOMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2)
- IS
- minimportoquery NUMBER DEFAULT -1;
- maximportoquery NUMBER DEFAULT -1;
- BEGIN
- modGUI.apripagina('HoC | Pagamento Multe', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('PAGAMENTO MULTE');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- --qui il form di ricerca
- modGUI.apriform(gruppo1||'.pagamentoMulteDisplay');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinput('datada', 'CERCA DAL', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
- modGUI.inserisciinput('dataa', 'CERCA AL', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
- modGUI.inserisciradiobutton('VISUALIZZA MULTE PER LA AUTORIMESSA', 'filtrodati', 'auto', TRUE);
- modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
- modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
- FOR autorimessequery IN (SELECT IDautorimessa,
- INDIRIZZO
- FROM AUTORIMESSE
- ORDER BY IDautorimessa) LOOP
- modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
- autorimessequery.indirizzo, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
- modGUI.apriselect('responsabile', 'Scegli un responsabile');
- FOR responsabiliquery IN (SELECT PERSONE.cognome AS var_cognome,
- PERSONE.nome AS var_nome,
- DIPENDENTI.IDDIPENDENTE AS idresponsabile
- FROM PERSONE
- inner join DIPENDENTI
- ON DIPENDENTI.IDPERSONA =
- PERSONE.IDPERSONA
- WHERE DIPENDENTI.TIPODIPENDENTE = 'R'
- AND DIPENDENTI.CANCELLATO = 'F') LOOP
- modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- --filtro in base all'importo, viene automaticamente precaricato con il minimo e massimo importo trovato sul database
- SELECT MIN(IMPORTO),
- MAX(IMPORTO)
- INTO minimportoquery, maximportoquery
- FROM MULTE
- WHERE MULTE.CANCELLATO = 'F';
- modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
- modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
- modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
- modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
- modGUI.inserisciinput('filtrocliente', 'Nome o Cognome Cliente', 'text', FALSE);
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('CERCA');
- modGUI.chiudiform;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END pagamentomulte;
- /*
- * pagamentoMulteDisplay - FRANCESCO CONSONNI
- * La procedura mostra la lista delle multe pagabili filtrate dalla procedura statisticheMulte
- *
- * Parametri
- * @datada: data di inizio intervallo di ricerca
- * @dataa: data di fine intervallo di ricerca
- * @filtrodati: variabile che stabilisce se si filtrerà in base alle autorimesse o ai responsabili
- * @autorimessa: id della autorimessa del filtro
- * @responsabile: id del responsabile del filtro
- * @minImporto: importo minimo delle multe sulle quale filtrare
- * @maxImporto: importo massimo delle multe sulle quale filtrare
- * @filtrocliente: stringa su cui cercare similitudini per il nome del cliente
- */
- PROCEDURE PAGAMENTOMULTEDISPLAY(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtrodati VARCHAR2,
- autorimessa INTEGER,
- responsabile INTEGER,
- minimporto INTEGER,
- maximporto INTEGER,
- filtrocliente VARCHAR2)
- IS
- var_autorimessa INTEGER DEFAULT NULL;
- var_responsabile INTEGER DEFAULT NULL;
- descautorimessa VARCHAR2(100) DEFAULT NULL;
- descresponsabile VARCHAR2(100) DEFAULT NULL;
- var_datada DATE;
- var_dataa DATE;
- contamulte INTEGER DEFAULT 0;
- BEGIN
- var_datada := TO_DATE(datada, 'yyyy-mm-dd');
- var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
- modGUI.apripagina('HoC | Pagamento Multe - Risultati Ricerca', id_sessione,
- nome
- , ruolo);
- IF filtrodati = 'auto' THEN
- var_autorimessa := autorimessa;
- IF var_autorimessa != 0 THEN
- SELECT AUTORIMESSE.INDIRIZZO
- INTO descautorimessa
- FROM AUTORIMESSE
- WHERE AUTORIMESSE.IDautorimessa = var_autorimessa;
- ELSE
- descautorimessa := 'Tutte le autorimesse';
- END IF;
- ELSE
- var_responsabile := responsabile;
- SELECT PERSONE.cognome
- ||' '
- ||PERSONE.nome
- INTO descresponsabile
- FROM PERSONE,
- DIPENDENTI
- WHERE PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
- AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
- END IF;
- SELECT COUNT(IDMULTA)
- INTO contamulte
- FROM VISTAPAGAMENTOMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
- AND nomeCLIENTE||' '||cognomeCLIENTE LIKE '%'||filtrocliente||'%'
- AND CANCELLATO = 'F'
- AND PAGATA IS NULL;
- IF var_datada > var_dataa THEN
- modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INIZIO INTERVALLO');
- ELSIF minimporto > maximporto THEN
- modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`SUPERIORE A IMPORTO MASSIMO');
- ELSE
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('PAGAMENTO MULTE - RISULTATI RICERCA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- -- pilotando la modalità posso stabilire in base a cosa filtrare
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('STATISTICHE DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- IF filtrodati = 'auto' THEN
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSA DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descautorimessa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- ELSE
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descresponsabile);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END IF;
- modGUI.chiuditabella;
- --tabella di tutte le multe
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('DATA EMISSIONE');
- modGUI.intestazionetabella('IMPORTO');
- modGUI.intestazionetabella('CAUSA');
- modGUI.intestazionetabella('CLIENTE MULTATO');
- modGUI.intestazionetabella('PAGA MULTA');
- --la penna in questa procedura ridireziona al pagamento della multa
- modGUI.chiudirigatabella;
- IF CONTAMULTE = 0 THEN
- modGUI.chiuditabella();
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('NESSUNA MULTA TROVATA');
- modGUI.chiudidiv;
- ELSE
- FOR righemulte IN (SELECT *
- FROM VISTAPAGAMENTOMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN
- var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa )
- AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
- AND nomeCLIENTE
- ||' '
- ||cognomeCLIENTE LIKE '%'
- ||filtrocliente
- ||'%'
- ORDER BY dataaSSEGNAZIONE DESC) LOOP
- modGUI.apririgatabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(
- TO_CHAR(RIGHEMULTE.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella('€ '||TO_CHAR(RIGHEMULTE.importo, '9990D99'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(RIGHEMULTE.causa);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.elementotabella(RIGHEMULTE.nomecliente||' '||RIGHEMULTE.cognomecliente);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscipenna(gruppo1||'.pagamentoMulteExec', id_sessione, nome, ruolo,RIGHEMULTE.idmulta);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END LOOP;
- modGUI.chiuditabella;
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END pagamentomultedisplay;
- /*
- * pagamentoMulteExec - FRANCESCO CONSONNI
- * La procedura esegue lo script SQL che paga una multa, impostandone la data di pagamento a SYSTIMESTAMP
- *
- * Parametri
- * @idriga: indice della multa da pagare sul database
- */
- PROCEDURE PAGAMENTOMULTEEXEC(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga INTEGER)
- IS
- esistenzamulta INTEGER DEFAULT 0;
- BEGIN
- modGUI.apripagina('HoC | Pagamento Multa - Esito', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('PAGAMENTO MULTA - ESITO');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
- modGUI.chiudidiv;
- ELSE
- UPDATE MULTE
- SET MULTE.PAGATA = SYSTIMESTAMP
- WHERE MULTE.IDMULTA = idriga;
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'MULTA PAGATA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
- ELSE
- modGUI.esitooperazione('KO', 'ERRORE NEL PAGAMENTO DELLA MULTA');
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A DETTAGLIO',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END pagamentomulteexec;
- /*
- * rimuoviMulteConferma - FRANCESCO CONSONNI
- * La procedura chiede la conferma della rimozione della multa
- *
- * Parametri
- * @idriga:stringa opportunamente formattata che permette di stabilire l'id della multa e se deriva da un ingresso orario o un abbonamento
- * @tipoingresso:specifica se è un ingresso orario o un abbonamento
- */
- PROCEDURE RIMUOVIMULTECONFERMA(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga VARCHAR2,
- tipoingresso VARCHAR2)
- IS
- esistenzamulta INTEGER DEFAULT 0;
- BEGIN
- modGUI.apripagina('HoC | Rimozione Multa', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('RIMOZIONE MULTA - CONFERMA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF tipoingresso != 'A' AND tipoingresso != 'O' THEN
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSIF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- ELSE
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('SEI SICURO DI VOLER RIMULVERE LA MULTA?');
- modGUI.aCapo;
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'CONFERMA',gruppo1||'.rimuoviMulteExec', '&'||'idriga='||idriga||'&'||'tipoingresso='||tipoingresso);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
- modGUI.chiudidiv;
- END IF;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END rimuovimulteconferma;
- /*
- * rimuoviMulteExec - FRANCESCO CONSONNI
- * La procedura effettua la query che rimuove una certa multa dalla base di dati
- *
- * Parametri
- * @idriga:stringa opportunamente formattata che permette di stabilire l'id della multa e se deriva da un ingresso orario o un abbonamento
- * @tipoingresso:specifica se è un ingresso orario o un abbonamento
- */
- PROCEDURE RIMUOVIMULTEEXEC(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga VARCHAR2,
- tipoingresso VARCHAR2)
- IS
- esistenzamulta INTEGER DEFAULT 0;
- BEGIN
- modGUI.apripagina('HoC | Rimozione Multa - Esito', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('RIMOZIONE MULTA - ESITO');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- SELECT COUNT(MULTE.IDMULTA)
- INTO esistenzamulta
- FROM MULTE
- WHERE IDMULTA = idriga
- AND MULTE.CANCELLATO = 'F';
- IF esistenzamulta = 0 THEN
- modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
- ELSE
- IF tipoingresso = 'A' THEN --sono in un abbonamento
- SAVEPOINT aggiornamentoMulta;
- UPDATE MULTE
- SET MULTE.CANCELLATO = 'T'
- WHERE MULTE.IDMULTA = idriga;
- /*UPDATE INGRESSIABBONAMENTI
- SET INGRESSIABBONAMENTI.IDMULTA = NULL
- WHERE INGRESSIABBONAMENTI.IDMULTA = idriga;*/
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'MULTA RIMOSSA CON SUCCESSO DAL SISTEMA');
- ELSE
- ROLLBACK TO aggiornamentoMulta;
- modGUI.esitooperazione('KO', 'ERRORE NELLA RIMOZIONE DELLA MULTA');
- END IF;
- ELSIF tipoingresso = 'O' THEN
- SAVEPOINT aggiornamentoMulta;
- UPDATE MULTE
- SET MULTE.CANCELLATO = 'T'
- WHERE MULTE.IDMULTA = idriga;
- /*UPDATE INGRESSIORARI
- SET INGRESSIORARI.IDMULTA = NULL
- WHERE INGRESSIORARI.IDMULTA = idriga;*/
- if(SQL%ROWCOUNT != 0)THEN
- COMMIT;
- modGUI.esitooperazione('OK', 'MULTA RIMOSSA CON SUCCESSO DAL SISTEMA');
- ELSE
- ROLLBACK TO aggiornamentoMulta;
- modGUI.esitooperazione('KO', 'ERRORE NELLA RIMOZIONE DELLA MULTA');
- END IF;
- ELSE
- modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END rimuovimulteexec;
- /*
- * segnalaClienti - FRANCESCO CONSONNI
- * La procedura permette di impostare i filtri per la segnalazione di clienti "problematici"
- */
- PROCEDURE SEGNALACLIENTI(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2)
- IS
- BEGIN
- --apro la pagina
- modGUI.apripagina('HoC | Segnala Clienti', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('SEGNALA CLIENTI');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- modGUI.apriform(gruppo1||'.segnalaClientiDisplay');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
- modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
- --importo minimo
- --modGUI.inseriscitesto('Minimo somma degli importi multe:');
- modGUI.inserisciinput('minImporto', 'MINIMO SOMMA DEGLI IMPORTI (OBBLIGATORIO):', 'number', TRUE);
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('CERCA');
- modGUI.chiudiform;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END segnalaclienti;
- /*
- * segnalaClientiDisplay - FRANCESCO CONSONNI
- * La procedura mostra i dettagli dei clienti "problematici" e fornisce un link per inserirli in blacklist rapidamente
- *
- * Parametri
- * @datada: data di inizio intervallo di ricerca
- * @dataa: data di fine intervallo di ricerca
- * @minImporto: importo minimo perchè un cliente sia "segnalato"
- */
- PROCEDURE SEGNALACLIENTIDISPLAY(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- minimporto INTEGER)
- IS
- dettaglicliente clienti%ROWTYPE;
- var_datada DATE;
- var_dataa DATE;
- var_codicefiscale VARCHAR2(16);
- var_cognome VARCHAR2(45);
- var_nome VARCHAR2(45);
- var_email VARCHAR2(45);
- var_numeropatente VARCHAR2(10);
- conteggioclienti INTEGER DEFAULT 0;
- idClienteBlacklist INTEGER DEFAULT 0;
- BEGIN
- var_datada := TO_DATE(datada, 'yyyy-mm-dd');
- var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
- modGUI.apripagina('HoC | Segnala Clienti - Risultato Ricerca', id_sessione,nome, ruolo);
- SELECT COUNT(VIEW_IDCLIENTE)
- INTO conteggioclienti
- FROM VISTASEGNALACLIENTI
- WHERE VIEW_TOTMULTE >= ( VIEW_TOTINGRESSI / 2 )
- AND VIEW_TOTIMPORTO >= MINIMPORTO;
- --qui controllo che non siano state inserite date illegali
- IF datada > dataa THEN
- modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INZIO INTERVALLO');
- ELSE
- modGUI.acapo;
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('SEGNALA CLIENTI - RISULTATO RICERCA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- modGUI.apritabella;
- modGUI.apririgatabella;
- --modGUI.intestazionetabella('cognome');
- modGUI.intestazionetabella('CLIENTE');
- modGUI.intestazionetabella('CODICE FISCALE');
- modGUI.intestazionetabella('NUMERO DI PATENTE');
- modGUI.intestazionetabella('NUMERO DI INGRESSI');
- modGUI.intestazionetabella('NUMERO DI MULTE');
- modGUI.intestazionetabella('IMPORTO COMPLESSIVO MULTE');
- modGUI.intestazionetabella('DETTAGLIO CLIENTE');
- --la lente all interno rimanda alla procedura appropriata
- modGUI.intestazionetabella('INSERISCI IN BLACKLIST');
- --la penna all interno rimanda alla procedura appropriata
- modGUI.chiudirigatabella;
- IF CONTEGGIOCLIENTI = 0 THEN
- modGUI.chiuditabella();
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('NESSUN CLIENTE DA SEGNALARE');
- modGUI.chiudidiv;
- ELSE
- FOR clientisegnalati IN (SELECT *
- FROM VISTASEGNALACLIENTI
- WHERE VIEW_TOTMULTE >= ( VIEW_TOTINGRESSI / 2 )
- AND VIEW_TOTIMPORTO >= MINIMPORTO) LOOP
- --con l'id cliente noto faccio il fetch delle informazioni del cliente
- SELECT PERSONE.CODICEFISCALE,
- PERSONE.cognome,
- PERSONE.nome,
- PERSONE.EMAIL,
- CLIENTI.NUMEROPATENTE
- INTO var_codicefiscale, var_cognome, var_nome, var_email,
- var_numeropatente
- FROM CLIENTI
- join PERSONE
- ON PERSONE.IDPERSONA = CLIENTI.IDPERSONA
- WHERE CLIENTI.IDCLIENTE = CLIENTISEGNALATI.view_idcliente;
- modGUI.apririgatabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto(var_nome||' '||var_cognome);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto(VAR_CODICEFISCALE);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto(VAR_NUMEROPATENTE);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto(CLIENTISEGNALATI.view_totingressi);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto(CLIENTISEGNALATI.view_totmulte);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscitesto('€ '||TO_CHAR(CLIENTISEGNALATI.view_totimporto, '9990D99'));
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- modGUI.inseriscilente('gruppo5.moreInfoClient', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
- modGUI.chiudielementotabella;
- modGUI.aprielementotabella;
- SELECT count(idcliente) INTO idClienteBlacklist FROM blacklist WHERE blacklist.idcliente=CLIENTISEGNALATI.view_idcliente AND (blacklist.durata > SYSDATE OR blacklist.durata IS NULL);
- IF idClienteBlacklist != 0 THEN
- modGUI.inseriscitesto('Gia` in Blacklist');
- ELSE
- modGUI.inseriscipenna('gruppo5.formInsertBlacklist', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
- END IF;
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END LOOP;
- modGUI.chiuditabella;
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA SEGNALAZIONE',gruppo1||'.segnalaClienti');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END segnalaclientidisplay;
- /*
- * statisticheMulte - FRANCESCO CONSONNI
- * La procedura permette di impostare i filtri del calcolo delle statistiche delle multe
- *
- */
- PROCEDURE STATISTICHEMULTE(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2)
- IS
- BEGIN
- --apro la pagina
- modGUI.apripagina('HoC | Statistiche Multe', id_sessione, nome, ruolo);
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('STATISTICHE MULTE');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- --form di ricerca
- modGUI.apriform(gruppo1||'.statisticheMulteDisplay');
- modGUI.inserisciinputhidden('id_sessione', id_sessione);
- modGUI.inserisciinputhidden('nome', nome);
- modGUI.inserisciinputhidden('ruolo', ruolo);
- modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
- modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
- --posso scegliere tra le singole autorimesse/tutte le autorimesse o quelle gestite da un certo responsabile
- modGUI.inserisciradiobutton('VISUALIZZA STATISTICHE PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
- modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
- modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
- FOR autorimessequery IN (SELECT IDautorimessa,
- INDIRIZZO
- FROM AUTORIMESSE
- ORDER BY IDautorimessa) LOOP
- modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
- autorimessequery.indirizzo, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.inserisciradiobutton('VISUALIZZA LE STASTISTICHE DELLE AUTORIMESSE GESTITE DA', 'filtrodati', 'resp', FALSE);
- modGUI.apriselect('responsabile', 'Scegli un responsabile');
- FOR responsabiliquery IN (SELECT PERSONE.cognome AS var_cognome,
- PERSONE.nome AS var_nome,
- DIPENDENTI.IDDIPENDENTE AS idresponsabile
- FROM PERSONE
- inner join DIPENDENTI
- ON DIPENDENTI.IDPERSONA =
- PERSONE.IDPERSONA
- WHERE DIPENDENTI.TIPODIPENDENTE = 'R'
- AND DIPENDENTI.CANCELLATO = 'F') LOOP
- modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome
- ||' '
- ||responsabiliquery.var_nome, FALSE);
- END LOOP;
- modGUI.chiudiselect;
- modGUI.INSERISCIBOTTONERESET('RESET');
- modGUI.INSERISCIBOTTONEFORM('CERCA');
- modGUI.chiudiform;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END statistichemulte;
- /*
- * statisticheMulteDisplay - FRANCESCO CONSONNI
- * La procedura mostra i dati statistici delle multe filtrate dalla procedura statisticheMulte
- *
- * Parametri
- * @datada: data di inizio intervallo di ricerca
- * @dataa: data di fine intervallo di ricerca
- * @filtrodati: variabile che stabilisce se si filtrerà in base alle autorimesse o ai responsabili
- * @autorimessa: id della autorimessa del filtro
- * @responsabile: id del responsabile del filtro
- */
- PROCEDURE STATISTICHEMULTEDISPLAY(id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtrodati VARCHAR2,
- autorimessa INTEGER,
- responsabile INTEGER)
- IS
- --variabili che vengono valorizzate con i risultati delle query di volta in volta
- totmulte INTEGER DEFAULT 0;
- mediamultepagate INTEGER DEFAULT 0;
- totimporto NUMBER(6, 2) DEFAULT 0.00;
- mediaimporto NUMBER(6, 2) DEFAULT 0.00;
- var_autorimessa INTEGER DEFAULT NULL;
- var_responsabile INTEGER DEFAULT NULL;
- descautorimessa VARCHAR2(100) DEFAULT NULL;
- descresponsabile VARCHAR2(100) DEFAULT NULL;
- var_datada DATE;
- var_dataa DATE;
- conteggiomulte INTEGER DEFAULT 0;
- BEGIN
- var_datada := TO_DATE(datada, 'yyyy-mm-dd');
- var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
- modGUI.apripagina('HoC | Statistiche Multe - Risultato Ricerca', id_sessione,nome, ruolo);
- --pilotando la modalità posso stabilire in base a cosa filtrare
- --qui carico i dati relativi ai filtri che verranno stampati nella tabella
- IF filtrodati = 'auto' THEN
- var_autorimessa := autorimessa;
- IF var_autorimessa != 0 THEN
- SELECT AUTORIMESSE.INDIRIZZO
- INTO descautorimessa
- FROM AUTORIMESSE
- WHERE AUTORIMESSE.IDautorimessa = var_autorimessa;
- ELSE
- descautorimessa := 'Tutte le autorimesse';
- END IF;
- ELSE
- var_responsabile := responsabile;
- SELECT PERSONE.cognome
- ||' '
- ||PERSONE.nome
- INTO descresponsabile
- FROM PERSONE,
- DIPENDENTI
- WHERE PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
- AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
- END IF;
- SELECT COUNT(IDMULTA)
- INTO conteggiomulte
- FROM VISTASTATISTICHEMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa );
- --qui controllo che non siano state inserite date illegali
- IF datada > dataa THEN
- modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE RISPETTO A QUELLA DI INZIO INTERVALLO');
- ELSE
- modGUI.acapo;
- modGUI.apriintestazione(2);
- modGUI.inseriscitesto('STATISTICHE MULTE - RISULTATO RICERCA');
- modGUI.chiudiintestazione(2);
- modGUI.apridiv;
- --in base ai dettagli stampo le statistiche richieste
- --trunc(timestamp) se non ha altri parametri restituisce solo una data di tipo dd/mm/yyyy
- IF CONTEGGIOMULTE = 0 THEN
- modGUI.chiuditabella();
- modGUI.apridiv(TRUE);
- modGUI.inseriscitesto('NESSUNA MULTA SU CUI CALCOLARE STATISTICHE');
- modGUI.chiudidiv;
- ELSE
- SELECT COUNT(IDMULTA),
- NVL(SUM(IMPORTO), 0),
- NVL(AVG(IMPORTO), 0),
- NVL(TRUNC(AVG(EXTRACT (day FROM PAGATA - dataaSSEGNAZIONE))), 0)
- INTO totmulte, totimporto, mediaimporto, mediamultepagate
- FROM VISTASTATISTICHEMULTEDISPLAY
- WHERE TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
- AND ( IDDIPENDENTE = var_responsabile
- OR ( CASE
- WHEN var_autorimessa = 0 THEN 0
- ELSE 1
- END ) = 0
- OR IDautorimessa = var_autorimessa );
- --sulle righe si ha intestazione a sinistra e elemento normale a destra
- modGUI.apritabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('STATISTICHE DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- --stampo le righe che sono o autorimessa o autorimesse gestite da un certo responsabile
- IF filtrodati = 'auto' THEN
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSA DI');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descautorimessa);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- ELSE
- modGUI.apririgatabella;
- modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
- modGUI.aprielementotabella;
- modGUI.elementotabella(descresponsabile);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- END IF;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('NUMERO MULTE ASSEGNATE');
- modGUI.aprielementotabella;
- modGUI.elementotabella(TOTMULTE);
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('IMPORTO COMPLESSIVO MULTE');
- modGUI.aprielementotabella;
- modGUI.elementotabella('€ '||TO_CHAR(TOTIMPORTO, '99990D99'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('IMPORTO MEDIO MULTE');
- modGUI.aprielementotabella;
- modGUI.elementotabella('€ '||TO_CHAR(MEDIAIMPORTO, '99990D99'));
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.apririgatabella;
- modGUI.intestazionetabella('TEMPO MEDIO DI PAGAMENTO');
- modGUI.aprielementotabella;
- modGUI.elementotabella(MEDIAMULTEPAGATE||' Giorni');
- modGUI.chiudielementotabella;
- modGUI.chiudirigatabella;
- modGUI.chiuditabella;
- END IF;
- END IF;
- modGUI.apriintestazione(3);
- modGUI.inseriscitesto('ALTRE OPERAZIONI');
- modGUI.chiudiintestazione(3);
- --con questo form fornisco un pulsante che fa tornare alla pagina di ricerca, mi trascino dietro solo le variabili di sessione
- modGUI.apridiv(TRUE);
- modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA STATISTICA',gruppo1||'.statisticheMulte');
- modGUI.chiudidiv;
- modGUI.chiudidiv;
- modGUI.chiudipagina;
- END statistichemultedisplay;
- --------FINE FRANCESCO CONSONNI--------
- --------------- INIZIO ALESSANDRO PUCCIA -------------------------
- /*
- Funzione che verifica l'esistenza o meno di un'autorimessa
- @param: var_autorimessa = indirizzo dell'autorimessa
- @return: true se l'autorimessa esiste, false altrimenti
- */
- FUNCTION checkAutorimessa(var_autorimessa VARCHAR2) RETURN BOOLEAN IS
- var_contaAutorimessa INTEGER;
- BEGIN
- SELECT COUNT(idAutorimessa) INTO var_contaAutorimessa
- FROM Autorimesse
- WHERE indirizzo = var_autorimessa;
- RETURN var_contaAutorimessa = 1;
- END checkAutorimessa;
- /*
- Funzione che verifica l'esistenza o meno di un cliente
- @param: var_cliente = codice fiscale del cliente
- @return: true se il cliente esiste, false altrimenti
- */
- FUNCTION checkCliente(var_cliente VARCHAR2) RETURN BOOLEAN IS
- var_contaCliente INTEGER;
- BEGIN
- SELECT COUNT(idCliente) INTO var_contaCliente
- FROM Clienti
- INNER JOIN Persone ON clienti.idPersona = persone.idPersona
- WHERE codiceFiscale = var_cliente;
- RETURN var_contaCliente = 1;
- END checkCliente;
- /*
- Funzione che verifica l'esistenza e la proprieta' di un veicolo
- @param: var_targa = targa del veicolo
- @return: true se il veicolo esiste, false altrimenti
- */
- FUNCTION checkTarga(var_targa VARCHAR2, var_cliente VARCHAR2) RETURN BOOLEAN IS
- var_contaTarga INTEGER;
- BEGIN
- IF var_cliente IS NOT NULL THEN
- SELECT COUNT(veicoli.idVeicolo) INTO var_contaTarga
- FROM Veicoli
- INNER JOIN veicoliClienti ON veicoli.idveicolo = veicoliclienti.idVeicolo
- INNER JOIN clienti ON veicoliclienti.idcliente = clienti.idcliente
- INNER JOIN persone ON clienti.idpersona = persone.idpersona
- WHERE targa = var_targa AND codicefiscale = var_cliente;
- ELSE
- SELECT COUNT(veicoli.idVeicolo) INTO var_contaTarga
- FROM Veicoli
- WHERE targa = var_targa;
- END IF;
- RETURN var_contaTarga = 1;
- END checkTarga;
- /*
- Converte il timestamp ricevuto in input in secondi, considerando l'ora, i minuti e i secondi.
- @param: var_ora = il timestamp da convertire e di cui mi interessa solamente l'ora, i minuti e i secondi
- @return: un intero che rappresenta la conversione, in secondi, del timestamp
- */
- FUNCTION convertiOraInSecondi(var_ora TIMESTAMP) RETURN INTEGER IS
- BEGIN
- RETURN (EXTRACT(HOUR FROM var_ora) * 3600) +
- (EXTRACT(MINUTE FROM var_ora) * 60) +
- EXTRACT(SECOND FROM var_ora);
- END convertiOraInSecondi;
- /*
- Calcola la percentuale di ingressi orari con prenotazione dal punto di vista del cliente
- @param: var_idCliente = id del cliente di cui mi interessano gli ingressi orari
- @param: var_anno = anno degli ingressi che mi interessano
- */
- FUNCTION calcoloInfoPrenotCliente(var_idCliente VARCHAR2, var_anno VARCHAR2) RETURN rec_prenot IS
- -- record che andra' a contenere le informazioni di tutte le prenotazioni fatte dal cliente identificato da var_idcliente
- -- durante l'anno specificato da var_anno
- infoPrenotazioni rec_prenot;
- BEGIN
- SELECT COUNT(ingressiorari.entrataprevista), COUNT(*), AVG(COUNT(ingressiorari.entrataprevista)) * 100
- INTO infoPrenotazioni.var_conPrenotazione, infoPrenotazioni.var_totale, infoPrenotazioni.var_percentuale
- FROM ingressiorari
- INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- WHERE
- -- considero solo gli ingressi fatti dal cliente identificato da var_idCliente
- effettuaingressiorari.idcliente = var_idcliente AND
- -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
- -- vengono considerati anche gli ingressiorari che sono ancora in corso, cioè con l'ora di uscita pari a NULL
- (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT(YEAR FROM orauscita) = var_anno) AND
- ingressiorari.cancellato = 'F'
- GROUP BY ingressiorari.entrataprevista;
- -- calcolo gli ingressi senza prenotazione
- infoPrenotazioni.var_senzaPrenotazione := infoPrenotazioni.var_totale - infoPrenotazioni.var_conPrenotazione;
- RETURN infoPrenotazioni;
- END calcoloInfoPrenotCliente;
- /*
- Calcola le informazioni sugli ingressi orari con prenotazione, dal punto di vista dell'autorimessa, che sono stati
- fatti in un dato anno
- @param: var_idAutorimessa = identificativo dell'autorimessa di cui mi interessano gli ingressi orari
- @param: var_anno = anno degli ingressi che mi interessano
- */
- FUNCTION calcoloInfoPrenotAutorim(var_idAutorimessa VARCHAR2, var_anno VARCHAR2) RETURN rec_prenot IS
- -- record che andra' a contenere le informazioni di tutte le prenotazioni fatte dal cliente identificato da var_idcliente
- -- durante l'anno specificato da var_anno
- infoPrenotazioni rec_prenot;
- BEGIN
- SELECT COUNT(entrataPrevista), COUNT(*), AVG(COUNT(entrataprevista)) * 100
- INTO infoPrenotazioni.var_conPrenotazione, infoPrenotazioni.var_totale, infoPrenotazioni.var_percentuale
- FROM ingressiOrari
- INNER JOIN box ON ingressiOrari.idBox = box.idBox
- INNER JOIN aree ON box.idArea = aree.idArea
- INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
- WHERE
- -- considero solamente gli ingressi che vengono fatti nell'autorimessa identificata da var_idAutorimessa
- autorimesse.idAutorimessa = var_idAutorimessa AND
- -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
- -- vengono considerati anche gli ingressiorari che sono ancora in corso, cioè con l'ora di uscita pari a NULL
- (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT(YEAR FROM orauscita) = var_anno) AND
- ingressiorari.cancellato = 'F'
- GROUP BY ingressiOrari.entrataPrevista;
- -- calcolo gli ingressi senza prenotazione
- infoPrenotazioni.var_senzaPrenotazione := infoPrenotazioni.var_totale - infoPrenotazioni.var_conPrenotazione;
- RETURN infoPrenotazioni;
- END calcoloInfoPrenotAutorim;
- /*
- Calcola il tempo medio di permanenza degli ingressi orari, dal punto di vista dei mesi, che sono stati fatti in una
- determinata autorimessa e in un periodo di tempo che include l'anno passato come input
- @param(var_autorimessa): indirizzo dell'autorimessa di cui mi interessano gli ingressi orari
- @param(var_anno): anno di cui mi interessano gli ingressi orari
- @return: array di 12 posizioni contentente la media, in secondi, per ogni mese dell'anno specificato da var_anno
- */
- FUNCTION calcoloTempoMese(var_autorimessa VARCHAR2, var_anno INTEGER) RETURN array_int IS
- CURSOR cur_ingressi IS
- SELECT oraentrata, orauscita
- FROM ingressiorari
- INNER JOIN box ON ingressiorari.idbox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE
- orauscita IS NOT NULL AND
- -- considero solamente gli ingressi effettuati nell'autorimessa di indirizzo specificato da var_autorimessa
- autorimesse.indirizzo = var_autorimessa AND
- -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
- -- vengono considerati sia ingressi orari con prenotazione che senza
- (var_anno = EXTRACT(YEAR FROM oraentrata) OR var_anno = EXTRACT(YEAR FROM orauscita)) AND
- ingressiorari.cancellato = 'F';
- -- array che conterra' la media per ogni mese in secondi
- var_calcoloSecondi array_int := array_int();
- -- array che conterra' il numero di ingressi per quel mese, nel caso di ingressi a cavallo tra due o piu' mesi si considera
- -- un ingresso per ogni mese "attraversato"
- var_contatoriIngressi array_int := array_int();
- -- conterra' l'anno in cui e' stata registrata l'ora di entrata
- var_annoEntrata INTEGER;
- -- conterra' l'anno in cui e' stata registrata l'ora di uscita
- var_annoUscita INTEGER;
- -- conterra' il mese in cui e' stata registrata l'ora di entrata
- var_meseEntrata INTEGER;
- -- conterra' il mese in cui e' stata registrata l'ora di uscita
- var_meseUscita INTEGER;
- -- Conterra' l'ultimo giorno del mese X nel caso in cui l'entrata e uscita avvengono in mesi diversi
- -- OPPURE
- -- Conterra' l'ultimo giorno del mese di Dicembre (caso limite entrata e uscita a cavallo tra due anni e interessa
- -- il tempo medio dell'anno di entrata
- -- In ENTRAMBI i casi la componente indicante l'ora sara'� settata a 23:59:59
- var_ultimoGiorno DATE;
- -- Conterra' il primo giorno del mese Y nel caso in cui l'entrata e uscita avvengono in mesi diversi
- -- OPPURE
- -- Conterra' il primo giorno del mese di Gennaio (caso limite entrata e uscita a cavallo tra due anni e interessa
- -- il tempo medio dell'anno di uscita
- -- In ENTRAMBI i casi la componente indicante l'ora sara'� settata a 0:0:0
- var_primoGiorno DATE;
- BEGIN
- FOR i IN 1..12
- LOOP
- -- inizializzo l'array che conterra' la media
- var_calcoloSecondi.extend();
- var_calcoloSecondi(i) := 0;
- -- inizializzo l'array di contatori degli ingressi
- var_contatoriIngressi.extend();
- var_contatoriIngressi(i) := 0;
- END LOOP;
- FOR row_ingressi IN cur_ingressi
- LOOP
- -- estraggo l'anno dall'ora di entrata
- var_annoEntrata := EXTRACT(YEAR FROM row_ingressi.oraEntrata);
- -- estraggo l'anno dall'ora di uscita
- var_annoUscita := EXTRACT(YEAR FROM row_ingressi.oraUscita);
- IF var_annoEntrata = var_annoUscita THEN
- -- caso in cui l'ingresso e l'uscita avvengono nello stesso anno
- -- estraggo il mese dall'ora di entrata
- var_meseEntrata := EXTRACT(MONTH FROM row_ingressi.oraEntrata);
- -- estraggo il mese dall'ora di uscita
- var_meseUscita := EXTRACT(MONTH FROM row_ingressi.oraUscita);
- IF var_meseEntrata != var_meseUscita THEN
- -- caso in cui l'ingresso e l'uscita sono in mesi diversi
- -- ottengo il primo giorno del mese di uscita
- var_primoGiorno := TRUNC(row_ingressi.oraUscita , 'MM');
- -- ottengo l'ultimo giorno del mese di ingresso
- var_ultimoGiorno := TO_DATE(TO_CHAR((LAST_DAY(CAST(row_ingressi.oraEntrata AS DATE))),
- 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS');
- FOR i IN var_meseEntrata .. var_meseUscita
- LOOP
- -- scorro tra i mesi di permanenza per calcolare i tempi
- IF i = var_meseEntrata THEN
- -- sono nel mese in cui il cliente entra
- -- aggiungo una parte di secondi a quel mese
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- ((var_ultimoGiorno - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
- ELSIF i = var_meseUscita THEN
- -- sono nel mese in cui il cliente esce
- -- aggiungo una parte di secondi a quel mese
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- ((CAST(row_ingressi.orauscita AS DATE) - var_primoGiorno) * 86400);
- ELSE
- -- tutti i mesi nel mezzo
- -- aggiungo TUTTI i secondi del mese
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
- END IF;
- -- +1 al contatore di quell'ingresso
- var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
- END LOOP;
- ELSE
- -- caso in cui l'ingresso e l'uscita sono nello stesso mese
- -- aggiungo TUTTI i secondi dell'ingresso a quel mese.
- var_calcoloSecondi(var_meseEntrata) := var_calcoloSecondi(var_meseEntrata) +
- ((CAST(row_ingressi.orauscita AS DATE) - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
- -- +1 al contatore per quel mese
- var_contatoriIngressi(var_meseEntrata) := var_contatoriIngressi(var_meseEntrata) + 1;
- END IF;
- ELSIF var_annoEntrata = var_anno THEN
- -- caso in cui l'entrata e l'uscita son in 2 anni diversi, "spezzo" l'ingresso considerando solo l'anno di entrata
- -- estraggo il mese di entrata
- var_meseEntrata := EXTRACT(MONTH FROM row_ingressi.oraEntrata);
- -- mi interessa il tempo medio riferito all'anno di entrata, quindi l'ingresso "termina" al mese di Dicembre
- var_meseUscita := 12;
- -- ottengo l'ultimo giorno del mese di ingresso
- var_ultimoGiorno := TO_DATE(TO_CHAR((LAST_DAY(CAST(row_ingressi.oraentrata AS DATE))),
- 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS');
- FOR i IN var_meseEntrata .. var_meseUscita
- LOOP
- -- scorro tra i mesi di permanenza per calcolare i tempi
- IF i = var_meseEntrata THEN
- -- sono nel mese in cui il cliente entra
- -- aggiungo una parte di secondi al mese di entrata
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- ((var_ultimoGiorno - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
- ELSE
- -- tutti gli altri mesi
- -- aggiungo tutti i secondi del mese
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
- END IF;
- -- +1 al contatore degli ingressi i
- var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
- END LOOP;
- ELSIF var_annoUscita = var_anno THEN
- -- caso in cui l'entrata e l'uscita son in 2 anni diversi, "spezzo" l'ingresso considerando solo l'anno di uscita
- -- mi interessa il tempo medio riferito all'anno di uscita, quindi l'ingresso "inizia" al mese di Gennaio
- var_meseEntrata := 1;
- -- estraggo il mese di uscita
- var_meseUscita := EXTRACT(MONTH FROM row_ingressi.orauscita);
- -- ottengo il primo giorno del mese di uscita
- var_primoGiorno := TRUNC(row_ingressi.orauscita , 'MM');
- FOR i IN var_meseEntrata .. var_meseUscita
- LOOP
- -- scorro tra i vari mesi di permanenza per calcolare i tempi
- IF i = var_meseUscita THEN
- -- sono nel mese in cui il cliente esce
- -- aggiungo una parte di secondi al mese di uscita
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- ((CAST(row_ingressi.orauscita AS DATE) - var_primoGiorno) * 86400);
- ELSE
- -- tutti gli altri mesi
- -- aggiungo TUTTI i secondi al mese.
- var_calcoloSecondi(i) := var_calcoloSecondi(i) +
- (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
- END IF;
- -- +1 al contatore degli ingressi per il mese i
- var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
- END LOOP;
- END IF;
- END LOOP;
- FOR i IN 1..12
- LOOP
- -- calcolo la media per ogni mese rispetto al numero di ingressi di quel mese
- IF (var_contatoriIngressi(i) != 0) THEN
- var_calcoloSecondi(i) := TRUNC(var_calcoloSecondi(i) / var_contatoriIngressi(i));
- END IF;
- END LOOP;
- RETURN var_calcoloSecondi;
- END calcoloTempoMese;
- /*
- calcola il tempo medio di permanenza degli ingressi, secondo le fasce orarie, che sono stati fatti in una determinata
- autorimessa e in un periodo di tempo che include l'anno passato come input
- @param(var_autorimessa): indirizzo dell'autorimessa di cui mi interessano gli ingressi orari
- @param(var_anno): anno di cui mi interessano gli ingressi orari
- @return: array di 12 posizioni contentente la media, in secondi, per ogni fascia oraria degli ingressi con anno specificato
- da var_anno
- */
- FUNCTION calcoloTempoFascia(var_autorimessa VARCHAR2, var_anno VARCHAR2) RETURN nested_fasce IS
- CURSOR cur_ingressi IS
- SELECT oraentrata, orauscita
- FROM ingressiorari
- INNER JOIN box ON ingressiorari.idbox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE
- -- vengono considerati solamente gli ingressi portati a termine!!!
- orauscita IS NOT NULL AND
- -- considero solamente gli ingressi effettuati nell'autorimessa di indirizzo specificato da var_autorimessa
- autorimesse.indirizzo = var_autorimessa AND
- -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
- -- vengono considerati sia ingressi orari con prenotazione che senza
- (var_anno = EXTRACT(YEAR FROM oraentrata) OR var_anno = EXTRACT(YEAR FROM orauscita)) AND
- ingressiorari.cancellato = 'F';
- -- contiene tutte le fasce orarie
- CURSOR cur_fasce IS
- SELECT fasceorarie.idfasciaoraria, fasceorarie.nome, orainizio, orafine, giorno
- FROM fasceorarie;
- -- array che conterra' la media per ogni mese in secondi
- var_calcoloSecondi nested_fasce := nested_fasce();
- -- array che conterra' il numero di ingressi per quel mese, nel caso di ingressi a cavallo tra più fasce si considera
- -- un ingresso per ogni fascia "attraversata"
- var_contatoriIngressi nested_fasce := nested_fasce();
- -- conterra' l'anno in cui avviene l'entrata
- var_annoEntrata INTEGER;
- -- conterra' l'anno in cui avviene l'uscita
- var_annoUscita INTEGER;
- -- conterra' la componente dell'ora in cui viene effettuata l'entrata (trasformata in secondi)
- var_oraEntrata INTEGER;
- -- conterra' la componente dell'ora in cui viene effettuata l'uscita (trasformata in secondi)
- var_oraUscita INTEGER;
- -- conterra' l'ora di inizio della fascia oraria (trasformata in secondi)
- var_oraInizioFascia INTEGER;
- -- conterra' l'ora di fine della fascia oraria (trasformata in secondi)
- var_oraFineFascia INTEGER;
- -- conterra' il numero di giorni che intercorrono tra l'entrata e l'uscita
- var_giorni INTEGER;
- -- conterra' il giorno da analizzare (per capire la/e fascia/e di appartenenza)
- var_giornoCorrente TIMESTAMP;
- var_numeroFasce INTEGER;
- BEGIN
- SELECT COUNT(*) INTO var_numeroFasce
- FROM fasceOrarie;
- FOR i IN 1 .. var_numeroFasce
- LOOP
- -- inizializzo la collezione che conterra' la media
- var_calcoloSecondi.extend();
- var_calcoloSecondi(i) := 0;
- -- inizializzo la collezione che conterra' il numero di ingressi per ogni fascia
- var_contatoriIngressi.extend();
- var_contatoriIngressi(i) := 0;
- END LOOP;
- FOR row_ingressi IN cur_ingressi
- LOOP
- -- inizializzo var_giornoCorrente al timestamp di entrata
- var_giornoCorrente := row_ingressi.oraEntrata;
- -- anno in cui viene effettuata l'entrata
- var_annoEntrata := EXTRACT(YEAR FROM row_ingressi.oraEntrata);
- -- anno in cui viene effettuata l'uscita
- var_annoUscita := EXTRACT(YEAR FROM row_ingressi.oraUscita);
- IF var_annoEntrata = var_annoUscita THEN
- -- sono nel caso in cui l'entrata e l'uscita avvengono nello stesso anno
- -- Calcolo la differenza in giorni tra il timestamp di uscita e entrata
- -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
- -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
- var_giorni := TO_DATE(TO_CHAR(row_ingressi.oraUscita, 'DD-MON-RR'), 'DD-MON-RR') -
- TO_DATE(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR'), 'DD-MON-RR');
- ELSIF var_annoEntrata = var_anno THEN
- -- sono nel caso in cui l'entrata e l'uscita avvengono in anni diversi, l'anno da considerare e' quello di
- -- entrata
- -- Considero l'ingresso come se terminasse a Dicembre
- -- Calcolo la differenza tra il 31 Dicembre e il timestamp di entrata
- -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
- -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
- var_giorni := TO_DATE('31-DIC-' || var_anno, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian') -
- TO_DATE(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR'), 'DD-MON-RR');
- ELSIF var_annoUscita = var_anno THEN
- -- sono nel caso in cui l'entrata e l'uscita avvengono in anni diversi, l'anno da considerare e' quello di
- -- uscita
- -- Considero l'ingresso come se iniziasse a Gennaio
- -- Calcolo la differenza tra il timestamp di uscita e il 1 Gennaio
- -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
- -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
- var_giorni := TO_DATE(TO_CHAR(row_ingressi.oraUscita, 'DD-MON-RR'), 'DD-MON-RR') -
- TO_DATE('1-GEN-' || var_anno, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian');
- END IF;
- FOR i IN 0 .. var_giorni
- LOOP
- -- scorro tra tutti i giorni di permanenza
- IF var_giorni = 0 AND var_annoEntrata = var_annoUscita THEN
- -- caso in cui l'entrata e l'uscita avvengono nello stesso giorno, stesso anno
- -- calcolo l'ora di entrata in secondi
- var_oraEntrata := convertiOraInSecondi(row_ingressi.oraEntrata);
- -- calcolo l'ora di uscita in secondi
- var_oraUscita := convertiOraInSecondi(row_ingressi.oraUscita);
- ELSIF i = 0 AND var_annoEntrata = var_anno THEN
- -- caso in cui l'entrata e l'uscita avvengono in giorni diversi e mi interessa l'anno di entrata,
- -- sto considerando il primo giorno
- -- calcolo l'ora di entrata in secondi
- var_oraEntrata := convertiOraInSecondi(row_ingressi.oraentrata);
- -- ora di uscita, in secondi, in questo caso corrisponde a 86399 (23:59:59)
- var_oraUscita := 86399;
- ELSIF i = var_giorni AND var_annoUscita = var_anno THEN
- -- caso in cui l'entrata e l'uscita avvengono in giorni diversi e mi interessa l'anno di uscita,
- -- sto considerando l'ultimo giorno
- -- ora di entrata in questo caso corrisponde a zero
- var_oraEntrata := 0;
- -- calcolo l'ora di uscita in secondi
- var_oraUscita := convertiOraInSecondi(row_ingressi.orauscita);
- ELSE
- -- caso in cui l'entrata e l'uscita avvengono in giorni diversi, sto considerando il giorno nel mezzo
- -- ora di entrata, in secondi, in questo caso corrisponde a zero
- var_oraEntrata := 0;
- -- ora di uscita, in secondi, in questo caso corrisponde a 86399 (23:59:59)
- var_oraUscita := 86399;
- END IF;
- FOR row_fasce IN cur_fasce
- LOOP
- -- scorro tra tutte le fasce valide per quel determinato giorno
- IF row_fasce.giorno = TO_CHAR(var_giornoCorrente, 'DY', 'NLS_DATE_LANGUAGE = italian') THEN
- -- ora di inizio della fascia, espressa in secondi
- var_oraInizioFascia := convertiOraInSecondi(row_fasce.oraInizio);
- -- ora di fine della fascia, espressa in secondi
- var_oraFineFascia := convertiOraInSecondi(row_fasce.oraFine);
- IF (var_oraEntrata >= var_oraInizioFascia AND var_oraUscita <= var_oraFineFascia) THEN
- -- caso in cui l'entrata e l'uscita avvengono nella stessa fascia oraria
- -- aggiungo tutti i secondi dell'ingresso a quella fascia
- var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
- + var_oraUscita - var_oraEntrata;
- -- +1 al contatore degli ingressi della fascia
- var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
- ELSIF (var_oraEntrata >= var_oraInizioFascia AND var_oraEntrata <= var_oraFineFascia) THEN
- -- caso in cui l'entrata avviene in una fascia oraria diversa da quella di uscita
- -- aggiungo solamente la parte iniziale dell'ingresso a quella fascia
- var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
- + var_oraFineFascia - var_oraEntrata;
- -- +1 al contatore degli ingressi della fascia
- var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
- ElSIF (var_oraUscita >= var_oraInizioFascia AND var_oraUscita <= var_oraFineFascia) THEN
- -- caso in cui l'uscita avviene in una fascia oraria diversa da quella di entrata
- -- aggiungo solamente la parte finale dell'ingresso a quella fascia
- var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
- + var_oraUscita - var_oraInizioFascia;
- -- +1 al contatore degli ingressi della fascia
- var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
- ELSE
- -- casi in cui la fascia che sto considerando non mi è utile
- EXIT;
- END IF;
- END IF;
- END LOOP;
- -- avanzo di un giorno
- var_giornoCorrente := var_giornoCorrente + INTERVAL '1' DAY;
- END LOOP;
- END LOOP;
- FOR i IN 1 .. 12
- LOOP
- -- calcolo la media rispetto agli ingressi che si sono avuti in quella fascia
- IF (var_contatoriIngressi(i) != 0) THEN
- var_calcoloSecondi(i) := TRUNC(var_calcoloSecondi(i) / var_contatoriIngressi(i));
- END IF;
- END LOOP;
- RETURN var_calcoloSecondi;
- END calcoloTempoFascia;
- PROCEDURE dettagliXGiorni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dettagli ingressi maggiori di X giorni', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA DETTAGLI INGRESSI MAGGIORI DI X GIORNI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaDettagliXGiorni');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- -- input del numero di giorni che si andranno a considerare per gli ingressi
- modGUI.inserisciInput('var_giorni', 'Giorni', 'number', TRUE);
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('RICERCA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END dettagliXGiorni;
- PROCEDURE permanenzaNonAbbonati(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Statistiche permanenza', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('TEMPO MEDIO PERMANENZA NON ABBONATI');
- modGUI.chiudiIntestazione(2);
- IF ruolo = 'A' OR ruolo = 'S' THEN
- DECLARE
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM autorimesse
- ORDER BY autorimesse.indirizzo;
- -- l'amministratore e superuser potranno vedere tutti gli anni degli ingressi.
- CURSOR cur_anni IS
- SELECT DISTINCT EXTRACT(YEAR FROM oraentrata) AS anno
- FROM ingressiorari
- WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
- UNION
- SELECT DISTINCT EXTRACT(YEAR FROM orauscita) AS anno
- FROM ingressiOrari
- WHERE oraentrata IS NOT NULL AND oraUscita IS NOT NULL;
- row_anno cur_anni%ROWTYPE;
- BEGIN
- OPEN cur_anni;
- FETCH cur_anni INTO row_anno;
- IF cur_anni%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Non ci sono ingressi registrati per nessuna autorimessa');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_anni;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaPermanenza');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- FOR row_autorimessa IN cur_autorimesse
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- END LOOP;
- modGUI.chiudiSelect;
- modGUI.apriSelect('var_anno', 'ANNO');
- LOOP
- modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
- FETCH cur_anni INTO row_anno;
- EXIT WHEN cur_anni%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- CLOSE cur_anni;
- END;
- ELSIF ruolo = 'R' THEN
- DECLARE
- var_idSede INTEGER;
- BEGIN
- SELECT sedi.idSede INTO var_idSede
- FROM sessioni
- INNER JOIN persone ON sessioni.idpersona = persone.idpersona
- INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
- INNER JOIN sedi ON dipendenti.iddipendente = sedi.iddipendente
- WHERE permanenzanonabbonati.nome = persone.nome AND sessioni.ruolo = 'R' AND
- permanenzaNonAbbonati.id_Sessione = sessioni.idSessione;
- DECLARE
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM autorimesse
- WHERE var_idSede = autorimesse.idSede
- ORDER BY autorimesse.indirizzo;
- -- i responsabili potranno vedere solamente gli anni degli ingressi alle autorimesse collegate alla sede
- -- gestita
- CURSOR cur_anni IS
- SELECT anno FROM
- (
- SELECT DISTINCT idBox, EXTRACT(YEAR FROM oraentrata) AS anno
- FROM ingressiorari
- WHERE orauscita IS NOT NULL
- UNION
- SELECT DISTINCT idBox,EXTRACT(YEAR FROM orauscita) AS anno
- FROM ingressiOrari
- WHERE oraentrata IS NOT NULL
- ) prova
- INNER JOIN box ON prova.idbox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE var_idSede = autorimesse.idSede
- GROUP BY anno
- ORDER BY anno;
- row_anno cur_anni%ROWTYPE;
- BEGIN
- OPEN cur_anni;
- FETCH cur_anni INTO row_anno;
- IF cur_anni%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Non ci sono ingressi registrati per le autorimesse del responsabile');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_anni;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaPermanenza');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- FOR row_autorimessa IN cur_autorimesse
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- END LOOP;
- modGUI.chiudiSelect;
- modGUI.apriSelect('var_anno', 'ANNO');
- LOOP
- modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
- FETCH cur_anni INTO row_anno;
- EXIT WHEN cur_anni%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- CLOSE cur_anni;
- END;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- RETURN;
- END;
- END IF;
- modGUI.inserisciTesto('MEDIA PER:');
- modGUI.aCapo;
- modGUI.inserisciRadioButton('MESE', 'var_tipo', '0', true);
- modGUI.inserisciRadioButton('FASCIA ORARIA', 'var_tipo', '1', false);
- modGUI.inserisciRadioButton('CLIENTE', 'var_tipo', '2', false);
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('CALCOLA MEDIA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END permanenzaNonAbbonati;
- PROCEDURE areeFasce(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza associazioni aree con fasce', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA ASSOCIAZIONI AREE CON FASCE');
- modGUI.chiudiIntestazione(2);
- IF ruolo = 'A' OR ruolo = 'S' OR ruolo = 'C' THEN
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaAreeFasce');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- -- l'amministrator, super user e i clienti potranno vedere informazioni su tutte le aree
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- modGUI.inserisciOpzioneSelect('', '-- Tutte le autorimesse --');
- FOR row_autorimessa IN (SELECT indirizzo
- FROM autorimesse)
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- END LOOP;
- modGUI.chiudiSelect;
- ELSIF ruolo = 'R' THEN
- DECLARE
- var_idSede INTEGER;
- BEGIN
- SELECT sedi.idSede INTO var_idSede
- FROM sessioni
- INNER JOIN persone ON sessioni.idpersona = persone.idpersona
- INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
- INNER JOIN sedi ON dipendenti.iddipendente = sedi.iddipendente
- WHERE areefasce.nome = persone.nome AND sessioni.ruolo = 'R' AND areefasce.id_Sessione = sessioni.idSessione;
- DECLARE
- -- i responsabili potranno vedere solamente le autorimesse collegate alla loro sede
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM sedi
- INNER JOIN autorimesse ON sedi.idSede = autorimesse.idsede
- WHERE autorimesse.idSede = var_idSede;
- row_autorimessa cur_autorimesse%ROWTYPE;
- BEGIN
- OPEN cur_autorimesse;
- FETCH cur_autorimesse INTO row_autorimessa;
- IF cur_autorimesse%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('La sede del responsabile non e'' associata a nessuna autorimessa');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaAreeFasce');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- FETCH cur_autorimesse INTO row_autorimessa;
- EXIT WHEN cur_autorimesse%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- END;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- RETURN;
- END;
- ELSIF ruolo = 'O' THEN
- DECLARE
- -- gli operatori potranno vedere solo le autorimesse in cui lavorano
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM sessioni
- INNER JOIN persone ON sessioni.idpersona = persone.idpersona
- INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
- INNER JOIN autorimesse ON dipendenti.idautorimessa = autorimesse.idautorimessa
- WHERE areefasce.nome = persone.nome AND sessioni.ruolo = 'O';
- row_autorimessa cur_autorimesse%ROWTYPE;
- BEGIN
- OPEN cur_autorimesse;
- FETCH cur_autorimesse INTO row_autorimessa;
- IF cur_autorimesse%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('L''operatore non lavora in nessuna autorimessa');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaAreeFasce');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- LOOP
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- FETCH cur_autorimesse INTO row_autorimessa;
- EXIT WHEN cur_autorimesse%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- END;
- END IF;
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('CERCA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END areeFasce;
- PROCEDURE visualizzaDettagliXGiorni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_giorni VARCHAR2) IS
- CURSOR cur_dettagli IS
- SELECT nome, cognome, indirizzo, autorimesse.idAutorimessa, clienteid
- FROM (
- SELECT persone.nome, persone.cognome, clienti.idcliente AS clienteid, idbox
- FROM clienti
- INNER JOIN persone ON clienti.idpersona = persone.idpersona
- INNER JOIN effettuaingressiorari ON effettuaingressiorari.idcliente = clienti.idcliente
- INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
- WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL AND ingressiorari.cancellato = 'F'
- UNION
- SELECT persone.nome, persone.cognome, clienti.idcliente AS clienteid, idbox
- FROM clienti
- INNER JOIN persone ON clienti.idpersona = persone.idpersona
- INNER JOIN effettuaIngressiAbbonamenti ON clienti.idcliente = effettuaingressiabbonamenti.idcliente
- INNER JOIN ingressiabbonamenti ON effettuaingressiabbonamenti.idingressoabbonamento = ingressiabbonamenti.idingressoabbonamento
- WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
- ) tabApp
- INNER JOIN box ON tabApp.idbox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE clienteid NOT IN (SELECT idCliente
- FROM effettuaingressiorari
- INNER JOIN ingressiorari
- ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
- WHERE ((CAST(orauscita AS DATE) - CAST(oraentrata AS DATE))) <= var_giorni) AND
- clienteid NOT IN (SELECT idCliente
- FROM effettuaIngressiAbbonamenti
- INNER JOIN ingressiabbonamenti
- ON effettuaingressiabbonamenti.idingressoabbonamento = ingressiabbonamenti.idingressoabbonamento
- WHERE ((CAST(orauscita AS DATE) - CAST(oraentrata AS DATE))) <= var_giorni)
- GROUP BY nome, cognome, indirizzo, autorimesse.idautorimessa, clienteid
- ORDER BY indirizzo;
- var_exists BOOLEAN := FALSE;
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dettagli ingressi maggiori di X giorni', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA DETTAGLI INGRESSI MAGGIORI DI X GIORNI');
- modGUI.chiudiIntestazione(2);
- IF TO_NUMBER(var_giorni) < 0 THEN
- modGUI.apriDiv;
- modGUI.esitoOperazione('KO', 'Numero giorni non valido');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.dettagliXgiorni');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('CLIENTE');
- modGUI.intestazioneTabella('DETTAGLI CLIENTE');
- modGUI.intestazioneTabella('AUTORIMESSE');
- modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
- modGUI.chiudiRigaTabella;
- FOR row_dettagli IN cur_dettagli
- LOOP
- var_exists := TRUE;
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_dettagli.nome || ' ' || row_dettagli.cognome);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_dettagli.clienteid);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_dettagli.indirizzo);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_dettagli.idAutorimessa);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.dettagliXgiorni');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END visualizzaDettagliXGiorni;
- PROCEDURE visualizzaPermanenza(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2, var_anno VARCHAR2,
- var_tipo VARCHAR2) IS
- var_giorni INTEGER;
- var_ore INTEGER;
- var_minuti INTEGER;
- BEGIN
- modGUI.apriPagina('HoC | Statistiche permanenza', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('TEMPO MEDIO PERMANENZA NON ABBONATI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AUTORIMESSA DI RIFERIMENTO: ');
- DECLARE
- var_idAutorimessa INTEGER;
- BEGIN
- SELECT idAutorimessa INTO var_idAutorimessa
- FROM autorimesse
- WHERE indirizzo = var_autorimessa;
- modGUI.collegamento(var_autorimessa, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || var_idAutorimessa);
- END;
- modGUI.aCapo;
- modGUI.inserisciTesto('ANNO DI RIFERIMENTO: ');
- modGUI.collegamento(var_anno,
- 'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo ||
- '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || '&var_targa=' || '&var_dataInizio=' ||
- var_anno || '-1-1' || '&var_dataFine=' || var_anno || '-12-31');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv;
- IF var_tipo = 0 THEN
- DECLARE
- var_calcoloSecondi array_int := array_int();
- BEGIN
- var_calcoloSecondi := calcoloTempoMese(var_autorimessa, var_anno);
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('MESE');
- modGUI.intestazioneTabella('GIORNI');
- modGUI.intestazioneTabella('ORE');
- modGUI.intestazioneTabella('MINUTI');
- modGUI.intestazioneTabella('SECONDI');
- modGUI.chiudiRigaTabella;
- FOR i IN 1..12
- LOOP
- DECLARE
- var_show BOOLEAN := var_calcoloSecondi(i) != 0;
- BEGIN
- var_minuti := TRUNC(var_calcoloSecondi(i) / 60);
- var_calcoloSecondi(i) := var_calcoloSecondi(i) - (var_minuti * 60);
- var_ore := TRUNC(var_minuti / 60);
- var_minuti := var_minuti - (var_ore * 60);
- var_giorni := TRUNC(var_ore / 24);
- var_ore := var_ore - (var_giorni * 24);
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- IF NOT var_show THEN
- modGUI.ElementoTabella(TO_CHAR(TO_DATE(i, 'MM'), 'Month', 'NLS_DATE_LANGUAGE = italian'));
- ELSE
- -- se ci sono stati ingressi per quel mese inserisco un collegamento per farli visualizzare
- modGUI.collegamento(TO_CHAR(TO_DATE(i, 'MM'), 'Month', 'NLS_DATE_LANGUAGE = italian'),
- 'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo='
- || ruolo || '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || '&var_targa=' ||
- '&var_dataInizio=' || var_anno || '-' || i || '-1' || '&var_dataFine=' ||
- TO_CHAR(LAST_DAY(TO_DATE('1-' || i || '-' || var_anno, 'DD-MM-RR')), 'YYYY-MM-DD'));
- END IF;
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_giorni);
- modGUI.chiudiElementoTabella;
- dbms_output.put_line('giorni ' || var_giorni);
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_ore);
- modGUI.chiudiElementoTabella;
- dbms_output.put_line('ore ' || var_ore);
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_minuti);
- modGUI.chiudiElementoTabella;
- dbms_output.put_line('minuti ' || var_minuti);
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_calcoloSecondi(i));
- modGUI.chiudiElementoTabella;
- dbms_output.put_line('secondi ' || var_calcoloSecondi(i));
- modGUI.chiudiRigaTabella;
- END;
- END LOOP;
- END;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- ELSIF var_tipo = 1 THEN
- DECLARE
- --contiene le fasce orarie ordinate per giorno e ora di inizio
- CURSOR cur_fasce IS
- SELECT fasceorarie.idfasciaoraria, fasceorarie.nome
- FROM fasceorarie
- ORDER BY CASE
- WHEN giorno = 'LUN' THEN 1
- WHEN giorno = 'MAR' THEN 2
- WHEN giorno = 'MER' THEN 3
- WHEN giorno = 'GIO' THEN 4
- WHEN giorno = 'VEN' THEN 5
- WHEN giorno = 'SAB' THEN 6
- WHEN giorno = 'DOM' THEN 7
- END, orainizio ASC, oraFine ASC;
- var_calcoloSecondi nested_fasce := nested_fasce();
- row_fascia cur_fasce%ROWTYPE;
- BEGIN
- OPEN cur_fasce;
- FETCH cur_fasce INTO row_fascia;
- IF cur_fasce%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Non ci sono ancora fasce orarie');
- modGUI.chiudiIntestazione(3);
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.permanenzaNonAbbonati');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- CLOSE cur_fasce;
- RETURN;
- END IF;
- var_calcoloSecondi := calcoloTempoFascia(var_autorimessa, var_anno);
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('FASCIA');
- modGUI.intestazioneTabella('DETTAGLIO FASCIA');
- modGUI.intestazioneTabella('GIORNI');
- modGUI.intestazioneTabella('ORE');
- modGUI.intestazioneTabella('MINUTI');
- modGUI.intestazioneTabella('SECONDI');
- modGUI.chiudiRigaTabella;
- LOOP
- var_minuti := TRUNC(var_calcoloSecondi(row_fascia.idfasciaoraria) / 60);
- var_calcoloSecondi(row_fascia.idfasciaoraria) := var_calcoloSecondi(row_fascia.idfasciaoraria) - (var_minuti * 60);
- var_ore := TRUNC(var_minuti / 60);
- var_minuti := var_minuti - (var_ore * 60);
- var_giorni := TRUNC(var_ore / 24);
- var_ore := var_ore - (var_giorni * 24);
- modGui.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_fascia.nome);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo1.dettaglioFascia', id_Sessione, nome, ruolo, row_fascia.idFasciaoraria);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_giorni);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_ore);
- modGUI.chiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_minuti);
- modGUI.ChiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_calcoloSecondi(row_fascia.idfasciaoraria));
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- FETCH cur_fasce INTO row_fascia;
- EXIT WHEN cur_fasce%NOTFOUND;
- END LOOP;
- END;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- ELSIF var_tipo = 2 THEN
- DECLARE
- var_secondi INTEGER;
- var_minuti INTEGER;
- var_ore INTEGER;
- var_giorni INTEGER;
- CURSOR cur_media IS
- SELECT clienti.idCliente, nome, cognome, codicefiscale,
- AVG(((CASE WHEN EXTRACT(YEAR FROM orauscita) = var_anno
- THEN CAST(orauscita AS DATE)
- ELSE TO_DATE('31-DIC-' || var_anno || ' 23:59:59', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian')
- END)
- -
- (CASE WHEN EXTRACT(YEAR FROM oraEntrata) = var_anno
- THEN CAST(oraEntrata AS DATE)
- ELSE TO_DATE('1-GEN-' || var_anno || ' 0:0:0', 'DD-MON-RR HH24:MI:SS','NLS_DATE_LANGUAGE = italian')
- END))
- * 86400) AS media
- FROM clienti
- INNER JOIN persone ON clienti.idPersona = persone.idpersona
- INNER JOIN effettuaingressiorari ON clienti.idcliente = effettuaingressiorari.idcliente
- INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
- INNER JOIN box ON ingressiorari.idBox = box.idBox
- INNER JOIN aree ON box.idArea = aree.idArea
- INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
- WHERE (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT (YEAR FROM orauscita) = var_anno) AND
- autorimesse.indirizzo = var_autorimessa AND ingressiorari.cancellato = 'F' AND
- oraentrata IS NOT NULL AND orauscita IS NOT NULL
- GROUP BY clienti.idCliente, codiceFiscale, nome, cognome
- ORDER BY nome, cognome;
- var_exists BOOLEAN := FALSE;
- BEGIN
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('CLIENTE');
- modGUI.intestazioneTabella('DETTAGLI CLIENTE');
- modGUI.intestazioneTabella('GIORNI');
- modGUI.intestazioneTabella('ORE');
- modGUI.intestazioneTabella('MINUTI');
- modGUI.intestazioneTabella('SECONDI');
- modGUI.chiudiRigaTabella;
- FOR row_media IN cur_media
- LOOP
- var_exists := TRUE;
- var_secondi := row_media.media;
- var_minuti := TRUNC(var_secondi / 60);
- var_secondi := var_secondi - (var_minuti * 60);
- var_ore := TRUNC(var_minuti / 60);
- var_minuti := var_minuti - (var_ore * 60);
- var_giorni := TRUNC(var_ore / 24);
- var_ore := var_ore - (var_giorni * 24);
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.collegamento(row_media.nome || ' ' || row_media.cognome,
- 'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo ||
- '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || row_media.codicefiscale || '&var_targa=' ||
- '&var_dataInizio=' || var_anno || '-1-1' || '&var_dataFine=' || '2019-12-31');
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_media.idCliente);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_giorni);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_ore);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_minuti);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_secondi);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- END IF;
- END;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'CALCOLA NUOVA MEDIA', 'gruppo1.permanenzaNonAbbonati');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END visualizzaPermanenza;
- PROCEDURE percentualePrenotazioni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- -- solo amministratore e super user
- BEGIN
- modGUI.apriPagina('HoC | Percentuale prenotazioni', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('PERCENTUALE PRENOTAZIONI');
- modGUI.chiudiIntestazione(2);
- DECLARE
- CURSOR cur_anni IS
- -- l'amministratore e il super user potranno vedere tutti gli anni in cui sono stati effettuati ingressi
- SELECT DISTINCT EXTRACT(YEAR FROM oraentrata) AS anno
- FROM ingressiorari
- WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
- UNION
- SELECT DISTINCT EXTRACT(YEAR FROM orauscita) AS anno
- FROM ingressiOrari
- WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL;
- row_anno cur_anni%ROWTYPE;
- BEGIN
- OPEN cur_anni;
- FETCH cur_anni INTO row_anno;
- IF cur_anni%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.InserisciTesto('Non ci sono ingressi registrati');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_anni;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaPercentuale');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_anno', 'ANNO');
- LOOP
- modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
- FETCH cur_anni INTO row_anno;
- EXIT WHEN cur_anni%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- CLOSE cur_anni;
- END;
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.inserisciTesto('PERCENTUALE PER:');
- modGUI.aCapo;
- modGUI.inserisciRadioButton('AUTORIMESSA', 'var_tipo', '0', true);
- modGUI.inserisciRadioButton('CLIENTE', 'var_tipo', '1', false);
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('CALCOLA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END percentualePrenotazioni;
- PROCEDURE visualizzaPercentuale(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_anno VARCHAR2, var_tipo VARCHAR2) IS
- -- solo amministratore e super user
- prenotazione rec_prenot;
- BEGIN
- modGUI.apriPagina('HoC | Percentuale prenotazioni', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- IF var_tipo = 0 THEN
- DECLARE
- CURSOR cur_autorimesse IS
- SELECT idautorimessa, indirizzo
- FROM autorimesse
- ORDER BY indirizzo ASC;
- var_exists BOOLEAN := FALSE;
- BEGIN
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('PERCENTUALE PER AUTORIMESSE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('AUTORIMESSA');
- modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
- modGUI.intestazioneTabella('INGRESSI TOTALI');
- modGUI.intestazioneTabella('INGRESSI CON PRENOTAZIONE');
- modGUI.intestazioneTabella('INGRESSI SENZA PRENOTAZIONE');
- modGUI.intestazioneTabella('PERCENTUALE');
- modGUI.chiudiRigaTabella;
- FOR row_autorimesse IN cur_autorimesse
- LOOP
- prenotazione := calcoloInfoPrenotAutorim(row_autorimesse.idAutorimessa, var_anno);
- var_exists := TRUE;
- modGUI.apriRigaTabella;
- -- INDIRIZZO + DETTAGLI DELL'AUTORIMESSA --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_autorimesse.indirizzo);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_autorimesse.idAutorimessa);
- modGUI.chiudiElementoTabella;
- -- NUMERO DI INGRESSI TOTALI --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_totale);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_conPrenotazione);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_senzaPrenotazione);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- IF prenotazione.var_percentuale IS NULL THEN
- modGUI.elementoTabella('0%');
- ELSE
- modGUI.elementoTabella(prenotazione.var_percentuale || '%');
- END IF;
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- END IF;
- END;
- ELSE
- DECLARE
- CURSOR cur_persone IS
- SELECT idCliente, nome, cognome
- FROM persone
- INNER JOIN clienti ON persone.idpersona = clienti.idpersona
- ORDER BY cognome, nome ASC;
- var_exists BOOLEAN := FALSE;
- BEGIN
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('PERCENTUALE PER CLIENTI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('GENERALITA''');
- modGUI.intestazioneTabella('DETTAGLI CLIENTE');
- modGUI.intestazioneTabella('INGRESSI TOTALI');
- modGUI.intestazioneTabella('INGRESSI CON PRENOTAZIONE');
- modGUI.intestazioneTabella('INGRESSI SENZA PRENOTAZIONE');
- modGUI.intestazioneTabella('PERCENTUALE');
- modGUI.chiudiRigaTabella;
- FOR row_persone IN cur_persone
- LOOP
- prenotazione := calcoloInfoPrenotCliente(row_persone.idcliente, var_anno);
- var_exists := TRUE;
- modGUI.apriRigaTabella;
- -- GENERALITA' DEL CLIENTE --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_persone.cognome || ' ' || row_persone.nome);
- modGUI.chiudiElementoTabella;
- -- DETTAGLI DEL CLIENTE --
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_persone.idCliente);
- modGUI.chiudiElementoTabella;
- -- NUMERO DI INGRESSI TOTALI --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_totale);
- modGUI.chiudiElementoTabella;
- -- NUMERO DI PRENOTAZIONI --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_conPrenotazione);
- modGUI.chiudiElementoTabella;
- -- NUMERO DI INGRESSI SENZA PRENOTAZIONE --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(prenotazione.var_senzaPrenotazione);
- modGUI.chiudiElementoTabella;
- -- PERCENTUALE DI PRENOTAZIONI RISPETTO AL TOTALE
- modGUI.apriElementoTabella;
- IF prenotazione.var_percentuale IS NULL THEN
- modGUI.elementoTabella('0%');
- ELSE
- modGUI.elementoTabella(prenotazione.var_percentuale || '%');
- END IF;
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- END IF;
- END;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'CALCOLO NUOVA PERCENTUALE', 'gruppo1.percentualePrenotazioni');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END visualizzaPercentuale;
- PROCEDURE cronologiaAccessi(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- CURSOR cur_autorimesse IS
- SELECT idautorimessa, indirizzo
- FROM autorimesse;
- row_autorimesse cur_autorimesse%ROWTYPE;
- BEGIN
- modGUI.apriPagina('HoC | Cronologia Accessi', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.InserisciTesto('CRONOLOGIA ACCESSI');
- modGUI.chiudiIntestazione(2);
- IF (ruolo = 'A' OR ruolo = 'S') THEN
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaCronologia');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- -- l'amministratore e super user potranno filtrare per qualasiasi autorimessa
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- modGUI.inserisciOpzioneSelect('', '--Tutte le autorimesse--');
- FOR row_autorimesse IN (SELECT indirizzo
- FROM autorimesse)
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimesse.indirizzo, row_autorimesse.indirizzo);
- END LOOP;
- modGUI.chiudiSelect;
- ELSIF ruolo = 'R' THEN
- DECLARE
- var_idSede INTEGER;
- BEGIN
- SELECT idSede INTO var_idSede
- FROM sessioni
- INNER JOIN dipendenti ON sessioni.idpersona = dipendenti.idpersona
- INNER JOIN persone ON dipendenti.idpersona = persone.idpersona
- INNER JOIN sedi ON dipendenti.idDipendente = sedi.iddipendente
- WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'R' AND
- sessioni.idSessione = cronologiaAccessi.id_Sessione;
- DECLARE
- -- il responsabile puo' filtrare solamente per le autorimesse collegate alla sua sede
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM sedi
- INNER JOIN autorimesse ON sedi.idsede = autorimesse.idsede
- WHERE sedi.idSede = var_idSede;
- row_autorimessa cur_autorimesse%ROWTYPE;
- BEGIN
- OPEN cur_autorimesse;
- FETCH cur_autorimesse INTO row_autorimessa;
- IF cur_autorimesse%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('La sede del responsabile non ha autorimesse collegate');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_autorimesse;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaCronologia');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- FETCH cur_autorimesse INTO row_autorimessa;
- EXIT WHEN cur_autorimesse%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- END;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- RETURN;
- END;
- ELSIF ruolo = 'O' THEN
- DECLARE
- -- l'operatore puo' filtrare solamente per le autorimesse in cui lavora
- CURSOR cur_autorimesse IS
- SELECT autorimesse.indirizzo
- FROM sessioni
- INNER JOIN dipendenti ON sessioni.idpersona = dipendenti.idpersona
- INNER JOIN persone ON dipendenti.idpersona = persone.idpersona
- INNER JOIN autorimesse ON dipendenti.idautorimessa = autorimesse.idautorimessa
- WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'O' AND
- sessioni.idSessione = cronologiaAccessi.id_Sessione;
- row_autorimessa cur_autorimesse%ROWTYPE;
- BEGIN
- OPEN cur_autorimesse;
- FETCH cur_autorimesse INTO row_autorimessa;
- IF cur_autorimesse%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('L''operatore non lavora in nessuna autorimessa');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_autorimesse;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaCronologia');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- FETCH cur_autorimesse INTO row_autorimessa;
- EXIT WHEN cur_autorimesse%NOTFOUND;
- CLOSE cur_autorimesse;
- END LOOP;
- modGUI.chiudiSelect;
- END;
- ELSIF ruolo = 'C' THEN
- DECLARE
- -- il cliente puo' filtrare solamente per le autorimesse in cui ha effettuato ingressi
- CURSOR cur_autorimesse IS
- SELECT DISTINCT autorimesse.indirizzo
- FROM sessioni
- INNER JOIN clienti ON sessioni.idpersona = clienti.idpersona
- INNER JOIN persone ON clienti.idpersona = persone.idpersona
- INNER JOIN effettuaingressiorari ON clienti.idcliente = effettuaingressiorari.idcliente
- INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
- INNER JOIN box ON ingressiorari.idbox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'C' AND
- sessioni.idSessione = cronologiaAccessi.id_Sessione AND oraentrata IS NOT NULL AND orauscita IS NOT NULL
- ORDER BY autorimesse.indirizzo;
- row_autorimessa cur_autorimesse%ROWTYPE;
- BEGIN
- OPEN cur_autorimesse;
- FETCH cur_autorimesse INTO row_autorimessa;
- IF cur_autorimesse%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Il cliente non ha mai effettuato accessi con biglietto');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_autorimesse;
- RETURN;
- END IF;
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaCronologia');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
- LOOP
- modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
- FETCH cur_autorimesse INTO row_autorimessa;
- EXIT WHEN cur_autorimesse%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- CLOSE cur_autorimesse;
- END;
- END IF;
- -- codice fiscale, campo non obbligatorio
- IF ruolo != 'C' THEN
- -- se l'utente non e' un cliente espongo il campo di input per inserire un codice fiscale
- modGUI.inserisciInput('var_cliente', 'Codice Fiscale', 'text', false);
- ELSE
- -- se l'utente non e' un cliente evito di fargli inserire codici fiscali di altre persone o di nuovo il suo
- DECLARE
- var_cf CHAR(16);
- BEGIN
- SELECT codiceFiscale INTO var_cf
- FROM sessioni
- INNER JOIN persone ON sessioni.idpersona = persone.idpersona
- WHERE persone.nome = cronologiaAccessi.nome AND ruolo = 'C';
- modGUI.inserisciInputHidden('var_cliente', var_cf);
- END;
- END IF;
- -- targa, campo non obbligatorio
- modGUI.inserisciInput('var_targa', 'Targa', 'text', FALSE);
- -- data di inizio, campo obbligatorio
- modGUI.inserisciInput('var_dataInizio', 'DATA INIZIO', 'date', TRUE);
- -- data di fine, campo obbligatorio
- modGUI.inserisciInput('var_dataFine', 'DATA FINE', 'date', TRUE);
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('CERCA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END cronologiaAccessi;
- PROCEDURE visualizzaCronologia(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2 DEFAULT '',
- var_cliente VARCHAR2 DEFAULT '', var_targa VARCHAR2 DEFAULT '', var_dataInizio VARCHAR2, var_dataFine VARCHAR2) IS
- var_contaAutorimessa INTEGER;
- var_contaCliente INTEGER;
- var_contaTarga INTEGER;
- CURSOR cur_ingressi IS
- SELECT IngressiOrari.idIngressoOrario, entrataprevista, oraentrata, orauscita,
- clienti.idCliente, CodiceFiscale,
- targa, modello, veicoli.idVeicolo,
- autorimesse.idAutorimessa, autorimesse.indirizzo,
- aree.idArea,
- idmulta
- FROM ingressiorari
- INNER JOIN box ON ingressiOrari.idBox = box.idBox
- INNER JOIN aree ON box.idArea = aree.idArea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- INNER JOIN clienti ON effettuaIngressiOrari.idCliente = clienti.idCliente
- INNER JOIN persone ON clienti.idPersona = persone.idPersona
- INNER JOIN veicoli ON effettuaingressiorari.idveicolo = veicoli.idveicolo
- WHERE autorimesse.indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
- ELSE var_autorimessa END) AND
- codiceFiscale LIKE (CASE WHEN var_cliente IS NULL THEN '%'
- ELSE var_cliente END) AND
- veicoli.targa LIKE (CASE WHEN var_targa IS NULL THEN '%'
- ELSE var_targa END) AND
- oraEntrata <= TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_dataFine, 'YYYY-MM-DD'), 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS') AND
- oraUscita >= TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_dataInizio, 'YYYY-MM-DD'), 'DD-MON-RR') || ' 0:0:0', 'DD-MON-RR HH24:MI:SS') AND
- ingressiorari.cancellato = 'F'
- ORDER BY autorimesse.idAutorimessa, clienti.idCliente, veicoli.idVeicolo, oraEntrata ASC;
- var_noRecord BOOLEAN := true;
- BEGIN
- modGUI.apriPagina('HoC | Cronologia Accessi', id_Sessione, nome, ruolo);
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('CRONOLOGIA ACCESSI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- IF TO_DATE(var_dataInizio, 'YYYY-MM-DD') > TO_DATE(var_dataFine, 'YYYY-MM-DD') THEN
- modGUI.esitoOperazione('KO', 'Data inizio maggiore di data fine');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- IF var_cliente IS NOT NULL THEN
- IF LENGTH(var_cliente) != 16 THEN
- modGUI.esitoOperazione('KO', 'Codice fiscale non valido');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- IF NOT checkCliente(var_cliente) THEN
- modGUI.esitoOperazione('KO', 'Il cliente specificato non esiste');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- END IF;
- IF var_targa IS NOT NULL THEN
- IF LENGTH(var_targa) != 7 THEN
- modGUI.esitoOperazione('KO', 'Targa non valida');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- IF ruolo = 'C' THEN
- -- in questo modo non espongo i link alle targhe di altri clienti
- IF NOT checkTarga(var_targa, var_cliente) THEN
- modGUI.esitoOperazione('KO', 'Il veicolo specificato non e'' di proprieta'' del cliente o non esiste');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- ELSE
- IF NOT checkTarga(var_targa, '') THEN
- modGUI.esitoOperazione('KO', 'Il veicolo specificato non esiste');
- modGUI.chiudiDiv;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- END IF;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('DATA DI INIZIO: ' || TO_CHAR(TO_DATE(var_dataInizio, 'YYYY-MM-DD'), 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.aCapo;
- modGUI.inserisciTesto('DATA DI FINE: ' || TO_CHAR(TO_DATE(var_dataFine, 'YYYY-MM-DD'), 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.aCapo;
- IF var_autorimessa IS NOT NULL THEN
- modGUI.inserisciTesto('AUTORIMESSA: ');
- DECLARE
- var_idAutorimessa INTEGER;
- BEGIN
- SELECT idAutorimessa INTO var_idAutorimessa
- FROM autorimesse
- WHERE indirizzo = var_autorimessa;
- modGUI.collegamento(var_autorimessa, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || var_idAutorimessa);
- END;
- modGUI.aCapo;
- END IF;
- IF var_cliente IS NOT NULL THEN
- modGUI.inserisciTesto('CLIENTE: ');
- DECLARE
- var_idCliente INTEGER;
- BEGIN
- SELECT idCliente INTO var_idCliente
- FROM clienti
- INNER JOIN persone ON clienti.idpersona = persone.idpersona
- WHERE persone.codicefiscale = var_cliente;
- modGUI.collegamento(var_cliente, 'gruppo5.moreInfoClient?id_Sessione=' || id_Sessione || '&nome=' || nome ||
- '&ruolo=' || ruolo || '&idRiga=' || var_idCliente);
- modGUI.aCapo;
- END;
- END IF;
- IF var_targa IS NOT NULL THEN
- modGUI.inserisciTesto('VEICOLO: ');
- DECLARE
- var_idVeicolo INTEGER;
- BEGIN
- SELECT idVeicolo INTO var_idVeicolo
- FROM veicoli
- WHERE veicoli.targa = var_targa;
- modGUI.collegamento(var_targa, 'gruppo5.moreInfoCar?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo='
- || ruolo || '&idRiga=' || var_idVeicolo);
- END;
- END IF;
- modGUI.chiudiIntestazione(3);
- DECLARE
- -- variabili di controllo per organizzare le tabelle da far vedere
- primo INTEGER;
- secondo INTEGER;
- terzo INTEGER;
- BEGIN
- primo := -1;
- secondo := -1;
- terzo := -1;
- FOR row_ingressi IN cur_ingressi
- LOOP
- var_noRecord := FALSE;
- IF primo != row_ingressi.idAutorimessa THEN
- IF primo != -1 THEN
- modGUI.chiudiTabella;
- modGUI.apriIntestazione(3);
- ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
- modGUI.apriIntestazione(3);
- END IF;
- IF var_autorimessa IS NULL THEN
- modGUI.inserisciTesto('AUTORIMESSA: ');
- modGUI.collegamento(row_ingressi.indirizzo, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione ||
- '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_ingressi.idAutorimessa);
- END IF;
- modGUI.aCapo;
- primo := row_ingressi.idAutorimessa;
- secondo := -1;
- terzo := -1;
- END IF;
- IF secondo != row_ingressi.idcliente THEN
- IF secondo != -1 THEN
- modGUI.chiudiTabella;
- modGUI.apriIntestazione(3);
- ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
- modGUI.apriIntestazione(3);
- END IF;
- IF var_cliente IS NULL THEN
- modGUI.inserisciTesto('CLIENTE: ');
- modGUI.collegamento(row_ingressi.codiceFiscale, 'gruppo5.moreInfoClient?id_Sessione=' || id_Sessione ||
- '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_ingressi.idCliente);
- modGUI.aCapo;
- END IF;
- secondo := row_ingressi.idCliente;
- terzo := -1;
- END IF;
- IF terzo != row_ingressi.idVeicolo THEN
- IF terzo != -1 THEN
- modGUI.chiudiTabella;
- modGUI.apriIntestazione(3);
- ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
- modGUI.apriIntestazione(3);
- END IF;
- IF var_targa IS NULL THEN
- modGUI.inserisciTesto('VEICOLO: ');
- DECLARE
- var_idVeicolo INTEGER;
- BEGIN
- SELECT idVeicolo INTO var_idVeicolo
- FROM veicoli
- WHERE targa = row_ingressi.targa;
- modGUI.collegamento(row_ingressi.targa, 'gruppo5.moreInfoCar?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || var_idVeicolo);
- END;
- END IF;
- modGUI.chiudiIntestazione(3);
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('ENTRATA PREVISTA');
- modGUI.intestazioneTabella('ORA ENTRATA');
- modGUI.intestazioneTabella('ORA USCITA');
- modGUI.intestazioneTabella('DETTAGLI INGRESSO');
- modGUI.intestazioneTabella('DETTAGLI AREA');
- modGUI.intestazioneTabella('MULTA');
- modGUI.chiudiRigaTabella;
- terzo := row_ingressi.idVeicolo;
- END IF;
- modGUI.apriRigaTabella;
- -- ENTRATA PREVISTA--
- modGUI.apriElementoTabella;
- IF row_ingressi.entrataPrevista IS NOT NULL THEN
- modGUI.elementoTabella(TO_CHAR(row_ingressi.entrataPrevista, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.aCapo;
- modGUI.elementoTabella(TO_CHAR(row_ingressi.entrataPrevista, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
- ELSE
- modGUI.elementoTabella('--');
- END IF;
- modGUI.chiudiElementoTabella;
- -- ENTRATA --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.aCapo;
- modGUI.elementoTabella(TO_CHAR(row_ingressi.oraEntrata, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.chiudiElementoTabella;
- -- USCITA --
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(TO_CHAR(row_ingressi.orauscita, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.aCapo;
- modGUI.elementoTabella(TO_CHAR(row_ingressi.orauscita, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
- modGUI.chiudiElementoTabella;
- -- ALTRI DETTAGLI INGRESSO ORARIO --
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo1.visualizzaBiglietto', id_Sessione, nome, ruolo, row_ingressi.idIngressoOrario);
- modGUI.chiudiElementoTabella;
- -- DETTAGLIO DELL'AREA UTILIZZATA --
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaArea', id_Sessione, nome, ruolo, row_ingressi.idarea);
- modGUI.chiudiElementoTabella;
- -- MULTE --
- modGUI.apriElementoTabella;
- IF row_ingressi.idMulta IS NULL AND ruolo != 'C' THEN
- -- Se ad un ingresso non e' stata associata ancora una multa, espongo la procedura di inserimento
- modGUI.inserisciPenna('gruppo1.inserisciCampiMulte', id_Sessione, nome, ruolo, row_ingressi.idingressoorario || 'O');
- ELSE
- -- Se ad un ingresso e' stata gia' associata una multa, espongo la procedura di visualizzazione
- modGUI.inserisciLente('gruppo1.dettaglioCampiMulte', id_Sessione, nome, ruolo, row_ingressi.idmulta);
- modGUI.inserisciCestino('gruppo1.rimuoviMulteConferma', id_Sessione, nome, ruolo, row_ingressi.idmulta, '&tipoingresso=O');
- END IF;
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- END;
- IF var_noRecord THEN
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('ENTRATA PREVISTA');
- modGUI.intestazioneTabella('ORA ENTRATA');
- modGUI.intestazioneTabella('ORA USCITA');
- modGUI.intestazioneTabella('DETTAGLI INGRESSO');
- modGUI.intestazioneTabella('DETTAGLI AREA');
- modGUI.intestazioneTabella('MULTA');
- modGUI.chiudiRigaTabella;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Non ci sono ingressi registrati per questo periodo e con questi filtri');
- modGUI.chiudiDiv;
- END IF;
- modGUI.chiudiPagina;
- END visualizzaCronologia;
- -- questa procedura visualizza i record della tabella areefasceorarie a seconda del filtro var_autorimessa
- -- @param(autorimessa) = indirizzo dell'autorimessa (se non specificato considero tutte le autorimesse)
- PROCEDURE visualizzaAreeFasce(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2) IS
- CURSOR cur_areeFasce IS
- SELECT autorimesse.idautorimessa, indirizzo, areeFasceOrarie.idArea, areeFasceOrarie.idFasciaoraria, nome, costo
- FROM autorimesse
- INNER JOIN aree ON autorimesse.idAutorimessa = aree.idAutorimessa
- INNER JOIN areeFasceorarie ON aree.idArea = areefasceorarie.idArea
- INNER JOIN fasceorarie ON areeFasceOrarie.idFasciaOraria = fasceorarie.idfasciaoraria
- WHERE indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
- ELSE var_autorimessa END)
- ORDER BY areeFasceOrarie.idArea, CASE
- WHEN giorno = 'LUN' THEN 1
- WHEN giorno = 'MAR' THEN 2
- WHEN giorno = 'MER' THEN 3
- WHEN giorno = 'GIO' THEN 4
- WHEN giorno = 'VEN' THEN 5
- WHEN giorno = 'SAB' THEN 6
- WHEN giorno = 'DOM' THEN 7
- END, oraInizio ASC, oraFine ASC;
- CURSOR cur_aree IS
- SELECT autorimesse.idAutorimessa, indirizzo, idArea
- FROM aree
- INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
- WHERE indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
- ELSE var_autorimessa END)
- AND aree.idArea NOT IN (SELECT idArea
- FROM areeFasceOrarie);
- var_exists BOOLEAN := FALSE;
- var_idArea INTEGER;
- BEGIN
- modGUI.apriPagina('HoC | Visualizza associazioni aree con fasce', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA ASSOCIAZIONI AREE CON FASCE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- DECLARE
- primo INTEGER;
- BEGIN
- primo := -1;
- FOR row_areeFasce IN cur_areeFasce
- LOOP
- var_exists := TRUE;
- IF primo != row_areeFasce.idArea THEN
- IF primo != -1 THEN
- modGUI.chiudiTabella;
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'ASSOCIA NUOVA FASCIA', 'gruppo1.nuovaAreaFascia1',
- '&idRiga=' || row_areeFasce.idArea);
- modGUI.chiudiDiv;
- END IF;
- IF primo != row_areeFasce.idArea THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AUTORIMESSA: ');
- modGUI.collegamento(row_areefasce.indirizzo, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione ||
- '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_areeFasce.idAutorimessa);
- modGUI.aCapo;
- modGUI.inserisciTesto('AREA: ');
- modGUI.collegamento(row_areefasce.idArea, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || row_areeFasce.idArea);
- modGUI.chiudiIntestazione(3);
- primo := row_areeFasce.idArea;
- ELSE
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AREA: ');
- modGUI.collegamento(row_areefasce.idArea, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || row_areefasce.idArea);
- modGUI.chiudiIntestazione(3);
- primo := row_areeFasce.idArea;
- END IF;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('FASCIA');
- modGUI.intestazioneTabella('DETTAGLI FASCIA');
- modGUI.intestazioneTabella('COSTO');
- IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
- modGUI.intestazioneTabella('MODIFICA ASSOCIAZIONE');
- END IF;
- modGUI.chiudiRigaTabella;
- END IF;
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_areeFasce.nome);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo1.dettaglioFascia', id_Sessione, nome, ruolo, row_areeFasce.idFasciaoraria);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(TO_CHAR(row_areeFasce.costo,'9990.09') || '€/h');
- modGUI.chiudiElementoTabella;
- IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
- modGUI.apriElementoTabella;
- modGUI.inserisciPenna('gruppo1.nuovaAreaFascia2', id_Sessione, nome, ruolo, row_areeFasce.idArea,
- '&var_idFascia' || '=' || row_areeFasce.idFasciaOraria);
- modGUI.chiudiElementoTabella;
- END IF;
- var_idArea := row_areeFasce.idArea;
- modGUI.chiudiRigaTabella;
- END LOOP;
- END;
- IF var_exists THEN
- modGUI.chiudiTabella;
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'ASSOCIA NUOVA FASCIA', 'gruppo1.nuovaAreaFascia1',
- '&idRiga=' || var_idArea);
- modGUI.chiudiDiv;
- END IF;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('FASCIA');
- modGUI.intestazioneTabella('DETTAGLI FASCIA');
- modGUI.intestazioneTabella('COSTO');
- IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
- modGUI.intestazioneTabella('MODIFICA ASSOCIAZIONE');
- END IF;
- modGUI.chiudiRigaTabella;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AREE CHE NON SONO STATE ANCORA ASSOCIATE A NESSUNA FASCIA ORARIA');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('AREA');
- modGUI.intestazioneTabella('DETTAGLI AREA');
- IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
- modGUI.intestazioneTabella('ASSOCIA FASCE');
- END IF;
- modGUI.intestazioneTabella('AUTORIMESSA');
- modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
- modGUI.chiudiRigaTabella;
- var_exists := FALSE;
- FOR row_area IN cur_aree
- LOOP
- var_exists := TRUE;
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_area.idArea);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaArea', id_Sessione, nome, ruolo, row_area.idArea);
- modGUI.chiudiElementoTabella;
- IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
- modGUI.apriElementoTabella;
- modGUI.inserisciPenna('gruppo1.nuovaAreaFascia1', id_Sessione, nome, ruolo, row_area.idArea);
- modGUI.chiudiElementoTabella;
- END IF;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(row_area.indirizzo);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_area.idAutorimessa);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- END LOOP;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- IF NOT var_exists THEN
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'EFFETTUA UNA NUOVA RICERCA', 'gruppo1.areeFasce');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END visualizzaAreeFasce;
- PROCEDURE dettaglioFascia(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2) IS
- var_nome VARCHAR2(45);
- var_oraInizio TIMESTAMP;
- var_oraFine TIMESTAMP;
- var_giorno CHAR(3);
- BEGIN
- modGUI.apriPagina('HoC | Dettaglio fascia', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('DETTAGLIO FASCIA');
- modGUI.chiudiIntestazione(2);
- SELECT nome, orainizio, orafine, giorno INTO var_nome, var_oraInizio, var_oraFine, var_giorno
- FROM fasceorarie
- WHERE idFasciaoraria = idRiga;
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('NOME');
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_nome);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('ORA INIZIO');
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(TO_CHAR(var_oraInizio, 'HH24:MI:SS'));
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('ORA FINE');
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(TO_CHAR(var_oraFine, 'HH24:MI:SS'));
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('GIORNO');
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_giorno);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END dettaglioFascia;
- PROCEDURE autorimessaTipoCarb(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Autorimessa con piu'' tipi di carburante', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('AUTORIMESSA CON PIU'' TIPI DI CARBURANTE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.visualizzaAutorimessaTC');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.inserisciInput('var_data', 'DATA', 'date', true);
- modGUI.apriSelect('var_tipo', 'TIPO CARBURANTE');
- modGUI.inserisciOpzioneSelect('N', 'NORMALE');
- modGUI.inserisciOpzioneSelect('GPL', 'GPL');
- modGUI.chiudiSelect;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm('CERCA');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END autorimessaTipoCarb;
- -- questa procedura implementa il calcolo della statistica numero 6:
- -- Trovare il nome del parcheggio che ha il quantitativo massimo di veicoli parcheggiati con lo stesso tipo di carburante
- -- @Param(var_data) = data (vengono considerati solo gli ingressi che attraversano questa data)
- PROCEDURE visualizzaAutorimessaTC(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_data VARCHAR2, var_tipo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Autorimessa con piu'' tipi di carburante', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('AUTORIMESSA CON PIU'' TIPI DI CARBURANTE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.apriTabella;
- modGUI.apriRigaTabella;
- modGUI.intestazioneTabella('AUTORIMESSA');
- modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
- modGUI.intestazioneTabella('NUMERO');
- modGUI.chiudiRigaTabella;
- DECLARE
- var_idAutorimessa INTEGER;
- var_indirizzo VARCHAR2(100);
- var_numero INTEGER;
- BEGIN
- SELECT autorimesse.idAutorimessa, indirizzo, COUNT(alimentazione) AS numero INTO
- var_idAutorimessa, var_indirizzo, var_numero
- FROM
- (
- SELECT oraentrata, orauscita, idbox, alimentazione
- FROM ingressiorari
- INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- INNER JOIN veicoli ON effettuaingressiorari.idveicolo = veicoli.idveicolo
- WHERE ingressiOrari.cancellato = 'F'
- UNION ALL
- SELECT oraentrata, orauscita, idbox, alimentazione
- FROM ingressiabbonamenti
- INNER JOIN effettuaingressiabbonamenti
- ON ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
- INNER JOIN veicoli ON effettuaingressiabbonamenti.idveicolo = veicoli.idveicolo
- WHERE ingressiAbbonamenti.cancellato = 'F'
- ) tabApp
- INNER JOIN box ON tabApp.idBox = box.idbox
- INNER JOIN aree ON box.idarea = aree.idarea
- INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
- WHERE
- -- considero gli ingressi che sono avvenuti e terminati
- oraentrata IS NOT NULL AND orauscita IS NOT NULL AND
- (TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_data, 'YYYY-MM-DD'), 'DD-MON-RR'), 'DD-MON-RR') BETWEEN
- TO_TIMESTAMP(TO_CHAR(oraentrata, 'DD-MON-RR') || ' 0:0:0', 'DD-MON-RR HH24:MI:SS') AND
- TO_TIMESTAMP(TO_CHAR(orauscita, 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS')) AND
- alimentazione = var_tipo
- GROUP BY autorimesse.idautorimessa, autorimesse.indirizzo, alimentazione
- ORDER BY numero DESC, alimentazione ASC
- FETCH FIRST 1 ROW ONLY;
- modGUI.apriRigaTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_indirizzo);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, var_idAutorimessa);
- modGUI.chiudiElementoTabella;
- modGUI.apriElementoTabella;
- modGUI.elementoTabella(var_numero);
- modGUI.chiudiElementoTabella;
- modGUI.chiudiRigaTabella;
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- modGUI.chiudiTabella;
- modGUI.chiudiDiv;
- modGUI.apriDiv(TRUE);
- modGUI.inserisciTesto('Nessun dato da visualizzare');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- END;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(TRUE);
- modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.autorimessaTipoCarb');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END visualizzaAutorimessaTC;
- -- questa procedura implementa il form nel caso in cui si voglia associare una fascia ad un area (già passata come input)
- -- oppure se la fascia era già stata associata aggiornare il campo costo di un record della tabella areefasceorarie
- -- @Param(idRiga) = id della fascia oraria
- PROCEDURE nuovaAreaFascia1(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2) IS
- CURSOR cur_fasce IS
- SELECT idfasciaoraria, nome
- FROM fasceorarie
- ORDER BY CASE
- WHEN giorno = 'LUN' THEN 1
- WHEN giorno = 'MAR' THEN 2
- WHEN giorno = 'MER' THEN 3
- WHEN giorno = 'GIO' THEN 4
- WHEN giorno = 'VEN' THEN 5
- WHEN giorno = 'SAB' THEN 6
- WHEN giorno = 'DOM' THEN 7
- END, oraInizio, oraFine;
- row_fascia cur_fasce%ROWTYPE;
- BEGIN
- modGUI.apriPagina('HoC | Inserimento/modifica associazione area a fascia', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO/MODIFICA ASSOCIAZIONE AREA A FASCIA');
- modGUI.chiudiIntestazione(2);
- OPEN cur_fasce;
- FETCH cur_fasce INTO row_fascia;
- IF cur_fasce%ROWCOUNT = 0 THEN
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('Non ci sono ancora fasce orarie');
- modGUI.chiudiIntestazione(3);
- modGUI.chiudiPagina;
- CLOSE cur_fasce;
- END IF;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AREA: ');
- modGUI.collegamento(idRiga, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
- ruolo || '&idRiga=' || idRiga);
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.modAreaFasciaRis');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.inserisciInputHidden('var_idArea', idRiga);
- modGUI.apriSelect('var_idFascia', 'FASCIA');
- LOOP
- modGUI.inserisciOpzioneSelect(row_fascia.idfasciaoraria, row_fascia.nome);
- FETCH cur_fasce INTO row_fascia;
- EXIT WHEN cur_fasce%NOTFOUND;
- END LOOP;
- modGUI.chiudiSelect;
- CLOSE cur_fasce;
- modGUI.inserisciInput('var_costo', 'Costo', 'number', true);
- modGUI.inserisciRadioButton('INSERIMENTO', 'var_tipo', '0', true);
- modGUI.inserisciRadioButton('MODIFICA', 'var_tipo', '1', false);
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('SUBMIT');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END nuovaAreaFascia1;
- -- questa procedura implementa il form nel caso in cui si voglia semplicemente modificare il costo di un record della
- -- tabella areefasceorarie
- -- @Param(var_idFascia) = id della fascia oraria
- -- @Param(costo) = costo da inserire
- PROCEDURE nuovaAreaFascia2(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2, var_idFascia VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Modifica associazione area a fascia', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('MODIFICA ASSOCIAZIONE AREA A FASCIA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('AREA: ');
- modGUI.collegamento(idRiga, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
- ruolo || '&idRiga=' || idRiga);
- modGUI.aCapo;
- modGUI.inserisciTesto('FASCIA: ');
- modGUI.collegamento(var_idFascia, 'gruppo1.dettaglioFascia?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
- ruolo || '&idRiga=' || var_idFascia);
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv;
- modGUI.apriForm('gruppo1.modAreaFasciaRis');
- modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
- modGUI.inserisciInputHidden('nome', nome);
- modGUI.inserisciInputHidden('ruolo', ruolo);
- modGUI.inserisciInputHidden('var_idArea', idRiga);
- modGUI.inserisciInputHidden('var_idFascia', var_idFascia);
- modGUI.inserisciInput('var_costo', 'Costo', 'number', true);
- modGUI.inserisciInputHidden('var_tipo', '1');
- modGUI.inserisciBottoneReset;
- modGUI.inserisciBottoneForm('SUBMIT');
- modGUI.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END nuovaAreaFascia2;
- /*
- Questa procedura inserisce un nuovo record di tipo <idArea, idFasciaOraria, costo> alla tabella AreeFasceorarie se non è
- già presente, altrimenti modifica il campo costo
- @Param(var_idArea) = id dell'area
- @Param(var_idFascia) = id della fascia oraria
- @Param(costo) = costo da inserire
- */
- PROCEDURE modAreaFasciaRis(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_idArea VARCHAR2, var_idFascia VARCHAR2,
- var_costo VARCHAR2, var_tipo VARCHAR2) IS
- BEGIN
- modGUI.apriPagina('HoC | Inserimento/Modifica associazione area a fascia', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO/MODIFICA ASSOCIAZIONE AREA A FASCIA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- IF TO_NUMBER(var_costo) <= 0 THEN
- modGUI.esitoOperazione('KO', 'Costo non valido');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- RETURN;
- END IF;
- DECLARE
- var_conta INTEGER;
- BEGIN
- SELECT idarea INTO var_conta
- FROM areefasceorarie
- WHERE idarea = var_idArea AND idFasciaoraria = var_idFascia;
- IF var_tipo = '0' THEN
- modGUI.esitoOperazione('KO', 'Questa associazione esiste gia''');
- ELSIF var_tipo = '1' THEN
- UPDATE areefasceorarie
- SET costo = TO_NUMBER(var_costo)
- WHERE idArea = TO_NUMBER(var_idArea) AND idFasciaOraria = TO_NUMBER(var_idFascia);
- COMMIT;
- modGUI.esitoOperazione('OK', 'Modifica avvenuta con successo');
- END IF;
- EXCEPTION
- -- ancora l'area non era stata associata a questa fascia
- WHEN NO_DATA_FOUND THEN
- INSERT INTO areefasceorarie
- VALUES (var_idArea, var_idfascia, var_costo);
- COMMIT;
- modGUI.esitoOperazione('OK', 'Inserimento avvenuto con successo');
- WHEN OTHERS THEN
- modGUI.esitoOperazione('KO', 'Ci sono ingressi ancora attivi per quest''area');
- END;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END modAreaFasciaRis;
- --------------------------- FINE ALESSANDRO PUCCIA ------------------------------------
- --------------------------- INIZIO STEFANIA FALCHI-------------------------------------
- /* CALCOLOPB
- * Questa procedura serve ad inserire i dati necessari per il calcolo del prezzo del biglietto
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE CALCOLOPB(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO DATI PER PREVENTIVO');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.CALCOLOPB_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.inserisciInput('dataEntrata','Data entrata','date', true);
- modGUI.inserisciInput('oraEntrata','Ora entrata','time', true);
- modGUI.inserisciInput('dataUscita','Data uscita','date', true);
- modGUI.inserisciInput('oraUscita','Ora uscita','time', true);
- modGUI.aCapo;
- modGUI.apriSelect('var_Veicolo','Targa: ');
- for x in(select veicoli.idveicolo,veicoli.targa from veicoli) loop
- modGUI.inserisciOpzioneSelect(x.idveicolo,x.targa,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.apriSelect('var_Autorimessa','Autorimesse: ');
- for x in(select autorimesse.idautorimessa,autorimesse.indirizzo from autorimesse) loop
- modGUI.inserisciOpzioneSelect(x.idautorimessa,x.indirizzo,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END CALCOLOPB;
- /* CALCOLOPB_RIS
- * Questa procedura serve a calcolare il prezzo del biglietto dopo essere stata richiamata da
- * CALCOLOPB in cui si inseriscono tutti i parametri necessari
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * dataEntrata: data in cui l'utente entra nel parcheggio
- * oraEntrata: ora in cui l'utente entra nel parcheggio
- * dataUscita: data in cui l'utente esce dal parcheggio
- * oraUscita: ora in cui l'utente esce dal parcheggio
- * area: area in cui viene effettuato il parcheggio
- */
- PROCEDURE CALCOLOPB_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, dataEntrata varchar2, oraEntrata varchar2, dataUscita varchar2, oraUscita varchar2, var_Veicolo varchar2, var_Autorimessa varchar2) AS
- var_dataciclo date;
- var_gg varchar2(20);
- var_oraDa varchar2(20);
- var_oraA varchar2(20);
- var_oraInizioCalcolo timestamp;
- var_oraFineCalcolo timestamp;
- var_h number;
- tot number;
- var_oraEntrata varchar(20);
- var_oraUscita varchar2(20);
- var_dataEntrata date;
- var_dataUscita date;
- var_timestampDa timestamp;
- var_timestampA timestamp;
- var_confronto timestamp;
- --ricerca area--
- idAreeLibere GRUPPO2.list_idAree := GRUPPO2.list_idAree(); -- inizializza il vettore aree libere
- len integer;
- idArea integer;
- i integer;
- larghezzaMin integer;
- Area Aree%RowType;
- --fine ricerca area--
- BEGIN
- --ricerca area--
- -- associa al vettore le aree libere nell'autorimessa passata che rispettino i requisiti del veicolo passato
- idAreeLibere := GRUPPO2.queryRicercaArea(id_Sessione, nome, ruolo,var_Autorimessa, var_Veicolo);
- len := idAreeLibere.count;
- larghezzaMin := 0;
- -- codice che prende l'area con larghezza minima tra quelle disponibili
- for i in 1 .. len
- loop
- select * into Area
- from Aree
- where Aree.idArea = idAreeLibere(i)
- and larghezzaMin = 0
- or Aree.larghezzaMax < larghezzaMin;
- if Area.idArea is not null
- then
- larghezzaMin := Area.larghezzaMax;
- idArea := i;
- end if;
- end loop;
- --fine ricerca area--
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('FASCE ORARIE DI RIFERIMENTO');
- modGUI.chiudiIntestazione(2);
- modGUI.ApriTabella;
- --calcolo prezzo biglietto--
- var_oraEntrata:=to_char(substr(oraEntrata,1,2)||':'||substr(oraEntrata,-2));
- var_oraUscita:=to_char(substr(oraUscita,1,2)||':'||substr(oraUscita,-2));
- var_dataEntrata:=to_date(dataEntrata,'YYYY-MM-DD');
- var_dataUscita:=to_date(dataUscita,'YYYY-MM-DD');
- var_dataciclo:=var_dataEntrata;
- tot:=0;
- if(var_dataciclo<=var_dataUscita and to_number(substr(oraEntrata,1,2))<to_number(substr(oraUscita,1,2))
- or(var_dataciclo<=var_dataUscita and to_number(substr(oraEntrata,1,2))=to_number(substr(oraUscita,1,2)) and to_number(substr(oraEntrata,-2))=to_number(substr(oraUscita,-2))))then
- while(var_dataciclo<=var_dataUscita)
- loop
- --modGUI.inserisciTesto(to_char(var_dataciclo));
- if(var_dataciclo=var_dataEntrata)then
- var_oraDa:=var_oraEntrata;
- else
- var_oraDa:='00:00';
- end if;
- if(var_dataciclo=var_dataUscita)then
- var_oraA:=var_oraUscita;
- else
- var_oraA:='23:59';
- end if;
- var_gg:=upper(substr(to_char(var_dataciclo,'day','NLS_DATE_LANGUAGE = italian'),1,3));
- var_timestampDa:=to_timestamp('01-JAN-1970 '||var_oraDa,'DD-MON-YYYY HH24:MI');
- var_timestampA:=to_timestamp('01-JAN-1970 '||var_oraA,'DD-MON-YYYY HH24:MI');
- --trova fasciaoraria corrispondente e calcola
- for x in(select distinct fasceorarie.nome,fasceorarie.giorno,fasceorarie.orainizio,fasceorarie.orafine,areefasceorarie.costo,areefasceorarie.idarea
- from fasceorarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- where fasceorarie.giorno=var_gg and areefasceorarie.idarea=idArea
- and fasceorarie.orainizio<=var_timestampDa)
- loop
- if(var_timestampDa<=x.orainizio)then
- var_oraInizioCalcolo:=x.orainizio;
- else
- var_oraInizioCalcolo:=var_timestampDa;
- end if;
- if(to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI')<=var_timestampA)then
- var_oraFineCalcolo:=to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI');
- else
- var_oraFineCalcolo:=var_timestampA;
- end if;
- --calcolo ore totali
- var_h:=extract(hour from (var_oraFineCalcolo-var_oraInizioCalcolo))+
- (extract (minute from (var_oraFineCalcolo-var_oraInizioCalcolo))/60);
- if(var_h>0)then
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- tot:=tot+(x.costo*var_h);
- end if;
- end loop;
- var_dataciclo:=var_dataciclo+1;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('COSTO STIMATO');
- modGUI.chiudiIntestazione(2);
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Costo');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(tot,'99999999.99')||' ');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ChiudiTabella;
- else
- modGUI.esitoOperazione('KO','Le date e/o gli orari inseriti non sono validi');
- end if;
- modGUI.apriIntestazione(3);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(3);
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Calcolo prezzo biglietto',gruppo1||'.CALCOLOPB');
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Preventivo','GRUPPO5.PREVENTIVO');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END CALCOLOPB_RIS;
- /* VIS_TARIFFE
- * Questa procedura serve a visualizzare tutte le tariffe presenti in base all'area e alla fascia oraria di riferimento
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE VIS_TARIFFE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- idRiga varchar2(12);
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA TARIFFE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Costo');
- modGUI.intestazioneTabella('Numero area');
- modGUI.intestazioneTabella('Descrizione fascia oraria');
- modGUI.intestazioneTabella('Dettagli');
- modGUI.ChiudiRigaTabella;
- for x in ( select fasceorarie.idfasciaoraria, fasceorarie.nome, areefasceorarie.costo, aree.idarea
- from FasceOrarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- inner join aree on aree.idarea=areefasceorarie.idarea) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(x.costo,'9990.09')||' €/h');
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.idarea);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- --dettagli
- idRiga:=to_char(x.idarea,'00000')||to_char(x.idfasciaoraria,'00000');
- modGUI.ApriElementoTabella;
- modGUI.inserisciLente(gruppo1||'.DETTAGLITARIFFE',id_Sessione,nome,ruolo,idRiga);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END VIS_TARIFFE;
- /* DETTAGLITARIFFE
- * Questa procedura serve a visualizzare i dettagli di una tariffa precedentemente selezionata nella procedura VIS_TARIFFE
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: concatenamento dell'id della facsia oraria e dell'area di riferimento per risalire alla tariffa scelta
- */
- PROCEDURE DETTAGLITARIFFE(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2) AS
- var_costo number;
- var_nome varchar2(50);
- var_orainizio timestamp;
- var_orafine timestamp;
- var_giorno char(10);
- var_pt number;
- var_pl number;
- var_stato char(10);
- var_gas char(10);
- var_lumax number;
- var_lamax number;
- var_almax number;
- var_pmax number;
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA FASCE ORARIE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- select costo into var_costo from areefasceorarie
- where idarea=to_number(substr(idRiga,2,6)) and idfasciaoraria=to_number(substr(idRiga,8,7));
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Costo');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_costo,'9990.09')||' €/h');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('FASCIA ORARIA DI RIFERIMENTO');
- modGUI.chiudiIntestazione(2);
- select nome into var_nome from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
- select orainizio into var_orainizio from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
- select orafine into var_orafine from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
- select giorno into var_giorno from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Nome');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_nome));
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Ora inizio');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(substr(var_orainizio,11,8)));
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Ora fine');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(substr(var_orafine,11,8)));
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Giorno');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_giorno);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('AREA DI RIFERIMENTO');
- modGUI.chiudiIntestazione(2);
- select postitotali into var_pt from aree where idarea=to_number(substr(idRiga,2,6));
- select postiliberi into var_pl from aree where idarea=to_number(substr(idRiga,2,6));
- select stato into var_stato from aree where idarea=to_number(substr(idRiga,2,6));
- select gas into var_gas from aree where idarea=to_number(substr(idRiga,2,6));
- select lunghezzamax into var_lumax from aree where idarea=to_number(substr(idRiga,2,6));
- select larghezzamax into var_lamax from aree where idarea=to_number(substr(idRiga,2,6));
- select altezzamax into var_almax from aree where idarea=to_number(substr(idRiga,2,6));
- select pesomax into var_pmax from aree where idarea=to_number(substr(idRiga,2,6));
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Posti totali');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_pt));
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Posti liberi');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_pl));
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Stato');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_stato);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Gas');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_gas);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Lunghezza massima');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_lumax)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Larghezza massima');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_lamax)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Altezza massima');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_almax)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Peso massimo');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_pmax)||' kg');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ChiudiTabella;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_TARIFFE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END DETTAGLITARIFFE;
- /* TIPOVETTURA
- * Questa procedura serve a selezionare il tipo di vettura su cui vogliamo calcolare il numero medio di ingressi per fascia oraria
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE TIPOVETTURA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO TIPO VETTURA ');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.INGRESSIFASCIAORARIA_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.aCapo;
- modGUI.inserisciRadioButton('Non specificare tipo vettura','tipovettura','no',false);
- modGUI.inserisciRadioButton('Specifica tipo vettura','tipovettura','si',false);
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.apriSelect('lun','Lunghezza massima: ');
- for x in(select distinct lunghezzamax from aree) loop
- modGUI.inserisciOpzioneSelect(x.lunghezzamax,x.lunghezzamax,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.apriSelect('lar','Larghezza massima: ');
- for x in(select distinct larghezzamax from aree) loop
- modGUI.inserisciOpzioneSelect(x.larghezzamax,x.larghezzamax,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.apriSelect('alt','Altezza massima: ');
- for x in(select distinct altezzamax from aree) loop
- modGUI.inserisciOpzioneSelect(x.altezzamax,x.altezzamax,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.apriSelect('peso','Peso massimo: ');
- for x in(select distinct pesomax from aree) loop
- modGUI.inserisciOpzioneSelect(x.pesomax,x.pesomax,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END TIPOVETTURA;
- /* INGRESSIFASCIAORARIA_RIS
- * Questa procedura serve a visualizzare il numero medio di ingressi per fascia oraria in base al tipo di vettura selezionato
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * tipovettura: risultato del radiobutton per scegliere se considerare tutte le auto o solo quelle che rispettano i parametri selezionati
- * lun: lunghezza massima
- * lar: larghezza massima
- * alt: altezza massima
- * peso: peso massimo
- */
- PROCEDURE INGRESSIFASCIAORARIA_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, tipovettura varchar2, lun varchar2, lar varchar2, alt varchar2, peso varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA NUMERO MEDIO DI INGRESSI PER FASCIA ORARIA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- if(tipovettura='no')then
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.intestazioneTabella('Media ingressi orari');
- modGUI.ChiudiRigaTabella;
- for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
- select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
- from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- inner join Aree on aree.idarea=areefasceorarie.idarea
- inner join box on box.idarea=aree.idarea
- inner join ingressiorari on ingressiorari.idbox=box.idbox
- where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
- and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
- and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
- group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
- group by(t.idfasciaoraria,t.nome)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.MediaIngressiOrari);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- else
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('Lunghezza: '||lun||'m Larghezza: '||lar||'m Altezza: '||alt||'m Peso: '||peso||'kg');
- modGUI.chiudiIntestazione(4);
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.intestazioneTabella('Media ingressi orari');
- modGUI.ChiudiRigaTabella;
- for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
- select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
- from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- inner join Aree on aree.idarea=areefasceorarie.idarea
- inner join box on box.idarea=aree.idarea
- inner join ingressiorari on ingressiorari.idbox=box.idbox
- where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
- and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
- and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
- and aree.lunghezzamax<=lun and aree.larghezzamax<=lar and aree.altezzamax<=alt and aree.pesomax<=peso
- group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
- group by(t.idfasciaoraria,t.nome)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.MediaIngressiOrari);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- end if;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(4);
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.TIPOVETTURA');
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END INGRESSIFASCIAORARIA_RIS;
- /* FILTROPERCENTUALE
- * Questa procedura serve a selezionare i parametri per calcolare la percentuale di posti liberi per fascia oraria o per giorno con o senza raggruppamento per area
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE FILTROPERCENTUALE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('SELEZIONA AREA E TIPO DI RAGGRUPPAMENTO');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.percentualePostiLiberi');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.aCapo;
- modGUI.apriSelect('area','Aree: ');
- for x in(select aree.idarea from aree) loop
- modGUI.inserisciOpzioneSelect(x.idarea,x.idarea,false);
- end loop;
- modGUI.inserisciOpzioneSelect('nessuna','Tutte',false);
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.apriSelect('raggruppamento','Raggruppa per: ');
- modGUI.inserisciOpzioneSelect('fasciaoraria','fascia oraria');
- modGUI.inserisciOpzioneSelect('giorno','giorno');
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiPagina;
- END FILTROPERCENTUALE;
- /* PERCENTUALEPOSTILIBERI
- * Questa procedura serve a calcolare la percentuale di posti liberi per fascia oraria o per giorno con o senza raggruppamento per area
- * in base ai parametri precedentemente selezionati in FILTROPERCENTUALE
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * area: id dell'area per cui scegliamo di raggruppare i dati
- * raggruppamento: serve a scegliere se raggruppare per fascia oraria o per giorno
- */
- PROCEDURE PERCENTUALEPOSTILIBERI(id_Sessione varchar2, nome varchar2, ruolo varchar2, area varchar2, raggruppamento varchar2) AS
- BEGIN
- if(raggruppamento='fasciaoraria')then
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA PERCENTUALE DEI POSTI LIBERI PER FASCIA ORARIA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.intestazioneTabella('Posti totali');
- modGUI.intestazioneTabella('Posti liberi');
- modGUI.intestazioneTabella('Percentuale posti liberi per fascia oraria');
- modGUI.ChiudiRigaTabella;
- if(area='nessuna')then
- for x in ( select FasceOrarie.idfasciaoraria, FasceOrarie.nome, sum(Aree.PostiTotali) as PT,
- sum(Aree.PostiLiberi) as PL,
- (sum(Aree.PostiLiberi)/sum(Aree.postitotali))*100 as res
- from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
- inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
- group by (FasceOrarie.idfasciaoraria, FasceOrarie.nome)
- order by(fasceorarie.idfasciaoraria)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PT);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PL);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.res || '%');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- else
- for x in ( select FasceOrarie.idfasciaoraria, FasceOrarie.nome, sum(Aree.PostiTotali) as PT,
- sum(Aree.PostiLiberi) as PL,
- (sum(Aree.PostiLiberi)/sum(Aree.postitotali))*100 as res
- from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
- inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
- where aree.idarea=area
- group by (FasceOrarie.idfasciaoraria, FasceOrarie.nome)
- order by(fasceorarie.idfasciaoraria)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PT);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PL);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.res || '%');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- end if;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(4);
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROPERCENTUALE');
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- else
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA PERCENTUALE DEI POSTI LIBERI PER GIORNO');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Giorno');
- modGUI.intestazioneTabella('Posti totali');
- modGUI.intestazioneTabella('Posti liberi');
- modGUI.intestazioneTabella('Percentuale posti liberi per giorno');
- modGUI.ChiudiRigaTabella;
- if(area='nessuna')then
- for x in ( select fasceorarie.giorno as gg,sum(aree.postitotali) as PostiTotali,sum(aree.postiliberi) as PostiLiberi,
- (sum(aree.postiliberi)/sum(aree.postitotali))*100 as PostiLiberiPerGiorno
- from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
- inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
- group by(fasceorarie.giorno)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.gg);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiTotali);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiLiberi);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiLiberiPerGiorno||'%');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- else
- for x in ( select fasceorarie.giorno as gg,sum(aree.postitotali) as PostiTotali,sum(aree.postiliberi) as PostiLiberi,
- (sum(aree.postiliberi)/sum(aree.postitotali))*100 as PostiLiberiPerGiorno
- from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
- inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
- where aree.idarea=area
- group by(fasceorarie.giorno)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.gg);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiTotali);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiLiberi);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.PostiLiberiPerGiorno||'%');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- end if;
- modGUI.ChiudiTabella;
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('ALTRE OPERAZIONI');
- modGUI.chiudiIntestazione(4);
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROPERCENTUALE');
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- end if;
- END PERCENTUALEPOSTILIBERI;
- /* FILTROCATEGORIA
- * Questa procedura serve a scegliere la categoria dei veicoli su cui invocare la procedura MULTE_RIS
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE FILTROCATEGORIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('SELEZIONARE LA CATEGORIA');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.MULTE_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.aCapo;
- modGUI.apriSelect('cat','Categoria: ');
- for x in(select aree.idarea,aree.lunghezzamax,aree.larghezzamax,aree.altezzamax,aree.pesomax from aree)loop
- modGUI.inserisciOpzioneSelect(x.idarea,'Lunghezza '||to_char(x.lunghezzamax)||'m larghezza '||to_char(x.larghezzamax)||'m altezza '||to_char(x.altezzamax)||'m peso '||to_char(x.pesomax)||'kg',false);
- end loop;
- modGUI.inserisciOpzioneSelect('Tutte','Tutte',false);
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.inserisciTesto('GPL:');
- modGUI.aCapo;
- modGUI.inserisciRadioButton('Si','gpl','GPL',false);
- modGUI.inserisciRadioButton('No','gpl','N',false);
- modGUI.inserisciRadioButton('Indifferente','gpl','Indifferente',false);
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END FILTROCATEGORIA;
- PROCEDURE INGRESSIFASCIAORARIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA NUMERO MEDIO DI INGRESSI PER FASCIA ORARIA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.intestazioneTabella('Media ingressi orari');
- modGUI.ChiudiRigaTabella;
- for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
- select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
- from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- inner join Aree on aree.idarea=areefasceorarie.idarea
- inner join box on box.idarea=aree.idarea
- inner join ingressiorari on ingressiorari.idbox=box.idbox
- where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
- and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
- and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
- group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
- group by(t.idfasciaoraria,t.nome)) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.MediaIngressiOrari);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END INGRESSIFASCIAORARIA;
- /* MULTE_RIS
- * Questa procedura serve a selezionare i dettagli dei veicoli che hanno preso sanzioni per un importo inferiore ad almeno una
- * delle sanzioni prese dai veicoli della categoria precedentemente selezionata in FILTROCATEGORIA
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * cat: id dell'area che contiene la larghezza, lunghezza, altezza, peso massimi
- * gpl: risultato del radiobutton per scegliere se considerare o meno i veicoli a gpl
- */
- PROCEDURE MULTE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,cat varchar2, gpl varchar2) AS
- var_lun number;
- var_lar number;
- var_peso number;
- var_alt number;
- var_minimo number;
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VEICOLI CHE HANNO TUTTE LE MULTE MINORI DI ALMENO UNA MULTA DELLA CATEGORIA SCELTA');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Targa');
- modGUI.intestazioneTabella('Modello');
- modGUI.intestazioneTabella('Colore');
- modGUI.intestazioneTabella('Dettagli');
- modGUI.ChiudiRigaTabella;
- if(cat='Tutte' and gpl='Indifferente')then
- select max(t.minimo) into var_minimo from(
- select veicoli.idveicolo,max(multe.importo) as minimo
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join multe on multe.idmulta=ingressiorari.idmulta
- group by(veicoli.idveicolo)) t;
- end if;
- if(cat!='Tutte' and gpl!='Indifferente')then
- select aree.lunghezzamax,aree.larghezzamax,aree.pesomax,aree.altezzamax
- into var_lun,var_lar,var_peso,var_alt
- from aree where aree.idarea=cat;
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('Lunghezza: '||var_lun||'m Larghezza: '||var_lar||'m Altezza: '||var_alt||'m Peso: '||var_peso||'kg');
- modGUI.chiudiIntestazione(4);
- select max(t.minimo) into var_minimo from(
- select veicoli.idveicolo,max(multe.importo) as minimo
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join multe on multe.idmulta=ingressiorari.idmulta
- where veicoli.lunghezza<=var_lun and veicoli.larghezza<=var_lar and veicoli.peso<=var_peso and veicoli.altezza<=var_alt
- and veicoli.alimentazione=gpl
- group by(veicoli.idveicolo)) t;
- end if;
- if(cat!='Tutte' and gpl='Indifferente')then
- select aree.lunghezzamax,aree.larghezzamax,aree.pesomax,aree.altezzamax
- into var_lun,var_lar,var_peso,var_alt
- from aree where aree.idarea=cat;
- modGUI.apriIntestazione(4);
- modGUI.inserisciTesto('Lunghezza: '||var_lun||'m Larghezza: '||var_lar||'m Altezza: '||var_alt||'m Peso: '||var_peso||'kg');
- modGUI.chiudiIntestazione(4);
- select max(t.minimo) into var_minimo from(
- select veicoli.idveicolo,max(multe.importo) as minimo
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join multe on multe.idmulta=ingressiorari.idmulta
- where veicoli.lunghezza<=var_lun and veicoli.larghezza<=var_lar and veicoli.peso<=var_peso and veicoli.altezza<=var_alt
- group by(veicoli.idveicolo)) t;
- else
- select max(t.minimo) into var_minimo from(
- select veicoli.idveicolo,max(multe.importo) as minimo
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join multe on multe.idmulta=ingressiorari.idmulta
- where veicoli.alimentazione=gpl
- group by(veicoli.idveicolo)) t;
- end if;
- for x in (
- select veicoli.idveicolo,veicoli.targa,veicoli.modello,veicoli.colore from(
- select veicoli.idveicolo,max(multe.importo) as massimo
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join multe on multe.idmulta=ingressiorari.idmulta
- group by(veicoli.idveicolo)) t
- inner join veicoli on veicoli.idveicolo=t.idveicolo
- where massimo<var_minimo
- ) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.targa);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.modello);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.colore);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.inserisciLente(gruppo1||'.DETT_VEICOLI',id_Sessione,nome,ruolo,x.idveicolo);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROCATEGORIA');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END MULTE_RIS;
- /* VIS_FASCEORARIE
- * Questa procedura serve a visualizzare tutte le fasce orarie possibili
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE VIS_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VISUALIZZA FASCE ORARIE');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Descrizione');
- modGUI.intestazioneTabella('Ora inizio');
- modGUI.intestazioneTabella('Ora fine');
- modGUI.intestazioneTabella('Giorno');
- if(ruolo!='C')then
- modGUI.intestazioneTabella('Modifica');
- modGUI.intestazioneTabella('Elimina');
- end if;
- modGUI.ChiudiRigaTabella;
- for x in ( select fasceorarie.idfasciaoraria, fasceorarie.nome, to_char(fasceorarie.orainizio, 'hh24:mi:ss') as orainizio, to_char(fasceorarie.orafine, 'hh24:mi:ss') as orafine, fasceorarie.giorno
- from FasceOrarie) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.orainizio);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.orafine);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.giorno);
- modGUI.ChiudiElementoTabella;
- if(ruolo!='C')then
- --modifica
- modGUI.ApriElementoTabella;
- modGUI.inserisciPenna(gruppo1||'.MOD_FASCEORARIE',id_Sessione,nome,ruolo,x.idfasciaoraria);
- modGUI.ChiudiElementoTabella;
- --elimina
- modGUI.ApriElementoTabella;
- modGUI.inserisciCestino(gruppo1||'.EL_FASCEORARIE',id_Sessione,nome,ruolo,x.idfasciaoraria);
- modGUI.ChiudiElementoTabella;
- end if;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END VIS_FASCEORARIE;
- /* INS_FASCEORARIE
- * Questa procedura serve ad inserire i parametri di una nuovuna nuova fascia oraria
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE INS_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO FASCIA ORARIA ');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.INS_FASCEORARIE_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.inserisciInput('descrizione','Nome','text', true);
- modGUI.inserisciInput('oraInizio','Ora inizio','time', true);
- modGUI.inserisciInput('oraFine','Ora fine','time', true);
- modGUI.aCapo;
- modGUI.apriSelect('gg','Giorno: ');
- modGUI.inserisciOpzioneSelect('LUN','Lunedi',false);
- modGUI.inserisciOpzioneSelect('MAR','Martedi',false);
- modGUI.inserisciOpzioneSelect('MER','Mercoledi',false);
- modGUI.inserisciOpzioneSelect('GIO','Giovedi',false);
- modGUI.inserisciOpzioneSelect('VEN','Venerdi',false);
- modGUI.inserisciOpzioneSelect('SAB','Sabato',false);
- modGUI.inserisciOpzioneSelect('DOM','Domenica',false);
- modGUI.chiudiSelect;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END INS_FASCEORARIE;
- /* INS_FASCEORARIE_RIS
- * Questa procedura serve a visualizzare il risultato dell'inserimento di una nuova fascia oraria
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * descrizione: descrizione della fascia oraria
- * oraInizio: ora di inizio della fascia oraria
- * oraFine: ora di fine della fascia oraria
- * gg: giorno di riferimento della fascia oraria
- */
- PROCEDURE INS_FASCEORARIE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,descrizione varchar2, oraInizio varchar2, oraFine varchar2, gg varchar2) AS
- x number;
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('INSERIMENTO FASCIA ORARIA ');
- modGUI.chiudiIntestazione(2);
- if(oraInizio>oraFine)then
- modGUI.esitoOperazione('KO','Gli orari di inizio e fine fascia oraria non sono congruenti');
- else
- x:=fasceorarieseq.nextval;
- INSERT INTO FasceOrarie(idfasciaoraria,nome,orainizio,orafine,giorno)
- values (x,descrizione,to_timestamp('01-JAN-1970 '||substr(to_char(oraInizio),1,2)||':'||substr(to_char(oraInizio),-2),'DD-MON-YYYY HH24:MI'),to_timestamp('01-JAN-1970 '||substr(to_char(oraFine),1,2)||':'||substr(to_char(oraFine),-2),'DD-MON-YYYY HH24:MI'),to_char(gg));
- if(SQL%ROWCOUNT != 0)then
- commit;
- modGUI.esitoOperazione('OK','La nuova fascia oraria e` stata inserita con successo');
- else
- modGUI.esitoOperazione('KO','La nuova fascia oraria non e` stata inserita correttamente');
- end if;
- end if;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.INS_FASCEORARIE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGui.chiudiDiv;
- modGUI.chiudiPagina;
- EXCEPTION
- WHEN OTHERS THEN
- modGUI.esitoOperazione('KO','La nuova fascia oraria non e` stata inserita correttamente perche` si sovrappone ad altre fasce orarie gia` esistenti');
- modGui.chiudiDiv;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.INS_FASCEORARIE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiPagina;
- END INS_FASCEORARIE_RIS;
- /* MOD_FASCEORARIE
- * Questa procedura serve a visualizzare la fascia oraria da modificare
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: id della fascia oraria selezionata in VIS_FASCEORARIE
- */
- PROCEDURE MOD_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2,idRiga varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Modifica dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('MODIFICA FASCIA ORARIA ');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.MOD_FASCEORARIE_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modgui.inserisciInputHidden('idRiga',idRiga);
- for x in(select fasceorarie.idfasciaoraria,fasceorarie.nome as nome,fasceorarie.orainizio as orainizio, fasceorarie.orafine as orafine, fasceorarie.giorno as gg
- from fasceorarie where fasceorarie.idfasciaoraria=idRiga)loop
- modGUI.inserisciInput('var_descrizione','Nome','text', true,x.nome);
- modGUI.inserisciInput('var_oraInizio','Ora inizio','time', true);
- modGUI.inserisciInput('var_oraFine','Ora fine','time', true);
- modGUI.aCapo;
- modGUI.apriSelect('var_gg','Giorno: ');
- modGUI.inserisciOpzioneSelect('LUN','Lunedi',false);
- modGUI.inserisciOpzioneSelect('MAR','Martedi',false);
- modGUI.inserisciOpzioneSelect('MER','Mercoledi',false);
- modGUI.inserisciOpzioneSelect('GIO','Giovedi',false);
- modGUI.inserisciOpzioneSelect('VEN','Venerdi',false);
- modGUI.inserisciOpzioneSelect('SAB','Sabato',false);
- modGUI.inserisciOpzioneSelect('DOM','Domenica',false);
- modGUI.chiudiSelect;
- modGUI.aCapo;
- end loop;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modgui.chiudiForm;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END MOD_FASCEORARIE;
- /* MOD_FASCEORARIE_RIS
- * Questa procedura serve a modificare effettivamente la fascia oraria e visualizzarne il risultato
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: id della fascia oraria da modificare
- * var_descrizione: descrizione della fascia oraria
- * var_oraInizio: ora d'ini
- * var_oraFine:
- * var_gg:
- */
- PROCEDURE MOD_FASCEORARIE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2, var_descrizione varchar2, var_oraInizio varchar2, var_oraFine varchar2, var_gg varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Modifica dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('MODIFICA FASCIA ORARIA ');
- modGUI.chiudiIntestazione(2);
- UPDATE fasceorarie
- SET nome = var_descrizione,
- orainizio = to_timestamp('01-JAN-1970 '||substr(to_char(var_oraInizio),1,2)||':'||substr(to_char(var_oraInizio),-2)),
- orafine = to_timestamp('01-JAN-1970 '||substr(to_char(var_oraFine),1,2)||':'||substr(to_char(var_oraFine),-2)),
- giorno = var_gg
- WHERE fasceorarie.idfasciaoraria=idRiga;
- if SQL%ROWCOUNT != 0 then
- commit;
- modGUI.esitoOperazione('OK','La fascia oraria e` stata modificata correttamente');
- else
- modGUI.esitoOperazione('KO','La fascia oraria e` stata modificata correttamente');
- end if;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGui.chiudiDiv;
- modGUI.chiudiPagina;
- EXCEPTION
- WHEN OTHERS THEN
- modGUI.esitoOperazione('KO','La fascia oraria non e` stata modificata correttamente perche` si sovrappone ad altre fasce orarie gia` esistenti');
- modGui.chiudiDiv;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END MOD_FASCEORARIE_RIS;
- /* EL_FASCEORARIE
- * Questa procedura serve ad eliminare la fascia oraria selezionata in VIS_FASCEORARIE e visualizzarne il risultato
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: id della fascia oraria da eliminare
- */
- PROCEDURE EL_FASCEORARIE(id_Sessione varchar2,nome varchar2,ruolo varchar2,idRiga varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Elimina dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriDiv(false,'mycontainer');
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('ELIMINA FASCIA ORARIA ');
- modGUI.chiudiIntestazione(2);
- DELETE FROM areefasceorarie WHERE areefasceorarie.idfasciaoraria=idRiga;
- DELETE FROM fasceorarie WHERE fasceorarie.idfasciaoraria=idRiga;
- if SQL%ROWCOUNT != 0 then
- commit;
- modGUI.esitoOperazione('OK','La fascia oraria e` stata eliminata correttamente');
- else
- modGUI.esitoOperazione('KO','La fascia oraria non e` stata eliminata correttamente');
- end if;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGui.chiudiDiv;
- modGUI.chiudiPagina;
- END EL_FASCEORARIE;
- /* FILTRO_VEICOLI
- * Questa procedura serve a selezionare un cliente, un periodo di posteggio ed una autorimessa per poi trovare i veicoli
- * che sono riconducibili ai parametri selezionati nella procedura VEICOLI_RIS
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- */
- PROCEDURE FILTRO_VEICOLI(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VEICOLI RICONDUCIBILI AL CLIENTE IN UN DETERMINATO PERIODO IN UNA DETERMINATA AUTORIMESSA');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.VEICOLI_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.apriSelect('var_autorimessa','Autorimessa: ');
- for x in(select autorimesse.idautorimessa,autorimesse.indirizzo from autorimesse) loop
- modGUI.inserisciOpzioneSelect(x.idautorimessa,x.indirizzo,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.apriSelect('var_cliente','Cliente: ');
- for x in(select persone.nome,persone.cognome,clienti.idcliente from persone inner join clienti on clienti.idpersona=persone.idpersona) loop
- modGUI.inserisciOpzioneSelect(x.idcliente,x.nome||' '||x.cognome,false);
- end loop;
- modGUI.chiudiSelect;
- modGUI.inserisciInput('dataInizio','Data iniziale','date', true);
- modGUI.inserisciInput('dataFine', 'Data finale','date', true);
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modGUI.chiudiPagina;
- END FILTRO_VEICOLI;
- /* VEICOLI_RIS
- * Questa procedura serve a visualizzare i veicoli che sono riconducibili a un cliente
- * e che sono stati posteggiati in un determinato periodo e in una determinata autorimessa
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * var_autorimessa: id dell'autorimessa selezionata
- * var_cliente: id del cliente selezionato
- * dataInizio: data d'inizio dei posteggi
- * dataFine: data di fine dei posteggi
- */
- PROCEDURE VEICOLI_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,var_autorimessa varchar2,var_cliente varchar2,dataInizio varchar2, dataFine varchar2) AS
- idRiga varchar2(12);
- var_nome varchar2(50);
- var_cognome varchar2(50);
- var_indirizzo varchar2(50);
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- select persone.nome into var_nome from persone inner join clienti on persone.idpersona=clienti.idpersona where clienti.idcliente=var_cliente;
- select persone.cognome into var_cognome from persone inner join clienti on persone.idpersona=clienti.idpersona where clienti.idcliente=var_cliente;
- select autorimesse.indirizzo into var_indirizzo from autorimesse where autorimesse.idautorimessa=var_autorimessa;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('VEICOLI RICONDUCIBILI AL CLIENTE '||var_nome||' '||var_cognome|| ' DAL '||dataInizio||' AL '||dataFine||' IN '||var_indirizzo);
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Targa');
- modGUI.intestazioneTabella('Modello');
- modGUI.intestazioneTabella('Colore');
- modGUI.intestazioneTabella('Dettagli');
- modGUI.ChiudiRigaTabella;
- for x in (select veicoli.targa, veicoli.modello, veicoli.colore, veicoli.idveicolo from(
- select veicoli.idveicolo, effettuaingressiorari.idcliente
- from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
- inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join box on box.idbox=ingressiorari.idbox
- inner join aree on aree.idarea=box.idarea
- where effettuaingressiorari.idcliente=var_cliente
- and aree.idautorimessa=var_autorimessa
- and to_char(ingressiorari.oraentrata, 'YYYY-MM-DD')>=dataInizio
- and to_char(ingressiorari.orauscita, 'YYYY-MM-DD')<=dataFine
- UNION ALL
- select veicoli.idveicolo, effettuaingressiabbonamenti.idcliente
- from veicoli inner join effettuaingressiabbonamenti on veicoli.idveicolo=effettuaingressiabbonamenti.idveicolo
- inner join ingressiabbonamenti on ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento
- inner join box on box.idbox=ingressiabbonamenti.idbox
- inner join aree on aree.idarea=box.idarea
- where effettuaingressiabbonamenti.idcliente=var_cliente
- and aree.idautorimessa=var_autorimessa
- and to_char(ingressiabbonamenti.oraentrata, 'YYYY-MM-DD')>=dataInizio
- and to_char(ingressiabbonamenti.orauscita, 'YYYY-MM-DD')<=dataFine
- ) t inner join veicoli on t.idveicolo=veicoli.idveicolo
- ) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.targa);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.modello);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.colore);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.inserisciLente(gruppo1||'.DETT_VEICOLI',id_Sessione,nome,ruolo,x.idveicolo);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROCATEGORIA');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END VEICOLI_RIS;
- /* DETT_VEICOLI
- * Questa procedura serve a visualizzare i dettagli di un veicolo selezionato dalla procedura VEICOLI_RIS
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: id del veicolo di cui si vogliono visualizzare i dettagli
- */
- PROCEDURE DETT_VEICOLI(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2) AS
- var_targa char(7);
- var_produttore varchar2(45);
- var_modello varchar2(45);
- var_colore varchar2(45);
- var_alt number;
- var_lun number;
- var_lar number;
- var_peso number;
- var_alimentazione char(5);
- var_annotazione varchar2(100);
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('DETTAGLI VEICOLI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- select targa into var_targa from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Targa');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_targa);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select produttore into var_produttore from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Produttore');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_produttore);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select modello into var_modello from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Modello');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_modello);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select colore into var_colore from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Colore');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_colore);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select altezza into var_alt from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Altezza');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_alt)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select larghezza into var_lar from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Larghezza');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_lar)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select lunghezza into var_lun from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Lunghezza');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_lun)||' m');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select peso into var_peso from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Peso');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(to_char(var_peso)||' kg');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select alimentazione into var_alimentazione from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Alimentazione');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_alimentazione);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- select annotazione into var_annotazione from veicoli where idveicolo=idRiga;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Note');
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(var_annotazione);
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- modGUI.ChiudiTabella;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END DETT_VEICOLI;
- /* PERMANENZAMEDIA
- * Questa procedura serve a selezionare un periodo ed una soglia su cui calcolare PERMANENZAMEDIA_RIS
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * idRiga: id del veicolo di cui si vogliono visualizzare i dettagli
- */
- PROCEDURE PERMANENZAMEDIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('CLASSIFICA DEI TEMPI MEDI DI PERMANENZA IN OGNI AUTORIMESSA DI TUTTI I VEICOLI');
- modGUI.chiudiIntestazione(2);
- modgui.apriForm(gruppo1||'.PERMANENZAMEDIA_RIS');
- modgui.inserisciInputHidden('id_Sessione',id_Sessione);
- modgui.inserisciInputHidden('nome',nome);
- modgui.inserisciInputHidden('ruolo',ruolo);
- modGUI.inserisciInput('dataInizio','Data iniziale','date', true);
- modGUI.inserisciInput('dataFine','Data finale','date', true);
- modGUI.inserisciInput('soglia','Soglia','number', true);
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.inserisciBottoneReset('RESET');
- modGUI.inserisciBottoneForm;
- modGUI.chiudiPagina;
- END PERMANENZAMEDIA;
- /* PERMANENZAMEDIA_RIS
- * Questa procedura serve a calcolare la classifica, in un determinato periodo, dei tempi medi di permanenza in ogni
- * autorimessa di tutti i veicoli di propriet� di ogni cliente escludendo quelli per cui il tempo medio � inferiore ad una soglia
- * id_Sessione: numero associato alla sessione corrente
- * nome: username dell'utente attualmente connesso
- * ruolo: ruolo dell'utente attualmente connesso
- * dataInizio: data d'inizio del periodo di permanenza su cui calcolare la classifica
- * dataFine: data di fine del periodo di permanenza su cui calcolare la classifica
- * soglia: soglia minima del tempo medio di permanenza
- */
- PROCEDURE PERMANENZAMEDIA_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, dataInizio varchar2,dataFine varchar2,soglia number) AS
- BEGIN
- modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
- modGUI.aCapo;
- modGUI.apriIntestazione(2);
- modGUI.inserisciTesto('CLASSIFICA DEI TEMPI MEDI DI PERMANENZA IN OGNI AUTORIMESSA DI TUTTI I VEICOLI');
- modGUI.chiudiIntestazione(2);
- modGUI.apriDiv;
- modGUI.ApriTabella;
- modGUI.ApriRigaTabella;
- modGUI.intestazioneTabella('Autorimessa');
- modGUI.intestazioneTabella('Cliente');
- modGUI.intestazioneTabella('Veicolo');
- modGUI.intestazioneTabella('Tempo medio di permanenza');
- modGUI.ChiudiRigaTabella;
- for x in (select autorimesse.indirizzo,persone.nome,persone.cognome, veicoli.targa, t.avgdiff from(
- select aree.idautorimessa,effettuaingressiorari.idveicolo,effettuaingressiorari.idcliente,
- avg(extract(day from (ingressiorari.orauscita-ingressiorari.oraentrata))*24*60 +
- extract (hour from (ingressiorari.orauscita-ingressiorari.oraentrata))*60+
- extract (minute from (ingressiorari.orauscita-ingressiorari.oraentrata)))as avgdiff
- from ingressiorari inner join effettuaingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
- inner join box on box.idbox=ingressiorari.idbox
- inner join aree on aree.idarea=box.idarea
- where ingressiorari.orauscita is not null
- and to_char(ingressiorari.oraentrata, 'YYYY-MM-DD')>=dataInizio
- and to_char(ingressiorari.orauscita, 'YYYY-MM-DD')<=dataFine
- group by(aree.idautorimessa,effettuaingressiorari.idveicolo,effettuaingressiorari.idcliente)
- UNION ALL
- select aree.idautorimessa,effettuaingressiabbonamenti.idveicolo,effettuaingressiabbonamenti.idcliente,
- avg(extract(day from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata))*24*60 +
- extract (hour from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata))*60+
- extract (minute from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata)))as avgdiff
- from ingressiabbonamenti inner join effettuaingressiabbonamenti on ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento
- inner join box on box.idbox=ingressiabbonamenti.idbox
- inner join aree on aree.idarea=box.idarea
- where ingressiabbonamenti.orauscita is not null
- and to_char(ingressiabbonamenti.oraentrata, 'YYYY-MM-DD')>=dataInizio
- and to_char(ingressiabbonamenti.orauscita, 'YYYY-MM-DD')<=dataFine
- group by(aree.idautorimessa,effettuaingressiabbonamenti.idveicolo,effettuaingressiabbonamenti.idcliente)
- ) t
- inner join autorimesse on t.idautorimessa=autorimesse.idautorimessa
- inner join veicoli on t.idveicolo=veicoli.idveicolo
- inner join clienti on clienti.idcliente=t.idcliente
- inner join persone on persone.idpersona=clienti.idpersona
- where t.avgdiff>=soglia
- order by autorimesse.idautorimessa, clienti.idcliente, t.avgdiff desc) loop
- modGUI.ApriRigaTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.indirizzo);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.nome||' '||x.cognome);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.targa);
- modGUI.ChiudiElementoTabella;
- modGUI.ApriElementoTabella;
- modGUI.ElementoTabella(x.avgdiff||' minuti');
- modGUI.ChiudiElementoTabella;
- modGUI.ChiudiRigaTabella;
- end loop;
- modGUI.ChiudiTabella;
- modGUI.apriDiv(true);
- modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.PERMANENZAMEDIA');
- modGUI.chiudiDiv;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.aCapo;
- modGUI.chiudiDiv;
- modGUI.chiudiPagina;
- END PERMANENZAMEDIA_RIS;
- /*PREZZOBIGLIETTO
- * FUNZIONE RICHIAMATA DAL TRIGGER PER CALCOLARE IL PREZZO DEI BIGLIETTI
- */
- FUNCTION PREZZOBIGLIETTO(dataEntrata varchar2, oraEntrata varchar2, dataUscita varchar2, oraUscita varchar2, area varchar2) RETURN NUMBER AS
- var_dataciclo date;
- var_gg varchar2(20);
- var_oraDa varchar2(20);
- var_oraA varchar2(20);
- var_oraInizioCalcolo timestamp;
- var_oraFineCalcolo timestamp;
- var_h number;
- tot number;
- var_oraEntrata varchar(20);
- var_oraUscita varchar2(20);
- var_dataEntrata date;
- var_dataUscita date;
- var_timestampDa timestamp;
- var_timestampA timestamp;
- BEGIN
- --calcolo prezzo biglietto--
- var_oraEntrata:=to_char(substr(oraEntrata,1,2)||':'||substr(oraEntrata,-2));
- var_oraUscita:=to_char(substr(oraUscita,1,2)||':'||substr(oraUscita,-2));
- var_dataEntrata:=to_date(dataEntrata,'YYYY-MM-DD');
- var_dataUscita:=to_date(dataUscita,'YYYY-MM-DD');
- var_dataciclo:=var_dataEntrata;
- tot:=0;
- while(var_dataciclo<=var_dataUscita)
- loop
- if(var_dataciclo=var_dataEntrata)then
- var_oraDa:=var_oraEntrata;
- else
- var_oraDa:='00:00';
- end if;
- if(var_dataciclo=var_dataUscita)then
- var_oraA:=var_oraUscita;
- else
- var_oraA:='23:59';
- end if;
- var_gg:=upper(substr(to_char(var_dataciclo,'day','NLS_DATE_LANGUAGE = italian'),1,3));
- var_timestampDa:=to_timestamp('01-GEN-1970 '||var_oraDa,'DD-MON-YYYY HH24:MI');
- var_timestampA:=to_timestamp('01-GEN-1970 '||var_oraA,'DD-MON-YYYY HH24:MI');
- --trova fasciaoraria corrispondente e calcola
- for x in(select fasceorarie.nome,fasceorarie.giorno,fasceorarie.orainizio,fasceorarie.orafine,areefasceorarie.costo
- from fasceorarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
- where fasceorarie.giorno=var_gg and areefasceorarie.idarea=area
- and fasceorarie.orainizio<=var_timestampDa)
- loop
- if(var_timestampDa<=to_timestamp(to_char(x.orainizio,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI'))then
- var_oraInizioCalcolo:=x.orainizio;
- else
- var_oraInizioCalcolo:=var_timestampDa;
- end if;
- if(to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI')<=var_timestampA)then
- var_oraFineCalcolo:=to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI');
- else
- var_oraFineCalcolo:=var_timestampA;
- end if;
- --calcolo ore totali
- var_h:=extract(hour from (var_oraFineCalcolo-var_oraInizioCalcolo))+(extract (minute from (var_oraFineCalcolo-var_oraInizioCalcolo))/60);
- if(var_h>=0)then
- tot:=tot+(x.costo*var_h);
- end if;
- end loop;
- var_dataciclo:=var_dataciclo+1;
- end loop;
- RETURN tot;
- END PREZZOBIGLIETTO;
- ------------------------- FINE STEFANIA FALCHI --------------------------------------
- ------------------------- INIZIO GIUSEPPE BISICCHIA ----------------------------------
- PROCEDURE cittanomulte (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2
- ) IS
- CURSOR c_citta IS
- ( SELECT
- autorimesse.idautorimessa,
- autorimesse.indirizzo AS indirizzo
- FROM
- autorimesse
- MINUS
- ( SELECT
- autorimesse.idautorimessa,
- autorimesse.indirizzo AS indirizzo
- FROM
- ingressiorari,
- box,
- aree,
- autorimesse,
- multe
- WHERE
- multe.idmulta = ingressiorari.idmulta
- AND ingressiorari.idbox = box.idbox
- AND box.idarea = aree.idarea
- AND aree.idautorimessa = autorimesse.idautorimessa
- GROUP BY
- autorimesse.idautorimessa,
- autorimesse.indirizzo
- HAVING
- COUNT(*) <> 0
- UNION
- SELECT
- autorimesse.idautorimessa,
- autorimesse.indirizzo AS indirizzo
- FROM
- ingressiabbonamenti,
- box,
- aree,
- autorimesse,
- multe
- WHERE
- multe.idmulta = ingressiabbonamenti.idmulta
- AND ingressiabbonamenti.idbox = box.idbox
- AND box.idarea = aree.idarea
- AND aree.idautorimessa = autorimesse.idautorimessa
- GROUP BY
- autorimesse.idautorimessa,
- autorimesse.indirizzo
- HAVING
- COUNT(*) <> 0
- )
- );
- cnt NUMBER;
- v_citta autorimesse.indirizzo%TYPE;
- BEGIN
- cnt := 0;
- modgui.apripagina('HoC | CittaNoMulte', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('AUTORIMESSE DOVE NON SONO STATE ASSEGNATE MULTE');
- modgui.chiudiintestazione(2);
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Autorimessa');
- modgui.chiudirigatabella;
- FOR v_citta IN c_citta LOOP
- cnt := cnt + 1;
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v_citta.indirizzo);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- END LOOP;
- modgui.chiuditabella;
- IF ( cnt = 0 ) THEN
- modgui.apridiv(true);
- modgui.inseriscitesto('IN TUTTE LE AUTORIMESSE E'' STATA ASSEGNATA ALMENO UNA MULTA!');
- modgui.chiudidiv;
- END IF;
- modgui.chiudipagina;
- END cittanomulte;
- PROCEDURE clientepiumulte (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- altri VARCHAR2 DEFAULT 'F'
- ) IS
- CURSOR c_clienti IS
- SELECT
- idpersona,
- nome,
- cognome,
- SUM(cnt) AS maxmulte
- FROM
- (
- SELECT
- persone.idpersona,
- persone.nome,
- persone.cognome,
- COUNT(*) AS cnt
- FROM
- ingressiabbonamenti,
- effettuaingressiabbonamenti,
- multe,
- clienti,
- persone
- WHERE
- ingressiabbonamenti.idmulta = multe.idmulta
- AND ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
- AND effettuaingressiabbonamenti.idcliente = clienti.idcliente
- AND clienti.idpersona = persone.idpersona
- GROUP BY
- persone.idpersona,
- persone.nome,
- persone.cognome
- UNION
- SELECT
- persone.idpersona,
- persone.nome,
- persone.cognome,
- COUNT(*) AS cnt
- FROM
- ingressiorari,
- effettuaingressiorari,
- multe,
- clienti,
- persone
- WHERE
- ingressiorari.idmulta = multe.idmulta
- AND ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idcliente = clienti.idcliente
- AND clienti.idpersona = persone.idpersona
- GROUP BY
- persone.idpersona,
- persone.nome,
- persone.cognome
- )
- GROUP BY
- idpersona,
- nome,
- cognome
- ORDER BY
- SUM(cnt) DESC;
- SUBTYPE clientemultetype IS c_clienti%rowtype;
- v_cliente clientemultetype;
- v_maxmulte NUMBER;
- BEGIN
- OPEN c_clienti;
- modgui.apripagina('HoC | ClientePiuMulte', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- IF altri = 'F' THEN
- modgui.inseriscitesto('CLIENTE CON PIU'' MULTE');
- ELSE
- modgui.inseriscitesto('CLIENTI CON PIU'' MULTE');
- END IF;
- modgui.chiudiintestazione(2);
- FETCH c_clienti INTO v_cliente;
- modgui.apridiv();
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Cliente');
- modgui.intestazionetabella('Numero Multe');
- modgui.chiudirigatabella;
- IF ( c_clienti%notfound ) THEN
- modgui.chiuditabella;
- modgui.apridiv(true);
- modgui.inseriscitesto('NESSUN CLIENTE HA MULTE ASSEGNATE!');
- modgui.chiudidiv;
- ELSE
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v_cliente.nome
- || ' '
- || v_cliente.cognome);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v_cliente.maxmulte);
- v_maxmulte := v_cliente.maxmulte;
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- IF altri = 'T' THEN
- LOOP
- FETCH c_clienti INTO v_cliente;
- EXIT WHEN c_clienti%notfound OR v_cliente.maxmulte < v_maxmulte;
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v_cliente.nome
- || ' '
- || v_cliente.cognome);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v_cliente.maxmulte);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- END LOOP;
- modgui.chiuditabella;
- ELSE
- modgui.chiuditabella;
- FETCH c_clienti INTO v_cliente;
- IF v_cliente.maxmulte = v_maxmulte THEN
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ALTRE OPERAZIONI');
- modgui.chiudiintestazione(3);
- modgui.apridiv(true);
- modgui.inseriscibottone(id_sessione, nome, ruolo, 'VISUALIZZA ALTRI CLIENTI', 'clientepiumulte',
- '&altri=T');
- modgui.chiudidiv;
- END IF;
- END IF;
- END IF;
- modgui.chiudidiv;
- CLOSE c_clienti;
- modgui.chiudipagina;
- END clientepiumulte;
- PROCEDURE confrontaveicoli (
- id_sessione VARCHAR2,
- ruolo VARCHAR2,
- nome VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- v_autorimessa VARCHAR2,
- tipo1 VARCHAR2,
- tipo2 VARCHAR2
- ) IS
- cnt INTEGER;
- inizio DATE;
- finedata DATE;
- filterheader VARCHAR2(420);
- CURSOR veicoli IS
- ( SELECT
- v.targa,
- v.produttore,
- v.modello,
- v.colore,
- v.altezza,
- v.larghezza,
- v.lunghezza,
- v.peso,
- COUNT(*) AS numabbonamenti
- FROM
- veicoli v,
- abbonamentiveicoli av,
- abbonamenti a
- WHERE
- v.idveicolo = av.idveicolo
- AND v.alimentazione = tipo1
- AND av.idabbonamento = a.idabbonamento
- AND a.datainizio >= inizio
- AND a.datainizio <= finedata
- AND EXISTS (
- SELECT
- *
- FROM
- box b,
- aree ar,
- autorimesse au
- WHERE
- b.idabbonamento = a.idabbonamento
- AND b.idarea = ar.idarea
- AND ar.idautorimessa = au.idautorimessa
- AND au.idautorimessa = v_autorimessa
- )
- GROUP BY
- v.idveicolo,
- v.targa,
- v.produttore,
- v.modello,
- v.colore,
- v.altezza,
- v.larghezza,
- v.lunghezza,
- v.peso,
- v.alimentazione,
- v.annotazione
- HAVING
- COUNT(*) > ALL (
- SELECT
- COUNT(*)
- FROM
- veicoli v,
- abbonamentiveicoli av,
- abbonamenti a
- WHERE
- v.idveicolo = av.idveicolo
- AND v.alimentazione = tipo2
- AND av.idabbonamento = a.idabbonamento
- AND a.datainizio >= inizio
- AND a.datainizio <= finedata
- AND EXISTS (
- SELECT
- *
- FROM
- box b,
- aree ar,
- autorimesse au
- WHERE
- b.idabbonamento = a.idabbonamento
- AND b.idarea = ar.idarea
- AND ar.idautorimessa = au.idautorimessa
- AND au.idautorimessa = v_autorimessa
- )
- GROUP BY
- v.idveicolo
- )
- );
- BEGIN
- cnt := 0;
- inizio := to_date(datada, 'YYYY-MM-DD');
- finedata := to_date(dataa, 'YYYY-MM-DD');
- modgui.apripagina('HoC | Confrontaveicoli', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('CONFRONTA TIPI VEICOLI PER NUMERO DI ABBONAMEMTI');
- modgui.chiudiintestazione(2);
- modgui.apridiv;
- SELECT
- indirizzo
- INTO filterheader
- FROM
- autorimesse
- WHERE
- idautorimessa = v_autorimessa;
- filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- modgui.apriintestazione(3);
- modgui.inseriscitesto(tipo1
- || ' vs '
- || tipo2);
- modgui.chiudiintestazione(3);
- IF inizio > finedata THEN
- modgui.esitooperazione('KO', 'Le date inserite sono errate!');
- ELSE
- IF tipo1 = tipo2 THEN
- modgui.esitooperazione('KO', 'Inserire tipologie di veicoli diversi tra di loro!');
- ELSE
- modgui.apridiv;
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Targa');
- modgui.intestazionetabella('Produttore');
- modgui.intestazionetabella('Modello');
- modgui.intestazionetabella('Colore');
- modgui.intestazionetabella('Dimensioni');
- modgui.intestazionetabella('Peso');
- modgui.intestazionetabella('Numero Abbonamenti');
- modgui.chiudirigatabella;
- FOR v IN veicoli LOOP
- cnt := cnt + 1;
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.targa);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.produttore);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.modello);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.colore);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.lunghezza
- || ' x '
- || v.larghezza
- || ' x '
- || v.altezza);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.peso);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(v.numabbonamenti);
- modgui.chiudielementotabella;
- END LOOP;
- modgui.chiuditabella;
- IF cnt = 0 THEN
- modgui.apridiv(true);
- modgui.inseriscitesto('NON SONO STATI TROVATI VEICOLI CORRISPONDENTI AI PARAMETRI DI RICERCA');
- modgui.chiudidiv;
- END IF;
- modgui.chiudidiv;
- END IF;
- END IF;
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ALTRE OPERAZIONI');
- modgui.chiudiintestazione(3);
- modgui.apridiv(true);
- modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.piuabbonamenti');
- modgui.chiudidiv;
- modgui.chiudipagina;
- END confrontaveicoli;
- PROCEDURE introiti (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2
- ) IS
- BEGIN
- modgui.apripagina('HoC | Introiti', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('INTROITI');
- modgui.chiudiintestazione(2);
- modgui.apriform(gruppo1||'.visualizzaintroiti');
- modgui.inserisciinputhidden('id_Sessione', id_sessione);
- modgui.inserisciinputhidden('ruolo', ruolo);
- modgui.inserisciinputhidden('nome', nome);
- modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
- modgui.inserisciinput('dataA', 'Fine', 'date', true);
- modgui.inseriscitesto('Filtra per');
- modgui.inserisciradiobutton('Tutti i parcheggi', 'filtro', 'N', true);
- modgui.inserisciradiobutton('Sede', 'filtro', 'S');
- modgui.apriselect('sede', 'Sede');
- FOR x IN (
- SELECT
- a.idsede,
- a.indirizzo
- FROM
- sedi a
- ) LOOP modgui.inserisciopzioneselect(x.idsede, x.indirizzo);
- END LOOP;
- modgui.chiudiselect();
- modgui.inserisciradiobutton('Autorimessa', 'filtro', 'A');
- modgui.apriselect('autorimessa', 'Autorimessa');
- FOR x IN (
- SELECT
- a.idautorimessa,
- a.indirizzo
- FROM
- autorimesse a
- ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
- END LOOP;
- modgui.chiudiselect();
- modgui.inseriscibottonereset('RESET');
- modgui.inseriscibottoneform('CALCOLA');
- modgui.chiudiform;
- modgui.chiudipagina;
- END introiti;
- PROCEDURE piuabbonamenti (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2
- ) IS
- BEGIN
- modgui.apripagina('HoC | PiuAbbonamenti', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('CONFRONTA TIPI DI VEICOLO PER NUMERO DI ABBONAMENTI');
- modgui.chiudiintestazione(2);
- modgui.apriform(gruppo1||'.confrontaveicoli');
- modgui.inserisciinputhidden('id_Sessione', id_sessione);
- modgui.inserisciinputhidden('ruolo', ruolo);
- modgui.inserisciinputhidden('nome', nome);
- modgui.apriselect('tipo1', 'Primo tipo di veicoli');
- FOR x IN (
- SELECT
- v.alimentazione
- FROM
- veicoli v
- GROUP BY
- v.alimentazione
- ) LOOP modgui.inserisciopzioneselect(x.alimentazione, x.alimentazione); -- con false a tutti ottengo il primo risultato
- END LOOP;
- modgui.chiudiselect();
- modgui.apriselect('tipo2', 'Secondo tipo di veicoli');
- FOR x IN (
- SELECT
- v.alimentazione
- FROM
- veicoli v
- GROUP BY
- v.alimentazione
- ) LOOP modgui.inserisciopzioneselect(x.alimentazione, x.alimentazione, true); --metto true a tutti così ottengo l'ultimo risultato
- END LOOP;
- modgui.chiudiselect();
- modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
- modgui.inserisciinput('dataA', 'Fine', 'date', true);
- modgui.apriselect('v_autorimessa', 'Autorimessa');
- FOR x IN (
- SELECT
- a.idautorimessa,
- a.indirizzo
- FROM
- autorimesse a
- ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
- END LOOP;
- modgui.chiudiselect();
- modgui.inseriscibottonereset('RESET');
- modgui.inseriscibottoneform('CONFRONTA');
- modgui.chiudiform;
- modgui.chiudipagina;
- END piuabbonamenti;
- PROCEDURE selezionaingressi (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2
- ) IS
- BEGIN
- modgui.apripagina('HoC | SelezionaIngressi', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('INGRESSI');
- modgui.chiudiintestazione(2);
- modgui.apridiv;
- modgui.apriform(gruppo1||'.visualizzaingressi');
- modgui.inserisciinputhidden('id_Sessione', id_sessione);
- modgui.inserisciinputhidden('ruolo', ruolo);
- modgui.inserisciinputhidden('nome', nome);
- modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
- modgui.inserisciinput('dataA', 'Fine', 'date', true);
- modgui.apriselect('v_idcliente', 'Cliente');
- FOR x IN (
- SELECT
- c.idcliente,
- p.nome,
- p.cognome
- FROM
- clienti c,
- persone p
- WHERE
- c.idpersona = p.idpersona
- ) LOOP modgui.inserisciopzioneselect(x.idcliente, x.nome
- || ' '
- || x.cognome);
- END LOOP;
- modgui.inserisciopzioneselect(-1, 'Tutti', true);
- modgui.chiudiselect();
- modgui.inseriscitesto('Filtra per');
- modgui.inserisciradiobutton('Tutti i parcheggi', 'filtro', 'N', true);
- modgui.inserisciradiobutton('Sede', 'filtro', 'S');
- modgui.apriselect('sede', 'Sede');
- FOR x IN (
- SELECT
- a.idsede,
- a.indirizzo
- FROM
- sedi a
- ) LOOP modgui.inserisciopzioneselect(x.idsede, x.indirizzo);
- END LOOP;
- modgui.chiudiselect();
- modgui.inserisciradiobutton('Autorimessa', 'filtro', 'A');
- modgui.apriselect('autorimessa', 'Autorimessa');
- FOR x IN (
- SELECT
- a.idautorimessa,
- a.indirizzo
- FROM
- autorimesse a
- ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
- END LOOP;
- modgui.chiudiselect();
- modgui.inseriscicheckbox('Prenotati', 'prenotati', 'T', true);
- modgui.inseriscicheckbox('Non Prenotati', 'nonprenotati', 'T', true);
- modgui.inseriscicheckbox('In corso', 'incorso', 'T', true);
- modgui.inseriscicheckbox('Conclusi', 'conclusi', 'T', true);
- modgui.inseriscibottonereset('RESET');
- modgui.inseriscibottoneform('VISUALIZZA');
- modgui.chiudiform;
- modgui.chiudipagina;
- END selezionaingressi;
- PROCEDURE selezionaingresso (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2
- ) AS
- BEGIN
- modgui.apripagina('HoC | SelezionaIngresso', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('SELEZIONA INGRESSO');
- modgui.chiudiintestazione(2);
- modgui.apridiv;
- modgui.apriform(gruppo1||'.visualizzabiglietto');
- modgui.inserisciinputhidden('id_Sessione', id_sessione);
- modgui.inserisciinputhidden('ruolo', ruolo);
- modgui.inserisciinputhidden('nome', nome);
- modgui.apriselect('idriga', 'Codice Ingresso');
- FOR x IN (
- SELECT
- i.idingressoorario
- FROM
- ingressiorari i
- ) LOOP modgui.inserisciopzioneselect(x.idingressoorario, x.idingressoorario);
- END LOOP;
- modgui.chiudiselect();
- modgui.inseriscibottonereset('RESET');
- modgui.inseriscibottoneform('VISUALIZZA');
- modgui.chiudiform;
- modgui.chiudipagina;
- END selezionaingresso;
- PROCEDURE visualizzabiglietto (
- id_sessione VARCHAR2,
- nome VARCHAR2,
- ruolo VARCHAR2,
- idriga VARCHAR2
- ) IS
- CURSOR c IS
- SELECT
- *
- FROM
- ingressiorari
- WHERE
- idingressoorario = idriga;
- biglietto ingressiorari%rowtype;
- clienteid clienti.idcliente%TYPE;
- veicoloid veicoli.idveicolo%TYPE;
- clientenome persone.nome%TYPE;
- clientecognome persone.cognome%TYPE;
- veicolo veicoli.targa%TYPE;
- autorimessaind autorimesse.indirizzo%TYPE;
- autorimessaid autorimesse.idautorimessa%TYPE;
- numero box.numero%TYPE;
- piano box.piano%TYPE;
- colonna box.numerocolonna%TYPE;
- boxid box.idbox%TYPE;
- cancellato ingressiorari.cancellato%TYPE;
- v_causa multe.causa%TYPE;
- multaid multe.idmulta%type;
- BEGIN
- modgui.apripagina('HoC | VisualizzaBiglietto', id_sessione, nome, ruolo);
- OPEN c;
- FETCH c INTO biglietto;
- modgui.apriintestazione(2);
- modgui.inseriscitesto('DETTAGLIO INGRESSO ORARIO');
- modgui.chiudiintestazione(2);
- IF c%notfound THEN
- modgui.esitooperazione('KO', 'L''ingresso orario selezionato non esiste!');
- ELSE
- SELECT UNIQUE
- veicoli.idveicolo,
- persone.nome,
- persone.cognome,
- veicoli.targa,
- clienti.idcliente,
- clienti.cancellato
- INTO
- veicoloid,
- clientenome,
- clientecognome,
- veicolo,
- clienteid,
- cancellato
- FROM
- persone,
- clienti,
- veicoli,
- effettuaingressiorari
- WHERE
- effettuaingressiorari.idingressoorario = idriga
- AND clienti.idcliente = effettuaingressiorari.idcliente
- AND veicoli.idveicolo = effettuaingressiorari.idveicolo
- AND persone.idpersona = clienti.idpersona;
- SELECT
- unique indirizzo,
- autorimesse.idautorimessa,
- box.idbox,
- box.numero,
- box.piano,
- box.numerocolonna
- INTO
- autorimessaind,
- autorimessaid,
- boxid,
- numero,
- piano,
- colonna
- FROM
- autorimesse,
- box,
- ingressiorari,
- aree
- WHERE
- ingressiorari.idingressoorario = idriga
- AND ingressiorari.idbox = box.idbox
- AND box.idarea = aree.idarea
- AND aree.idautorimessa = autorimesse.idautorimessa;
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Codice Ingresso');
- modgui.aprielementotabella;
- modgui.elementotabella(biglietto.idingressoorario);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Cliente');
- modgui.aprielementotabella;
- IF cancellato = 'T' THEN
- clientenome := '* CLIENTE';
- clientecognome := 'CANCELLATO *';
- END IF;
- modgui.collegamento(clientenome
- || ' '
- || clientecognome,'gruppo5.moreinfoclient?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || clienteid);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Veicolo');
- modgui.aprielementotabella;
- modgui.collegamento(veicolo,'gruppo5.moreinfocar?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || veicoloid);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- IF ( biglietto.entrataprevista IS NOT NULL ) THEN
- modgui.apririgatabella;
- modgui.intestazionetabella('Entrata prevista');
- modgui.aprielementotabella;
- modgui.elementotabella(biglietto.entrataprevista);
- modgui.chiudielementotabella;
- END IF;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Entrata');
- modgui.aprielementotabella;
- IF biglietto.oraentrata IS NULL THEN
- modgui.elementotabella('Non effettuata');
- ELSE
- modgui.elementotabella(biglietto.oraentrata);
- END IF;
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Uscita');
- modgui.aprielementotabella;
- IF biglietto.orauscita IS NULL THEN
- modgui.elementotabella('Non effettuata');
- ELSE
- modgui.elementotabella(biglietto.orauscita);
- END IF;
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Autorimessa');
- modgui.aprielementotabella;
- modgui.collegamento(autorimessaind,'gruppo2.visualizzaautorimessa?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || autorimessaid);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Box');
- modgui.aprielementotabella;
- modgui.collegamento('Colonna '
- || colonna
- || ' - '
- || 'Piano '
- || piano
- || ' - '
- || 'Numero '
- || numero,'gruppo2.visualizzabox?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || boxid);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Costo');
- modgui.aprielementotabella;
- IF biglietto.orauscita IS NULL THEN
- modgui.elementotabella('-');
- ELSE
- modgui.elementotabella(biglietto.costo || '€');
- END IF;
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- IF ( biglietto.idmulta IS NOT NULL ) THEN
- SELECT
- causa,
- idmulta
- INTO v_causa, multaid
- FROM
- multe
- WHERE
- multe.idmulta = biglietto.idmulta;
- modgui.apririgatabella;
- modgui.intestazionetabella('Causa Multa');
- modgui.aprielementotabella;
- modgui.collegamento(v_causa,'gruppo1.dettagliomulte?id_Sessione=' || id_Sessione || '&nome=' ||
- nome || '&ruolo=' || ruolo || '&idRiga=' || multaid);
- modgui.chiudielementotabella;
- END IF;
- modgui.chiuditabella;
- END IF;
- CLOSE c;
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ALTRE OPERAZIONI');
- modgui.chiudiintestazione(3);
- modgui.apridiv(true);
- modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.selezionaingresso');
- modgui.chiudidiv;
- modgui.chiudipagina;
- END visualizzabiglietto;
- PROCEDURE visualizzaingressi (
- id_sessione VARCHAR2,
- ruolo VARCHAR2,
- nome VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtro VARCHAR2,
- autorimessa VARCHAR2,
- sede VARCHAR2,
- prenotati VARCHAR2 DEFAULT 'F',
- nonprenotati VARCHAR2 DEFAULT 'F',
- incorso VARCHAR2 DEFAULT 'F',
- conclusi VARCHAR2 DEFAULT 'F',
- v_idcliente VARCHAR2 DEFAULT -1
- ) IS
- cnt INTEGER;
- inizio DATE;
- finedata DATE;
- filterheader VARCHAR2(420);
- clienteid clienti.idcliente%TYPE;
- veicoloid veicoli.idveicolo%TYPE;
- clientenome persone.nome%TYPE;
- clientecognome persone.cognome%TYPE;
- veicolo veicoli.targa%TYPE;
- cancellato ingressiorari.cancellato%TYPE;
- CURSOR tickets IS
- SELECT
- autorimesse.indirizzo AS autorimessaind,
- sedi.indirizzo AS sedeind,
- ingressiorari.idingressoorario,
- ingressiorari.costo,
- ingressiorari.oraentrata,
- ingressiorari.orauscita,
- ingressiorari.entrataprevista,
- clienti.idcliente
- FROM
- ingressiorari,
- effettuaingressiorari,
- box,
- aree,
- autorimesse,
- sedi,
- clienti
- WHERE
- box.idbox = ingressiorari.idbox
- AND box.idarea = aree.idarea
- AND aree.idautorimessa = autorimesse.idautorimessa
- AND autorimesse.idsede = sedi.idsede
- AND ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idcliente = clienti.idcliente
- AND ( ( trunc(ingressiorari.oraentrata) >= inizio
- AND trunc(ingressiorari.oraentrata) <= finedata )
- OR ( trunc(ingressiorari.entrataprevista) >= inizio
- AND trunc(ingressiorari.entrataprevista) <= finedata ) )
- AND ( filtro = 'N'
- OR ( filtro = 'A'
- AND autorimesse.idautorimessa = autorimessa )
- OR ( filtro = 'S'
- AND sedi.idsede = sede ) )
- AND ( ( prenotati = 'F'
- AND nonprenotati = 'F' )
- OR ( prenotati = 'T'
- AND ingressiorari.entrataprevista IS NOT NULL )
- OR ( nonprenotati = 'T'
- AND ingressiorari.entrataprevista IS NULL ) )
- AND ( ( incorso = 'F'
- AND conclusi = 'F' )
- OR ( incorso = 'T'
- AND ingressiorari.orauscita IS NULL )
- OR ( conclusi = 'T'
- AND ingressiorari.orauscita IS NOT NULL ) )
- AND ( ( v_idcliente = - 1 )
- OR ( clienti.idcliente = v_idcliente ) )
- ORDER BY
- ingressiorari.oraentrata;
- BEGIN
- cnt := 0;
- inizio := to_date(datada, 'YYYY-MM-DD');
- finedata := to_date(dataa, 'YYYY-MM-DD');
- modgui.apripagina('HoC | VisualizzaIngressi', id_sessione, nome, ruolo);
- modgui.apriintestazione(2);
- modgui.inseriscitesto('INGRESSI');
- modgui.chiudiintestazione(2);
- modgui.apridiv;
- IF filtro = 'S' THEN
- SELECT
- indirizzo
- INTO filterheader
- FROM
- sedi
- WHERE
- idsede = sede;
- filterheader := 'RISULTATO RICERCA PER: sede di ' || filterheader;
- ELSE
- IF filtro = 'A' THEN
- SELECT
- indirizzo
- INTO filterheader
- FROM
- autorimesse
- WHERE
- idautorimessa = autorimessa;
- filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
- ELSE
- filterheader := 'RISULTATO RICERCA PER: tutte le autorimesse';
- END IF;
- END IF;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- IF filtro = 'A' THEN
- SELECT
- sedi.indirizzo
- INTO filterheader
- FROM
- sedi,
- autorimesse
- WHERE
- autorimesse.idautorimessa = autorimessa
- AND sedi.idsede = autorimesse.idsede;
- filterheader := 'sede: ' || filterheader;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- END IF;
- IF v_idcliente != -1 THEN
- SELECT
- persone.nome,
- persone.cognome
- INTO
- clientenome,
- clientecognome
- FROM
- clienti,
- persone
- WHERE
- clienti.idcliente = v_idcliente
- AND persone.idpersona = clienti.idpersona;
- filterheader := 'cliente: '
- || clientenome
- || ' '
- || clientecognome;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- END IF;
- IF inizio > finedata THEN
- modgui.esitooperazione('KO', 'Le date inserite sono errate!');
- ELSE
- modgui.apridiv;
- modgui.apritabella;
- modgui.apririgatabella;
- IF v_idcliente = -1 THEN
- modgui.intestazionetabella('Cliente');
- END IF;
- modgui.intestazionetabella('Veicolo');
- IF filtro != 'A' THEN
- modgui.intestazionetabella('Autorimessa');
- END IF;
- modgui.intestazionetabella('Entrata');
- modgui.intestazionetabella('Uscita');
- modgui.intestazionetabella('Prenotazione');
- modgui.intestazionetabella('Costo (€)');
- modgui.intestazionetabella('Dettaglio');
- modgui.chiudirigatabella;
- FOR ticket IN tickets LOOP
- cnt := cnt + 1;
- SELECT UNIQUE
- veicoli.idveicolo,
- persone.nome,
- persone.cognome,
- veicoli.targa,
- clienti.idcliente,
- clienti.cancellato
- INTO
- veicoloid,
- clientenome,
- clientecognome,
- veicolo,
- clienteid,
- cancellato
- FROM
- persone,
- clienti,
- veicoli,
- effettuaingressiorari
- WHERE
- effettuaingressiorari.idingressoorario = ticket.idingressoorario
- AND clienti.idcliente = effettuaingressiorari.idcliente
- AND veicoli.idveicolo = effettuaingressiorari.idveicolo
- AND persone.idpersona = clienti.idpersona;
- modgui.apririgatabella;
- IF v_idcliente = -1 THEN
- modgui.aprielementotabella;
- modgui.elementotabella(clientenome
- || ' '
- || clientecognome);
- modgui.chiudielementotabella;
- END IF;
- modgui.aprielementotabella;
- modgui.elementotabella(veicolo);
- modgui.chiudielementotabella;
- IF filtro != 'A' THEN
- modgui.aprielementotabella;
- modgui.elementotabella(ticket.autorimessaind);
- modgui.chiudielementotabella;
- END IF;
- modgui.aprielementotabella;
- IF ticket.oraentrata IS NULL THEN
- modgui.elementotabella('Non effettuata');
- ELSE
- modgui.elementotabella(trunc(ticket.oraentrata));
- END IF;
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- IF ticket.orauscita IS NULL THEN
- modgui.elementotabella('Non effettuata');
- ELSE
- modgui.elementotabella(trunc(ticket.orauscita));
- END IF;
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- IF ticket.entrataprevista IS NULL THEN
- modgui.elementotabella('No');
- ELSE
- modgui.elementotabella('Si');
- END IF;
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- IF ticket.orauscita IS NULL THEN
- modgui.elementotabella('-');
- ELSE
- modgui.elementotabella(ticket.costo);
- END IF;
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, ticket.idingressoorario);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- END LOOP;
- modgui.chiuditabella;
- IF cnt = 0 THEN
- modgui.apridiv(true);
- modgui.inseriscitesto('NON SONO STATI EFFETTUATI INGRESSI NEL PERIODO SELEZIONATO');
- modgui.chiudidiv;
- END IF;
- modgui.chiudidiv;
- END IF;
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ALTRE OPERAZIONI');
- modgui.chiudiintestazione(3);
- modgui.apridiv(true);
- modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.selezionaingressi');
- modgui.chiudidiv;
- modgui.chiudipagina;
- END visualizzaingressi;
- PROCEDURE visualizzaintroiti (
- id_sessione VARCHAR2,
- ruolo VARCHAR2,
- nome VARCHAR2,
- datada VARCHAR2,
- dataa VARCHAR2,
- filtro VARCHAR2,
- autorimessa VARCHAR2,
- sede VARCHAR2
- ) IS
- tot NUMBER(6, 2);
- cnt INTEGER;
- inizio DATE;
- finedata DATE;
- filterheader VARCHAR2(420);
- CURSOR tickets IS
- SELECT
- autorimesse.indirizzo AS autorimessaind,
- sedi.indirizzo AS sedeind,
- ingressiorari.idingressoorario,
- ingressiorari.costo,
- ingressiorari.oraentrata,
- ingressiorari.orauscita
- FROM
- ingressiorari,
- box,
- aree,
- autorimesse,
- sedi
- WHERE
- box.idbox = ingressiorari.idbox
- AND box.idarea = aree.idarea
- AND aree.idautorimessa = autorimesse.idautorimessa
- AND autorimesse.idsede = sedi.idsede
- AND trunc(ingressiorari.orauscita) >= inizio
- AND trunc(ingressiorari.orauscita) <= finedata
- AND ( filtro = 'N'
- OR ( filtro = 'A'
- AND autorimesse.idautorimessa = autorimessa )
- OR ( filtro = 'S'
- AND sedi.idsede = sede ) )
- ORDER BY
- ingressiorari.oraentrata;
- BEGIN
- tot := 0.00;
- cnt := 0;
- inizio := to_date(datada, 'YYYY-MM-DD');
- finedata := to_date(dataa, 'YYYY-MM-DD');
- modgui.apripagina('HoC | VisualizzaIntroiti', id_sessione, nome, ruolo);
- FOR t IN tickets LOOP
- cnt := cnt + 1;
- IF t.costo is not null THEN
- tot := tot + t.costo;
- END IF;
- END LOOP;
- modgui.apriintestazione(2);
- modgui.inseriscitesto('INTROITI');
- modgui.chiudiintestazione(2);
- IF filtro = 'S' THEN
- SELECT
- indirizzo
- INTO filterheader
- FROM
- sedi
- WHERE
- idsede = sede;
- filterheader := 'RISULTATO RICERCA PER: sede di ' || filterheader;
- ELSE
- IF filtro = 'A' THEN
- SELECT
- indirizzo
- INTO filterheader
- FROM
- autorimesse
- WHERE
- idautorimessa = autorimessa;
- filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
- ELSE
- filterheader := 'RISULTATO RICERCA PER: tutte le autorimesse';
- END IF;
- END IF;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- IF filtro = 'A' THEN
- SELECT
- sedi.indirizzo
- INTO filterheader
- FROM
- sedi,
- autorimesse
- WHERE
- autorimesse.idautorimessa = autorimessa
- AND sedi.idsede = autorimesse.idsede;
- filterheader := 'sede: ' || filterheader;
- modgui.apriintestazione(3);
- modgui.inseriscitesto(upper(filterheader));
- modgui.chiudiintestazione(3);
- END IF;
- IF inizio > finedata THEN
- modgui.esitooperazione('KO', 'Le date inserite sono errate!');
- ELSE
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Inizio Periodo');
- modgui.intestazionetabella('Fine Periodo');
- modgui.intestazionetabella('Numero Ingressi');
- modgui.intestazionetabella('Introiti Totali (€)');
- modgui.chiudirigatabella;
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(inizio);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(finedata);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(cnt);
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(tot);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- modgui.chiuditabella;
- IF cnt > 0 THEN
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ELENCO INGRESSI');
- modgui.chiudiintestazione(3);
- modgui.apritabella;
- modgui.apririgatabella;
- modgui.intestazionetabella('Codice Ingresso');
- IF filtro = 'N' THEN
- modgui.intestazionetabella('Sede');
- END IF;
- IF filtro != 'A' THEN
- modgui.intestazionetabella('Autorimessa');
- END IF;
- modgui.intestazionetabella('Entrata');
- modgui.intestazionetabella('Uscita');
- modgui.intestazionetabella('Costo (€)');
- modgui.intestazionetabella('Dettaglio');
- modgui.chiudirigatabella;
- FOR ticket IN tickets LOOP
- modgui.apririgatabella;
- modgui.aprielementotabella;
- modgui.elementotabella(ticket.idingressoorario);
- modgui.chiudielementotabella;
- IF filtro = 'N' THEN
- modgui.aprielementotabella;
- modgui.elementotabella(ticket.sedeind);
- modgui.chiudielementotabella;
- END IF;
- IF filtro != 'A' THEN
- modgui.aprielementotabella;
- modgui.elementotabella(ticket.autorimessaind);
- modgui.chiudielementotabella;
- END IF;
- modgui.aprielementotabella;
- modgui.elementotabella(trunc(ticket.oraentrata));
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.elementotabella(trunc(ticket.orauscita));
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- IF ticket.costo IS NOT NULL THEN
- modgui.elementotabella(ticket.costo);
- ELSE
- modgui.elementotabella('-');
- END IF;
- modgui.chiudielementotabella;
- modgui.aprielementotabella;
- modgui.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, ticket.idingressoorario);
- modgui.chiudielementotabella;
- modgui.chiudirigatabella;
- END LOOP;
- modgui.chiuditabella;
- END IF;
- END IF;
- modgui.apriintestazione(3);
- modgui.inseriscitesto('ALTRE OPERAZIONI');
- modgui.chiudiintestazione(3);
- modgui.apridiv(true);
- modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.introiti');
- modgui.chiudidiv;
- modgui.chiudipagina;
- END visualizzaintroiti;
- FUNCTION ritiroorario (
- v_id_veicolo effettuaingressiorari.idveicolo%TYPE
- ) RETURN boolean AS
- /*clientenonparcheggiato EXCEPTION;
- PRAGMA exception_init ( clientenonparcheggiato, -1445 );*/
- v_id_ingresso ingressiorari.idingressoorario%TYPE;
- CURSOR ingressi IS
- SELECT
- ingressiorari.idingressoorario
- INTO v_id_ingresso
- FROM
- ingressiorari,
- effettuaingressiorari
- WHERE
- effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
- AND effettuaingressiorari.idveicolo = v_id_veicolo
- AND ingressiorari.orauscita IS NULL
- AND ingressiorari.oraentrata is not null;
- BEGIN
- SAVEPOINT start_transaction;
- OPEN ingressi;
- FETCH ingressi INTO v_id_ingresso;
- IF ( ingressi%notfound ) THEN
- RAISE clientenonparcheggiato;
- END IF;
- UPDATE ingressiorari
- SET
- orauscita = (
- SELECT
- SYSTIMESTAMP
- FROM
- dual
- )
- WHERE
- idingressoorario = v_id_ingresso;
- RETURN true;
- EXCEPTION
- WHEN OTHERS THEN
- ROLLBACK TO start_transaction;
- return false;
- END ritiroorario;
- FUNCTION ingressoorario (
- v_id_cliente effettuaingressiorari.idcliente%TYPE,
- v_id_veicolo effettuaingressiorari.idveicolo%TYPE,
- v_id_autorimessa autorimesse.idautorimessa%TYPE,
- v_entrata_prev ingressiorari.entrataprevista%TYPE DEFAULT NULL
- ) RETURN ingressiorari.idingressoorario%TYPE AS
- cnt NUMBER;
- max_entrata_pren ingressiorari.entrataprevista%TYPE;
- v_id_box ingressiorari.idbox%TYPE;
- v_id_ingresso ingressiorari.idingressoorario%TYPE;
- timestmp ingressiorari.oraentrata%TYPE;
- /*clientenontrovatoexception EXCEPTION;
- PRAGMA exception_init ( clientenontrovatoexception, -1440 );
- veicolonontrovatoexception EXCEPTION;
- PRAGMA exception_init ( veicolonontrovatoexception, -1441 );
- autorimessanontrovataexception EXCEPTION;
- PRAGMA exception_init ( autorimessanontrovataexception, -1442 );
- clienteancoraparcheggiato EXCEPTION;
- PRAGMA exception_init ( clienteancoraparcheggiato, -1443 );
- veicoloancoraparcheggiato EXCEPTION;
- PRAGMA exception_init ( veicoloancoraparcheggiato, -1444 );
- prenotazionegiaesistenteexception EXCEPTION;
- PRAGMA exception_init ( prenotazionegiaesistenteexception, -1446 );
- veicolononpossedutoexception EXCEPTION;
- PRAGMA exception_init ( veicolononpossedutoexception, -1447 );
- boxnontrovatoexception EXCEPTION;*/
- BEGIN
- SAVEPOINT start_transaction;
- v_id_box := gruppo2.ricercaposto(v_id_veicolo, v_id_autorimessa);
- --v_id_box := 2;
- select count(*)
- into cnt
- from box b
- where b.idBox = v_id_box and b.occupato = 'F' and b.riservato = 'F';
- if cnt = 0 then
- raise boxnontrovatoexception;
- end if;
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- clienti
- WHERE
- idcliente = v_id_cliente;
- IF ( cnt = 0 ) THEN
- RAISE clientenontrovatoexception;
- END IF;
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- veicoli
- WHERE
- idveicolo = v_id_veicolo;
- IF ( cnt = 0 ) THEN
- RAISE veicolonontrovatoexception;
- END IF;
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- autorimesse
- WHERE
- idautorimessa = v_id_autorimessa;
- IF ( cnt = 0 ) THEN
- RAISE autorimessanontrovataexception;
- END IF;
- --verificare che utente possieda veicolo
- --verificare che utente non cancellato > vincoli
- --verificare che utente non blacklist > vincoli
- --verificare che box adatto > vincoli
- --verificare che prenotazione non scaduta > vincoli
- --verificare che utente non sia già parcheggiato
- --verificare che auto non sia già parcheggiata
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- veicoliclienti
- WHERE
- idcliente = v_id_cliente
- AND idveicolo = v_id_veicolo;
- IF ( cnt = 0 ) THEN
- RAISE veicolononpossedutoexception;
- END IF;
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- ingressiorari,
- effettuaingressiorari
- WHERE
- ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idcliente = v_id_cliente
- AND ingressiorari.orauscita IS NULL
- AND ingressiorari.oraentrata is not null;
- /*IF ( cnt > 0 ) THEN
- RAISE clienteancoraparcheggiato;
- END IF;*/
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- ingressiorari,
- effettuaingressiorari
- WHERE
- ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idveicolo = v_id_veicolo
- AND ingressiorari.orauscita IS NULL
- AND ingressiorari.oraentrata is not null;
- IF ( cnt > 0 ) THEN
- RAISE veicoloancoraparcheggiato;
- END IF;
- /*SELECT
- COUNT(*)
- INTO cnt
- FROM
- ingressiabbonamenti,
- effettuaingressiabbonamenti
- WHERE
- ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
- AND effettuaingressiabbonamenti.idcliente = v_id_cliente
- AND ingressiabbonamenti.orauscita IS NULL
- AND ingressiabbonamenti.oraentrata IS NOT NULL;
- IF ( cnt > 0 ) THEN
- RAISE clienteancoraparcheggiato;
- END IF;*/
- SELECT
- COUNT(*)
- INTO cnt
- FROM
- ingressiabbonamenti,
- effettuaingressiabbonamenti
- WHERE
- ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
- AND effettuaingressiabbonamenti.idveicolo = v_id_veicolo
- AND ingressiabbonamenti.orauscita IS NULL
- AND ingressiabbonamenti.oraentrata IS NOT NULL;
- IF ( cnt > 0 ) THEN
- RAISE veicoloancoraparcheggiato;
- END IF;
- --contare numero prenotazini valide: se 0 ingressoorario normale o prenotazione, se 1 solo ingresoorari e se prenotazione errore
- SELECT
- ingressiorariseq.NEXTVAL,
- SYSTIMESTAMP
- INTO
- v_id_ingresso,
- timestmp
- FROM
- dual;
- --sostituire cn cursore
- SELECT
- COUNT(*)
- INTO cnt --numero prenotazioni
- FROM
- ingressiorari,
- effettuaingressiorari,
- box,
- aree
- WHERE
- ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idcliente = v_id_cliente
- AND ingressiorari.orauscita IS NULL
- --AND ingressiorari.oraentrata IS ? NOT ? NULL;
- AND ingressiorari.entrataprevista IS NOT NULL
- AND timestmp <= ingressiorari.entrataprevista + interval '15' minute
- and effettuaingressiorari.idveicolo = v_id_veicolo
- AND ingressiorari.idbox = box.idbox and box.idarea = aree.idarea and aree.idautorimessa = v_id_autorimessa;
- IF v_entrata_prev IS NOT NULL THEN --- prenotazione!
- IF cnt != 0 THEN
- RAISE prenotazionegiaesistenteexception;
- ELSE
- timestmp := NULL; --oraentrata
- END IF;
- ELSE --ingressoorario
- IF cnt != 0 THEN --c'e' una prenotazione
- --sostituire cn cursore
- SELECT
- ingressiorari.idingressoorario
- INTO v_id_ingresso
- FROM
- ingressiorari,
- effettuaingressiorari,
- box,
- aree
- WHERE
- ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
- AND effettuaingressiorari.idcliente = v_id_cliente
- and effettuaingressiorari.idveicolo = v_id_veicolo
- AND ingressiorari.orauscita IS NULL
- --AND ingressiorari.oraentrata IS ? NOT ? NULL;
- AND ingressiorari.entrataprevista IS NOT NULL
- AND timestmp <= ingressiorari.entrataprevista + interval '15' minute
- AND ingressiorari.idbox = box.idbox and box.idarea = aree.idarea and aree.idautorimessa = v_id_autorimessa;
- UPDATE ingressiorari
- SET
- oraentrata = timestmp
- WHERE
- idingressoorario = v_id_ingresso;
- RETURN v_id_ingresso;
- END IF;
- END IF;
- INSERT INTO ingressiorari (
- idingressoorario,
- entrataprevista,
- oraentrata,
- idbox
- ) VALUES (
- v_id_ingresso,
- v_entrata_prev,
- timestmp,
- v_id_box
- );
- INSERT INTO effettuaingressiorari (
- idveicolo,
- idcliente,
- idingressoorario
- ) VALUES (
- v_id_veicolo,
- v_id_cliente,
- v_id_ingresso
- );
- RETURN v_id_ingresso;
- EXCEPTION
- WHEN OTHERS THEN
- ROLLBACK TO start_transaction;
- RAISE;
- END ingressoorario;
- ------------------------- FINE GIUSEPPE BISICCHIA ------------------------------------
- end Gruppo1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement