Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 111.47 KB | None | 0 0
  1. CREATE OR REPLACE PACKAGE BODY gruppo2 AS
  2.     PROCEDURE autorimessanontrovata(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2) IS
  3.     -- Parametri della sede corrente
  4.     BEGIN
  5.  
  6.         modGUI.apriPagina('HoC | ', id_sessione, nome, ruolo);
  7.             modGUI.aCapo;
  8.  
  9.             modGUI.apriIntestazione(2);
  10.                 modGUI.inserisciTesto('IL VEICOLO SELEZIONATO NON PUO'' ESSERE PARCHEGGIATO NELLA SEDE SELEZIONATA');
  11.             modGUI.chiudiIntestazione(2);
  12.  
  13.  
  14.         modGUI.ChiudiPagina;
  15.     END autorimessanontrovata;
  16.  
  17.     PROCEDURE competentGarageSearch2 (
  18.         id_Sessione VARCHAR2,
  19.         nome VARCHAR2,
  20.         ruolo VARCHAR2,
  21.         idSedeCorrente INTEGER,
  22.         idVeicoloCorrente INTEGER
  23.     )   /*RETURN AREE%ROWTYPE*/
  24.         AS
  25.  
  26.         tmp Aree%ROWTYPE;
  27.         veicoloCorrente VEICOLI%ROWTYPE;
  28.         SedeCorrente SEDI%ROWTYPE;
  29.         p list_idaree := list_idaree();
  30.         contatore INTEGER :=0;
  31.         vlunghezzamax INTEGER   :=2147483648;
  32.         vlarghezzamax INTEGER   :=2147483648;
  33.         valtezzamax INTEGER     :=2147483648;
  34.         vpesomax INTEGER        :=2147483648;
  35.         vid INTEGER :=0;
  36.         arid INTEGER :=0;
  37.  
  38.         BEGIN
  39.         IF(idveicolocorrente=0) THEN
  40.         modGUI.apriPagina('HoC | Veicolo non selezionato', id_Sessione, nome, ruolo);
  41.             modGUI.aCapo;
  42.             modGUI.apriDiv;
  43.             modGUI.apriIntestazione(2);
  44.             modGUI.inserisciTesto(' VEICOLO NON SELEZIONATO, SI PREGA DI AGGIUNGERE UN VEICOLO ');
  45.             modGUI.chiudiIntestazione(2);
  46.         ELSE
  47.                 SELECT * INTO veicoloCorrente FROM Veicoli WHERE Veicoli.idVeicolo=idVeicoloCorrente;
  48.                 SELECT * INTO sedeCorrente FROM Sedi sed WHERE sed.idSede=idSedeCorrente;
  49.            
  50.                 FOR autorimessa IN (SELECT * FROM Autorimesse)
  51.                 LOOP
  52.                     IF(autorimessa.idSede = SedeCorrente.idsede )
  53.                         THEN
  54.                         p:=queryricercaArea(id_Sessione, nome, ruolo, autorimessa.idautorimessa,VeicoloCorrente.idveicolo);
  55.                         contatore:=p.COUNT;
  56.                         FOR i IN 1 ..   contatore
  57.                         LOOP
  58.                             SELECT * INTO tmp FROM Aree WHERE idArea=p(i) AND
  59.                                     (
  60.                                     (lunghezzamax<vlunghezzamax OR larghezzamax<=vlarghezzamax OR altezzamax<=valtezzamax OR pesomax<=vpesomax) OR
  61.                                     (lunghezzamax<=vlunghezzamax OR larghezzamax<vlarghezzamax OR altezzamax<=valtezzamax OR pesomax<=vpesomax) OR
  62.                                     (lunghezzamax<=vlunghezzamax OR larghezzamax<=vlarghezzamax OR altezzamax<valtezzamax OR pesomax<=vpesomax) OR
  63.                                     (lunghezzamax<=vlunghezzamax OR larghezzamax<=vlarghezzamax OR altezzamax<=valtezzamax OR pesomax<vpesomax)
  64.                                     );
  65.                             IF tmp.idarea IS NOT NULL THEN
  66.                             valtezzamax:=tmp.altezzamax;
  67.                             vlunghezzamax:=tmp.lunghezzamax;
  68.                             vpesomax:=tmp.pesomax;
  69.                             vlarghezzamax:=tmp.larghezzamax;
  70.                             vid:=tmp.idarea;
  71.                                 ELSE NULL; END IF;
  72.            
  73.            
  74.            
  75.                         END LOOP;
  76.                     ELSE NULL;
  77.                     END IF;
  78.            
  79.                 END LOOP;
  80.                     IF(vid=0)THEN autorimessanontrovata(id_sessione,nome,ruolo);
  81.                     ELSE
  82.                         SELECT aree.idautorimessa INTO arid FROM aree WHERE aree.idarea=vid;
  83.             /*                update debug
  84.                             set numero=vid
  85.                             where id=1;*/
  86.            
  87.                                 visualizzaAutorimessa(id_Sessione, nome, ruolo,arid);
  88.                     END IF;
  89.             END IF;
  90.  
  91.     END competentGarageSearch2;
  92.  
  93.     PROCEDURE formRicercaArea(id_Sessione int, nome VARCHAR2, ruolo VARCHAR2) IS
  94.     BEGIN
  95.         modGUI.apriPagina('HoC | Ricerca Area', id_Sessione, nome, ruolo);
  96.         modGUI.aCapo;
  97.         modGUI.apriIntestazione(2);
  98.             modGUI.inserisciTesto('RICERCA AREA');
  99.         modGUI.chiudiIntestazione(2);
  100.  
  101.         modGUI.apriForm('graphicResultRicercaArea');
  102.             modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  103.             modGUI.inserisciInputHidden('nome', nome);
  104.             modGUI.inserisciInputHidden('ruolo', ruolo);
  105.             modGUI.apriSelect('autorimessa', 'AUTORIMESSA');
  106.                 FOR cur_autorimesse IN (SELECT idAutorimessa, indirizzo FROM Autorimesse)
  107.                     LOOP
  108.                         modGUI.inserisciOpzioneSelect(cur_autorimesse.idAutorimessa, cur_autorimesse.indirizzo);
  109.                     END LOOP;
  110.             modGUI.chiudiSelect;
  111.             modGUI.apriSelect('veicolo', 'VEICOLO', richiesto=>TRUE);
  112.                 FOR cur_veicoli IN (
  113.                     SELECT Veicoli.idVeicolo, Veicoli.Modello, Veicoli.Produttore , Veicoli.Targa
  114.                     FROM Veicoli, VeicoliClienti, Clienti, Sessioni
  115.                     WHERE Sessioni.idSessione = id_Sessione AND
  116.                         Clienti.idPersona = Sessioni.idPersona AND
  117.                         VeicoliClienti.idCliente = Clienti.idCliente AND
  118.                         Veicoli.idVeicolo = VeicoliClienti.idVeicolo
  119.  
  120.                 )
  121.                     LOOP
  122.                         modGUI.inserisciOpzioneSelect(cur_veicoli.idVeicolo, cur_veicoli.Produttore || ' ' || cur_veicoli.Modello || ' - ' || cur_veicoli.Targa);
  123.                     END LOOP;
  124.             modGUI.chiudiSelect;
  125.             modGUI.inserisciBottoneReset;
  126.             modGUI.inserisciBottoneForm(testo=>'RICERCA AREA');
  127.         modGUI.chiudiForm;
  128.         modGUI.chiudiPagina;
  129.     END formRicercaArea;
  130.  
  131.     PROCEDURE introitiparziali(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idsedecorrente VARCHAR2, periodo VARCHAR2, datainiziale VARCHAR2, datafinale VARCHAR2) IS
  132.         totaleabb INTEGER :=0;
  133.         totalebigl INTEGER :=0;
  134.         indirizzo VARCHAR2 (100);
  135.         idsededapassare INTEGER :=0;
  136.         --datafinevar varchar2(100);
  137.         --datafinets timestamp;
  138.  
  139.         BEGIN
  140.  
  141.             modGUI.apriPagina('HoC | Introiti', id_Sessione, nome, ruolo);
  142.             modgui.acapo;
  143.  
  144.             IF(datainiziale IS NOT NULL AND datafinale IS NOT NULL AND periodo=1)
  145.                 THEN
  146.                     IF(idsedecorrente=0) --tutte le sedi con il periodo
  147.                         THEN
  148.                         --datafinevar:=datafinale||' 23:59:00';
  149.                         --datafinets:=TO_TIMESTAMP(datafinevar, 'yyyy-mm-dd hh24:mi:ss');
  150.                         modGUI.apriTabella;
  151.                         modGUI.ApriRigaTabella;
  152.                         modGUI.intestazioneTabella('Sede');
  153.                         modGUI.intestazioneTabella('Introiti Abbonamenti');
  154.                         modGUI.intestazioneTabella('Introiti Biglietti');
  155.                         modGUI.intestazioneTabella('Dettagli');
  156.                         modgui.chiudirigatabella;
  157.                         FOR i IN (SELECT * FROM sedi)
  158.                             LOOP
  159.                                 SELECT SUM(abb.costoeffettivo) INTO totaleabb FROM box, abbonamenti abb, aree, autorimesse aut WHERE box.idabbonamento=abb.idabbonamento AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=i.idsede AND ((abb.datainizio<TO_DATE('2019-12-19','yyyy-mm-dd') AND abb.datafine>TO_DATE('2019-12-19','yyyy-mm-dd')) OR (abb.datainizio>TO_DATE('2019-12-19','yyyy-mm-dd') AND abb.datainizio<TO_DATE('2021-12-19','yyyy-mm-dd')));
  160.                                 SELECT SUM(ingora.costo) INTO totalebigl FROM ingressiorari ingora,box, aree, autorimesse aut WHERE ingora.idbox=box.idbox AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=i.idsede  AND ((ingora.oraentrata<TO_TIMESTAMP(datainiziale,'yyyy-mm-dd') AND ingora.orauscita>TO_TIMESTAMP(datainiziale,'yyyy-mm-dd')) OR (ingora.oraentrata>TO_TIMESTAMP(datainiziale,'yyyy-mm-dd') AND ingora.oraentrata<TO_TIMESTAMP(datafinale||' 23:59:00','yyyy-mm-dd hh24:mi:ss'))) AND ingora.orauscita IS NOT NULL;
  161.                                 SELECT sedi.indirizzo,sedi.idsede INTO indirizzo,idsededapassare FROM sedi WHERE sedi.idsede=i.idsede;
  162.                                 IF(totaleabb IS NULL) THEN totaleabb:=0; END IF;
  163.                                 IF(totalebigl IS NULL) THEN totalebigl:=0; END IF;
  164.                                 modGUI.ApriElementoTabella;
  165.                                 modGUI.ElementoTabella(indirizzo);
  166.                                 modGUI.ChiudiElementoTabella;
  167.                                 modGUI.ApriElementoTabella;
  168.                                 modGUI.ElementoTabella(totaleabb);
  169.                                 modGUI.ChiudiElementoTabella;
  170.                                 modGUI.ApriElementoTabella;
  171.                                 modGUI.ElementoTabella(totalebigl);
  172.                                 modGUI.ChiudiElementoTabella;
  173.                                 modGUI.ApriElementoTabella;
  174.                                 modGUI.InserisciLente('visualizzaintroitiparzialiabb', id_sessione, nome, ruolo, idsededapassare||'&periodo='||periodo||'&datainiziale='||datainiziale||'&datafinale='||datafinale);
  175.                                 modgui.chiudielementotabella;
  176.                                 modgui.chiudirigatabella;
  177.  
  178.                                 END LOOP;        
  179.                             modgui.chiuditabella;
  180.  
  181.                         ELSE --sede specifica con periodo
  182.  
  183.                             SELECT SUM(abb.costoeffettivo) INTO totaleabb FROM box, abbonamenti abb, aree, autorimesse aut WHERE box.idabbonamento=abb.idabbonamento AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=idsededapassare AND ((abb.datainizio<TO_DATE('2019-12-19','yyyy-mm-dd') AND abb.datafine>TO_DATE('2019-12-19','yyyy-mm-dd')) OR (abb.datainizio>TO_DATE('2019-12-19','yyyy-mm-dd') AND abb.datainizio<TO_DATE('2021-12-19','yyyy-mm-dd')));
  184.                             SELECT SUM(ingora.costo) INTO totalebigl FROM ingressiorari ingora,box, aree, autorimesse aut WHERE ingora.idbox=box.idbox AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=idsedecorrente  AND ((ingora.oraentrata<TO_TIMESTAMP(datainiziale,'yyyy-mm-dd') AND ingora.orauscita>TO_TIMESTAMP(datainiziale,'yyyy-mm-dd')) OR (ingora.oraentrata>TO_TIMESTAMP(datainiziale,'yyyy-mm-dd') AND ingora.oraentrata<TO_TIMESTAMP(datafinale||' 23:59:00','yyyy-mm-dd hh24:mi:ss'))) AND ingora.orauscita IS NOT NULL;
  185.                             SELECT sedi.indirizzo,sedi.idsede INTO indirizzo,idsededapassare FROM sedi WHERE sedi.idsede=idsedecorrente;
  186.                             IF(totaleabb IS NULL) THEN totaleabb:=0; END IF;
  187.                             IF(totalebigl IS NULL) THEN totalebigl:=0; END IF;
  188.                             modGUI.apriTabella;
  189.                             modGUI.ApriRigaTabella;
  190.                             modGUI.intestazioneTabella('Sede');
  191.                             modGUI.intestazioneTabella('Introiti Abbonamenti');
  192.                             modGUI.intestazioneTabella('Introiti Biglietti');
  193.                             modGUI.intestazioneTabella('Dettagli');
  194.                             modgui.chiudirigatabella;
  195.                             modGUI.ApriElementoTabella;
  196.                             modGUI.ElementoTabella(indirizzo);
  197.                             modGUI.ChiudiElementoTabella;
  198.                             modGUI.ApriElementoTabella;
  199.                             modGUI.ElementoTabella(totaleabb);
  200.                             modGUI.ChiudiElementoTabella;
  201.                             modGUI.ApriElementoTabella;
  202.                             modGUI.ElementoTabella(totalebigl);
  203.                             modGUI.ChiudiElementoTabella;
  204.                             modGUI.ApriElementoTabella;
  205.                             modGUI.InserisciLente('visualizzaintroitiparzialiabb', id_sessione, nome, ruolo,idsededapassare||'&periodo='||periodo||'&datainiziale='||datainiziale||'&datafinale='||datafinale);
  206.                             modgui.chiudielementotabella;
  207.                             modgui.chiudirigatabella;        
  208.                             modgui.chiuditabella;
  209.                         END IF;                
  210.                 ELSE
  211.                
  212.                 IF((datainiziale IS NULL OR datafinale IS NULL) AND periodo=1) THEN
  213.                     modGUI.apriIntestazione(2);
  214.                     modGUI.inserisciTesto('Periodo non valido. Introiti totali');
  215.                     modGUI.chiudiIntestazione(2);
  216.                 END IF;
  217.  
  218.                 IF(idsedecorrente=0)
  219.                     THEN --tutte le sedi senza periodo
  220.                         modgui.apritabella;
  221.                         modGUI.ApriRigaTabella;
  222.                         modGUI.intestazioneTabella('Sede');
  223.                         modGUI.intestazioneTabella('Introiti Abbonamenti');
  224.                         modGUI.intestazioneTabella('Introiti Biglietti');
  225.                         modGUI.intestazioneTabella('Dettagli');
  226.                         modgui.chiudirigatabella;
  227.                         FOR i IN (SELECT * FROM sedi)
  228.                             LOOP
  229.                                 SELECT SUM(abb.costoeffettivo) INTO totaleabb FROM box, abbonamenti abb, aree, autorimesse aut WHERE box.idabbonamento=abb.idabbonamento AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=i.idsede;
  230.                                 SELECT SUM(ingora.costo) INTO totalebigl FROM ingressiorari ingora,box, aree, autorimesse aut WHERE ingora.idbox=box.idbox AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=i.idsede AND ingora.orauscita IS NOT NULL;
  231.                                 SELECT sedi.indirizzo,sedi.idsede INTO indirizzo,idsededapassare FROM sedi WHERE sedi.idsede=i.idsede;
  232.                                 IF(totaleabb IS NULL) THEN totaleabb:=0; END IF;
  233.                                 IF(totalebigl IS NULL) THEN totalebigl:=0; END IF;
  234.                                 modGUI.ApriElementoTabella;
  235.                                 modGUI.ElementoTabella(indirizzo);
  236.                                 modGUI.ChiudiElementoTabella;
  237.                                 modGUI.ApriElementoTabella;
  238.                                 modGUI.ElementoTabella(totaleabb);
  239.                                 modGUI.ChiudiElementoTabella;
  240.                                 modGUI.ApriElementoTabella;
  241.                                 modGUI.ElementoTabella(totalebigl);
  242.                                 modGUI.ChiudiElementoTabella;
  243.                                 modGUI.ApriElementoTabella;
  244.                                 modGUI.InserisciLente('visualizzaintroitiparzialiabb', id_sessione, nome, ruolo, idsededapassare||'&periodo='||periodo||'&datainiziale='||'&datafinale=');
  245.                                 modgui.chiudielementotabella;
  246.                                 modgui.chiudirigatabella;---------
  247.                             END LOOP;        
  248.                         modgui.chiuditabella;
  249.                     ELSE --sede specifica senza periodo
  250.                         SELECT SUM(abb.costoeffettivo) INTO totaleabb FROM box, abbonamenti abb, aree, autorimesse aut WHERE box.idabbonamento=abb.idabbonamento AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=idsedecorrente;
  251.                         SELECT SUM(ingora.costo) INTO totalebigl FROM ingressiorari ingora,box, aree, autorimesse aut WHERE ingora.idbox=box.idbox AND box.idarea=aree.idarea AND aree.idautorimessa=aut.idautorimessa AND aut.idsede=idsedecorrente AND ingora.orauscita IS NOT NULL;
  252.                         SELECT sedi.indirizzo,sedi.idsede INTO indirizzo,idsededapassare FROM sedi WHERE sedi.idsede=idsedecorrente;
  253.                         IF(totaleabb IS NULL) THEN totaleabb:=0; END IF;
  254.                         IF(totalebigl IS NULL) THEN totalebigl:=0; END IF;
  255.                         modGUI.apriTabella;
  256.                         modGUI.ApriRigaTabella;
  257.                         modGUI.intestazioneTabella('Sede');
  258.                         modGUI.intestazioneTabella('Introiti Abbonamenti');
  259.                         modGUI.intestazioneTabella('Introiti Biglietti');
  260.                         modGUI.intestazioneTabella('Dettagli');
  261.                         modgui.chiudirigatabella;
  262.                         modGUI.ApriElementoTabella;
  263.                         modGUI.ElementoTabella(indirizzo);
  264.                         modGUI.ChiudiElementoTabella;
  265.                         modGUI.ApriElementoTabella;
  266.                         modGUI.ElementoTabella(totaleabb);
  267.                         modGUI.ChiudiElementoTabella;
  268.                         modGUI.ApriElementoTabella;
  269.                         modGUI.ElementoTabella(totalebigl);
  270.                         modGUI.ChiudiElementoTabella;
  271.                         modGUI.ApriElementoTabella;
  272.                         modGUI.InserisciLente('visualizzaintroitiparzialiabb', id_sessione, nome, ruolo, idsededapassare||'&periodo='||periodo||'&datainiziale='||'&datafinale=');
  273.                         modgui.chiudielementotabella;
  274.                         modgui.chiudirigatabella;        
  275.                         modgui.chiuditabella;
  276.                     END IF;                
  277.  
  278.                 END IF;
  279.  
  280.         END introitiparziali;
  281.  
  282.         PROCEDURE graphicResultRicercaArea(id_Sessione int, nome VARCHAR2, ruolo VARCHAR2, autorimessa NUMBER, veicolo VARCHAR2) IS
  283.             altezza_veicolo Veicoli.Altezza%TYPE;
  284.             larghezza_veicolo Veicoli.Larghezza%TYPE;
  285.             lunghezza_veicolo Veicoli.Lunghezza%TYPE;
  286.             peso_veicolo Veicoli.Peso%TYPE;
  287.             alimentazione_veicolo Veicoli.Alimentazione%TYPE;
  288.             checkAlimentazione VARCHAR2(1);
  289.             produttore_veicolo Veicoli.Produttore%TYPE;
  290.             modello_veicolo Veicoli.Modello%TYPE;
  291.             headertab BOOLEAN := TRUE;
  292.         BEGIN
  293.  
  294.             --Ottengo dimensioni del veicolo--
  295.             SELECT Altezza, Larghezza, Lunghezza, Peso, Alimentazione, Modello, Produttore
  296.             INTO altezza_veicolo, larghezza_veicolo, lunghezza_veicolo, peso_veicolo, alimentazione_veicolo, modello_veicolo, produttore_veicolo
  297.             FROM Veicoli
  298.             WHERE Veicoli.idVeicolo = veicolo;
  299.  
  300.             IF(alimentazione_veicolo = 'GPL') THEN
  301.                 checkAlimentazione := 'T';
  302.             ELSE
  303.                 checkAlimentazione := 'F';
  304.             END IF;
  305.  
  306.             modGUI.apriPagina('HoC | Aree disponibili', id_Sessione, nome, ruolo);
  307.  
  308.                 modGUI.aCapo;
  309.                 modGUI.apriIntestazione(2);
  310.                     modGUI.inserisciTesto('AREE DISPONIBILI PER: ' || produttore_veicolo || ' ' || modello_veicolo);
  311.                 modGUI.chiudiIntestazione(2);
  312.                     FOR cur_aree IN (
  313.                         SELECT idarea, lunghezzamax, larghezzamax, pesomax, altezzamax, gas
  314.                         FROM aree
  315.                         WHERE aree.idautorimessa = autorimessa AND
  316.                             aree.lunghezzamax >= lunghezza_veicolo AND
  317.                             aree.altezzamax >= altezza_veicolo AND
  318.                             aree.larghezzamax >= larghezza_veicolo AND
  319.                             aree.pesomax >= peso_veicolo AND
  320.                             aree.gas = checkAlimentazione
  321.                     )
  322.                         LOOP
  323.                     IF(headertab) THEN
  324.                     modGUI.apriDiv;
  325.                         modGUI.apriTabella;
  326.                         modGUI.apriRigaTabella;
  327.                             modGUI.IntestazioneTabella('AREA');
  328.                             modGUI.IntestazioneTabella('LUNGHEZZA MAX');
  329.                             modGUI.IntestazioneTabella('LARGHEZZA MAX');
  330.                             modGUI.IntestazioneTabella('ALTEZZA MAX');
  331.                             modGUI.IntestazioneTabella('PESO MAX');
  332.                             modGUI.IntestazioneTabella('GAS');
  333.                         modGUI.chiudiRigaTabella;
  334.                         headertab := FALSE;
  335.                     END IF;
  336.                     modGUI.apriRigaTabella;
  337.                         modGUI.apriElementoTabella;
  338.                             modGUI.ElementoTabella(cur_aree.idArea);
  339.                         modGUI.chiudiElementoTabella;modGUI.apriElementoTabella;
  340.                             modGUI.ElementoTabella(cur_aree.LunghezzaMax);
  341.                         modGUI.chiudiElementoTabella;modGUI.apriElementoTabella;
  342.                             modGUI.ElementoTabella(cur_aree.LarghezzaMax);
  343.                         modGUI.chiudiElementoTabella;modGUI.apriElementoTabella;
  344.                             modGUI.ElementoTabella(cur_aree.AltezzaMax);
  345.                         modGUI.chiudiElementoTabella;modGUI.apriElementoTabella;
  346.                             modGUI.ElementoTabella(cur_aree.PesoMax);
  347.                         modGUI.chiudiElementoTabella;modGUI.apriElementoTabella;
  348.                             modGUI.ElementoTabella(cur_aree.Gas);
  349.                         modGUI.chiudiElementoTabella;
  350.                     modGUI.chiudiRigaTabella;
  351.                 END LOOP;
  352.                 modGUI.chiudiTabella;
  353.                 IF(headertab) THEN
  354.                     modGUI.esitoOperazione('KO', 'Non è stata trovata nessun''area disponibile per il tuo veicolo!');
  355.                 ELSE
  356.                     modGUI.chiudiDiv;
  357.                 END IF;
  358.             modGUI.chiudiPagina;
  359.         END graphicResultRicercaArea;
  360.  
  361.     PROCEDURE introiti(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  362.  
  363.     BEGIN
  364.         modGUI.apriPagina('HoC | Visualizza Introiti', id_Sessione, nome, ruolo);
  365.  
  366.         modgui.acapo;
  367.  
  368.     modgui.apriForm('introitiparziali');
  369.             modgui.apriparagrafo('rela');
  370.             modgui.inseriscitesto('VISUALIZZA INTROITI ');
  371.             modgui.chiudiparagrafo;
  372.             modgui.inserisciinputhidden('id_Sessione',id_Sessione);
  373.             modgui.inserisciinputhidden('nome',nome);
  374.             modgui.inserisciinputhidden('ruolo',ruolo);
  375.  
  376.                     modGUI.apriSelect('idSedeCorrente', 'Seleziona Sede: ', FALSE, 'defSelect');
  377.             modGUI.inserisciOpzioneSelect('0','Tutte le Sedi',FALSE);
  378.  
  379.             FOR sede IN (SELECT * FROM sedi)
  380.             LOOP
  381.             modGUI.inserisciOpzioneSelect(sede.idsede,sede.indirizzo,FALSE);
  382.             END LOOP;
  383.  
  384.             modGUI.chiudiSelect;
  385.                         modgui.inserisciradiobutton('Ricerca totale','periodo','0',TRUE);
  386.                         modgui.inserisciradiobutton('Ricerca per periodo','periodo','1',FALSE);
  387.  
  388.             modGUI.inserisciinput('Data inizio', 'date','datainiziale',FALSE,'','defInput');
  389.  
  390.  
  391.             modGUI.inserisciinput('Data fine', 'date','datafinale',FALSE,'','defInput');
  392.  
  393.  
  394.             modGUI.inserisciBottoneReset('RESET');
  395.             modGUI.inserisciBottoneForm('Submit','defFormButton');
  396.  
  397.             modgui.chiudiForm;
  398.  
  399.             modGUI.chiudiPagina;
  400.     END introiti;
  401.  
  402.     PROCEDURE modificaArea(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) AS
  403.         area Aree%ROWTYPE;
  404.         indirizzo_autorimessa Autorimesse.Indirizzo%TYPE;
  405.         id_responsabile Dipendenti.idDipendente%TYPE;
  406.         id_dipendente Dipendenti.idDipendente%TYPE;
  407.     BEGIN
  408.  
  409.         -- ID del dipendente corrente
  410.         BEGIN
  411.             SELECT Dipendenti.idDipendente
  412.             INTO id_dipendente
  413.             FROM Dipendenti
  414.                 join PersoneL ON PersoneL.idPersona = Dipendenti.idPersona
  415.                 join Sessioni ON Sessioni.idPersona = PersoneL.idPersona
  416.             WHERE Sessioni.idSessione = id_sessione;
  417.         EXCEPTION
  418.             WHEN NO_DATA_FOUND THEN
  419.                 id_dipendente := NULL;
  420.         END;
  421.  
  422.         -- ID del dipendente responsabile della sede
  423.         BEGIN
  424.             SELECT Sedi.idDipendente
  425.             INTO id_responsabile
  426.             FROM Sedi
  427.                 join Autorimesse ON Autorimesse.idSede = Sedi.idSede
  428.                 join Aree ON Aree.idAutorimessa = Autorimesse.idAutorimessa
  429.             WHERE Aree.idArea = idRiga;
  430.         EXCEPTION
  431.             WHEN NO_DATA_FOUND THEN
  432.                 id_responsabile := NULL;
  433.         END;
  434.  
  435.         SELECT * INTO area
  436.         FROM Aree
  437.         WHERE Aree.idArea = idRiga;
  438.  
  439.         SELECT Autorimesse.Indirizzo INTO indirizzo_autorimessa
  440.         FROM Autorimesse
  441.         WHERE Autorimesse.idAutorimessa = area.idAutorimessa;
  442.        
  443.         modGUI.apriPagina('HoC | Modifica Area ' || area.idArea || ' di ' || indirizzo_autorimessa, id_Sessione, nome, ruolo);
  444.             modGUI.apriDiv;
  445.             IF ((ruolo = 'A') OR (ruolo = 'R') OR (ruolo = 'O')) THEN
  446.                 modGUI.apriIntestazione(2);
  447.                     modGUI.inserisciTesto('Modifica Area ' || area.idArea || ' di ' || indirizzo_autorimessa);
  448.                 modGUI.chiudiIntestazione(2);
  449.                 /*
  450.                 * Il primo parametro di apriForm indica l'azione da compiere una volta cliccato il tasto di invio
  451.                 * (classico esempio reindirizzamento ad una procedura che si occupa della query di inserimento degli input immessi)
  452.                 */
  453.                 modGUI.apriForm('updateArea');
  454.                     modGUI.inserisciInputHidden('id_sessione', id_sessione);
  455.                     modGUI.inserisciInputHidden('nome', nome);
  456.                     modGUI.inserisciInputHidden('ruolo', ruolo);
  457.                     modGUI.inserisciInputHidden('idRiga', idRiga);
  458.  
  459.                     /* esempi di input testo del form*/
  460.                     modGUI.inserisciTesto('Posti Totali');
  461.                     modGUI.inserisciInput(
  462.                         tipo => 'number',
  463.                         etichetta => 'Posti Totali',
  464.                         nome => 'var_posti_totali',
  465.                         valore => area.PostiTotali,
  466.                         richiesto => TRUE
  467.                     );
  468.                     modGUI.inserisciTesto('Posti Liberi');
  469.                     modGUI.inserisciInput(
  470.                         tipo => 'number',
  471.                         etichetta => 'Posti Liberi',
  472.                         nome => 'var_posti_liberi',
  473.                         valore => area.PostiLiberi,
  474.                         richiesto => TRUE
  475.                     );
  476.                     modGUI.inserisciTesto('Stato');
  477.                     modGUI.inserisciInput(
  478.                         tipo => 'number',
  479.                         etichetta => 'Stato',
  480.                         nome => 'var_stato',
  481.                         valore => area.Stato,
  482.                         richiesto => TRUE
  483.                     );
  484.                     modGUI.inserisciTesto('Gas');
  485.                     modGUI.inserisciInput(
  486.                         tipo => 'number',
  487.                         etichetta => 'Gas',
  488.                         nome => 'var_gas',
  489.                         valore => area.Gas,
  490.                         richiesto => TRUE
  491.                     );
  492.                     modGUI.inserisciTesto('Larghezza Massima');
  493.                     modGUI.inserisciInput(
  494.                         tipo => 'number',
  495.                         etichetta => 'Larghezza Massima',
  496.                         nome => 'var_larghezza_max',
  497.                         valore => area.LarghezzaMax,
  498.                         richiesto => TRUE
  499.                     );
  500.                     modGUI.inserisciTesto('Lunghezza Massima');
  501.                     modGUI.inserisciInput(
  502.                         tipo => 'number',
  503.                         etichetta => 'Lunghezza Massima',
  504.                         nome => 'var_lunghezza_max',
  505.                         valore => area.LunghezzaMax,
  506.                         richiesto => TRUE
  507.                     );
  508.                     modGUI.inserisciTesto('Altezza Massima');
  509.                     modGUI.inserisciInput(
  510.                         tipo => 'number',
  511.                         etichetta => 'Altezza Massima',
  512.                         nome => 'var_altezza_max',
  513.                         valore => area.AltezzaMax,
  514.                         richiesto => TRUE
  515.                     );
  516.                     modGUI.inserisciTesto('Peso Massimo');
  517.                     modGUI.inserisciInput(
  518.                         tipo => 'number',
  519.                         etichetta => 'Peso Massimo',
  520.                         nome => 'var_peso_max',
  521.                         valore => area.PesoMax,
  522.                         richiesto => TRUE
  523.                     );
  524.                     modGUI.inserisciTesto('Costo Abbonamento');
  525.                     modGUI.inserisciInput(
  526.                         tipo => 'number',
  527.                         etichetta => 'Costo Abbonamento',
  528.                         nome => 'var_costo_abbonamento',
  529.                         valore => area.CostoAbbonamento,
  530.                         richiesto => TRUE
  531.                     );
  532.  
  533.                     modGUI.inserisciBottoneReset('RESET');
  534.                     modGUI.inserisciBottoneForm();
  535.                 modgui.chiudiForm;
  536.             ELSE
  537.                 modGUI.esitoOperazione('KO', 'Non sei autorizzato');
  538.             END IF;
  539.             modGUI.ChiudiDiv;
  540.         modGUI.chiudiPagina;
  541.     END modificaArea;
  542.  
  543.     PROCEDURE modificaAutorimessa(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) AS
  544.         autorimessa Autorimesse%ROWTYPE;
  545.         id_dipendente_sede Dipendenti.idDipendente%TYPE;
  546.         id_dipendente_corrente Dipendenti.idDipendente%TYPE;
  547.     BEGIN
  548.  
  549.         -- ID del dipendente corrente
  550.         BEGIN
  551.             SELECT Dipendenti.idDipendente
  552.             INTO id_dipendente_corrente
  553.             FROM Dipendenti
  554.                 join PersoneL ON PersoneL.idPersona = Dipendenti.idPersona
  555.                 join Sessioni ON Sessioni.idPersona = PersoneL.idPersona
  556.             WHERE Sessioni.idSessione = id_sessione;
  557.         EXCEPTION
  558.             WHEN NO_DATA_FOUND THEN
  559.                 id_dipendente_corrente := NULL;
  560.         END;
  561.  
  562.         -- ID del dipendente responsabile della sede
  563.         BEGIN
  564.             SELECT Sedi.idDipendente
  565.             INTO id_dipendente_sede
  566.             FROM Sedi
  567.                 join Autorimesse ON Autorimesse.idSede = Sedi.idSede
  568.             WHERE Autorimesse.idAutorimessa = autorimessa.idAutorimessa;
  569.         EXCEPTION
  570.             WHEN NO_DATA_FOUND THEN
  571.                 id_dipendente_sede := NULL;
  572.         END;
  573.  
  574.         SELECT * INTO autorimessa
  575.         FROM Autorimesse
  576.         WHERE Autorimesse.idAutorimessa = idRiga;
  577.  
  578.         modGUI.apriPagina('HoC | Modifica Autorimessa di ' || autorimessa.indirizzo, id_Sessione, nome, ruolo);
  579.             modGUI.aCapo;
  580.             modGUI.apriDiv;
  581.                 IF (ruolo = 'A' OR (ruolo = 'R' AND (id_dipendente_corrente = id_dipendente_sede))) THEN
  582.                     modGUI.apriIntestazione(2);
  583.                         modGUI.inserisciTesto('Modifica Autorimessa di ' || autorimessa.indirizzo);
  584.                     modGUI.chiudiIntestazione(2);
  585.                     /*
  586.                     * Il primo parametro di apriForm indica l'azione da compiere una volta cliccato il tasto di invio
  587.                     * (classico esempio reindirizzamento ad una procedura che si occupa della query di inserimento degli input immessi)
  588.                     */
  589.                     modGUI.apriForm('updateAutorimessa');
  590.                         modGUI.inserisciInputHidden('id_sessione', id_sessione);
  591.                         modGUI.inserisciInputHidden('nome', nome);
  592.                         modGUI.inserisciInputHidden('ruolo', ruolo);
  593.                         modGUI.inserisciInputHidden('idRiga', idRiga);
  594.  
  595.                         modGUI.inserisciTesto('Indirizzo');
  596.                         modGUI.inserisciInput(
  597.                             etichetta => 'Indirizzo',
  598.                             nome => 'var_indirizzo',
  599.                             valore => autorimessa.indirizzo,
  600.                             richiesto => TRUE
  601.                         );
  602.                         modGUI.inserisciTesto('Telefono');
  603.                         modGUI.inserisciInput(
  604.                             tipo => 'number',
  605.                             etichetta => 'Telefono',
  606.                             nome => 'var_telefono',
  607.                             valore => autorimessa.telefono,
  608.                             richiesto => TRUE
  609.                         );
  610.                         modGUI.inserisciTesto('Coordinate');
  611.                         modGUI.inserisciInput(
  612.                             etichetta => 'Coordinate',
  613.                             nome => 'var_coordinate',
  614.                             valore => autorimessa.coordinate,
  615.                             richiesto => TRUE
  616.                         );
  617.  
  618.                         modGUI.inserisciBottoneReset();
  619.                         modGUI.inserisciBottoneForm();
  620.                     modgui.chiudiForm;
  621.                 ELSE
  622.                     modGUI.esitoOperazione('KO', 'Non sei autorizzato a svolgere questa operazione');
  623.                 END IF;
  624.             modGUI.ChiudiDiv;
  625.         modGUI.chiudiPagina;
  626.     END modificaAutorimessa;
  627.  
  628.     PROCEDURE modificaSede(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) AS
  629.         sede Sedi%ROWTYPE;
  630.     BEGIN
  631.  
  632.         SELECT * INTO sede
  633.         FROM Sedi
  634.         WHERE Sedi.idSede = idRiga;
  635.        
  636.         modGUI.apriPagina('HoC | Modifica Sede di ' || sede.indirizzo, id_Sessione, nome, ruolo);
  637.             modGUI.aCapo;
  638.                 modGUI.apriDiv;
  639.                 -- Se il ruolo dell'utente non è amministratore esce
  640.                 IF (ruolo <> 'A') THEN
  641.                     modGUI.esitoOperazione('KO', 'Non sei un amministratore');
  642.                 ELSE
  643.                     modGUI.apriIntestazione(2);
  644.                         modGUI.inserisciTesto('Modifica Sede di ' || sede.indirizzo);
  645.                     modGUI.chiudiIntestazione(2);
  646.                     /*
  647.                     * Il primo parametro di apriForm indica l'azione da compiere una volta cliccato il tasto di invio
  648.                     * (classico esempio reindirizzamento ad una procedura che si occupa della query di inserimento degli input immessi)
  649.                     */
  650.                     modGUI.apriForm('updateSede');
  651.                         modGUI.inserisciInputHidden('id_sessione', id_sessione);
  652.                         modGUI.inserisciInputHidden('nome', nome);
  653.                         modGUI.inserisciInputHidden('ruolo', ruolo);
  654.                         modGUI.inserisciInputHidden('idRiga', idRiga);
  655.  
  656.                         modGUI.inserisciTesto('Indirizzo');
  657.                         modGUI.inserisciInput(
  658.                             etichetta => 'Indirizzo',
  659.                             nome => 'var_indirizzo',
  660.                             valore => sede.indirizzo,
  661.                             richiesto => TRUE
  662.                         );
  663.                         modGUI.inserisciTesto('Telefono');
  664.                         modGUI.inserisciInput(
  665.                             tipo => 'number',
  666.                             etichetta => 'Telefono',
  667.                             nome => 'var_telefono',
  668.                             valore => sede.telefono,
  669.                             richiesto => TRUE
  670.                         );
  671.                         modGUI.inserisciTesto('Coordinate');
  672.                         modGUI.inserisciInput(
  673.                             etichetta => 'Coordinate',
  674.                             nome => 'var_coordinate',
  675.                             valore => sede.coordinate,
  676.                             richiesto => TRUE
  677.                         );
  678.                         modGUI.inserisciBottoneReset();
  679.                         modGUI.inserisciBottoneForm();
  680.                     modgui.chiudiForm;
  681.                 END IF;
  682.             modGUI.ChiudiDiv;
  683.         modGUI.chiudiPagina;
  684.     END modificaSede;
  685.  
  686.     FUNCTION queryRicercaArea(id_Sessione int, nome VARCHAR2, ruolo VARCHAR2, autorimessa VARCHAR2, veicolo VARCHAR2)
  687.         RETURN list_idaree IS
  688.  
  689.  
  690.         altezza_veicolo Veicoli.Altezza%TYPE;
  691.         larghezza_veicolo Veicoli.Larghezza%TYPE;
  692.         lunghezza_veicolo Veicoli.Lunghezza%TYPE;
  693.         peso_veicolo Veicoli.Peso%TYPE;
  694.         alimentazione_veicolo Veicoli.Alimentazione%TYPE;
  695.         checkAlimentazione VARCHAR2(1);
  696.         produttore_veicolo Veicoli.Produttore%TYPE;
  697.         modello_veicolo Veicoli.Modello%TYPE;
  698.         headertab BOOLEAN := TRUE;
  699.         p list_idaree := list_idaree();
  700.         total INTEGER;
  701.     BEGIN
  702.        
  703.         --Ottengo dimensioni del veicolo--
  704.         SELECT Altezza, Larghezza, Lunghezza, Peso, Alimentazione, Modello, Produttore
  705.         INTO altezza_veicolo, larghezza_veicolo, lunghezza_veicolo, peso_veicolo, alimentazione_veicolo, modello_veicolo, produttore_veicolo
  706.         FROM Veicoli
  707.         WHERE Veicoli.idVeicolo = veicolo;
  708.  
  709.         IF(alimentazione_veicolo = 'GPL') THEN
  710.             checkAlimentazione := 'T';
  711.         ELSE
  712.             checkAlimentazione := 'F';
  713.         END IF;
  714.        
  715.         --Ottengo le aree--
  716.         FOR cur IN (
  717.             SELECT idarea, lunghezzamax, larghezzamax, pesomax, altezzamax, gas
  718.             FROM aree
  719.             WHERE aree.idautorimessa = autorimessa AND
  720.             aree.lunghezzamax >= lunghezza_veicolo AND
  721.             aree.altezzamax >= altezza_veicolo AND
  722.             aree.larghezzamax >= larghezza_veicolo AND
  723.             aree.pesomax >= peso_veicolo AND
  724.             aree.gas = checkAlimentazione
  725.         ) LOOP
  726.             p.extend;
  727.             p(p.COUNT) := cur.idarea;
  728.         END LOOP;
  729.  
  730.         RETURN p;
  731.     END queryRicercaArea;
  732.  
  733.     PROCEDURE resSediSovrappopolate(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_giorno VARCHAR2, var_soglia NUMBER) AS
  734.  
  735.         Sede NUMBER:=0;
  736.         NumeroAttuale NUMBER:=0;
  737.         NumeroNuovo NUMBER:=0;
  738.         indirizzo VARCHAR2(40);
  739.             BEGIN
  740.  
  741.                 modGUI.apriPagina('HoC | Sedi sovrappopolate', id_Sessione, nome, ruolo);
  742.  
  743.             modGUI.aCapo;
  744.             modGUI.apriIntestazione(3);
  745.             modGUI.inserisciTesto('SEDI SOVRAPPOPOLATE');
  746.             modGUI.aCapo;
  747.             modGUI.inserisciTesto('Giorno: ' || TO_DATE(var_giorno, 'yyyy/mm/dd'));
  748.             modGUI.chiudiIntestazione(3);
  749.  
  750.             modGUI.apriTabella;
  751.                 modGUI.apriRigaTabella;
  752.                     modGUI.intestazioneTabella('SEDE');
  753.                     modGUI.intestazioneTabella('INGRESSI TOTALI');
  754.                 modGUI.chiudiRigaTabella;
  755.  
  756.             FOR scorriCursoreAbbonamenti IN( WITH
  757.         TotIngressiOrari AS (
  758.             SELECT Sedi.idSede, Sedi.Indirizzo, COUNT(IngressiOrari.idIngressoOrario) AS NumOrari
  759.             FROM IngressiOrari
  760.                 join Box ON Box.idBox = IngressiOrari.idBox
  761.                 join Aree ON Aree.idArea = Box.idArea
  762.                 join Autorimesse ON Autorimesse.idAutorimessa = Aree.idAutorimessa
  763.                 join Sedi ON Sedi.idSede = Autorimesse.idSede
  764.                 WHERE IngressiOrari.OraEntrata >= TO_TIMESTAMP(var_giorno, 'yyyy-mm-dd')
  765.                 AND IngressiOrari.OraUscita <= TO_TIMESTAMP(var_giorno || ' 23:59:00', 'yyyy-mm-dd hh24:mi:ss')
  766.             GROUP BY Sedi.idSede, Sedi.Indirizzo
  767.         ),
  768.         TotIngressiAbbonamenti AS (
  769.             SELECT Sedi.idSede, Sedi.Indirizzo, COUNT(IngressiAbbonamenti.idIngressoAbbonamento) AS NumAbb
  770.             FROM IngressiAbbonamenti
  771.                 join Box ON Box.idBox = IngressiAbbonamenti.idBox
  772.                 join Aree ON Aree.idArea = Box.idArea
  773.                 join Autorimesse ON Autorimesse.idAutorimessa = Aree.idAutorimessa
  774.                 join Sedi ON Sedi.idSede = Autorimesse.idSede
  775.                 WHERE IngressiAbbonamenti.OraEntrata >= TO_TIMESTAMP(var_giorno, 'yyyy-mm-dd')
  776.                 AND IngressiAbbonamenti.OraUscita <= TO_TIMESTAMP(var_giorno || ' 23:59:00', 'yyyy-mm-dd hh24:mi:ss')
  777.             GROUP BY Sedi.idSede, Sedi.Indirizzo
  778.         )
  779.         SELECT TotIngressiOrari.idSede AS IDSede, TotIngressiOrari.Indirizzo AS Indirizzo, COALESCE(TotIngressiAbbonamenti.NumAbb, 0) + COALESCE(TotIngressiOrari.NumOrari, 0) AS TotIngressi
  780.         FROM TotIngressiAbbonamenti
  781.         full outer join TotIngressiOrari ON TotIngressiAbbonamenti.idSede = TotIngressiOrari.idSede
  782.         ORDER BY TotIngressiOrari.idSede)
  783.  
  784.  
  785.             LOOP
  786.             Sede:=scorriCursoreAbbonamenti.idsede;
  787.             NumeroAttuale:=scorriCursoreAbbonamenti.TotIngressi;
  788.             indirizzo:=scorriCursoreAbbonamenti.indirizzo;
  789.             IF(NumeroAttuale>var_soglia)THEN
  790.                 modGUI.apriRigaTabella;
  791.                     modGUI.apriElementoTabella;
  792.                         modGUI.elementoTabella(indirizzo);
  793.                     modGUI.chiudiElementoTabella;
  794.                     modGUI.apriElementoTabella;
  795.                         modGUI.elementoTabella(scorriCursoreAbbonamenti.TotIngressi);
  796.                     modGUI.chiudiElementoTabella;
  797.                 modGUI.chiudiRigaTabella;
  798.             END IF;
  799.             END LOOP;
  800.  
  801.  
  802.  
  803.         END resSediSovrappopolate;
  804.    
  805.     PROCEDURE ricercaAutorimessa(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  806.         tmp INTEGER;
  807.         idses INTEGER;
  808.         BEGIN
  809.             IF(ruolo='C') THEN
  810.                 modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  811.                 modGUI.aCapo;
  812.                 modGUI.apriDiv;
  813.                 modGUI.apriIntestazione(2);
  814.                 modGUI.inserisciTesto(' RICERCA AUTORIMESSA COMPETENTE ');
  815.                 modGUI.chiudiIntestazione(2);
  816.                 idses:=TO_NUMBER(id_Sessione);
  817.             /*
  818.                 * Il primo parametro di apriForm indica l'azione da compiere una volta cliccato il tasto di invio
  819.                 * (classico esempio reindirizzamento ad una procedura che si occupa della query di inserimento degli input immessi)
  820.                 */
  821.                 /*modgui.apriForm(visualizzaautorimessa,idSessione,nome,ruolo,idSessione,nome,ruolo,'sede','veicolo'); */
  822.                 modgui.apriForm('competentGarageSearch2');
  823.                 modgui.inserisciinputhidden('id_Sessione',id_Sessione);
  824.                 modgui.inserisciinputhidden('nome',nome);
  825.                 modgui.inserisciinputhidden('ruolo',ruolo);
  826.  
  827.  
  828.                 /* esempi di input testo del form*/
  829.  
  830.  
  831.                 /*esempio di input select del form */
  832.  
  833.                 modGUI.aCapo;
  834.                 modGUI.apriSelect('idSedeCorrente', 'Seleziona Sede: ', FALSE, 'defSelect');
  835.  
  836.                 FOR sede IN (SELECT * FROM sedi)
  837.                 LOOP
  838.                 modGUI.inserisciOpzioneSelect(sede.idsede,sede.indirizzo,FALSE);
  839.                 END LOOP;
  840.  
  841.                 modGUI.chiudiSelect;
  842.  
  843.  
  844.                 modGUI.aCapo;
  845.                 modGUI.apriSelect('idVeicoloCorrente', 'Seleziona Veicolo: ', TRUE, 'defSelect');
  846.  
  847.                 SELECT DISTINCT COUNT(*) INTO tmp FROM veicoli vec, veicoliclienti clive, clienti cli, persone pers, sessioni ses WHERE vec.idveicolo=clive.idveicolo AND clive.idcliente= cli.idcliente AND cli.idpersona=pers.idpersona AND pers.idpersona=ses.idpersona AND ses.idsessione=idses; /*vec  where exists (select* from sessioni ses, persone pers, clienti cli, veicoliclienti clive where idSessione=ses.idsessione and ses.idpersona=pers.idpersona and cli.idpersona=pers.idpersona and clive.idveicolo=vec.idveicolo and clive.idcliente=cli.idcliente);*/
  848.                 IF(tmp=0) THEN
  849.                                 modGUI.inserisciOpzioneSelect('','Nessun veicolo disponibile',FALSE);
  850.                 ELSE
  851.                     FOR veicolo IN (SELECT DISTINCT vec.* FROM veicoli vec, veicoliclienti clive, clienti cli, persone pers, sessioni ses WHERE vec.idveicolo=clive.idveicolo AND clive.idcliente= cli.idcliente AND cli.idpersona=pers.idpersona AND pers.idpersona=ses.idpersona AND ses.idsessione=idses)
  852.                     LOOP
  853.                         modGUI.inserisciOpzioneSelect(veicolo.idveicolo,'Veicolo: ' ||veicolo.produttore ||' '|| veicolo.modello || '     Targa: ' ||veicolo.targa,FALSE);
  854.                     END LOOP;
  855.             END IF;
  856.                 modGUI.chiudiSelect;
  857.                 modGUI.aCapo;
  858.  
  859.                 /*esempio inserimento del bottone di reset dei campi e bottone invio dei dati*/
  860.  
  861.                 modGUI.inserisciBottoneReset('RESET');
  862.                 modGUI.inserisciBottoneForm('Submit','defFormButton');
  863.                 modgui.chiudiForm;
  864.             ELSE
  865.             modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  866.             modGUI.esitoOperazione('KO', 'Questa operazione è disponibile soltanto per i clienti');
  867.             END IF;
  868.  
  869.             modGUI.chiudiPagina;
  870.         END ricercaAutorimessa;
  871.    
  872.     PROCEDURE classificaSediPiuRedditizie(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2) IS
  873.         -- ID della sede corrente
  874.         idSede NUMBER;
  875.         indirizzo VARCHAR2(100);
  876.         totale NUMBER;
  877.         -- Cursore che scorre nella query delle sedi ordinate per guadagno
  878.         CURSOR sediCursor IS
  879.             SELECT sedi.idsede, sedi.indirizzo, (SUM(ingressiorari.costo) + SUM(abbonamenti.costoeffettivo)) AS totale
  880.             FROM sedi
  881.                 join autorimesse ON sedi.idsede = autorimesse.idsede
  882.                 join aree ON autorimesse.idautorimessa = aree.idautorimessa
  883.                 join box ON aree.idarea = box.idarea
  884.                 join ingressiorari ON box.idbox = ingressiorari.idbox
  885.                 join ingressiabbonamenti ON box.idbox = ingressiabbonamenti.idbox
  886.                 join abbonamenti ON ingressiabbonamenti.idabbonamento = abbonamenti.idabbonamento
  887.             GROUP BY sedi.idsede, sedi.indirizzo
  888.             ORDER BY totale;
  889.         BEGIN
  890.             -- Crea la pagina e l'intestazione
  891.             modGUI.apriPagina(
  892.                 'HoC | Sedi più Redditizie',
  893.                 id_sessione => id_sessione,
  894.                 nome => nome,
  895.                 ruolo => ruolo
  896.             );
  897.             modGUI.aCapo;
  898.  
  899.             IF (ruolo <> 'A') THEN
  900.                 modGUI.esitoOperazione('KO', 'Non sei autorizzato a vedere');
  901.             ELSE
  902.                 modGUI.apriIntestazione(3);
  903.                     modGUI.inserisciTesto('SEDI PIÙ REDDITIZIE');
  904.                 modGUI.chiudiIntestazione(3);
  905.  
  906.                 modGUI.ApriTabella;
  907.                 modGUI.ApriRigaTabella;
  908.                     modGUI.intestazioneTabella('ID Sede');
  909.                     modGUI.intestazioneTabella('Indirizzo');
  910.                     modGUI.intestazioneTabella('Totale');
  911.                     /*Viene aggiunta una nuova colonna per i bottoni che permetteranno l'eliminazione della riga*/
  912.                     modGUI.intestazioneTabella('');
  913.                 modGUI.ChiudiRigaTabella;
  914.                 -- Apre il cursore
  915.                 OPEN sediCursor;
  916.                 -- Scorre il cursore
  917.                 LOOP
  918.                     FETCH sediCursor INTO idSede, indirizzo, totale;
  919.                     EXIT WHEN sediCursor%NOTFOUND;
  920.                     modGUI.ApriRigaTabella;
  921.                         modGUI.ApriElementoTabella;
  922.                             modGUI.ElementoTabella(idSede);
  923.                         modGUI.ChiudiElementoTabella;
  924.                         modGUI.ApriElementoTabella;
  925.                             modGUI.ElementoTabella(indirizzo);
  926.                         modGUI.ChiudiElementoTabella;
  927.                         modGUI.ApriElementoTabella;
  928.                             modGUI.ElementoTabella(totale);
  929.                         modGUI.ChiudiElementoTabella;
  930.                     modGUI.ChiudiRigaTabella;
  931.                 END LOOP;
  932.                 -- Chiude il cursore
  933.                 CLOSE sediCursor;
  934.                 modGUI.chiudiPagina;
  935.             END IF;
  936.         END classificaSediPiuRedditizie;
  937.    
  938.     PROCEDURE statisticaalimentazione(id_sessione VARCHAR2,nome VARCHAR2, ruolo VARCHAR2) IS
  939.         maxbox INTEGER :=0;
  940.         var_indirizzo VARCHAR2(100);
  941.         var_gas VARCHAR2(1);
  942.         var_risp VARCHAR2(100);
  943.         var_1 VARCHAR2 (100);
  944.         var_2 VARCHAR2 (100);
  945.  
  946.     BEGIN
  947.         modGUI.apriPagina('HoC |  Statistica alimentazione', id_Sessione, nome, ruolo);
  948.         modgui.acapo;
  949.         modgui.apriform('#');
  950.         modgui.apriintestazione(2);
  951.  
  952.     SELECT tmp.count_box,tmp.indirizzo,tmp.gas INTO maxbox,var_indirizzo,var_gas FROM(
  953.     SELECT COUNT(box.idbox) AS count_box,ar.indirizzo,aree.gas FROM box, aree,autorimesse ar WHERE box.idarea=aree.idarea AND aree.idautorimessa=ar.idautorimessa AND box.occupato='T' GROUP BY ar.indirizzo,aree.gas ORDER BY count_box DESC) tmp
  954.     WHERE ROWNUM=1;
  955.         --if(var_gas='T') then var_risp:='a gas'; else var_risp:='a benzina'; end if;
  956.         SELECT DECODE(var_gas, 'T','a gas','a benzina'), DECODE(maxbox, '1','C''è ','Ci sono ') ,DECODE(maxbox, '1',' veicolo ', ' veicoli ') INTO var_risp, var_1, var_2 FROM dual;
  957.  
  958.         modgui.inseriscitesto(var_1|| maxbox|| var_2 || 'con alimentazione '||var_risp || ' nel parcheggio di '||var_indirizzo );
  959.     modgui.chiudiintestazione(2);
  960.     modgui.chiudiform;
  961.     modgui.chiudipagina;
  962.     EXCEPTION
  963.     WHEN NO_DATA_FOUND THEN
  964.         modgui.inseriscitesto('Non ci sono veicoli attualmente parcheggiati');
  965.         modgui.chiudiintestazione(2);
  966.         modgui.chiudiform;
  967.  
  968.  
  969.     END statisticaalimentazione;
  970.  
  971.     PROCEDURE updateArea(
  972.         id_sessione int DEFAULT 0,
  973.         nome VARCHAR2,
  974.         ruolo VARCHAR2,
  975.         idRiga int,
  976.         var_posti_totali Aree.PostiTotali%TYPE,
  977.         var_posti_liberi Aree.PostiLiberi%TYPE,
  978.         var_stato Aree.Stato%TYPE,
  979.         var_gas Aree.Gas%TYPE,
  980.         var_lunghezza_max Aree.LunghezzaMax%TYPE,
  981.         var_larghezza_max Aree.LarghezzaMax%TYPE,
  982.         var_peso_max Aree.PesoMax%TYPE,
  983.         var_costo_abbonamento Aree.CostoAbbonamento%TYPE
  984.     ) AS
  985.     BEGIN
  986.         -- Aggiorna la sede
  987.         UPDATE Aree SET
  988.             Aree.PostiTotali = var_posti_totali,
  989.             Aree.PostiLiberi = var_posti_liberi,
  990.             Aree.Stato = var_stato,
  991.             Aree.Gas = var_gas,
  992.             Aree.LunghezzaMax = var_lunghezza_max,
  993.             Aree.LarghezzaMax = var_larghezza_max,
  994.             Aree.PesoMax = var_peso_max,
  995.             Aree.CostoAbbonamento = var_costo_abbonamento
  996.         WHERE Aree.idArea = idRiga;
  997.         COMMIT;
  998.         -- Richiama la visualizzazione
  999.         visualizzaArea(id_sessione, nome, ruolo, idRiga);
  1000.     END updateArea;
  1001.    
  1002.     PROCEDURE updateAutorimessa(
  1003.         id_sessione int DEFAULT 0,
  1004.         nome VARCHAR2,
  1005.         ruolo VARCHAR2,
  1006.         idRiga int,
  1007.         var_indirizzo Autorimesse.Indirizzo%TYPE,
  1008.         var_telefono Autorimesse.Telefono%TYPE,
  1009.         var_coordinate Autorimesse.Coordinate%TYPE
  1010.     ) AS
  1011.         id_dipendente_sede Dipendenti.idDipendente%TYPE;
  1012.         id_dipendente_corrente Dipendenti.idDipendente%TYPE;
  1013.     BEGIN
  1014.         -- ID del dipendente corrente
  1015.         BEGIN
  1016.             SELECT Dipendenti.idDipendente
  1017.             INTO id_dipendente_corrente
  1018.             FROM Dipendenti
  1019.                 join PersoneL ON PersoneL.idPersona = Dipendenti.idPersona
  1020.                 join Sessioni ON Sessioni.idPersona = PersoneL.idPersona
  1021.             WHERE Sessioni.idSessione = id_sessione;
  1022.         EXCEPTION
  1023.             WHEN NO_DATA_FOUND THEN
  1024.                 id_dipendente_corrente := NULL;
  1025.         END;
  1026.  
  1027.         -- ID del dipendente responsabile della sede
  1028.         BEGIN
  1029.             SELECT Sedi.idDipendente
  1030.             INTO id_dipendente_sede
  1031.             FROM Sedi
  1032.                 join Autorimesse ON Autorimesse.idSede = Sedi.idSede
  1033.             WHERE Autorimesse.idAutorimessa = idRiga;
  1034.         EXCEPTION
  1035.             WHEN NO_DATA_FOUND THEN
  1036.                 id_dipendente_sede := NULL;
  1037.         END;
  1038.  
  1039.         IF ((ruolo = 'A') OR ((ruolo = 'R') AND (id_dipendente_corrente = id_dipendente_sede))) THEN
  1040.             -- Aggiorna la sede
  1041.             UPDATE Autorimesse SET
  1042.                 Autorimesse.Indirizzo = var_indirizzo,
  1043.                 Autorimesse.Telefono = var_telefono,
  1044.                 Autorimesse.Coordinate = var_coordinate
  1045.             WHERE Autorimesse.idAutorimessa = idRiga;
  1046.             COMMIT;
  1047.         ELSE
  1048.             modGUI.esitoOperazione('KO', 'Non sei autorizzato ad eseguire questa operazione');
  1049.         END IF;
  1050.  
  1051.         -- Richiama la visualizzazione
  1052.         visualizzaAutorimessa(id_sessione, nome, ruolo, idRiga);
  1053.     END updateAutorimessa;
  1054.  
  1055.     PROCEDURE updateSede(
  1056.         id_sessione int DEFAULT 0,
  1057.         nome VARCHAR2,
  1058.         ruolo VARCHAR2,
  1059.         idRiga int,
  1060.         var_indirizzo Sedi.Indirizzo%TYPE,
  1061.         var_telefono Sedi.Telefono%TYPE,
  1062.         var_coordinate Sedi.Coordinate%TYPE
  1063.     ) AS
  1064.     BEGIN
  1065.         IF (ruolo <> 'A') THEN
  1066.             modGUI.apriPagina('HoC | Update Sede', id_sessione, nome, ruolo);
  1067.                 modGUI.apriDiv;
  1068.                     modGUI.esitoOperazione('KO', 'Non sei un amministratore');
  1069.                 modGUI.chiudiDiv;
  1070.             modGUI.chiudiPagina;
  1071.         ELSE
  1072.             -- Aggiorna la sede
  1073.             UPDATE Sedi SET
  1074.                 Sedi.Indirizzo = var_indirizzo,
  1075.                 Sedi.Telefono = var_telefono,
  1076.                 Sedi.Coordinate = var_coordinate
  1077.             WHERE Sedi.idSede = idRiga;
  1078.             COMMIT;
  1079.             -- Richiama la visualizzazione
  1080.             visualizzaSede(id_sessione, nome, ruolo, idRiga);
  1081.         END IF;
  1082.     END updateSede;
  1083.  
  1084.     PROCEDURE visualizzaArea(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) IS
  1085.         -- Parametri dell'autorimessa corrente
  1086.         area Aree%ROWTYPE;
  1087.         -- Indirizzo dell'autorimessa di riferimento
  1088.         indirizzo_autorimessa Autorimesse.Indirizzo%TYPE;
  1089.         -- ID e indirizzo della sede di riferimento
  1090.         id_sede Sedi.idSede%TYPE;
  1091.         indirizzo_sede Sedi.Indirizzo%TYPE;
  1092.     BEGIN
  1093.         BEGIN
  1094.             -- Trova la sede
  1095.             SELECT * INTO area
  1096.             FROM Aree
  1097.             WHERE Aree.idArea = idRiga;
  1098.             -- Trova ID della sede e indirizzo dell'autorimessa
  1099.             SELECT Autorimesse.idSede, Autorimesse.Indirizzo INTO id_sede, indirizzo_autorimessa
  1100.             FROM Autorimesse
  1101.             WHERE Autorimesse.idAutorimessa = area.idAutorimessa;
  1102.             -- Trova l'indirizzo dell'autorimessa
  1103.             SELECT Sedi.Indirizzo INTO indirizzo_sede
  1104.             FROM Sedi
  1105.             WHERE Sedi.idSede = id_sede;
  1106.         EXCEPTION
  1107.           WHEN NO_DATA_FOUND THEN
  1108.             area := NULL;
  1109.         END;
  1110.         -- Crea la pagina e l'intestazione
  1111.         modGUI.apriPagina('HoC | Area ' || area.idArea || ' di ' || indirizzo_autorimessa, id_sessione, nome, ruolo);
  1112.             modGUI.aCapo;
  1113.  
  1114.             IF (area.idArea IS NULL) THEN
  1115.                 modGUI.esitoOperazione('KO', 'Nessuna area trovata');
  1116.             ELSE
  1117.  
  1118.                 modGUI.apriIntestazione(2);
  1119.                     modGUI.inserisciTesto('Area ' || area.idArea || ' di ' || indirizzo_autorimessa);
  1120.                 modGUI.chiudiIntestazione(2);
  1121.  
  1122.                 modGUI.ApriTabella;
  1123.                     modGUI.ApriRigaTabella;
  1124.                         modGUI.IntestazioneTabella('ID Area');
  1125.                         modGUI.ApriElementoTabella;
  1126.                             modGUI.ElementoTabella(area.idArea);
  1127.                         modGUI.ChiudiElementoTabella;
  1128.                     modGUI.ChiudiRigaTabella;
  1129.                     modGUI.ApriRigaTabella;
  1130.                         modGUI.IntestazioneTabella('Posti Totali');
  1131.                         modGUI.ApriElementoTabella;
  1132.                             modGUI.ElementoTabella(area.PostiTotali);
  1133.                         modGUI.ChiudiElementoTabella;
  1134.                     modGUI.ChiudiRigaTabella;
  1135.                     modGUI.ApriRigaTabella;
  1136.                         modGUI.IntestazioneTabella('Posti Liberi');
  1137.                         modGUI.ApriElementoTabella;
  1138.                             modGUI.ElementoTabella(area.PostiLiberi);
  1139.                         modGUI.ChiudiElementoTabella;
  1140.                     modGUI.ChiudiRigaTabella;
  1141.                     modGUI.ApriRigaTabella;
  1142.                         modGUI.IntestazioneTabella('Stato');
  1143.                         modGUI.ApriElementoTabella;
  1144.                             modGUI.ElementoTabella(area.Stato);
  1145.                         modGUI.ChiudiElementoTabella;
  1146.                     modGUI.ChiudiRigaTabella;
  1147.                     modGUI.ApriRigaTabella;
  1148.                         modGUI.IntestazioneTabella('Gas');
  1149.                         modGUI.ApriElementoTabella;
  1150.                             modGUI.ElementoTabella(area.Gas);
  1151.                         modGUI.ChiudiElementoTabella;
  1152.                     modGUI.ChiudiRigaTabella;
  1153.                     modGUI.ApriRigaTabella;
  1154.                         modGUI.IntestazioneTabella('Lunghezza Massima');
  1155.                         modGUI.ApriElementoTabella;
  1156.                             modGUI.ElementoTabella(area.LunghezzaMax);
  1157.                         modGUI.ChiudiElementoTabella;
  1158.                     modGUI.ChiudiRigaTabella;
  1159.                     modGUI.ApriRigaTabella;
  1160.                         modGUI.IntestazioneTabella('Larghezza Massima');
  1161.                         modGUI.ApriElementoTabella;
  1162.                             modGUI.ElementoTabella(area.LarghezzaMax);
  1163.                         modGUI.ChiudiElementoTabella;
  1164.                     modGUI.ChiudiRigaTabella;
  1165.                     modGUI.ApriRigaTabella;
  1166.                         modGUI.IntestazioneTabella('Altezza Massima');
  1167.                         modGUI.ApriElementoTabella;
  1168.                             modGUI.ElementoTabella(area.AltezzaMax);
  1169.                         modGUI.ChiudiElementoTabella;
  1170.                     modGUI.ChiudiRigaTabella;
  1171.                     modGUI.ApriRigaTabella;
  1172.                         modGUI.IntestazioneTabella('Peso Massimo');
  1173.                         modGUI.ApriElementoTabella;
  1174.                             modGUI.ElementoTabella(area.PesoMax);
  1175.                         modGUI.ChiudiElementoTabella;
  1176.                     modGUI.ChiudiRigaTabella;
  1177.                     modGUI.ApriRigaTabella;
  1178.                         modGUI.IntestazioneTabella('Costo Abbonamento');
  1179.                         modGUI.ApriElementoTabella;
  1180.                             modGUI.ElementoTabella(area.CostoAbbonamento);
  1181.                         modGUI.ChiudiElementoTabella;
  1182.                     modGUI.ChiudiRigaTabella;
  1183.                     modGUI.ApriRigaTabella;
  1184.                         modGUI.IntestazioneTabella('Autorimessa');
  1185.                         modGUI.ApriElementoTabella;
  1186.                             modGUI.Collegamento(indirizzo_autorimessa, 'visualizzaAutorimessa?id_sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || area.idAutorimessa);
  1187.                         modGUI.ChiudiElementoTabella;
  1188.                     modGUI.ChiudiRigaTabella;
  1189.                 modGUI.ChiudiTabella;
  1190.  
  1191.                 IF (ruolo <> 'O' AND ruolo <> 'C') THEN
  1192.                     modGUI.ApriTabella;
  1193.                         modGUI.ApriRigaTabella;
  1194.                             modGUI.ApriElementoTabella;
  1195.                                 modGUI.InserisciPenna('modificaArea', id_sessione, nome, ruolo, idRiga);
  1196.                             modGUI.ChiudiElementoTabella;
  1197.                         modGUI.ChiudiRigaTabella;
  1198.                     modGUI.ChiudiTabella;
  1199.                 END IF;
  1200.  
  1201.                 -- Tabella delle autorimesse collegate
  1202.                 modGUI.apriIntestazione(3);
  1203.                     modGUI.inserisciTesto('Aree');
  1204.                 modGUI.chiudiIntestazione(3);
  1205.  
  1206.                 modGUI.apriTabella;
  1207.                     modGUI.ApriRigaTabella;
  1208.                         modGUI.intestazioneTabella('ID Box');
  1209.                         modGUI.intestazioneTabella('Numero');
  1210.                         modGUI.intestazioneTabella('Piano');
  1211.                         modGUI.intestazioneTabella('Colonna');
  1212.                         modGUI.intestazioneTabella('Dettaglio');
  1213.                     FOR box IN (SELECT * FROM Box WHERE Box.idArea = idRiga)
  1214.                     LOOP
  1215.                         modGUI.ApriRigaTabella;
  1216.                             modGUI.ApriElementoTabella;
  1217.                                 modGUI.ElementoTabella(box.idBox);
  1218.                             modGUI.ChiudiElementoTabella;
  1219.                             modGUI.ApriElementoTabella;
  1220.                                 modGUI.ElementoTabella(box.Numero);
  1221.                             modGUI.ChiudiElementoTabella;
  1222.                             modGUI.ApriElementoTabella;
  1223.                                 modGUI.ElementoTabella(box.Piano);
  1224.                             modGUI.ChiudiElementoTabella;
  1225.                             modGUI.ApriElementoTabella;
  1226.                                 modGUI.ElementoTabella(box.NumeroColonna);
  1227.                             modGUI.ChiudiElementoTabella;
  1228.                             modGUI.ApriElementoTabella;
  1229.                                 modGUI.inserisciLente('visualizzaBox', id_sessione, nome, ruolo, box.idBox);
  1230.                             modGUI.ChiudiElementoTabella;
  1231.                         modGUI.ChiudiRigaTabella;
  1232.                     END LOOP;
  1233.                 modGUI.chiudiTabella;
  1234.             END IF;
  1235.         modGUI.ChiudiPagina;
  1236.     END visualizzaArea;
  1237.  
  1238.     PROCEDURE visualizzaAutorimessa(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) IS
  1239.         -- Parametri dell'autorimessa corrente
  1240.         autorimessa Autorimesse%ROWTYPE;
  1241.         -- Indirizzo della sede di riferimento
  1242.         indirizzo_sede Sedi.Indirizzo%TYPE;
  1243.     BEGIN
  1244.         BEGIN
  1245.             -- Trova la sede
  1246.             SELECT * INTO autorimessa
  1247.             FROM Autorimesse
  1248.             WHERE Autorimesse.idAutorimessa = idRiga;
  1249.             -- Trova l'indirizzo della sede
  1250.             SELECT Sedi.Indirizzo INTO indirizzo_sede
  1251.             FROM Sedi
  1252.             WHERE Sedi.idSede = autorimessa.idSede;
  1253.         EXCEPTION
  1254.           WHEN NO_DATA_FOUND THEN
  1255.             autorimessa := NULL;
  1256.         END;
  1257.         -- Crea la pagina e l'intestazione
  1258.         modGUI.apriPagina('HoC | Autorimessa di ' || autorimessa.indirizzo, id_sessione, nome, ruolo);
  1259.             modGUI.aCapo;
  1260.  
  1261.             IF (autorimessa.idAutorimessa IS NULL) THEN
  1262.                 modGUI.esitoOperazione('KO', 'Nessuna autorimessa trovata');
  1263.             ELSE
  1264.                 modGUI.apriIntestazione(2);
  1265.                     modGUI.inserisciTesto('Autorimessa di ' || autorimessa.indirizzo);
  1266.                 modGUI.chiudiIntestazione(2);
  1267.  
  1268.                 modGUI.ApriTabella;
  1269.                     modGUI.ApriRigaTabella;
  1270.                         modGUI.IntestazioneTabella('ID Autorimessa');
  1271.                         modGUI.ApriElementoTabella;
  1272.                             modGUI.ElementoTabella(autorimessa.idAutorimessa);
  1273.                         modGUI.ChiudiElementoTabella;
  1274.                     modGUI.ChiudiRigaTabella;
  1275.                     modGUI.ApriRigaTabella;
  1276.                         modGUI.IntestazioneTabella('Indirizzo');
  1277.                         modGUI.ApriElementoTabella;
  1278.                             modGUI.ElementoTabella(autorimessa.Indirizzo);
  1279.                         modGUI.ChiudiElementoTabella;
  1280.                     modGUI.ChiudiRigaTabella;
  1281.                     modGUI.ApriRigaTabella;
  1282.                         modGUI.IntestazioneTabella('Telefono');
  1283.                         modGUI.ApriElementoTabella;
  1284.                             modGUI.ElementoTabella(autorimessa.Telefono);
  1285.                         modGUI.ChiudiElementoTabella;
  1286.                     modGUI.ChiudiRigaTabella;
  1287.                     modGUI.ApriRigaTabella;
  1288.                         modGUI.IntestazioneTabella('Coordinate');
  1289.                         modGUI.ApriElementoTabella;
  1290.                             modGUI.ElementoTabella(autorimessa.Coordinate);
  1291.                         modGUI.ChiudiElementoTabella;
  1292.                     modGUI.ChiudiRigaTabella;
  1293.                     modGUI.ApriRigaTabella;
  1294.                         modGUI.IntestazioneTabella('Sede');
  1295.                         modGUI.ApriElementoTabella;
  1296.                             modGUI.Collegamento(indirizzo_sede, groupname || 'visualizzaSede?id_sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || autorimessa.idSede);
  1297.                         modGUI.ChiudiElementoTabella;
  1298.                     modGUI.ChiudiRigaTabella;
  1299.                     IF (ruolo <> 'O' AND ruolo <> 'C') THEN
  1300.                         modGUI.apriRigaTabella;
  1301.                             modGUI.intestazioneTabella('Dettagli');
  1302.                             modGUI.apriElementoTabella;
  1303.                                 modGUI.InserisciPenna(groupname || 'modificaAutorimessa', id_sessione, nome, ruolo, autorimessa.idAutorimessa);
  1304.                             modGUI.chiudiElementoTabella;
  1305.                         modGUI.chiudiRigaTabella;
  1306.                     END IF;
  1307.                 modGUI.ChiudiTabella;
  1308.  
  1309.                 -- Tabella delle autorimesse collegate
  1310.                 modGUI.apriIntestazione(3);
  1311.                     modGUI.inserisciTesto('Aree');
  1312.                 modGUI.chiudiIntestazione(3);
  1313.  
  1314.                 modGUI.apriTabella;
  1315.                     modGUI.ApriRigaTabella;
  1316.                         modGUI.intestazioneTabella('ID Area');
  1317.                         modGUI.intestazioneTabella('Larghezza Massima');
  1318.                         modGUI.intestazioneTabella('Lunghezza Massima');
  1319.                         modGUI.intestazioneTabella('Altezza Massima');
  1320.                         modGUI.intestazioneTabella('Peso Massimo');
  1321.                         modGUI.intestazioneTabella('Dettaglio');
  1322.                     FOR area IN (SELECT * FROM Aree WHERE Aree.idAutorimessa = idRiga)
  1323.                     LOOP
  1324.                         modGUI.ApriRigaTabella;
  1325.                             modGUI.ApriElementoTabella;
  1326.                                 modGUI.ElementoTabella(area.idArea);
  1327.                             modGUI.ChiudiElementoTabella;
  1328.                             modGUI.ApriElementoTabella;
  1329.                                 modGUI.ElementoTabella(area.LarghezzaMax || ' mm');
  1330.                             modGUI.ChiudiElementoTabella;
  1331.                             modGUI.ApriElementoTabella;
  1332.                                 modGUI.ElementoTabella(area.LunghezzaMax || ' mm');
  1333.                             modGUI.ChiudiElementoTabella;
  1334.                             modGUI.ApriElementoTabella;
  1335.                                 modGUI.ElementoTabella(area.AltezzaMax || ' mm');
  1336.                             modGUI.ChiudiElementoTabella;
  1337.                             modGUI.ApriElementoTabella;
  1338.                                 modGUI.ElementoTabella(area.PesoMax || ' kg');
  1339.                             modGUI.ChiudiElementoTabella;
  1340.                             modGUI.ApriElementoTabella;
  1341.                                 modGUI.inserisciLente(groupname || 'visualizzaArea', id_sessione, nome, ruolo, area.idArea);
  1342.                             modGUI.ChiudiElementoTabella;
  1343.                         modGUI.ChiudiRigaTabella;
  1344.                     END LOOP;
  1345.                 modGUI.chiudiTabella;
  1346.             END IF;
  1347.         modGUI.ChiudiPagina;
  1348.     END visualizzaAutorimessa;
  1349.    
  1350.     PROCEDURE visualizzaBox(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) IS
  1351.         -- Parametri del box corrente
  1352.         var_box Box%ROWTYPE;
  1353.         -- Parametri di un eventuale veicolo
  1354.         veicolo Veicoli%ROWTYPE;
  1355.         -- ID e indirizzo dell'autorimessa di riferimento
  1356.         id_autorimessa Autorimesse.idAutorimessa%TYPE;
  1357.         indirizzo_autorimessa Autorimesse.Indirizzo%TYPE;
  1358.         -- ID dell'area di riferimento
  1359.         id_area Aree.idArea%TYPE;
  1360.     BEGIN
  1361.         BEGIN
  1362.             -- Trova la sede
  1363.             SELECT * INTO var_box
  1364.             FROM Box
  1365.             WHERE Box.idBox = idRiga;
  1366.             -- Trova ID della sede e indirizzo dell'autorimessa
  1367.             SELECT Autorimesse.idSede, Autorimesse.Indirizzo, Aree.idArea INTO id_autorimessa, indirizzo_autorimessa, id_area
  1368.             FROM Autorimesse
  1369.             join Aree ON Aree.idAutorimessa = Autorimesse.idAutorimessa
  1370.             WHERE Aree.idArea = var_box.idArea;
  1371.         EXCEPTION
  1372.           WHEN NO_DATA_FOUND THEN
  1373.             var_box := NULL;
  1374.         END;
  1375.         -- Crea la pagina e l'intestazione
  1376.         modGUI.apriPagina('HoC | Box ' || idRiga || ' area ' || var_box.idArea || ' di ' || indirizzo_autorimessa, id_sessione, nome, ruolo);
  1377.             modGUI.aCapo;
  1378.             IF (var_box.idBox IS NULL) THEN
  1379.                 modGUI.esitoOperazione('KO', 'Nessun box trovato');
  1380.             ELSE
  1381.                 modGUI.apriIntestazione(2);
  1382.                     modGUI.inserisciTesto('Box ' || idRiga || ' - Area ' || var_box.idArea || ' di ' || indirizzo_autorimessa);
  1383.                 modGUI.chiudiIntestazione(2);
  1384.  
  1385.                 modGUI.ApriTabella;
  1386.                     modGUI.ApriRigaTabella;
  1387.                         modGUI.IntestazioneTabella('ID Box');
  1388.                         modGUI.ApriElementoTabella;
  1389.                             modGUI.ElementoTabella(var_box.idBox);
  1390.                         modGUI.ChiudiElementoTabella;
  1391.                     modGUI.ChiudiRigaTabella;
  1392.                     modGUI.ApriRigaTabella;
  1393.                         modGUI.IntestazioneTabella('Numero');
  1394.                         modGUI.ApriElementoTabella;
  1395.                             modGUI.ElementoTabella(var_box.Numero);
  1396.                         modGUI.ChiudiElementoTabella;
  1397.                     modGUI.ChiudiRigaTabella;
  1398.                     modGUI.ApriRigaTabella;
  1399.                         modGUI.IntestazioneTabella('Piano');
  1400.                         modGUI.ApriElementoTabella;
  1401.                             modGUI.ElementoTabella(var_box.Piano);
  1402.                         modGUI.ChiudiElementoTabella;
  1403.                     modGUI.ChiudiRigaTabella;
  1404.                     modGUI.ApriRigaTabella;
  1405.                         modGUI.IntestazioneTabella('Colonna');
  1406.                         modGUI.ApriElementoTabella;
  1407.                             modGUI.ElementoTabella(var_box.NumeroColonna);
  1408.                         modGUI.ChiudiElementoTabella;
  1409.                     modGUI.ChiudiRigaTabella;
  1410.                     modGUI.ApriRigaTabella;
  1411.                         modGUI.IntestazioneTabella('Occupato');
  1412.                         modGUI.ApriElementoTabella;
  1413.                             modGUI.ElementoTabella(var_box.Occupato);
  1414.                         modGUI.ChiudiElementoTabella;
  1415.                     modGUI.ChiudiRigaTabella;
  1416.                     modGUI.ApriRigaTabella;
  1417.                         modGUI.IntestazioneTabella('Riservato');
  1418.                         modGUI.ApriElementoTabella;
  1419.                             modGUI.ElementoTabella(var_box.Riservato);
  1420.                         modGUI.ChiudiElementoTabella;
  1421.                     modGUI.ChiudiRigaTabella;
  1422.                     modGUI.ApriRigaTabella;
  1423.                         modGUI.IntestazioneTabella('Area');
  1424.                         modGUI.ApriElementoTabella;
  1425.                             modGUI.Collegamento(var_box.idArea, groupname || 'visualizzaArea?id_sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || id_area);
  1426.                         modGUI.ChiudiElementoTabella;
  1427.                     modGUI.ChiudiRigaTabella;
  1428.                     modGUI.ApriRigaTabella;
  1429.                         modGUI.IntestazioneTabella('Autorimessa');
  1430.                         modGUI.ApriElementoTabella;
  1431.                             modGUI.Collegamento(indirizzo_autorimessa, groupname || 'visualizzaAutorimessa?id_sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || id_autorimessa);
  1432.                         modGUI.ChiudiElementoTabella;
  1433.                     modGUI.ChiudiRigaTabella;          
  1434.                 modGUI.ChiudiTabella;
  1435.  
  1436.                 -- Eventuale auto contenuta nel box
  1437.                 IF (var_box.Occupato = 'T') THEN
  1438.                     -- Trova il veicolo
  1439.                     SELECT Veicoli.* INTO veicolo
  1440.                     FROM Veicoli
  1441.                         join EffettuaIngressiOrari ON EffettuaIngressiOrari.idVeicolo = Veicoli.idVeicolo
  1442.                         join IngressiOrari ON IngressiOrari.idIngressoOrario = EffettuaIngressiOrari.idIngressoOrario
  1443.                     WHERE IngressiOrari.idBox = idRiga
  1444.                         AND IngressiOrari.OraUscita IS NULL;
  1445.                     -- Stampa le informazioni del veicolo
  1446.                     modGUI.apriIntestazione(3);
  1447.                         modGUI.inserisciTesto('Veicolo in sosta');
  1448.                     modGUI.chiudiIntestazione(3);
  1449.                    
  1450.                     modGUI.apriTabella;
  1451.                         modGUI.apriRigaTabella;
  1452.                             modGUI.apriIntestazione('ID Veicolo');
  1453.                             modGUI.apriIntestazione('Targa');
  1454.                             modGUI.apriIntestazione('Produttore');
  1455.                             modGUI.apriIntestazione('Modello');
  1456.                             modGUI.apriIntestazione('Colore');
  1457.                             modGUI.apriIntestazione('Dettaglio');
  1458.                         modGUI.chiudiRigaTabella;
  1459.                         modGUI.apriRigaTabella;
  1460.                             modGUI.apriElementoTabella;
  1461.                                 modGUI.ElementoTabella(veicolo.idVeicolo);
  1462.                             modGUI.chiudiElementoTabella;
  1463.                         modGUI.ChiudiRigaTabella;
  1464.                         modGUI.apriElementoTabella;
  1465.                             modGUI.ElementoTabella(veicolo.Targa);
  1466.                         modGUI.chiudiElementoTabella;
  1467.                         modGUI.apriElementoTabella;
  1468.                             modGUI.ElementoTabella(veicolo.Produttore);
  1469.                         modGUI.chiudiElementoTabella;
  1470.                         modGUI.apriElementoTabella;
  1471.                             modGUI.ElementoTabella(veicolo.Modello);
  1472.                         modGUI.chiudiElementoTabella;
  1473.                         modGUI.apriElementoTabella;
  1474.                             modGUI.ElementoTabella(veicolo.Colore);
  1475.                         modGUI.chiudiElementoTabella;
  1476.                         modGUI.apriElementoTabella;
  1477.                             modGUI.InserisciLente('visualizzaVeicolo', id_sessione, nome, ruolo, veicolo.idVeicolo);
  1478.                         modGUI.chiudiElementoTabella;
  1479.                     modGUI.chiudiTabella;
  1480.                 END IF;
  1481.             END IF;
  1482.         modGUI.ChiudiPagina;
  1483.     END visualizzaBox;
  1484.  
  1485.     PROCEDURE visualizzaintroitiparzialiabb(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idriga VARCHAR2, periodo VARCHAR2, datainiziale VARCHAR2 DEFAULT NULL, datafinale VARCHAR2 DEFAULT NULL) AS
  1486.         x_datainiziale VARCHAR2(100) :=NVL(datainiziale, '1900-01-01');
  1487.         y_datafinale VARCHAR2(100) := NVL(datafinale, TO_CHAR(SYSDATE+INTERVAL '10' YEAR,'yyyy-mm-dd'));
  1488.     BEGIN
  1489.         modGUI.apriPagina('HoC | Introiti ', id_Sessione, nome, ruolo);
  1490.  
  1491.         FOR i IN (SELECT * FROM autorimesse aut WHERE aut.idsede=idriga)
  1492.         LOOP
  1493.         modGUI.apriIntestazione(2);
  1494.             modGUI.inserisciTesto('Autorimessa ' || i.indirizzo);
  1495.         modGUI.chiudiIntestazione(2);
  1496.  
  1497.         modGUI.apriTabella;
  1498.  
  1499.                     modGUI.ApriRigaTabella;
  1500.                         modGUI.intestazioneTabella('ID Abbonamento');
  1501.                         modGUI.intestazioneTabella('Costo effettivo');
  1502.                         modGUI.intestazioneTabella('Data inizio');
  1503.                         modGUI.intestazioneTabella('Data fine');
  1504.                         modGUI.ChiudiRigaTabella;
  1505.        
  1506.         FOR n IN (SELECT abb.* FROM box, abbonamenti abb, aree WHERE box.idabbonamento=abb.idabbonamento AND box.idarea=aree.idarea AND aree.idautorimessa=i.idautorimessa AND ((abb.datainizio<TO_DATE(x_datainiziale,'yyyy-mm-dd') AND abb.datafine>TO_DATE(x_datainiziale,'yyyy-mm-dd')) OR (abb.datainizio>TO_DATE(x_datainiziale,'yyyy-mm-dd') AND abb.datainizio<TO_DATE(y_datafinale,'yyyy-mm-dd'))) ORDER BY abb.idabbonamento)
  1507.         --for n in (select abb.* from box, abbonamenti abb, aree where box.idabbonamento=abb.idabbonamento and box.idarea=aree.idarea and aree.idautorimessa=i.idautorimessa order by abb.idabbonamento)
  1508.         LOOP
  1509.                             modGUI.ApriRigaTabella;
  1510.                             modGUI.ApriElementoTabella;
  1511.                                 modGUI.ElementoTabella(n.idabbonamento);
  1512.                             modGUI.ChiudiElementoTabella;
  1513.                             modGUI.ApriElementoTabella;
  1514.                                 modGUI.ElementoTabella(n.costoeffettivo);
  1515.                             modGUI.ChiudiElementoTabella;
  1516.                             modGUI.ApriElementoTabella;
  1517.                                 modGUI.ElementoTabella(n.datainizio);
  1518.                             modGUI.ApriElementoTabella;
  1519.                                 modGUI.ElementoTabella(n.datafine);
  1520.                             modGUI.ChiudiElementoTabella;
  1521.                             modGUI.ChiudiRigaTabella;          
  1522.         END LOOP;
  1523.         modGUI.ChiudiTabella;
  1524.        
  1525.         modGUI.apriTabella;
  1526.  
  1527.                     modGUI.ApriRigaTabella;
  1528.                         modGUI.intestazioneTabella('ID Ingresso Orario');
  1529.                         modGUI.intestazioneTabella('Costo effettivo');
  1530.                         modGUI.intestazioneTabella('Data inizio');
  1531.                         modGUI.intestazioneTabella('Data fine');
  1532.                         modGUI.ChiudiRigaTabella;
  1533.  
  1534.         FOR n IN (SELECT io.* FROM box, ingressiorari io, aree WHERE box.idbox=io.idbox AND box.idarea=aree.idarea AND aree.idautorimessa=i.idautorimessa AND ((io.oraentrata<TO_TIMESTAMP(x_datainiziale,'yyyy-mm-dd') AND io.orauscita>TO_TIMESTAMP(x_datainiziale,'yyyy-mm-dd')) OR (io.oraentrata>TO_TIMESTAMP(x_datainiziale,'yyyy-mm-dd') AND io.oraentrata<TO_TIMESTAMP(y_datafinale||' 23:59:00','yyyy-mm-dd hh24:mi:ss'))) ORDER BY io.idingressoorario)
  1535.         --for n in (select io.* from box, ingressiorari io, aree where box.idbox=io.idbox and box.idarea=aree.idarea and aree.idautorimessa=i.idautorimessa and io.oraentrata is not null order by io.idingressoorario)
  1536.         LOOP
  1537.                             modGUI.ApriRigaTabella;
  1538.                             modGUI.ApriElementoTabella;
  1539.                                 modGUI.ElementoTabella(n.idingressoorario);
  1540.                             modGUI.ChiudiElementoTabella;
  1541.                             modGUI.ApriElementoTabella;
  1542.                                 modGUI.ElementoTabella(n.costo);
  1543.                             modGUI.ChiudiElementoTabella;
  1544.                             modGUI.ApriElementoTabella;
  1545.                                 modGUI.ElementoTabella(TO_CHAR(n.oraentrata,'dd-MON-yy hh24:mi:ss'));
  1546.                             modGUI.ApriElementoTabella;
  1547.                                 modGUI.ElementoTabella(TO_CHAR(n.orauscita,'dd-MON-yy hh24:mi:ss'));
  1548.                             modGUI.ChiudiElementoTabella;
  1549.                             modGUI.ChiudiRigaTabella;          
  1550.         END LOOP;
  1551.         modGUI.ChiudiTabella;
  1552.  
  1553.         END LOOP;
  1554.  
  1555.  
  1556.         modgui.chiudipagina;
  1557.     END visualizzaintroitiparzialiabb;
  1558.  
  1559.     PROCEDURE visualizzaSede(id_sessione int DEFAULT 0, nome VARCHAR2, ruolo VARCHAR2, idRiga int) IS
  1560.         -- Parametri della sede corrente
  1561.         sede Sedi%ROWTYPE;
  1562.         -- Nome del dipendente dirigente
  1563.         nome_dirigente Persone.Nome%TYPE;
  1564.         cognome_dirigente Persone.Cognome%TYPE;
  1565.     BEGIN
  1566.         BEGIN
  1567.             -- Trova la sede
  1568.             SELECT * INTO sede
  1569.             FROM Sedi
  1570.             WHERE Sedi.idSede = idRiga;
  1571.             -- Trova il nome del dirigente
  1572.             SELECT nome, cognome INTO nome_dirigente, cognome_dirigente
  1573.             FROM Persone P
  1574.                 join Dipendenti D ON D.idPersona = P.idPersona
  1575.                 WHERE D.idDipendente = sede.idDipendente;
  1576.         EXCEPTION
  1577.           WHEN NO_DATA_FOUND THEN
  1578.             sede := NULL;
  1579.         END;
  1580.         -- Crea la pagina e l'intestazione
  1581.         modGUI.apriPagina('HoC | Sede di ' || sede.indirizzo, id_sessione, nome, ruolo);
  1582.             modGUI.aCapo;
  1583.             IF (sede.idSede IS NULL) THEN
  1584.                 modGUI.esitoOperazione('KO', 'Nessuna sede trovata');
  1585.             ELSE
  1586.                 modGUI.apriIntestazione(2);
  1587.                     modGUI.inserisciTesto('Sede di ' || sede.indirizzo);
  1588.                 modGUI.chiudiIntestazione(2);
  1589.  
  1590.                 modGUI.ApriTabella;
  1591.                     modGUI.ApriRigaTabella;
  1592.                         modGUI.IntestazioneTabella('ID Sede');
  1593.                         modGUI.ApriElementoTabella;
  1594.                             modGUI.ElementoTabella(sede.idSede);
  1595.                         modGUI.ChiudiElementoTabella;
  1596.                     modGUI.ChiudiRigaTabella;
  1597.                     modGUI.ApriRigaTabella;
  1598.                         modGUI.IntestazioneTabella('Indirizzo');
  1599.                         modGUI.ApriElementoTabella;
  1600.                             modGUI.ElementoTabella(sede.indirizzo);
  1601.                         modGUI.ChiudiElementoTabella;
  1602.                     modGUI.ChiudiRigaTabella;
  1603.                     modGUI.ApriRigaTabella;
  1604.                         modGUI.IntestazioneTabella('Telefono');
  1605.                         modGUI.ApriElementoTabella;
  1606.                             modGUI.ElementoTabella(sede.telefono);
  1607.                         modGUI.ChiudiElementoTabella;
  1608.                     modGUI.ChiudiRigaTabella;
  1609.                     modGUI.ApriRigaTabella;
  1610.                         modGUI.IntestazioneTabella('Coordinate');
  1611.                         modGUI.ApriElementoTabella;
  1612.                             modGUI.ElementoTabella(sede.coordinate);
  1613.                         modGUI.ChiudiElementoTabella;
  1614.                     modGUI.ChiudiRigaTabella;
  1615.                     modGUI.ApriRigaTabella;
  1616.                         modGUI.IntestazioneTabella('Dirigente');
  1617.                         modGUI.ApriElementoTabella;
  1618.                             modGUI.Collegamento(nome_dirigente || ' ' || cognome_dirigente, 'visualizzaDipendente?id_sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || sede.idDipendente);
  1619.                         modGUI.ChiudiElementoTabella;
  1620.                     modGUI.ChiudiRigaTabella;
  1621.                     modGUI.ApriRigaTabella;
  1622.                     IF (ruolo <> 'O' AND ruolo <> 'C') THEN
  1623.                         modGUI.IntestazioneTabella('Dettagli');
  1624.                         modGUI.ApriElementoTabella;
  1625.                             modGUI.InserisciPenna(groupname || 'modificaSede', id_sessione, nome, ruolo, sede.idSede);
  1626.                         modGUi.ChiudiElementoTabella;
  1627.                     END IF;
  1628.                     modGUI.chiudiRigaTabella;
  1629.                 modGUI.ChiudiTabella;
  1630.  
  1631.                 -- Tabella delle autorimesse collegate
  1632.                 modGUI.apriIntestazione(3);
  1633.                     modGUI.inserisciTesto('Autorimesse');
  1634.                 modGUI.chiudiIntestazione(3);
  1635.  
  1636.                 modGUI.apriTabella;
  1637.                     modGUI.ApriRigaTabella;
  1638.                         modGUI.intestazioneTabella('ID Autorimessa');
  1639.                         modGUI.intestazioneTabella('Indirizzo');
  1640.                         modGUI.intestazioneTabella('Telefono');
  1641.                         modGUI.intestazioneTabella('Coordinate');
  1642.                         modGUI.intestazioneTabella('Dettaglio');
  1643.                     FOR autorimessa IN (SELECT * FROM Autorimesse WHERE Autorimesse.idSede = sede.idSede)
  1644.                     LOOP
  1645.                         modGUI.ApriRigaTabella;
  1646.                             modGUI.ApriElementoTabella;
  1647.                                 modGUI.ElementoTabella(autorimessa.idAutorimessa);
  1648.                             modGUI.ChiudiElementoTabella;
  1649.                             modGUI.ApriElementoTabella;
  1650.                                 modGUI.ElementoTabella(autorimessa.indirizzo);
  1651.                             modGUI.ChiudiElementoTabella;
  1652.                             modGUI.ApriElementoTabella;
  1653.                                 modGUI.ElementoTabella(autorimessa.telefono);
  1654.                             modGUI.ChiudiElementoTabella;
  1655.                             modGUI.ApriElementoTabella;
  1656.                                 modGUI.ElementoTabella(autorimessa.coordinate);
  1657.                             modGUI.ChiudiElementoTabella;
  1658.                             modGUI.ApriElementoTabella;
  1659.                                 modGUI.inserisciLente(groupname || 'visualizzaAutorimessa', id_sessione, nome, ruolo, autorimessa.idAutorimessa);
  1660.                             modGUI.ChiudiElementoTabella;
  1661.                         modGUI.ChiudiRigaTabella;
  1662.                     END LOOP;
  1663.                 modGUI.chiudiTabella;
  1664.  
  1665.             END IF;
  1666.         modGUI.ChiudiPagina;
  1667.     END visualizzaSede;
  1668.  
  1669.     PROCEDURE ricercaAuto(id_Sessione int, nome VARCHAR2, ruolo VARCHAR2) IS
  1670.     BEGIN
  1671.         modGUI.apriPagina('HoC | Ricerca auto', id_Sessione, nome, ruolo);
  1672.             modGUI.apriIntestazione(2);
  1673.                 modGUI.inserisciTesto('RICERCA AUTO');
  1674.             modGUI.chiudiIntestazione(2);
  1675.             modGUI.apriForm('resRicercaAuto');
  1676.                 modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  1677.                 modGUI.inserisciInputHidden('nome', nome);
  1678.                 modGUI.inserisciInputHidden('ruolo', ruolo);
  1679.                 modGUI.apriSelect('var_idCliente', 'CLIENTE', TRUE);
  1680.                 FOR cur IN (
  1681.                     SELECT Clienti.idCliente CIDC, Persone.Nome PN, Persone.Cognome PC
  1682.                     FROM Clienti, Persone
  1683.                     WHERE Persone.idPersona = Clienti.idPersona
  1684.                 ) LOOP
  1685.                     modGUI.inserisciOpzioneSelect(cur.CIDC, cur.CIDC || ' ' || cur.PN || ' ' || cur.PC);
  1686.                 END LOOP;
  1687.                 modGUI.chiudiSelect;
  1688.                 modGUI.inserisciBottoneReset;
  1689.                 modGUI.inserisciBottoneForm(testo=>'RICERCA AUTO');
  1690.             modGUI.chiudiForm;
  1691.         modGUI.chiudiPagina;
  1692.     END ricercaAuto;
  1693.    
  1694.     PROCEDURE resRicercaAuto(id_Sessione int, nome VARCHAR2, ruolo VARCHAR2, var_idCliente int) IS
  1695.     var_check1 BOOLEAN := FALSE;
  1696.     var_check2 BOOLEAN := FALSE;
  1697.     BEGIN
  1698.         modGUI.apriPagina('HoC | Ricerca auto', id_Sessione, nome, ruolo);
  1699.             modGUI.apriIntestazione(2);
  1700.                 modGUI.inserisciTesto('RICERCA AUTO');
  1701.             modGUI.chiudiIntestazione(2);
  1702.             modGUI.apriIntestazione(3);
  1703.                 modGUI.inserisciTesto('PARCHEGGIO/I EFFETTUATO/I CON TICKET');
  1704.             modGUI.chiudiIntestazione(3);
  1705.             modGUI.apriTabella;
  1706.                 modGUI.apriRigaTabella;
  1707.                     modGUI.intestazioneTabella('TARGA');
  1708.                     modGUI.intestazioneTabella('AUTO');
  1709.                     modGUI.intestazioneTabella('SEDE');
  1710.                     modGUI.intestazioneTabella('AUTORIMESSA');
  1711.                     modGUI.intestazioneTabella('AREA');
  1712.                     modGUI.intestazioneTabella('BOX');
  1713.                 modGUI.chiudiRigaTabella;
  1714.                 FOR curr_or IN (
  1715.                     SELECT DISTINCT Veicoli.Targa VT, Veicoli.Produttore VP, Veicoli.Modello VM, AR.Indirizzo ARI, S.Indirizzo SI, A.idArea AIA, B.idBox BIB
  1716.                     FROM Veicoli
  1717.                         join VeicoliClienti VC ON VC.idCliente = var_idCliente
  1718.                         join EffettuaIngressiOrari EIO ON EIO.idVeicolo = Veicoli.idVeicolo
  1719.                         join IngressiOrari IO ON IO.idIngressoOrario = EIO.idIngressoOrario
  1720.                         join Box B ON B.idBox = IO.idBox
  1721.                         join Aree A ON A.idArea = B.idArea
  1722.                         join Autorimesse AR ON AR.idAutorimessa = A.idAutorimessa
  1723.                         join Sedi S ON S.idSede = AR.idSede
  1724.                     WHERE Veicoli.idVeicolo = VC.idVeicolo AND
  1725.                         IO.OraEntrata IS NOT NULL AND
  1726.                         IO.OraUscita IS NULL
  1727.                 ) LOOP
  1728.                     var_check1 := TRUE;
  1729.                     modGUI.apriRigaTabella;
  1730.                         modGUI.apriElementoTabella;
  1731.                             modGUI.elementoTabella(curr_or.VT);
  1732.                         modGUI.chiudiElementoTabella;
  1733.                         modGUI.apriElementoTabella;
  1734.                             modGUI.elementoTabella(curr_or.VP || ' ' || curr_or.VM);
  1735.                         modGUI.chiudiElementoTabella;
  1736.                         modGUI.apriElementoTabella;
  1737.                             modGUI.elementoTabella(curr_or.SI);
  1738.                         modGUI.chiudiElementoTabella;
  1739.                         modGUI.apriElementoTabella;
  1740.                             modGUI.elementoTabella(curr_or.ARI);
  1741.                         modGUI.chiudiElementoTabella;
  1742.                         modGUI.apriElementoTabella;
  1743.                             modGUI.elementoTabella(curr_or.AIA);
  1744.                         modGUI.chiudiElementoTabella;
  1745.                         modGUI.apriElementoTabella;
  1746.                             modGUI.elementoTabella(curr_or.BIB);
  1747.                         modGUI.chiudiElementoTabella;
  1748.                     modGUI.chiudiRigaTabella;
  1749.                 END LOOP;
  1750.             modGUI.chiudiTabella;
  1751.             IF(var_check1 = FALSE) THEN
  1752.                 modGUI.apriDiv(centrato=>TRUE);
  1753.                     modGUI.inserisciTesto('NON CI SONO AUTO ANCORA PARCHEGGIATE');
  1754.                 modGUI.chiudiDiv;
  1755.                 modGUI.aCapo;
  1756.                 modGUI.aCapo;
  1757.                 modGUI.aCapo;
  1758.                 modGUI.aCapo;
  1759.             END IF;
  1760.             modGUI.apriIntestazione(3);
  1761.                 modGUI.inserisciTesto('PARCHEGGIO/I EFFETTUATO/I CON ABBONAMENTO/I');
  1762.             modGUI.chiudiIntestazione(3);
  1763.             modGUI.apriTabella;
  1764.                 modGUI.apriRigaTabella;
  1765.                     modGUI.intestazioneTabella('TARGA');
  1766.                     modGUI.intestazioneTabella('AUTO');
  1767.                     modGUI.intestazioneTabella('SEDE');
  1768.                     modGUI.intestazioneTabella('AUTORIMESSA');
  1769.                     modGUI.intestazioneTabella('AREA');
  1770.                     modGUI.intestazioneTabella('BOX');
  1771.                 modGUI.chiudiRigaTabella;
  1772.                 FOR curr_abb IN (
  1773.                     SELECT DISTINCT Veicoli.Targa VT, Veicoli.Produttore VP, Veicoli.Modello VM, AR.Indirizzo ARI, S.Indirizzo SI, A.idArea AIA, B.idBox BIB
  1774.                     FROM Veicoli
  1775.                         join VeicoliClienti VC ON VC.idCliente = var_idCliente
  1776.                         join EffettuaIngressiAbbonamenti EIA ON EIA.idVeicolo = Veicoli.idVeicolo
  1777.                         join IngressiAbbonamenti IA ON IA.idIngressoAbbonamento = EIA.idIngressoAbbonamento
  1778.                         join Box B ON B.idBox = IA.idBox
  1779.                         join Aree A ON A.idArea = B.idArea
  1780.                         join Autorimesse AR ON AR.idAutorimessa = A.idAutorimessa
  1781.                         join Sedi S ON S.idSede = AR.idSede
  1782.                     WHERE Veicoli.idVeicolo = VC.idVeicolo AND
  1783.                         IA.OraEntrata IS NOT NULL AND
  1784.                         IA.OraUscita IS NULL
  1785.                 ) LOOP
  1786.                     modGUI.apriRigaTabella;
  1787.                         modGUI.apriElementoTabella;
  1788.                             modGUI.elementoTabella(curr_abb.VT);
  1789.                         modGUI.chiudiElementoTabella;
  1790.                         modGUI.apriElementoTabella;
  1791.                             modGUI.elementoTabella(curr_abb.VP || ' ' || curr_abb.VM);
  1792.                         modGUI.chiudiElementoTabella;
  1793.                         modGUI.apriElementoTabella;
  1794.                             modGUI.elementoTabella(curr_abb.SI);
  1795.                         modGUI.chiudiElementoTabella;
  1796.                         modGUI.apriElementoTabella;
  1797.                             modGUI.elementoTabella(curr_abb.ARI);
  1798.                         modGUI.chiudiElementoTabella;
  1799.                         modGUI.apriElementoTabella;
  1800.                             modGUI.elementoTabella(curr_abb.AIA);
  1801.                         modGUI.chiudiElementoTabella;
  1802.                         modGUI.apriElementoTabella;
  1803.                             modGUI.elementoTabella(curr_abb.BIB);
  1804.                         modGUI.chiudiElementoTabella;
  1805.                     modGUI.chiudiRigaTabella;
  1806.                 END LOOP;
  1807.             modGUI.chiudiTabella;
  1808.             IF(var_check2 = FALSE) THEN
  1809.                 modGUI.apriDiv(centrato=>TRUE);
  1810.                     modGUI.inserisciTesto('NON CI SONO AUTO ANCORA PARCHEGGIATE');
  1811.                 modGUI.chiudiDiv;
  1812.             END IF;
  1813.         modGUI.chiudiPagina;
  1814.     END resRicercaAuto;
  1815.                                                                
  1816.                                                                
  1817.                                                                
  1818.     PROCEDURE MaggiorPostiRiservati(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  1819. --suppongo che l'oprazione sia "con il maggior numero di posti liberi", visto che per ora
  1820. --non esistono box riservati
  1821.  
  1822. --CONTO QUANTI POSTI RISERVATI CI SONO PER OGNI AUTORIMESSA
  1823. CURSOR MioCursore IS SELECT autorimesse.indirizzo,COUNT(box.riservato) AS PostiRiservati
  1824. FROM autorimesse,aree,box
  1825. WHERE autorimesse.idautorimessa=aree.idautorimessa AND aree.idarea=box.idarea AND box.riservato='F'
  1826. GROUP BY autorimesse.indirizzo;
  1827.  
  1828. --VARIABILI
  1829. scorriCursore MioCursore%ROWTYPE;
  1830. nomeSede autorimesse.indirizzo%TYPE;
  1831. posti NUMBER:=0;
  1832.  
  1833.    
  1834.   BEGIN  
  1835.  
  1836.     OPEN MioCursore;
  1837.     LOOP
  1838.     FETCH MioCursore INTO scorriCursore;
  1839.     --SCORRO E TROVO AUTORIMESSA CON MAGGIOR POSTI RISERVATI
  1840.     IF(scorriCursore.postiriservati>posti) THEN
  1841.         posti:=scorriCursore.postiriservati;
  1842.         nomeSede:=scorriCursore.indirizzo;
  1843.     END IF;
  1844.     EXIT WHEN MioCursore%NOTFOUND;
  1845.    
  1846.     END LOOP;
  1847.     CLOSE MioCursore;
  1848.    
  1849. --STAMPO
  1850.  modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  1851.  
  1852.     modGUI.aCapo;
  1853.     modGUI.apriIntestazione(3);
  1854.     modGUI.inserisciTesto('AUTORIMESSA CON MAGGIOR NUMERO DI POSTI RISERVATI');
  1855.     modGUI.chiudiIntestazione(3);
  1856.     modGUI.apriDiv;
  1857.     modGUI.ApriTabella;
  1858.  
  1859.     modGUI.ApriRigaTabella;
  1860.     modGUI.intestazioneTabella('NomeSede');
  1861.     modGUI.intestazioneTabella('NumPostiRiservati');
  1862.     modGUI.ChiudiRigaTabella;
  1863.    
  1864.         modGUI.ApriRigaTabella;
  1865.        
  1866.     modGUI.ApriElementoTabella;
  1867.     modGUI.ElementoTabella(nomeSede);
  1868.     modGUI.ChiudiElementoTabella;
  1869.  
  1870.     modGUI.ApriElementoTabella;
  1871.     modGUI.ElementoTabella(posti);
  1872.     modGUI.ChiudiElementoTabella;
  1873.  
  1874.  
  1875.     modGUI.ChiudiRigaTabella;
  1876.    
  1877.    
  1878.  
  1879.     modGUI.ChiudiTabella;
  1880.     modGUI.chiudiDiv;
  1881.  
  1882.     modGUI.chiudiPagina;
  1883.  
  1884.  
  1885.     END MaggiorPostiRiservati;
  1886.                                                                
  1887.                                                                
  1888.    
  1889.                                                                
  1890.     PROCEDURE AlimentazioneVeicolo(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) AS
  1891.  
  1892.     --variabile che conterra l'autorimessa scelta per la visualizzazione
  1893.     codiceAutorimessa autorimesse.idautorimessa%TYPE:=0;
  1894.  
  1895.  
  1896. BEGIN
  1897.  modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  1898.  
  1899.     modGUI.aCapo;
  1900.     modGUI.apriIntestazione(3);
  1901.     modGUI.inserisciTesto('VISUALIZZAZIONE ALIMENTAZIONE VEICOLO PIU PRESENTE');
  1902.     modGUI.chiudiIntestazione(3);
  1903.    
  1904.    
  1905.     modGui.apriForm('AlimentazioneVeicolo2');
  1906.     modGui.inserisciInputHidden('id_Sessione',id_sessione);
  1907.     modGui.inserisciInputHidden('nome',nome);
  1908.     modGui.inserisciInputHidden('ruolo',ruolo);
  1909.    
  1910.    
  1911.     modgui.apriSelect('autorimessaScelta', 'Scegli autorimessa di riferimento');
  1912.     --estraggo le autorimesse e le inserisco nella select
  1913.     FOR scorriCursore IN (SELECT autorimesse.idautorimessa FROM autorimesse)
  1914.     LOOP
  1915.             codiceAutorimessa:=scorriCursore.idautorimessa;
  1916.                 modgui.inserisciOpzioneSelect(TO_CHAR(codiceAutorimessa), TO_CHAR(codiceAutorimessa),TRUE);
  1917.     END LOOP;
  1918.     --inserisco la possibilita di cercare il veicolo piu presente in tutte le autorimesse
  1919.     modgui.inserisciOpzioneSelect('Tutte','Tutte',TRUE);
  1920.     modgui.chiudiSelect;
  1921.    
  1922.     modGUI.apriDiv;
  1923.     modGui.inserisciBottoneForm('SUBMIT');
  1924.     modGUI.chiudiDiv;
  1925.     modGui.chiudiForm();
  1926.  
  1927.     END AlimentazioneVeicolo;                                                              
  1928.                        
  1929.                                                                
  1930.                                                                
  1931.      PROCEDURE AlimentazioneVeicolo2(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, autorimessaScelta VARCHAR2) AS
  1932.     --variabili usate per controllare i veicoli acceduti in ingressi orari
  1933.    IdveicoloMaxIO NUMBER;
  1934.    PresenzeIO NUMBER:=0;
  1935.    AlimentazioneIO VARCHAR2(10);
  1936.  
  1937.    --variabili usate per controllare i veicoli acceduti in ingressi abbonamenti
  1938.    IdveicoloMaxIA NUMBER;
  1939.    PresenzeIA NUMBER:=0;
  1940.    AlimentazioneIA VARCHAR2(10);
  1941.    
  1942.    ----variabili globali, conterranno il massimo dei valori ottenuti, quindi stampati
  1943.    IdveicoloMax NUMBER;
  1944.    PresenzeMax NUMBER;
  1945.    Alimentazione VARCHAR2(10);
  1946.    
  1947.    BEGIN
  1948.  
  1949.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  1950.     modGUI.aCapo;
  1951.     modGUI.apriIntestazione(3);
  1952.    
  1953.     IF(autorimessaScelta='Tutte')THEN
  1954.         modGUI.inserisciTesto('Visualizzazione alimentazione del veicolo piu presente in tutte le autorimesse ');
  1955.     ELSE
  1956.         modGUI.inserisciTesto('Visualizzazione alimentazione del veicolo piu presente in autorimessa: '||autorimessaScelta);
  1957.     END IF;
  1958.     modGUI.chiudiIntestazione(3);
  1959.    
  1960.      
  1961.       IF(autorimessaScelta='Tutte')THEN
  1962.           --ANALIZZO INGRESSI ORARI SU TUTTE LE AUTORIMESSE
  1963.           FOR scorriCursore IN (
  1964.           SELECT  COUNT(ingressiorari.idingressoorario)AS conta, veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1965.           FROM ingressiorari, veicoli, effettuaingressiorari
  1966.           WHERE ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario AND
  1967.                 effettuaingressiorari.idveicolo=veicoli.idveicolo
  1968.           GROUP BY veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1969.           ORDER BY veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1970.           )
  1971.          
  1972.            LOOP
  1973.          
  1974.           IF(scorriCursore.conta>PresenzeIO)THEN
  1975.             IdveicoloMaxIO:=scorriCursore.idveicolo;
  1976.             PresenzeIO:=scorriCursore.conta;
  1977.             AlimentazioneIO:=scorriCursore.alimentazione;
  1978.           END IF;
  1979.           END LOOP;
  1980.          
  1981.          
  1982.          
  1983.          
  1984.           --ANALIZZO INGRESSI ABBONAMENTI SU TUTTE LE AUTORIMESSE
  1985.           FOR scorriCursore IN (
  1986.             SELECT  COUNT(ingressiabbonamenti.idingressoabbonamento)AS conta, veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1987.             FROM ingressiabbonamenti, veicoli, effettuaingressiabbonamenti
  1988.             WHERE ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento AND
  1989.             effettuaingressiabbonamenti.idveicolo=veicoli.idveicolo
  1990.             GROUP BY veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1991.             ORDER BY veicoli.idveicolo, veicoli.ALIMENTAZIONE
  1992.           )
  1993.          
  1994.            LOOP
  1995.           --CALCOLO VALORI MASSIMI
  1996.           IF(scorriCursore.conta>PresenzeIA)THEN
  1997.             IdveicoloMaxIA:=scorriCursore.idveicolo;
  1998.             PresenzeIA:=scorriCursore.conta;
  1999.             AlimentazioneIA:=scorriCursore.alimentazione;
  2000.           END IF;
  2001.           END LOOP;
  2002.          
  2003.  
  2004.       ELSE ----CASO IN CUI VOGLIO SINGOLA AUTORIMESSA
  2005.      
  2006.      --ANALIZZO INGRESSI ORARI SU SINGOLA AUTORIMESSA
  2007.         FOR scorriCursore IN (
  2008.           SELECT  COUNT(ingressiorari.idingressoorario)AS conta, veicoli.idveicolo, veicoli.ALIMENTAZIONE
  2009.           FROM ingressiorari, veicoli, effettuaingressiorari,box,aree,autorimesse
  2010.           WHERE ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario AND
  2011.                effettuaingressiorari.idveicolo=veicoli.idveicolo AND
  2012.                ingressiorari.IDBOX=box.idbox AND
  2013.                box.idarea=aree.idarea AND
  2014.                aree.idautorimessa=autorimesse.idautorimessa AND
  2015.                autorimesse.idautorimessa=TO_NUMBER(autorimessaScelta)
  2016.          GROUP BY veicoli.idveicolo,veicoli.ALIMENTAZIONE
  2017.         )
  2018.          
  2019.            LOOP
  2020.           --DETERMINO VALORI MASSIMI
  2021.           IF(scorriCursore.conta>PresenzeIO)THEN
  2022.             IdveicoloMaxIO:=scorriCursore.idveicolo;
  2023.             PresenzeIO:=scorriCursore.conta;
  2024.             AlimentazioneIO:=scorriCursore.alimentazione;
  2025.           END IF;
  2026.           END LOOP;
  2027.          
  2028.          
  2029.          
  2030.           --ANALIZZO INGRESSI ABBONAMENTI SU SINGOLA AUTORIMESSA
  2031.           FOR scorriCursore IN (
  2032.             SELECT  COUNT(ingressiabbonamenti.idingressoabbonamento)AS conta, veicoli.idveicolo, veicoli.ALIMENTAZIONE
  2033.             FROM ingressiabbonamenti, veicoli, effettuaingressiabbonamenti, box,aree,autorimesse
  2034.             WHERE   ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento AND
  2035.                     effettuaingressiabbonamenti.idveicolo=veicoli.idveicolo AND
  2036.                     ingressiabbonamenti.IDBOX=box.idbox AND
  2037.                     box.idarea=aree.idarea AND
  2038.                     aree.idautorimessa=autorimesse.idautorimessa AND
  2039.                     autorimesse.idautorimessa=TO_NUMBER(autorimessaScelta)
  2040.             GROUP BY veicoli.idveicolo,veicoli.ALIMENTAZIONE
  2041.           )
  2042.          
  2043.            LOOP
  2044.           --DETERMINO MASSIMI
  2045.           IF(scorriCursore.conta>PresenzeIA)THEN
  2046.             IdveicoloMaxIA:=scorriCursore.idveicolo;
  2047.             PresenzeIA:=scorriCursore.conta;
  2048.             AlimentazioneIA:=scorriCursore.alimentazione;
  2049.           END IF;
  2050.           END LOOP;
  2051.  
  2052.  
  2053.       END IF; --DISCRIMINANTE AUTORIMESSE SCELTE
  2054.      
  2055.       --CONFRONTO VALORI FINALI E CALCOLO MASSIMO
  2056.         IF(PresenzeIA>PresenzeIO)THEN
  2057.             PresenzeMax:=PresenzeIA;
  2058.             IdveicoloMax:=IdveicoloMaxIA;
  2059.             Alimentazione:=AlimentazioneIA;
  2060.         ELSE
  2061.             PresenzeMax:=PresenzeIO;
  2062.             IdveicoloMax:=IdveicoloMaxIO;
  2063.             Alimentazione:=AlimentazioneIO;
  2064.         END IF;
  2065.  
  2066.     --STAMPO VALORI CALCOLATI
  2067.     modGUI.apriDiv;
  2068.     modGUI.ApriTabella;
  2069.  
  2070.     modGUI.ApriRigaTabella;
  2071.     modGUI.intestazioneTabella('Identificativo veicolo');
  2072.     modGUI.intestazioneTabella('Alimentazione');
  2073.     modGUI.intestazioneTabella('Presenze');
  2074.     modGUI.ChiudiRigaTabella;
  2075.    
  2076.     modGUI.ApriRigaTabella;
  2077.    
  2078.     modGUI.ApriElementoTabella;
  2079.     modGUI.ElementoTabella(IdveicoloMax);
  2080.     modGUI.ChiudiElementoTabella;
  2081.     modGUI.ApriElementoTabella;
  2082.     modGUI.ElementoTabella(Alimentazione);
  2083.     modGUI.ChiudiElementoTabella;
  2084.     modGUI.ApriElementoTabella;
  2085.     modGUI.ElementoTabella(PresenzeMax);
  2086.     modGUI.ChiudiElementoTabella;
  2087.       modGui.acapo;
  2088.     modGUI.ChiudiElementoTabella;
  2089.    
  2090.     modGUI.ChiudiRigaTabella;  
  2091.  
  2092.     modGUI.ChiudiTabella;
  2093.     modGUI.chiudiDiv;
  2094.  
  2095.     modGUI.chiudiPagina;
  2096.  
  2097.  
  2098.  
  2099.     END AlimentazioneVeicolo2;                                                          
  2100.                                                                
  2101.                                                                
  2102.                                                                
  2103.                                                                
  2104.     PROCEDURE PercentualePostiLiberi2(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, modalita VARCHAR2, areaScelta VARCHAR2) AS
  2105.      
  2106.      
  2107. --DICHIARO VARIABILI PER STAMPARE
  2108. fasciaOraria fasceorarie.nome%TYPE;
  2109. giorno fasceorarie.giorno%TYPE;
  2110. --DICHIARO VARIABILI PER CALCOLARE
  2111. postiRiservati NUMBER;
  2112. postiTotali NUMBER;
  2113. percentuale NUMBER;
  2114.  
  2115. BEGIN
  2116.     --CALCOLO POSTI TOTALI PER L'AREA SCELTA
  2117.     SELECT aree.postitotali INTO postiTotali FROM aree WHERE aree.idarea=areaScelta ;
  2118.  
  2119.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  2120.  
  2121.     modGUI.aCapo;
  2122.     modGUI.apriIntestazione(3);
  2123.     modGUI.inserisciTesto('Visualizzazione posti liberi per '||modalita||', riguardo area: '||areaScelta);
  2124.     modGUI.chiudiIntestazione(3);
  2125.    
  2126.     modGUI.apriDiv;
  2127.     modGUI.ApriTabella;
  2128.     modGUI.ApriRigaTabella;
  2129.    
  2130.    
  2131.     IF(modalita='fascia-oraria')THEN
  2132.       modGUI.intestazioneTabella('Fascia oraria');
  2133.     ELSE
  2134.       modGUI.intestazioneTabella('Giorno');
  2135.     END IF;
  2136.     modGUI.intestazioneTabella('Posti liberi');
  2137.     modGUI.ChiudiRigaTabella;
  2138.    
  2139.   --CASO IN CUI SCELTA VISUALIZZAZIONE PER FASCIA ORARIA
  2140.   IF(modalita='fascia-oraria')THEN
  2141.  
  2142.     --CONTO QUANTI POSTI OCCUPATI CI SONO PER OGNI FASCIA ORARIA
  2143.     FOR scorriCursoreFasceOrarie IN (
  2144.         SELECT DISTINCT fasceorarie.nome, COUNT(ingressiorari.idingressoorario)AS postiRiservati, aree.idarea
  2145.         FROM ingressiorari,box,aree,areefasceorarie,fasceorarie
  2146.         WHERE ingressiorari.idbox=box.idbox AND
  2147.           box.idarea=aree.idarea AND
  2148.           aree.idarea=areefasceorarie.idarea AND
  2149.           areefasceorarie.idfasciaoraria=fasceorarie.idfasciaoraria AND
  2150.           aree.idarea=areaScelta
  2151.           GROUP BY aree.idarea, fasceorarie.nome
  2152.           ORDER BY fasceorarie.nome,aree.idarea
  2153.     )
  2154.     LOOP
  2155.    
  2156.     modGUI.ApriRigaTabella;
  2157.                
  2158.         fasciaOraria:=scorriCursoreFasceOrarie.nome;
  2159.         modGUI.ApriElementoTabella;
  2160.         modGUI.ElementoTabella(fasciaOraria);
  2161.         modGUI.ChiudiElementoTabella;
  2162.  
  2163.         --DOPO AVER CONTATO I POSTI TOTALI PER L'AREA(SOPRA)
  2164.         --OTTENGO POSTI LIBERI
  2165.         postiRiservati:=scorriCursoreFasceOrarie.postiRiservati;
  2166.         --CALCOLO QUANTO SONO IN PERCENTUALE
  2167.         percentuale:=((postiTotali-postiRiservati)*100)/postiTotali;
  2168.         modGUI.ApriElementoTabella;
  2169.        
  2170.         IF(percentuale<0)THEN --CASO IN CUI NEL COMPLESSO, TRA MATTINA E SERA, NON CI SONO MAI POSTI LIBERI
  2171.             modGUI.ElementoTabella(0||'%');
  2172.         ELSE
  2173.             modGUI.ElementoTabella(TO_CHAR(percentuale,'fm90.00')||'%');
  2174.         END IF;
  2175.         modGUI.ChiudiElementoTabella;
  2176.        
  2177.         modGUI.ChiudiRigaTabella;
  2178.    
  2179.    
  2180.     END LOOP;
  2181.    
  2182.   ELSE --CASO IN CUI SCELTA VISUALIZZAZIONE PER GIORNO
  2183.     FOR scorriCursoreGiorni IN (
  2184.         SELECT DISTINCT aree.idarea, fasceorarie.giorno , COUNT(ingressiorari.idingressoorario) AS postiRiservati  
  2185.         FROM ingressiorari,box,aree,areefasceorarie,fasceorarie
  2186.         WHERE ingressiorari.idbox=box.idbox AND
  2187.           box.idarea=aree.idarea AND
  2188.           aree.idarea=areefasceorarie.idarea AND
  2189.           areefasceorarie.idfasciaoraria=fasceorarie.idfasciaoraria AND
  2190.           aree.idarea=areaScelta
  2191.           GROUP BY fasceorarie.giorno, aree.idarea
  2192.           ORDER BY fasceorarie.giorno,aree.idarea
  2193.    
  2194.     )
  2195.     LOOP
  2196.         modGUI.ApriRigaTabella;
  2197.        
  2198.        
  2199.         giorno:=scorriCursoreGiorni.giorno;
  2200.         modGUI.ApriElementoTabella;
  2201.         modGUI.ElementoTabella(giorno);
  2202.         modGUI.ChiudiElementoTabella;
  2203.  
  2204.         postiRiservati:=scorriCursoreGiorni.postiRiservati;
  2205.         percentuale:=((postiTotali-postiRiservati)*100)/postiTotali;
  2206.         modGUI.ApriElementoTabella;
  2207.         IF(percentuale<0)THEN
  2208.             modGUI.ElementoTabella(0||'%');
  2209.         ELSE
  2210.             modGUI.ElementoTabella(TO_CHAR(percentuale,'fm90.00')||'%');
  2211.         END IF;
  2212.         modGUI.ChiudiElementoTabella;
  2213.        
  2214.         modGUI.ChiudiRigaTabella;
  2215.    
  2216.     END LOOP;
  2217.     END IF;
  2218.    
  2219.  
  2220.     END PercentualePostiLiberi2;                                                          
  2221.                                                                
  2222.                                                                
  2223.                                                                
  2224.                                                                
  2225.      PROCEDURE PercentualiPostiLiberi (id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  2226.  
  2227.     --VARIABILE CONTENENTE AREA SCELTA
  2228.     codiceArea aree.idarea%TYPE;
  2229.  
  2230.  
  2231. BEGIN
  2232.  modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  2233.  
  2234.     modGUI.aCapo;
  2235.     modGUI.apriIntestazione(3);
  2236.     modGUI.inserisciTesto('VISUALIZZAZIONE POSTI LIBERI');
  2237.     modGUI.chiudiIntestazione(3);
  2238.    
  2239.    
  2240.     modGui.apriForm('PERCENTUALIPOSTILIBERI2');
  2241.     modGui.inserisciInputHidden('id_Sessione',id_sessione);
  2242.     modGui.inserisciInputHidden('nome',nome);
  2243.     modGui.inserisciInputHidden('ruolo',ruolo);
  2244.    
  2245.     --RADIO1
  2246.     modGUI.apriDiv;
  2247.     modGui.inserisciRadioButton('Per fascia oraria', 'modalita', 'fascia-oraria', TRUE);
  2248.     modGUI.chiudiDiv;
  2249.    
  2250.     modgui.acapo;
  2251.    
  2252.     --RADIO2
  2253.     modGUI.apriDiv;
  2254.     modGui.inserisciRadioButton('Per giorno', 'modalita', 'giorno');
  2255.     modGUI.chiudiDiv;
  2256.     modgui.acapo;
  2257.    
  2258.     --SELECT
  2259.     modgui.apriSelect('areaScelta', 'Scegli area riferimento');
  2260.     --ESTRAGGO AREE DA QUERY E LE METTO NELLA SELECT
  2261.     FOR scorriCursore IN(SELECT aree.idarea FROM aree)
  2262.     LOOP
  2263.             codiceArea:=scorriCursore.idarea;
  2264.             modgui.inserisciOpzioneSelect(TO_CHAR(codiceArea), TO_CHAR(codiceArea),TRUE);
  2265.     END LOOP;
  2266.  
  2267.     modgui.chiudiSelect;
  2268.    
  2269.     modGUI.apriDiv;
  2270.     modGui.inserisciBottoneForm('SUBMIT');
  2271.     modGUI.chiudiDiv;
  2272.     modGui.chiudiForm();
  2273.  
  2274.     END PercentualiPostiLiberi;                                                          
  2275.                                                                
  2276.                                                                
  2277.                                                                
  2278.     PROCEDURE MaxTipoVeicolo(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  2279.  
  2280.     --VARIABILI STAMPATE
  2281.     Lunghezza aree.lunghezzaMax%TYPE;
  2282.     Altezza aree.AltezzaMax%TYPE;
  2283.     Larghezza aree.LarghezzaMax%TYPE;
  2284.     Peso aree.PesoMax%TYPE;
  2285.     Area aree.idarea%TYPE;
  2286.     --VARIABILI PER CALCOLO
  2287.     media NUMBER:=0;
  2288.    
  2289.   BEGIN  
  2290.   --CALCOLO LA MEDIA DEI VALORI DI OGNI AREA
  2291.   FOR scorriCursore IN (
  2292.     SELECT (aree.lunghezzaMax+aree.larghezzaMax+aree.altezzaMax+aree.pesoMax)/4 AS media,
  2293.         aree.lunghezzaMax, aree.larghezzaMax ,aree.altezzaMax,aree.pesoMax, aree.idarea
  2294.     FROM aree
  2295.   )
  2296.   -- TROVO LA MAGGIORE
  2297.   LOOP
  2298.     IF(scorriCursore.media>media)THEN
  2299.         media:=scorriCursore.media;
  2300.         Area:=scorriCursore.idarea;
  2301.         Lunghezza:=scorriCursore.lunghezzaMax;
  2302.         Altezza:=scorriCursore.altezzaMax;
  2303.         Larghezza:=scorriCursore.larghezzaMax;
  2304.         Peso:=scorriCursore.pesoMax;
  2305.     END IF;
  2306.  
  2307.   END LOOP;
  2308.    
  2309. --STAMPO
  2310.  modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  2311.  
  2312.     modGUI.aCapo;
  2313.     modGUI.apriIntestazione(3);
  2314.     modGUI.inserisciTesto('IL MAGGIOR TIPO VEICOLO E OSPITATO DALLA SEGUENTE AREA:');
  2315.     modGUI.chiudiIntestazione(3);
  2316.     modGUI.apriDiv;
  2317.     modGUI.ApriTabella;
  2318.  
  2319.     modGUI.ApriRigaTabella;
  2320.     modGUI.intestazioneTabella('Area');
  2321.     modGUI.intestazioneTabella('lunghezzaMax');
  2322.     modGUI.intestazioneTabella('larghezzaMax');
  2323.     modGUI.intestazioneTabella('pesoMax');
  2324.     modGUI.intestazioneTabella('altezzaMax');
  2325.     modGUI.ChiudiRigaTabella;
  2326.    
  2327.         modGUI.ApriRigaTabella;
  2328.     modGUI.ApriElementoTabella;
  2329.     modGUI.ElementoTabella(Area);
  2330.     modGUI.ChiudiElementoTabella;
  2331.     modGUI.ApriElementoTabella;
  2332.     modGUI.ElementoTabella(Lunghezza);
  2333.     modGUI.ElementoTabella(' cm');
  2334.     modGUI.ChiudiElementoTabella;
  2335.     modGUI.ApriElementoTabella;
  2336.     modGUI.ElementoTabella(Altezza);
  2337.     modGUI.ElementoTabella(' cm');
  2338.     modGUI.ChiudiElementoTabella;
  2339.     modGUI.ApriElementoTabella;
  2340.     modGUI.ElementoTabella(Peso);
  2341.     modGUI.ElementoTabella('kg');
  2342.     modGUI.ChiudiElementoTabella;
  2343.     modGUI.ApriElementoTabella;
  2344.     modGUI.ElementoTabella(Larghezza);
  2345.     modGUI.ElementoTabella(' cm');
  2346.     modGUI.ChiudiElementoTabella;
  2347.     modGUI.ChiudiRigaTabella;
  2348.    
  2349.    
  2350.  
  2351.     modGUI.ChiudiTabella;
  2352.     modGUI.chiudiDiv;
  2353.  
  2354.     modGUI.chiudiPagina;
  2355.  
  2356.     END MaxTipoVeicolo;
  2357.    
  2358.    
  2359.                                                                
  2360.                                                                
  2361.  
  2362. END gruppo2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement