SHARE
TWEET

Untitled

a guest Dec 14th, 2019 96 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. create or replace package body Gruppo1 as
  2.   ------- INIZIO ALESSANDRO PUCCIA
  3.   TYPE array_int IS VARRAY(12) OF INTEGER;
  4.   TYPE nested_fasce IS TABLE OF INTEGER;
  5.   TYPE rec_prenot IS RECORD (
  6.       var_conPrenotazione INTEGER,
  7.       var_senzaPrenotazione INTEGER,
  8.       var_totale INTEGER,
  9.       var_percentuale NUMBER(5,2)
  10.   );
  11.  
  12.   ----- FINE ALESSANDRO PUCCIA ---------
  13.  
  14. ----- INIZIO FRANCESCO CONSONNI------
  15. /*
  16.  *  cronologiaMulte - FRANCESCO CONSONNI
  17.  *  La procedura permette di filtrare la cronologia delle multe
  18.  */
  19.  PROCEDURE CRONOLOGIAMULTE(id_sessione VARCHAR2,
  20.                             nome        VARCHAR2,
  21.                             ruolo       VARCHAR2)
  22. IS
  23.   minimportoquery NUMBER DEFAULT -1;
  24.   maximportoquery NUMBER DEFAULT -1;
  25. BEGIN
  26.     modGUI.apripagina('HoC | Cronologia Multe', id_sessione, nome, ruolo);
  27.  
  28.     modGUI.apriintestazione(2);
  29.  
  30.     modGUI.inseriscitesto('CRONOLOGIA MULTE');
  31.  
  32.     modGUI.chiudiintestazione(2);
  33.  
  34.     modGUI.apridiv;
  35.  
  36.     modGUI.apriform(gruppo1||'.cronologiaMulteDisplay');
  37.  
  38.     modGUI.inserisciinputhidden('id_sessione', id_sessione);
  39.  
  40.     modGUI.inserisciinputhidden('nome', nome);
  41.  
  42.     modGUI.inserisciinputhidden('ruolo', ruolo);
  43.  
  44.     modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
  45.  
  46.     modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
  47.  
  48. modGUI.inserisciradiobutton('VISUALIZZA LE MULTE PER L` AUTORIMESSA', 'filtrodati', 'auto', TRUE);
  49.  
  50. modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
  51.  
  52. modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
  53.  
  54. FOR autorimessequery IN (SELECT IDautorimessa,
  55.                                 INDIRIZZO
  56.                          FROM   AUTORIMESSE
  57.                          ORDER  BY IDautorimessa) LOOP
  58.     modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
  59.     autorimessequery.indirizzo, FALSE);
  60. END LOOP;
  61.  
  62. modGUI.chiudiselect;
  63.  
  64. modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
  65.  
  66. modGUI.apriselect('responsabile', 'Scegli un responsabile');
  67.  
  68. FOR responsabiliquery IN (SELECT PERSONE.cognome         AS var_cognome,
  69.                                  PERSONE.nome            AS var_nome,
  70.                                  DIPENDENTI.IDDIPENDENTE AS idresponsabile
  71.                           FROM   PERSONE
  72.                                  inner join DIPENDENTI
  73.                                          ON DIPENDENTI.IDPERSONA =
  74.                                             PERSONE.IDPERSONA
  75.                           WHERE  DIPENDENTI.TIPODIPENDENTE = 'R'
  76.                              AND DIPENDENTI.CANCELLATO = 'F') LOOP
  77. modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
  78. END LOOP;
  79.  
  80. modGUI.chiudiselect;
  81.  
  82. SELECT MIN(IMPORTO),
  83.        MAX(IMPORTO)
  84. INTO   minimportoquery, maximportoquery
  85. FROM   MULTE
  86. WHERE  MULTE.CANCELLATO = 'F';
  87.  
  88. modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
  89.  
  90. modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
  91.  
  92. modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
  93.  
  94. modGUI.inseriscitesto('FILTRA TRA I CLIENTI');
  95.  
  96. modGUI.inserisciinput('filtrocliente', 'NOME O COGNOME CLIENTE', 'text', FALSE);
  97.  
  98. --modGUI.inseriscitesto('Mostra Multe:');
  99.  
  100. modGUI.inserisciradiobutton('MOSTRA MULTE PAGATE E NON PAGATE', 'pagamento', 'TF', TRUE);
  101.  
  102. modGUI.inserisciradiobutton('MOSTRA SOLO MULTE PAGATE', 'pagamento', 'T', FALSE);
  103.  
  104. modGUI.inserisciradiobutton('MOSTRA SOLO MULTE NON PAGATE', 'pagamento', 'F', FALSE);
  105.  
  106. modGUI.INSERISCIBOTTONERESET('RESET');
  107.  
  108. modGUI.INSERISCIBOTTONEFORM('CERCA');
  109.  
  110. modGUI.chiudiform;
  111.  
  112. modGUI.chiudidiv;
  113.  
  114. modGUI.chiudipagina;
  115. END cronologiamulte;
  116.  
  117. /*
  118.  *  cronologiaMulteDisplay - FRANCESCO CONSONNI
  119.  *  La procedura mostra la cronologia delle multe filtrata con i parametri visti in precedenza
  120.  *
  121.  *  Parametri
  122.  *  @datada: data di inizio intervallo di ricerca
  123.  *  @dataa: data di fine intervallo di ricerca
  124.  *  @filtrodati: variabile che stabilisce se si filtrera' in base alle autorimesse o ai responsabili
  125.  *  @autorimessa: id della autorimessa del filtro
  126.  *  @responsabile: id del responsabile del filtro
  127.  *  @pagamento: filtro per determinare se mostrare multe pagate, non pagate o entrambe
  128.  *  @minImporto: importo delle multe minimo su cui filtrare
  129.  *  @maxImporto: importo delle multe massimo su cui filtrare
  130.  *  @filtrocliente: stringa su cui filtrare il nome del cliente con LIKE
  131.  */
  132.  PROCEDURE CRONOLOGIAMULTEDISPLAY(id_sessione   VARCHAR2,
  133.                                                    nome          VARCHAR2,
  134.                                                    ruolo         VARCHAR2,
  135.                                                    datada        VARCHAR2,
  136.                                                    dataa         VARCHAR2,
  137.                                                    filtrodati    VARCHAR2,
  138.                                                    autorimessa   INTEGER,
  139.                                                    responsabile  INTEGER,
  140.                                                    pagamento     VARCHAR2,
  141.                                                    minimporto    INTEGER,
  142.                                                    maximporto    INTEGER,
  143.                                                    filtrocliente VARCHAR2)
  144. IS
  145.   var_autorimessa  INTEGER DEFAULT NULL;
  146.   var_responsabile INTEGER DEFAULT NULL;
  147.   pagatotrue       INTEGER DEFAULT 0;
  148.   pagatofalse      INTEGER DEFAULT 0;
  149.   descautorimessa  VARCHAR2(100) DEFAULT NULL;
  150.   descresponsabile VARCHAR2(100) DEFAULT NULL;
  151.   var_datada       DATE;
  152.   var_dataa        DATE;
  153.   conteggiomulte   INTEGER DEFAULT 0;
  154. BEGIN
  155.     IF INSTR(PAGAMENTO, 'T') != 0 THEN
  156.       PAGATOTRUE := 1;
  157.     END IF;
  158.  
  159.     IF INSTR(PAGAMENTO, 'F') != 0 THEN
  160.       PAGATOFALSE := 1;
  161.     END IF;
  162.  
  163.     var_datada := TO_DATE(datada, 'yyyy-mm-dd');
  164.  
  165.     var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
  166.  
  167.     IF filtrodati = 'auto' THEN
  168.       var_autorimessa := autorimessa;
  169.  
  170.       IF var_autorimessa != 0 THEN
  171.         SELECT AUTORIMESSE.INDIRIZZO
  172.         INTO   descautorimessa
  173.         FROM   AUTORIMESSE
  174.         WHERE  AUTORIMESSE.IDautorimessa = var_autorimessa;
  175.       ELSE
  176.         descautorimessa := 'Tutte le autorimesse';
  177.       END IF;
  178.     ELSE
  179.       var_responsabile := responsabile;
  180.  
  181.       SELECT PERSONE.cognome
  182.              ||' '
  183.              ||PERSONE.nome
  184.       INTO   descresponsabile
  185.       FROM   PERSONE,
  186.              DIPENDENTI
  187.       WHERE  PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
  188.          AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
  189.     END IF;
  190.  
  191.     modGUI.apripagina('HoC | Cronologia Multe - Risultati Ricerca', id_sessione,nome, ruolo);
  192.  
  193.     SELECT COUNT(IDMULTA)
  194.     INTO   conteggiomulte
  195.     FROM   VISTACRONOLOGIAMULTEDISPLAY
  196.     WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
  197.        AND ( IDDIPENDENTE = var_responsabile
  198.               OR ( CASE
  199.                      WHEN var_autorimessa = 0 THEN 0
  200.                      ELSE 1
  201.                    END ) = 0
  202.               OR IDautorimessa = var_autorimessa )
  203.        AND ( ( PAGATOTRUE = 1
  204.                AND PAGATA IS NOT NULL )
  205.               OR ( PAGATOFALSE = 1
  206.                    AND PAGATA IS NULL ) )
  207.        AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
  208.        AND UPPER(nomeCLIENTE
  209.                  ||' '
  210.                  ||cognomeCLIENTE) LIKE UPPER('%'
  211.                                               ||filtrocliente
  212.                                               ||'%')
  213.        AND CANCELLATO = 'F';
  214.  
  215.     IF var_datada > var_dataa THEN
  216. modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`INFERIORE A QUELLA DI INIZIO INTERVALLO');
  217. ELSIF minimporto > maximporto THEN
  218. modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`INFERIORE A IMPORTO MASSIMO');
  219. ELSE
  220.   modGUI.apriintestazione(2);
  221.  
  222.   modGUI.inseriscitesto('CRONOLOGIA MULTE - RISULTATI RICERCA');
  223.  
  224.   modGUI.chiudiintestazione(2);
  225.  
  226.   modGUI.apridiv;
  227.  
  228.   modGUI.apritabella;
  229.  
  230.   modGUI.apririgatabella;
  231.  
  232.   modGUI.intestazionetabella('CRONOLOGIA DI');
  233.  
  234.   modGUI.aprielementotabella;
  235.  
  236.   modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
  237.  
  238.   modGUI.chiudielementotabella;
  239.  
  240.   modGUI.chiudirigatabella;
  241.  
  242.   IF filtrodati = 'auto' THEN
  243.     modGUI.apririgatabella;
  244.  
  245.     modGUI.intestazionetabella('AUTORIMESSA DI');
  246.  
  247.     modGUI.aprielementotabella;
  248.  
  249.     modGUI.elementotabella(descautorimessa);
  250.  
  251.     modGUI.chiudielementotabella;
  252.  
  253.     modGUI.chiudirigatabella;
  254.   ELSE
  255.     modGUI.apririgatabella;
  256.  
  257.     modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
  258.  
  259.     modGUI.aprielementotabella;
  260.  
  261.     modGUI.elementotabella(descresponsabile);
  262.  
  263.     modGUI.chiudielementotabella;
  264.  
  265.     modGUI.chiudirigatabella;
  266.   END IF;
  267.  
  268.   modGUI.chiuditabella;
  269.  
  270.   modGUI.apritabella;
  271.  
  272.   modGUI.apririgatabella;
  273.  
  274.   modGUI.intestazionetabella('DATA EMISSIONE');
  275.  
  276.   modGUI.intestazionetabella('DATA PAGAMENTO');
  277.  
  278.   modGUI.intestazionetabella('IMPORTO');
  279.  
  280.   modGUI.intestazionetabella('CAUSA');
  281.  
  282.   modGUI.intestazionetabella('CLIENTE MULTATO');
  283.  
  284.   modGUI.intestazionetabella('VISUALIZZA DETTAGLI');
  285.  
  286.   modGUI.chiudirigatabella;
  287.  
  288.   IF CONTEGGIOMULTE = 0 THEN
  289.     modGUI.chiuditabella();
  290.  
  291.     modGUI.apridiv(TRUE);
  292.  
  293.     modGUI.inseriscitesto('NESSUNA MULTA TROVATA');
  294.  
  295.     modGUI.chiudidiv;
  296.   ELSE
  297.     FOR righemulte IN (SELECT *
  298.                        FROM   VISTACRONOLOGIAMULTEDISPLAY
  299.                        WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN
  300.                               var_datada AND var_dataa
  301.                           AND ( IDDIPENDENTE = var_responsabile
  302.                                  OR ( CASE
  303.                                         WHEN var_autorimessa = 0 THEN 0
  304.                                         ELSE 1
  305.                                       END ) = 0
  306.                                  OR IDautorimessa = var_autorimessa )
  307.                           AND ( ( PAGATOTRUE = 1
  308.                                   AND PAGATA IS NOT NULL )
  309.                                  OR ( PAGATOFALSE = 1
  310.                                       AND PAGATA IS NULL ) )
  311.                           AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
  312.                           AND UPPER(nomeCLIENTE
  313.                                     ||' '
  314.                                     ||cognomeCLIENTE) LIKE UPPER('%'
  315.                                                                  ||filtrocliente
  316.                                                                  ||'%')
  317.                           AND CANCELLATO = 'F'
  318.                        ORDER  BY dataaSSEGNAZIONE DESC) LOOP
  319.         modGUI.apririgatabella;
  320.  
  321.         modGUI.aprielementotabella;
  322.  
  323.         modGUI.elementotabella(TO_CHAR(RIGHEMULTE.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
  324.  
  325.         modGUI.chiudielementotabella;
  326.  
  327.         modGUI.aprielementotabella;
  328.  
  329.         modGUI.elementotabella(NVL(TO_CHAR(RIGHEMULTE.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
  330.  
  331.         modGUI.chiudielementotabella;
  332.  
  333.         modGUI.aprielementotabella;
  334.  
  335.         modGUI.elementotabella('€ '||TO_CHAR(RIGHEMULTE.importo, '9990D99'));
  336.  
  337.         modGUI.chiudielementotabella;
  338.  
  339.         modGUI.aprielementotabella;
  340.  
  341.         modGUI.elementotabella(RIGHEMULTE.causa);
  342.  
  343.         modGUI.chiudielementotabella;
  344.  
  345.         modGUI.aprielementotabella;
  346.  
  347.         modGUI.elementotabella(RIGHEMULTE.nomecliente||' '||RIGHEMULTE.cognomecliente);
  348.  
  349.         modGUI.chiudielementotabella;
  350.  
  351.         modGUI.aprielementotabella;
  352.  
  353.         modGUI.inseriscilente(gruppo1||'.dettagliomulte', id_sessione, nome, ruolo,
  354.         RIGHEMULTE.idmulta);
  355.  
  356.         modGUI.chiudielementotabella;
  357.  
  358.         modGUI.chiudirigatabella;
  359.     END LOOP;
  360.  
  361.     modGUI.chiuditabella;
  362.   END IF;
  363. END IF;
  364.  
  365. modGUI.apriintestazione(3);
  366.  
  367. modGUI.inseriscitesto('ALTRE OPERAZIONI');
  368.  
  369. modGUI.chiudiintestazione(3);
  370.  
  371. modGUI.apridiv(TRUE);
  372.  
  373. modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  374.  
  375. modGUI.chiudidiv;
  376.  
  377. modGUI.chiudidiv;
  378.  
  379. modGUI.chiudipagina;
  380. END cronologiamultedisplay;
  381.  
  382.  /*
  383.  *  dettaglioCampiMulte - FRANCESCO CONSONNI
  384.  *  La procedura mostra banalmente i campi delle multe
  385.  *
  386.  *  Parametri
  387.  *  @idriga: id della multa di cui mostrare i dati
  388.  */
  389.  PROCEDURE DETTAGLIOCAMPIMULTE(id_sessione VARCHAR2,
  390.                                                 nome        VARCHAR2,
  391.                                                 ruolo       VARCHAR2,
  392.                                                 idriga      INTEGER)
  393. IS
  394.   controlloabbonamento INTEGER DEFAULT 0;
  395.   dettagliomulte       multe%ROWTYPE;
  396.   esistenzamulta INTEGER DEFAULT 0;
  397. BEGIN
  398.     --apro la pagina
  399.     modGUI.apripagina('HoC | Dettaglio Campi Multa', id_sessione, nome, ruolo);
  400.  
  401.     modGUI.apriintestazione(2);
  402.  
  403.     modGUI.inseriscitesto('DETTAGLIO CAMPI MULTA');
  404.  
  405.     modGUI.chiudiintestazione(2);
  406.  
  407.     modGUI.apridiv;
  408.  
  409.     SELECT COUNT(MULTE.IDMULTA)
  410.     INTO   esistenzamulta
  411.     FROM   MULTE
  412.     WHERE  IDMULTA = idriga
  413.        AND MULTE.CANCELLATO = 'F';
  414.  
  415.     IF esistenzamulta = 0 THEN
  416.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  417.  
  418.         modGUI.apriintestazione(3);
  419.  
  420.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  421.  
  422.         modGUI.chiudiintestazione(3);
  423.  
  424.       modGUI.apridiv(TRUE);
  425.  
  426.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  427.  
  428.       modGUI.chiudidiv;
  429.      
  430.     ELSE
  431.       SELECT MULTE.*
  432.       INTO   dettagliomulte
  433.       FROM   MULTE
  434.       WHERE  IDMULTA = idriga;
  435.  
  436.       modGUI.apritabella;
  437.  
  438.       modGUI.apririgatabella;
  439.  
  440.       modGUI.intestazionetabella('IDENTIFICATIVO MULTA');
  441.  
  442.       modGUI.aprielementotabella;
  443.  
  444.       modGUI.elementotabella(dettagliomulte.idmulta);
  445.  
  446.       modGUI.chiudielementotabella;
  447.  
  448.       modGUI.chiudirigatabella;
  449.  
  450.       modGUI.apririgatabella;
  451.  
  452.       modGUI.intestazionetabella('DATA EMISSIONE');
  453.  
  454.       modGUI.aprielementotabella;
  455.  
  456.       modGUI.elementotabella(TO_CHAR(dettagliomulte.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
  457.  
  458.       modGUI.chiudielementotabella;
  459.  
  460.       modGUI.chiudirigatabella;
  461.  
  462.       modGUI.apririgatabella;
  463.  
  464.       modGUI.intestazionetabella('DATA PAGAMENTO');
  465.  
  466.       modGUI.aprielementotabella;
  467.  
  468.       modGUI.elementotabella(NVL(TO_CHAR(dettagliomulte.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
  469.  
  470.       modGUI.chiudielementotabella;
  471.  
  472.       modGUI.chiudirigatabella;
  473.  
  474.       modGUI.apririgatabella;
  475.  
  476.       modGUI.intestazionetabella('IMPORTO');
  477.  
  478.       modGUI.aprielementotabella;
  479.  
  480.       modGUI.elementotabella('€ '||TO_CHAR(dettagliomulte.importo, '9990D99'));
  481.  
  482.       modGUI.chiudielementotabella;
  483.  
  484.       modGUI.chiudirigatabella;
  485.  
  486.       modGUI.apririgatabella;
  487.  
  488.       modGUI.intestazionetabella('CAUSA');
  489.  
  490.       modGUI.aprielementotabella;
  491.  
  492.       modGUI.elementotabella(dettagliomulte.causa);
  493.  
  494.       modGUI.chiudielementotabella;
  495.  
  496.       modGUI.chiudirigatabella;
  497.  
  498.       modGUI.chiuditabella;
  499.  
  500.         modGUI.apriintestazione(3);
  501.  
  502.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  503.  
  504.         modGUI.chiudiintestazione(3);
  505.  
  506.       modGUI.apridiv(TRUE);
  507.  
  508.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.visualizzaMulte');
  509.  
  510.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
  511.  
  512.       modGUI.chiudidiv;
  513.     END IF;
  514.  
  515.     modGUI.chiudidiv;
  516.  
  517.     modGUI.chiudipagina;
  518. END dettagliocampimulte;
  519.  
  520.   /*
  521.  *  dettagliomulte - FRANCESCO CONSONNI
  522.  *  La procedura mostra i dettagli della multa e dettagli associati ad essa
  523.  *
  524.  *  Parametri
  525.  *  @idriga: id della multa di cui si mostreranno i dettagli
  526.  */
  527. PROCEDURE dettagliomulte(id_sessione VARCHAR2,
  528.                                            nome        VARCHAR2,
  529.                                            ruolo       VARCHAR2,
  530.                                            idriga      INTEGER)
  531. IS
  532.   controlloabbonamento         INTEGER DEFAULT 0;
  533.   tipoingresso                 VARCHAR(3);
  534.   dettagliomulte               multe%ROWTYPE;
  535.   dettagliopersone             persone%ROWTYPE;
  536.   dettaglioveicoli             veicoli%ROWTYPE;
  537.   dettagliobox                 box%ROWTYPE;
  538.   dettaglioautorimesse         VARCHAR(100);
  539.   dettagliosedi                VARCHAR(100);
  540.   codAutorimessa               INTEGER;
  541.   dettaglioingressiabbonamenti ingressiabbonamenti%ROWTYPE;
  542.   dettaglioingressiorari       ingressiorari%ROWTYPE;
  543.   dettaglioresponsabilenome    VARCHAR(100);
  544.   dettaglioresponsabilecognome VARCHAR(100);
  545.   esistenzamulta               INTEGER DEFAULT NULL;
  546.   dettaglioidcliente            INTEGER;
  547. BEGIN
  548.     --controlloabbonamenti per determinare se è un abbonamento o un orario
  549.     SELECT COUNT(IDMULTA)
  550.     INTO   controlloabbonamento
  551.     FROM   INGRESSIABBONAMENTI
  552.     WHERE  IDMULTA = idriga;
  553.  
  554.     modGUI.apripagina('HoC | Dettaglio Multa', id_sessione, nome, ruolo);
  555.  
  556.     modGUI.apriintestazione(2);
  557.  
  558.     modGUI.inseriscitesto('DETTAGLIO MULTA');
  559.  
  560.     modGUI.chiudiintestazione(2);
  561.  
  562.     modGUI.apridiv;
  563.  
  564.     SELECT COUNT(MULTE.IDMULTA)
  565.     INTO   esistenzamulta
  566.     FROM   MULTE
  567.     WHERE  IDMULTA = idriga
  568.        AND MULTE.CANCELLATO = 'F';
  569.  
  570.     IF esistenzamulta = 0 THEN
  571.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  572.  
  573.         modGUI.apriintestazione(3);
  574.  
  575.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  576.  
  577.         modGUI.chiudiintestazione(3);
  578.  
  579.       modGUI.apridiv(TRUE);
  580.         modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  581.       modGUI.chiudidiv;
  582.  
  583.     ELSE
  584.       SELECT MULTE.*
  585.       INTO   dettagliomulte
  586.       FROM   MULTE
  587.       WHERE  IDMULTA = idriga;
  588.  
  589.       modGUI.apritabella;
  590.  
  591.       modGUI.apririgatabella;
  592.  
  593.       modGUI.intestazionetabella('DATA EMISSIONE');
  594.  
  595.       modGUI.aprielementotabella;
  596.  
  597.       modGUI.elementotabella(TO_CHAR(dettagliomulte.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
  598.  
  599.       modGUI.chiudielementotabella;
  600.  
  601.       modGUI.chiudirigatabella;
  602.  
  603.       modGUI.apririgatabella;
  604.  
  605.       modGUI.intestazionetabella('DATA PAGAMENTO');
  606.  
  607.       modGUI.aprielementotabella;
  608.  
  609.       modGUI.elementotabella(NVL(TO_CHAR(dettagliomulte.pagata, 'DD-MON-YY HH24:MI:SS'), '--'));
  610.  
  611.       modGUI.chiudielementotabella;
  612.  
  613.       modGUI.chiudirigatabella;
  614.  
  615.       modGUI.apririgatabella;
  616.  
  617.       modGUI.intestazionetabella('IMPORTO');
  618.  
  619.       modGUI.aprielementotabella;
  620.  
  621.       modGUI.elementotabella('€'||TO_CHAR(dettagliomulte.importo, '9990D99'));
  622.  
  623.       modGUI.chiudielementotabella;
  624.  
  625.       modGUI.chiudirigatabella;
  626.  
  627.       modGUI.apririgatabella;
  628.  
  629.       modGUI.intestazionetabella('CAUSA');
  630.  
  631.       modGUI.aprielementotabella;
  632.  
  633.       modGUI.elementotabella(dettagliomulte.causa);
  634.  
  635.       modGUI.chiudielementotabella;
  636.  
  637.       modGUI.apririgatabella;
  638.  
  639.       modGUI.intestazionetabella('OPERAZIONI');
  640.  
  641.       modGUI.aprielementotabella;
  642.  
  643.       modGUI.inseriscilente(gruppo1||'.dettaglioCampiMulte', id_sessione, nome, ruolo,idriga);
  644.  
  645.       IF ruolo != 'C' THEN
  646.       modGUI.inseriscipenna(gruppo1||'.modificaCampiMulte', id_sessione, nome, ruolo, idriga);
  647.  
  648.         IF controlloabbonamento > 0 THEN
  649.           modGUI.inseriscicestino(gruppo1||'.rimuoviMulteConferma', id_sessione, nome,ruolo,idriga, '&'||'tipoingresso=A');
  650.         ELSE
  651.           modGUI.inseriscicestino(gruppo1||'.rimuoviMulteConferma', id_sessione, nome,ruolo,idriga, '&'||'tipoingresso=O');
  652.         END IF;
  653.       END IF;
  654.  
  655.       modGUI.chiudielementotabella;
  656.  
  657.       modGUI.chiudirigatabella;
  658.  
  659.       modGUI.chiuditabella;
  660.  
  661.       --dettagli cliente
  662.       modGUI.apriintestazione(2);
  663.  
  664.       modGUI.inseriscitesto('DETTAGLIO CLIENTE');
  665.  
  666.       modGUI.chiudiintestazione(2);
  667.  
  668.       --dettagli cliente + idcliente
  669.       SELECT PERSONE.*
  670.       INTO   dettagliopersone
  671.       FROM   MULTE
  672.              left outer join INGRESSIORARI
  673.                           ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
  674.              left outer join INGRESSIABBONAMENTI
  675.                           ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
  676.              left outer join EFFETTUAINGRESSIABBONAMENTI
  677.                           ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
  678.                              EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
  679.              left outer join EFFETTUAINGRESSIORARI
  680.                           ON INGRESSIORARI.IDINGRESSOORARIO =
  681.                              EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
  682.              join CLIENTI
  683.                ON EFFETTUAINGRESSIABBONAMENTI.IDCLIENTE = CLIENTI.IDCLIENTE
  684.                    OR EFFETTUAINGRESSIORARI.IDCLIENTE = CLIENTI.IDCLIENTE
  685.              join PERSONE
  686.                ON CLIENTI.IDPERSONA = PERSONE.IDPERSONA
  687.       WHERE  MULTE.IDMULTA = idriga;
  688.    
  689.     SELECT CLIENTI.IDCLIENTE
  690.       INTO   dettaglioidcliente
  691.       FROM   MULTE
  692.              left outer join INGRESSIORARI
  693.                           ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
  694.              left outer join INGRESSIABBONAMENTI
  695.                           ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
  696.              left outer join EFFETTUAINGRESSIABBONAMENTI
  697.                           ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
  698.                              EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
  699.              left outer join EFFETTUAINGRESSIORARI
  700.                           ON INGRESSIORARI.IDINGRESSOORARIO =
  701.                              EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
  702.              join CLIENTI
  703.                ON EFFETTUAINGRESSIABBONAMENTI.IDCLIENTE = CLIENTI.IDCLIENTE
  704.                    OR EFFETTUAINGRESSIORARI.IDCLIENTE = CLIENTI.IDCLIENTE
  705.       WHERE  MULTE.IDMULTA = idriga;
  706.    
  707.       --dettagli veicolo
  708.       SELECT VEICOLI.*
  709.       INTO   dettaglioveicoli
  710.       FROM   MULTE
  711.              left outer join INGRESSIORARI
  712.                           ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
  713.              left outer join INGRESSIABBONAMENTI
  714.                           ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
  715.              left outer join EFFETTUAINGRESSIABBONAMENTI
  716.                           ON INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO =
  717.                              EFFETTUAINGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO
  718.              left outer join EFFETTUAINGRESSIORARI
  719.                           ON INGRESSIORARI.IDINGRESSOORARIO =
  720.                              EFFETTUAINGRESSIORARI.IDINGRESSOORARIO
  721.              join VEICOLI
  722.                ON EFFETTUAINGRESSIABBONAMENTI.IDVEICOLO = VEICOLI.IDVEICOLO
  723.                    OR EFFETTUAINGRESSIORARI.IDVEICOLO = VEICOLI.IDVEICOLO
  724.       WHERE  MULTE.IDMULTA = idriga;
  725.  
  726.       modGUI.apritabella;
  727.  
  728.       modGUI.apririgatabella;
  729.  
  730.       modGUI.intestazionetabella('CODICE FISCALE');
  731.  
  732.       modGUI.aprielementotabella;
  733.  
  734.       modGUI.elementotabella(dettagliopersone.codicefiscale);
  735.  
  736.       modGUI.chiudielementotabella;
  737.  
  738.       modGUI.chiudirigatabella;
  739.  
  740.       modGUI.apririgatabella;
  741.  
  742.       modGUI.intestazionetabella('COGNOME');
  743.  
  744.       modGUI.aprielementotabella;
  745.  
  746.       modGUI.elementotabella(dettagliopersone.cognome);
  747.  
  748.       modGUI.chiudielementotabella;
  749.  
  750.       modGUI.chiudirigatabella;
  751.  
  752.       modGUI.apririgatabella;
  753.  
  754.       modGUI.intestazionetabella('NOME');
  755.  
  756.       modGUI.aprielementotabella;
  757.  
  758.       modGUI.elementotabella(dettagliopersone.nome);
  759.  
  760.       modGUI.chiudielementotabella;
  761.  
  762.       modGUI.chiudirigatabella;
  763.  
  764.       modGUI.apririgatabella;
  765.  
  766.       modGUI.intestazionetabella('OPERAZIONI');
  767.  
  768.       modGUI.aprielementotabella;
  769.  
  770.       modGUI.inseriscilente('gruppo5.moreInfoClient', id_sessione, nome, ruolo, dettaglioidcliente); --tutti
  771.  
  772.       --modGUI.inseriscipenna('##ModificaCampiCliente##', id_sessione, nome, ruolo, dettaglioidcliente); --tutti
  773.        
  774.       --  IF ruolo='C' THEN
  775.       --modGUI.inseriscicestino('##RimuoviCliente##', id_sessione, nome, ruolo, dettaglioidcliente); -- solo cliente
  776.       --  END IF;
  777.  
  778.       modGUI.chiudielementotabella;
  779.  
  780.       modGUI.chiudirigatabella;
  781.  
  782.       modGUI.chiuditabella;
  783.  
  784.       modGUI.apriintestazione(2);
  785.  
  786.       modGUI.inseriscitesto('DETTAGLIO VEICOLO');
  787.  
  788.       modGUI.chiudiintestazione(2);
  789.  
  790.       modGUI.apritabella;
  791.  
  792.       modGUI.apririgatabella;
  793.  
  794.       modGUI.intestazionetabella('TARGA');
  795.  
  796.       modGUI.aprielementotabella;
  797.  
  798.       modGUI.elementotabella(dettaglioveicoli.targa);
  799.  
  800.       modGUI.chiudielementotabella;
  801.  
  802.       modGUI.chiudirigatabella;
  803.  
  804.       modGUI.apririgatabella;
  805.  
  806.       modGUI.intestazionetabella('MODELLO');
  807.  
  808.       modGUI.aprielementotabella;
  809.  
  810.       modGUI.elementotabella(dettaglioveicoli.produttore||' '||dettaglioveicoli.modello);
  811.  
  812.       modGUI.chiudielementotabella;
  813.  
  814.       modGUI.chiudirigatabella;
  815.  
  816.       modGUI.apririgatabella;
  817.  
  818.       modGUI.intestazionetabella('COLORE');
  819.  
  820.       modGUI.aprielementotabella;
  821.  
  822.       modGUI.elementotabella(dettaglioveicoli.colore);
  823.  
  824.       modGUI.chiudielementotabella;
  825.  
  826.       modGUI.chiudirigatabella;
  827.  
  828.       modGUI.apririgatabella;
  829.  
  830.       modGUI.intestazionetabella('ALIMENTAZIONE');
  831.  
  832.       modGUI.aprielementotabella;
  833.  
  834.       IF( dettaglioveicoli.alimentazione = 'N' ) THEN
  835.         modGUI.elementotabella('Benzina o Diesel');
  836.       ELSE
  837.         modGUI.elementotabella(dettaglioveicoli.alimentazione);
  838.       END IF;
  839.  
  840.       modGUI.chiudielementotabella;
  841.  
  842.       modGUI.chiudirigatabella;
  843.  
  844.       modGUI.apririgatabella;
  845.  
  846.       modGUI.intestazionetabella('ANNOTAZIONI');
  847.  
  848.       modGUI.aprielementotabella;
  849.  
  850.       modGUI.elementotabella(NVL(dettaglioveicoli.annotazione, '--'));
  851.  
  852.       modGUI.chiudielementotabella;
  853.  
  854.       modGUI.chiudirigatabella;
  855.  
  856.       modGUI.apririgatabella;
  857.  
  858.       modGUI.intestazionetabella('OPERAZIONI');
  859.  
  860.       modGUI.aprielementotabella;
  861.  
  862.       modGUI.inseriscilente('gruppo5.moreInfoCar', id_sessione, nome, ruolo, dettaglioveicoli.idveicolo); --tutti
  863.  
  864.       --modGUI.inseriscipenna('##ModificaCampiVeicolo##', id_sessione, nome, ruolo, idriga); --tutti
  865.        
  866.         --IF ruolo='C' OR ruolo='O' THEN
  867.        
  868.       --modGUI.inseriscicestino('##RimuoviVeicolo##', id_sessione, nome, ruolo, idriga); --cliente operatore
  869.      
  870.         --END IF;
  871.  
  872.       modGUI.chiudielementotabella;
  873.  
  874.       modGUI.chiudirigatabella;
  875.  
  876.       modGUI.chiuditabella;
  877.  
  878.       --dettagli autorimessa
  879.       modGUI.apriintestazione(2);
  880.  
  881.       modGUI.inseriscitesto('DETTAGLIO AUTORIMESSA');
  882.  
  883.       modGUI.chiudiintestazione(2);
  884.  
  885.       --dettagli box e autorimesse
  886.       SELECT BOX.*
  887.       INTO   dettagliobox
  888.       FROM   MULTE
  889.              left outer join INGRESSIORARI
  890.                           ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
  891.              left outer join INGRESSIABBONAMENTI
  892.                           ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
  893.              inner join BOX
  894.                      ON INGRESSIABBONAMENTI.IDBOX = BOX.IDBOX
  895.                          OR INGRESSIORARI.IDBOX = BOX.IDBOX
  896.       WHERE  MULTE.IDMULTA = idriga;
  897.  
  898.       SELECT SEDI.INDIRIZZO,
  899.              AUTORIMESSE.INDIRIZZO,
  900.              PERSONE.cognome,
  901.              PERSONE.nome,
  902.              AUTORIMESSE.idAutorimessa
  903.       INTO   dettagliosedi, dettaglioautorimesse, dettaglioresponsabilecognome,
  904.              dettaglioresponsabilenome, codAutorimessa
  905.       FROM   MULTE
  906.              left outer join INGRESSIORARI
  907.                           ON MULTE.IDMULTA = INGRESSIORARI.IDMULTA
  908.              left outer join INGRESSIABBONAMENTI
  909.                           ON MULTE.IDMULTA = INGRESSIABBONAMENTI.IDMULTA
  910.              inner join BOX
  911.                      ON INGRESSIABBONAMENTI.IDBOX = BOX.IDBOX
  912.                          OR INGRESSIORARI.IDBOX = BOX.IDBOX
  913.              join AREE
  914.                ON AREE.IDAREA = BOX.IDAREA
  915.              join AUTORIMESSE
  916.                ON AUTORIMESSE.IDautorimessa = AREE.IDautorimessa
  917.              join SEDI
  918.                ON SEDI.IDSEDE = AUTORIMESSE.IDSEDE
  919.              join DIPENDENTI
  920.                ON DIPENDENTI.IDDIPENDENTE = SEDI.IDDIPENDENTE
  921.              join PERSONE
  922.                ON DIPENDENTI.IDPERSONA = PERSONE.IDPERSONA
  923.       WHERE  MULTE.IDMULTA = idriga;
  924.  
  925.       modGUI.apritabella;
  926.  
  927.       modGUI.apririgatabella;
  928.  
  929.       modGUI.intestazionetabella('INDIRIZZO SEDE');
  930.  
  931.       modGUI.aprielementotabella;
  932.  
  933.       modGUI.elementotabella(dettagliosedi);
  934.  
  935.       modGUI.chiudielementotabella;
  936.  
  937.       modGUI.chiudirigatabella;
  938.  
  939.       modGUI.apririgatabella;
  940.  
  941.       modGUI.intestazionetabella('INDIRIZZO AUTORIMESSA');
  942.  
  943.       modGUI.aprielementotabella;
  944.  
  945.       modGUI.elementotabella(dettaglioautorimesse);
  946.  
  947.       modGUI.chiudielementotabella;
  948.  
  949.       modGUI.chiudirigatabella;
  950.  
  951.       modGUI.apririgatabella;
  952.  
  953.       modGUI.intestazionetabella('RESPONSABILE SEDE');
  954.  
  955.       modGUI.aprielementotabella;
  956.  
  957.       modGUI.elementotabella(dettaglioresponsabilecognome||' '||dettaglioresponsabilenome);
  958.  
  959.       modGUI.chiudielementotabella;
  960.  
  961.       modGUI.chiudirigatabella;
  962.  
  963.       modGUI.apririgatabella;
  964.  
  965.       modGUI.intestazionetabella('NUMERO AREA');
  966.  
  967.       modGUI.aprielementotabella;
  968.  
  969.       modGUI.elementotabella(dettagliobox.idarea);
  970.  
  971.       modGUI.chiudielementotabella;
  972.  
  973.       modGUI.chiudirigatabella;
  974.  
  975.       modGUI.apririgatabella;
  976.  
  977.       modGUI.intestazionetabella('COORDINATA BOX (NUMERO BOX - COLONNA - PIANO');
  978.  
  979.       modGUI.aprielementotabella;
  980.  
  981.       modGUI.elementotabella(dettagliobox.numero||' - '||dettagliobox.numerocolonna||' - '||dettagliobox.piano);
  982.  
  983.       modGUI.chiudielementotabella;
  984.  
  985.       modGUI.chiudirigatabella;
  986.  
  987.       modGUI.apririgatabella;
  988.  
  989.       modGUI.intestazionetabella('OPERAZIONI');
  990.  
  991.       modGUI.aprielementotabella;
  992.  
  993.       modGUI.inseriscilente('gruppo2.visualizzaAutorimessa', id_sessione, nome, ruolo, codAutorimessa);
  994.  
  995.       --modGUI.inseriscipenna(gruppo1||'.modificaAutorimessa', id_sessione, nome, ruolo, codAutorimessa);
  996.  
  997.       modGUI.chiudielementotabella;
  998.  
  999.       modGUI.chiudirigatabella;
  1000.  
  1001.       modGUI.chiuditabella;
  1002.  
  1003.       --dettagli ingresso
  1004.       --devo controllare se è ingresso orario o abbonamento
  1005.       modGUI.apriintestazione(2);
  1006.  
  1007.       modGUI.inseriscitesto('DETTAGLIO INGRESSO');
  1008.  
  1009.       modGUI.chiudiintestazione(2);
  1010.  
  1011.       IF controlloabbonamento > 0 THEN
  1012.         SELECT INGRESSIABBONAMENTI.*
  1013.         INTO   dettaglioingressiabbonamenti
  1014.         FROM   INGRESSIABBONAMENTI
  1015.         WHERE  INGRESSIABBONAMENTI.IDMULTA = idriga;
  1016.  
  1017.         --tabella
  1018.         modGUI.apritabella;
  1019.  
  1020.         modGUI.apririgatabella;
  1021.  
  1022.         modGUI.intestazionetabella('TIPO INGRESSO');
  1023.  
  1024.         modGUI.aprielementotabella;
  1025.  
  1026.         modGUI.elementotabella('Abbonamento');
  1027.  
  1028.         modGUI.chiudielementotabella;
  1029.  
  1030.         modGUI.chiudirigatabella;
  1031.  
  1032.         modGUI.apririgatabella;
  1033.  
  1034.         modGUI.intestazionetabella('ORA ENTRATA');
  1035.  
  1036.         modGUI.aprielementotabella;
  1037.  
  1038.         modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiabbonamenti.oraentrata, 'DD-MON-YY HH24:MI:SS'), '--'));
  1039.  
  1040.         modGUI.chiudielementotabella;
  1041.  
  1042.         modGUI.chiudirigatabella;
  1043.  
  1044.         modGUI.apririgatabella;
  1045.  
  1046.         modGUI.intestazionetabella('ORA USCITA');
  1047.  
  1048.         modGUI.aprielementotabella;
  1049.  
  1050.         modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiabbonamenti.orauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
  1051.  
  1052.         modGUI.chiudielementotabella;
  1053.  
  1054.         modGUI.chiudirigatabella;
  1055.  
  1056.         modGUI.apririgatabella;
  1057.  
  1058.         modGUI.intestazionetabella('OPERAZIONI');
  1059.  
  1060.         modGUI.aprielementotabella;
  1061.            
  1062.             IF ruolo != 'C' THEN
  1063.            
  1064.         modGUI.inseriscilente('gruppo3.DettagliIngressoAbbonamento', id_sessione, nome, ruolo, dettaglioingressiabbonamenti.idingressoabbonamento); --no cliente
  1065.            
  1066.             END IF;
  1067.  
  1068.         modGUI.chiudielementotabella;
  1069.  
  1070.         modGUI.chiudirigatabella;
  1071.  
  1072.         modGUI.chiuditabella;
  1073.   ELSE
  1074.   SELECT INGRESSIORARI.*
  1075.   INTO   dettaglioingressiorari
  1076.   FROM   INGRESSIORARI
  1077.   WHERE  INGRESSIORARI.IDMULTA = idriga;
  1078.  
  1079.       --tabella
  1080.       modGUI.apritabella;
  1081.  
  1082.       modGUI.apririgatabella;
  1083.  
  1084.       modGUI.intestazionetabella('TIPO INGRESSO');
  1085.  
  1086.       modGUI.aprielementotabella;
  1087.  
  1088.       modGUI.elementotabella('Orario');
  1089.  
  1090.       modGUI.chiudielementotabella;
  1091.  
  1092.       modGUI.chiudirigatabella;
  1093.  
  1094.       modGUI.apririgatabella;
  1095.  
  1096.       modGUI.intestazionetabella('ORA ENTRATA PREVISTA');
  1097.  
  1098.       modGUI.aprielementotabella;
  1099.  
  1100.       modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.entrataprevista, 'DD-MON-YY HH24:MI:SS'), '--'));
  1101.  
  1102.       modGUI.chiudielementotabella;
  1103.  
  1104.       modGUI.chiudirigatabella;
  1105.  
  1106.       modGUI.apririgatabella;
  1107.  
  1108.       modGUI.intestazionetabella('ORA ENTRATA');
  1109.  
  1110.       modGUI.aprielementotabella;
  1111.  
  1112.       modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.oraentrata, 'DD-MON-YY HH24:MI:SS'), '--'));
  1113.  
  1114.       modGUI.chiudielementotabella;
  1115.  
  1116.       modGUI.chiudirigatabella;
  1117.  
  1118.       modGUI.apririgatabella;
  1119.  
  1120.       modGUI.intestazionetabella('ORA USCITA');
  1121.  
  1122.       modGUI.aprielementotabella;
  1123.  
  1124.       modGUI.elementotabella(NVL(TO_CHAR(dettaglioingressiorari.orauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
  1125.  
  1126.       modGUI.chiudielementotabella;
  1127.  
  1128.       modGUI.chiudirigatabella;
  1129.  
  1130.       modGUI.apririgatabella;
  1131.  
  1132.       modGUI.intestazionetabella('OPERAZIONI');
  1133.  
  1134.       modGUI.aprielementotabella;
  1135.      
  1136.         IF ruolo!='C' THEN
  1137.        
  1138.       modGUI.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, dettaglioINGRESSIORARI.IDIngressoorario); --non cliente
  1139.      
  1140.         END IF;
  1141.        
  1142.       modGUI.chiudielementotabella;
  1143.  
  1144.       modGUI.chiudirigatabella;
  1145.  
  1146.       modGUI.chiuditabella;
  1147.     END IF;
  1148.  
  1149.       modGUI.chiudidiv;
  1150.  
  1151.         modGUI.apriintestazione(3);
  1152.  
  1153.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1154.  
  1155.         modGUI.chiudiintestazione(3);
  1156.  
  1157.       modGUI.apridiv(TRUE);
  1158.  
  1159.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA', gruppo1||'.cronologiaMulte');
  1160.  
  1161.       modGUI.chiudidiv;
  1162. END IF;
  1163.  
  1164. modGUI.chiudipagina;
  1165. END dettagliomulte;
  1166.  
  1167.  
  1168.  /*
  1169.  *  inserisciCampiMulte - FRANCESCO CONSONNI
  1170.  *  La procedura permette di specificare i causa e importo di una multa da inserire nel sistema
  1171.  *
  1172.  *  Parametri
  1173.  *  @idriga: stringa opportunamente codificata che contiene id dell'ingresso a cui passare i parametri
  1174.  *      e se è un ingresso orario o abbonamento
  1175.  */
  1176.  PROCEDURE INSERISCICAMPIMULTE(id_sessione VARCHAR2,
  1177.                                 nome        VARCHAR2,
  1178.                                 ruolo       VARCHAR2,
  1179.                                 idriga      VARCHAR2)
  1180. IS
  1181.   dettagliomulte    multe%ROWTYPE;
  1182.   var_idriga        VARCHAR2(8);
  1183.   var_tipoingresso  VARCHAR2(1);
  1184.   esistenzaingresso INTEGER DEFAULT 0;
  1185. BEGIN
  1186.  
  1187.  
  1188.  
  1189.     modGUI.apripagina('HoC | Inserimento Campi Multa', id_sessione, nome, ruolo);
  1190.  
  1191.     modGUI.apriintestazione(2);
  1192.  
  1193.     modGUI.inseriscitesto('INSERIMENTO CAMPI MULTA');
  1194.  
  1195.     modGUI.chiudiintestazione(2);
  1196.  
  1197.     modGUI.apridiv;
  1198.  
  1199.     --rimuovo A e O da idriga per avere il vero id riga
  1200.     var_tipoingresso := SUBSTR(idriga, -1);
  1201.  
  1202.     VAR_idriga := TRIM(BOTH 'A' FROM idriga);
  1203.  
  1204.     VAR_idriga := TRIM(BOTH 'O' FROM VAR_idriga);
  1205.  
  1206.  
  1207.     --devo controllare se l'ingresso esiste nel sistema
  1208.     IF var_tipoingresso = 'A' THEN
  1209.       SELECT COUNT(INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO)
  1210.       INTO   esistenzaingresso
  1211.       FROM   INGRESSIABBONAMENTI
  1212.       WHERE  INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = VAR_idriga;
  1213.     ELSIF var_tipoingresso = 'O' THEN
  1214.       SELECT COUNT(INGRESSIORARI.IDINGRESSOORARIO)
  1215.       INTO   esistenzaingresso
  1216.       FROM   INGRESSIORARI
  1217.       WHERE  INGRESSIORARI.IDINGRESSOORARIO = VAR_idriga;
  1218.     ELSE
  1219.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  1220.  
  1221.         modGUI.apriintestazione(3);
  1222.  
  1223.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1224.  
  1225.         modGUI.chiudiintestazione(3);
  1226.  
  1227.       modGUI.apridiv(TRUE);
  1228.  
  1229.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1230.  
  1231.       modGUI.chiudidiv;
  1232.     END IF;
  1233.  
  1234.     IF esistenzaingresso = 0 THEN
  1235.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  1236.  
  1237.         modGUI.apriintestazione(3);
  1238.  
  1239.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1240.  
  1241.         modGUI.chiudiintestazione(3);
  1242.  
  1243.       modGUI.apridiv(TRUE);
  1244.  
  1245.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1246.  
  1247.       modGUI.chiudidiv;
  1248.  
  1249.     ELSE
  1250.       modGUI.apriform(gruppo1||'.inserisciMulteExec');
  1251.  
  1252.       modGUI.inserisciinputhidden('id_sessione', id_sessione);
  1253.  
  1254.       modGUI.inserisciinputhidden('nome', nome);
  1255.  
  1256.       modGUI.inserisciinputhidden('ruolo', ruolo);
  1257.  
  1258.       modGUI.inserisciinputhidden('idriga', VAR_idriga);
  1259.  
  1260.       modGUI.inserisciinputhidden('tipoingresso', var_tipoingresso);
  1261.  
  1262.       --modGUI.inseriscitesto('Importo');
  1263.  
  1264.       modGUI.inserisciinput('nuovoimporto', 'IMPORTO', 'number', TRUE);
  1265.  
  1266.       --modGUI.inseriscitesto('Causa');
  1267.  
  1268.       modGUI.inserisciinput('nuovacausa', 'CAUSA', 'text', TRUE);
  1269.  
  1270.       modGUI.INSERISCIBOTTONERESET('RESET');
  1271.  
  1272.       --modGUI.inserisciBottoneForm('Submit','Submit','SUBMIT');
  1273.       modGUI.INSERISCIBOTTONEFORM('CREA MULTA');
  1274.  
  1275.       modGUI.chiudiform;
  1276.  
  1277.         modGUI.apriintestazione(3);
  1278.  
  1279.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1280.  
  1281.         modGUI.chiudiintestazione(3);
  1282.  
  1283.       modGUI.apridiv(TRUE);
  1284.  
  1285.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'ANNULLA',gruppo1||'.inserisciMulte');
  1286.  
  1287.       modGUI.chiudidiv;
  1288.     END IF;
  1289.  
  1290.     modGUI.chiudidiv;
  1291.  
  1292.     modGUI.chiudipagina;
  1293. END inseriscicampimulte;
  1294.  
  1295.  /*
  1296.  *  inserisciMulte - FRANCESCO CONSONNI
  1297.  *  La procedura permette di filtrare tra gli ingressi sui quali potranno essere inserite multe
  1298.  */
  1299.  PROCEDURE INSERISCIMULTE(id_sessione VARCHAR2,
  1300.                                            nome        VARCHAR2,
  1301.                                            ruolo       VARCHAR2)
  1302. IS
  1303. BEGIN
  1304.     modGUI.apripagina('HoC | Inserimento Multa', id_sessione, nome, ruolo);
  1305.  
  1306.     modGUI.apriintestazione(2);
  1307.  
  1308.     modGUI.inseriscitesto('INSERIMENTO MULTA');
  1309.  
  1310.     modGUI.chiudiintestazione(2);
  1311.  
  1312.     modGUI.apridiv;
  1313.  
  1314.     modGUI.apriform(gruppo1||'.inserisciMulteDisplay');
  1315.  
  1316.     modGUI.inserisciinputhidden('id_sessione', id_sessione);
  1317.  
  1318.     modGUI.inserisciinputhidden('nome', nome);
  1319.  
  1320.     modGUI.inserisciinputhidden('ruolo', ruolo);
  1321.  
  1322.     modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
  1323.  
  1324.     modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
  1325.  
  1326. modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
  1327.  
  1328. modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
  1329.  
  1330. modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
  1331.  
  1332. FOR autorimessequery IN (SELECT IDautorimessa,
  1333.                                 INDIRIZZO
  1334.                          FROM   AUTORIMESSE
  1335.                          ORDER  BY IDautorimessa) LOOP
  1336.     modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
  1337.     autorimessequery.indirizzo, FALSE);
  1338. END LOOP;
  1339.  
  1340. modGUI.chiudiselect;
  1341.  
  1342. modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
  1343.  
  1344. modGUI.apriselect('responsabile', 'Scegli un responsabile');
  1345.  
  1346. FOR responsabiliquery IN (SELECT PERSONE.cognome         AS var_cognome,
  1347.                                  PERSONE.nome            AS var_nome,
  1348.                                  DIPENDENTI.IDDIPENDENTE AS idresponsabile
  1349.                           FROM   PERSONE
  1350.                                  inner join DIPENDENTI
  1351.                                          ON DIPENDENTI.IDPERSONA =
  1352.                                             PERSONE.IDPERSONA
  1353.                           WHERE  DIPENDENTI.TIPODIPENDENTE = 'R'
  1354.                              AND DIPENDENTI.CANCELLATO = 'F') LOOP
  1355. modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
  1356. END LOOP;
  1357.  
  1358. modGUI.chiudiselect;
  1359.  
  1360. modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
  1361.  
  1362. modGUI.inserisciinput('filtrocliente', 'nome o cognome Cliente', 'text', FALSE);
  1363.  
  1364. modGUI.INSERISCIBOTTONERESET('RESET');
  1365.  
  1366. modGUI.INSERISCIBOTTONEFORM('CERCA');
  1367.  
  1368. modGUI.chiudiform;
  1369.  
  1370. modGUI.chiudidiv;
  1371.  
  1372. modGUI.chiudipagina;
  1373. END inseriscimulte;
  1374.  
  1375. /*
  1376.  *  inserisciMulteDisplay - FRANCESCO CONSONNI
  1377.  *  La procedura mostra la cronologia degli ingressi per i quali è possibile inserire una multa
  1378.  *
  1379.  *  Parametri
  1380.  *  @datada: data di inizio intervallo di ricerca
  1381.  *  @dataa: data di fine intervallo di ricerca
  1382.  *  @filtrodati: variabile che determina se si filtra per autorimessa o responsabile
  1383.  *  @autorimessa: id della autorimessa su cui filtrare
  1384.  *  @responsabile: id del responsabile su cui filtrare
  1385.  *  @filtrocliente: stringa su cui effettuare una ricerca di tipo LIKE per nome o cognome cliente
  1386.  */
  1387.  PROCEDURE INSERISCIMULTEDISPLAY(id_sessione   VARCHAR2,
  1388.                                                   nome          VARCHAR2,
  1389.                                                   ruolo         VARCHAR2,
  1390.                                                   datada        VARCHAR2,
  1391.                                                   dataa         VARCHAR2,
  1392.                                                   filtrodati    VARCHAR2,
  1393.                                                   autorimessa   INTEGER,
  1394.                                                   responsabile  INTEGER,
  1395.                                                   filtrocliente VARCHAR2)
  1396. IS
  1397.   var_autorimessa  INTEGER DEFAULT NULL;
  1398.   var_responsabile INTEGER DEFAULT NULL;
  1399.   tipoabbonamento  INTEGER DEFAULT 0;
  1400.   tipoorario       INTEGER DEFAULT 0;
  1401.   descautorimessa  VARCHAR2(100) DEFAULT NULL;
  1402.   descresponsabile VARCHAR2(100) DEFAULT NULL;
  1403.   var_datada       DATE;
  1404.   var_dataa        DATE;
  1405.   containgressi    INTEGER DEFAULT 0;
  1406. BEGIN
  1407.  
  1408.     var_datada := TO_DATE(datada, 'yyyy-mm-dd');
  1409.  
  1410.     var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
  1411.  
  1412.     modGUI.apripagina('HoC | Inserimento Multa - Risultati Ricerca', id_sessione,nome, ruolo);
  1413.  
  1414.     IF filtrodati = 'auto' THEN
  1415.       var_autorimessa := autorimessa;
  1416.  
  1417.       IF var_autorimessa != 0 THEN
  1418.         SELECT AUTORIMESSE.INDIRIZZO
  1419.         INTO   descautorimessa
  1420.         FROM   AUTORIMESSE
  1421.         WHERE  AUTORIMESSE.IDautorimessa = var_autorimessa;
  1422.       ELSE
  1423.         descautorimessa := 'Tutte le autorimesse';
  1424.       END IF;
  1425.     ELSE
  1426.       var_responsabile := responsabile;
  1427.  
  1428.       SELECT PERSONE.cognome||' '||PERSONE.nome
  1429.       INTO   descresponsabile
  1430.       FROM   PERSONE,
  1431.              DIPENDENTI
  1432.       WHERE  PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
  1433.          AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
  1434.     END IF;
  1435.  
  1436.     SELECT COUNT(IDINGRESSO)
  1437.     INTO   containgressi
  1438.     FROM   VISTAINSERISCIMULTEDISPLAY
  1439.     WHERE  TRUNC(DATAENTRATA) BETWEEN var_datada AND var_dataa
  1440.        AND ( IDDIPENDENTE = var_responsabile
  1441.               OR ( CASE
  1442.                      WHEN var_autorimessa = 0 THEN 0
  1443.                      ELSE 1
  1444.                    END ) = 0
  1445.               OR IDautorimessa = var_autorimessa )
  1446.        AND UPPER(var_nome||' '||var_cognome) LIKE UPPER('%'||filtrocliente||'%')
  1447.        AND CANCELLATO = 'F';
  1448.  
  1449.     IF var_datada > var_dataa THEN
  1450. modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E` MINORE DI QUELLA DI INIZIO INTERVALLO');
  1451. ELSE
  1452.   modGUI.apriintestazione(2);
  1453.  
  1454.   modGUI.inseriscitesto('INSERIMENTO MULTA - RISULTATI RICERCA');
  1455.  
  1456.   modGUI.chiudiintestazione(2);
  1457.  
  1458.   modGUI.apridiv;
  1459.  
  1460.   --tabella di intestazione
  1461.   modGUI.apritabella;
  1462.  
  1463.   modGUI.apririgatabella;
  1464.  
  1465.   modGUI.intestazionetabella('STATISTICHE DI');
  1466.  
  1467.   modGUI.aprielementotabella;
  1468.  
  1469.   modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
  1470.  
  1471.   modGUI.chiudielementotabella;
  1472.  
  1473.   modGUI.chiudirigatabella;
  1474.  
  1475.   IF filtrodati = 'auto' THEN
  1476.     modGUI.apririgatabella;
  1477.  
  1478.     modGUI.intestazionetabella('AUTORIMESSA DI');
  1479.  
  1480.     modGUI.aprielementotabella;
  1481.  
  1482.     modGUI.elementotabella(descautorimessa);
  1483.  
  1484.     modGUI.chiudielementotabella;
  1485.  
  1486.     modGUI.chiudirigatabella;
  1487.   ELSE
  1488.     modGUI.apririgatabella;
  1489.  
  1490.     modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
  1491.  
  1492.     modGUI.aprielementotabella;
  1493.  
  1494.     modGUI.elementotabella(descresponsabile);
  1495.  
  1496.     modGUI.chiudielementotabella;
  1497.  
  1498.     modGUI.chiudirigatabella;
  1499.   END IF;
  1500.  
  1501.   modGUI.chiuditabella;
  1502.  
  1503.   -- tabella di tutte le multe
  1504.   modGUI.apritabella;
  1505.  
  1506.   modGUI.apririgatabella;
  1507.  
  1508.   modGUI.intestazionetabella('DATA INGRESSO');
  1509.  
  1510.   modGUI.intestazionetabella('DATA USCITA');
  1511.  
  1512.   modGUI.intestazionetabella('CLIENTE');
  1513.  
  1514.   modGUI.intestazionetabella('ABBONAMENTO USATO');
  1515.  
  1516.   modGUI.intestazionetabella('AGGIUNGI MULTA');
  1517.  
  1518.   modGUI.chiudirigatabella;
  1519.  
  1520.   IF containgressi = 0 THEN
  1521.     modGUI.chiuditabella();
  1522.  
  1523.     modGUI.apridiv(TRUE);
  1524.  
  1525.     modGUI.inseriscitesto('NESSUN INGRESSO TROVATO');
  1526.  
  1527.     modGUI.chiudidiv;
  1528.   ELSE
  1529.     FOR righeingressi IN(SELECT *
  1530.                          FROM   VISTAINSERISCIMULTEDISPLAY
  1531.                          WHERE
  1532.                           TRUNC(DATAENTRATA) BETWEEN var_datada AND var_dataa
  1533.                         AND ( IDDIPENDENTE = var_responsabile
  1534.                              OR ( CASE
  1535.                                     WHEN var_autorimessa = 0 THEN 0
  1536.                                     ELSE 1
  1537.                                   END ) = 0
  1538.                              OR IDautorimessa = var_autorimessa )
  1539.                         AND UPPER(var_nome||' '||var_cognome) LIKE UPPER('%'||filtrocliente||'%')
  1540.                         AND CANCELLATO = 'F'
  1541.                          ORDER  BY DATAENTRATA DESC) LOOP
  1542.         modGUI.apririgatabella;
  1543.  
  1544.         modGUI.aprielementotabella;
  1545.  
  1546.         modGUI.elementotabella(TO_CHAR(RIGHEINGRESSI.dataentrata, 'DD-MON-YY HH24:MI:SS'));
  1547.  
  1548.         modGUI.chiudielementotabella;
  1549.  
  1550.         modGUI.aprielementotabella;
  1551.  
  1552.         modGUI.elementotabella(NVL(TO_CHAR(RIGHEINGRESSI.datauscita, 'DD-MON-YY HH24:MI:SS'), '--'));
  1553.  
  1554.         modGUI.chiudielementotabella;
  1555.  
  1556.         modGUI.aprielementotabella;
  1557.  
  1558.         modGUI.elementotabella(RIGHEINGRESSI.var_nome||' '||RIGHEINGRESSI.var_cognome);
  1559.  
  1560.         modGUI.chiudielementotabella;
  1561.  
  1562.         modGUI.aprielementotabella;
  1563.  
  1564.         modGUI.elementotabella(NVL(RIGHEINGRESSI.nomeabbonamento, '--'));
  1565.  
  1566.         modGUI.chiudielementotabella;
  1567.  
  1568.         modGUI.aprielementotabella;
  1569.  
  1570.         modGUI.inseriscipenna(gruppo1||'.inserisciCampiMulte', id_sessione, nome, ruolo, RIGHEINGRESSI.idingresso);
  1571.  
  1572. modGUI.chiudielementotabella;
  1573.  
  1574. modGUI.chiudirigatabella;
  1575. END LOOP;
  1576.  
  1577.   modGUI.chiuditabella();
  1578. END IF;
  1579. END IF;
  1580.  
  1581. modGUI.apriintestazione(3);
  1582.  
  1583.   modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1584.  
  1585. modGUI.chiudiintestazione(3);
  1586.  
  1587. modGUI.apridiv(TRUE);
  1588.  
  1589. modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1590.  
  1591. modGUI.chiudidiv;
  1592.  
  1593. modGUI.chiudidiv;
  1594.  
  1595. modGUI.chiudipagina;
  1596. END inseriscimultedisplay;
  1597.  
  1598.  /*
  1599.  *  inserisciMulteExec - FRANCESCO CONSONNI
  1600.  *  La procedura esegue l'istruzione SQL che inserisce una nuova multa con dataassegnazione uguale a SYSTIMESTAMP
  1601.  *
  1602.  *  Parametri
  1603.  *  @idriga: id dell'ingresso da multare
  1604.  *  @nuovoimporto: importo della multa da inserire
  1605.  *  @nuovacausa: causa della multa da inserire
  1606.  *  @tipoingresso: determina se l'ingresso da multare è un ingresso orario o un abbonamento
  1607.  */
  1608.  PROCEDURE INSERISCIMULTEEXEC(id_sessione  VARCHAR2,
  1609.                                                nome         VARCHAR2,
  1610.                                                ruolo        VARCHAR2,
  1611.                                                idriga       VARCHAR2,
  1612.                                                tipoingresso VARCHAR2,
  1613.                                                nuovoimporto NUMBER,
  1614.                                                nuovacausa   VARCHAR2)
  1615. IS
  1616.   var_tipoingresso  VARCHAR2(1);
  1617.   esistenzaingresso INTEGER DEFAULT 0;
  1618. BEGIN
  1619.     --apro la pagina
  1620.     modGUI.apripagina('HoC | Inserimento Multa - Esito', id_sessione, nome, ruolo);
  1621.  
  1622.     modGUI.apriintestazione(2);
  1623.  
  1624.     modGUI.inseriscitesto('INSERIMENTO MULTA - ESITO');
  1625.  
  1626.     modGUI.chiudiintestazione(2);
  1627.  
  1628.     modGUI.apridiv();
  1629.  
  1630.     --devo controllare se l'ingresso esiste nel sistema
  1631.     IF tipoingresso = 'A' THEN
  1632.       SELECT COUNT(INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO)
  1633.       INTO   esistenzaingresso
  1634.       FROM   INGRESSIABBONAMENTI
  1635.       WHERE  INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = idriga;
  1636.     ELSIF tipoingresso = 'O' THEN
  1637.       SELECT COUNT(INGRESSIORARI.IDINGRESSOORARIO)
  1638.       INTO   esistenzaingresso
  1639.       FROM   INGRESSIORARI
  1640.       WHERE  INGRESSIORARI.IDINGRESSOORARIO = idriga;
  1641.     ELSE
  1642.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  1643.  
  1644.         modGUI.apriintestazione(3);
  1645.  
  1646.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1647.  
  1648.         modGUI.chiudiintestazione(3);
  1649.  
  1650.       modGUI.apridiv(TRUE);
  1651.  
  1652.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1653.  
  1654.       modGUI.chiudidiv;
  1655.     END IF;
  1656.  
  1657.     IF esistenzaingresso = 0 THEN
  1658.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  1659.  
  1660.         modGUI.apriintestazione(3);
  1661.  
  1662.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1663.  
  1664.         modGUI.chiudiintestazione(3);
  1665.  
  1666.       modGUI.apridiv(TRUE);
  1667.  
  1668.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1669.  
  1670.       modGUI.chiudidiv;
  1671.     ELSE
  1672.  
  1673.       IF tipoingresso = 'A' THEN
  1674.  
  1675.         INSERT INTO MULTE
  1676.         VALUES     (multeseq.NEXTVAL,
  1677.                     SYSTIMESTAMP,
  1678.                     nuovoimporto,
  1679.                     nuovacausa,
  1680.                     NULL,
  1681.                     'F');
  1682.  
  1683.         UPDATE INGRESSIABBONAMENTI
  1684.         SET    INGRESSIABBONAMENTI.IDMULTA = multeseq.CURRVAL
  1685.         WHERE  INGRESSIABBONAMENTI.IDINGRESSOABBONAMENTO = idriga;
  1686.         if(SQL%ROWCOUNT != 0)THEN
  1687.         COMMIT;
  1688.         modGUI.esitooperazione('OK', 'MULTA INSERITA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
  1689.         ELSE
  1690.         modGUI.esitooperazione('OK', 'ERRORE NELL`INSERIMENTO DELLA MULTA');
  1691.         END IF;
  1692.       ELSE --ingresso orario
  1693.  
  1694.         INSERT INTO MULTE
  1695.         VALUES     (multeseq.NEXTVAL,
  1696.                     SYSTIMESTAMP,
  1697.                     nuovoimporto,
  1698.                     nuovacausa,
  1699.                     NULL,
  1700.                     'F');
  1701.  
  1702.         UPDATE INGRESSIORARI
  1703.         SET    INGRESSIORARI.IDMULTA = multeseq.CURRVAL
  1704.         WHERE  INGRESSIORARI.IDINGRESSOORARIO = idriga;
  1705.  
  1706.         if(SQL%ROWCOUNT != 0)THEN
  1707.         COMMIT;
  1708.         modGUI.esitooperazione('OK', 'MULTA INSERITA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
  1709.         ELSE
  1710.         modGUI.esitooperazione('KO', 'ERRORE NELL`INSERIMENTO DELLA MULTA');
  1711.         END IF;
  1712.        
  1713.       END IF;
  1714.  
  1715.    
  1716.  
  1717.         modGUI.apriintestazione(3);
  1718.  
  1719.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1720.  
  1721.         modGUI.chiudiintestazione(3);
  1722.  
  1723.       modGUI.apridiv(TRUE);
  1724.  
  1725.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
  1726.  
  1727.       --modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A CRONOLOGIA', 'cronologiaMulte');
  1728.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A DETTAGLIO',gruppo1||'.dettagliomulte', '&'||'idriga='|| multeseq.CURRVAL);
  1729.  
  1730.       modGUI.chiudidiv;
  1731.     END IF;
  1732.  
  1733.     modGUI.chiudidiv;
  1734.  
  1735.     modGUI.chiudipagina;
  1736. END inseriscimulteexec;
  1737.  
  1738.  /*
  1739.  *  modificaCampiMulte - FRANCESCO CONSONNI
  1740.  *  La procedura permette di impostare le modifiche ai campi di una multa
  1741.  *
  1742.  *  Parametri
  1743.  *  @idriga: id della multa di cui modificare i campi
  1744.  */
  1745.  PROCEDURE MODIFICACAMPIMULTE(id_sessione VARCHAR2,
  1746.                                                nome        VARCHAR2,
  1747.                                                ruolo       VARCHAR2,
  1748.                                                idriga      INTEGER)
  1749. IS
  1750.   esistenzamulta       INTEGER DEFAULT 0;
  1751.   controlloabbonamento INTEGER DEFAULT 0;
  1752.   dettagliomulte       multe%ROWTYPE;
  1753. BEGIN
  1754.     modGUI.apripagina('HoC | Modifica Campi Multa', id_sessione, nome, ruolo);
  1755.  
  1756.     modGUI.apriintestazione(2);
  1757.  
  1758.     modGUI.inseriscitesto('MODIFICA CAMPI MULTA');
  1759.  
  1760.     modGUI.chiudiintestazione(2);
  1761.  
  1762.     modGUI.apridiv;
  1763.  
  1764.     SELECT COUNT(MULTE.IDMULTA)
  1765.     INTO   esistenzamulta
  1766.     FROM   MULTE
  1767.     WHERE  IDMULTA = idriga
  1768.        AND MULTE.CANCELLATO = 'F';
  1769.  
  1770.     IF esistenzamulta = 0 THEN
  1771.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  1772.  
  1773.         modGUI.apriintestazione(3);
  1774.  
  1775.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1776.  
  1777.         modGUI.chiudiintestazione(3);
  1778.  
  1779.       modGUI.apridiv(TRUE);
  1780.  
  1781.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  1782.  
  1783.       modGUI.chiudidiv;
  1784.     ELSE
  1785.       modGUI.apriform(gruppo1||'.modificaCampiMulteExec');
  1786.  
  1787.       modGUI.inserisciinputhidden('id_sessione', id_sessione);
  1788.  
  1789.       modGUI.inserisciinputhidden('nome', nome);
  1790.  
  1791.       modGUI.inserisciinputhidden('ruolo', ruolo);
  1792.  
  1793.       modGUI.inserisciinputhidden('idriga', idriga);
  1794.  
  1795.       --data e ora sono separati perchè non c'è altro modo di visualizzare i dati già esistenti
  1796.       FOR dettagliomulte IN (SELECT MULTE.*
  1797.                              FROM   MULTE
  1798.                              WHERE  IDMULTA = idriga) LOOP
  1799.           modGUI.inseriscitesto('NUOVA DATA EMSSIONE MULTA');
  1800.  
  1801.           modGUI.acapo();
  1802.  
  1803.           modGUI.inserisciinput('nuovaDataEmissione', 'DATA', 'date', TRUE,TO_CHAR(dettagliomulte.dataassegnazione, 'YYYY-MM-DD'));
  1804.  
  1805.           modGUI.inserisciinput('nuovaOraEmissione', 'ORA', 'time', TRUE,TO_CHAR(dettagliomulte.dataassegnazione, 'hh24:mi'));
  1806.  
  1807.           modGUI.acapo();
  1808.  
  1809.           IF( dettagliomulte.pagata IS NULL ) THEN
  1810.             modGUI.inserisciradiobutton('NON PAGATA', 'pagamento', 'F', TRUE);
  1811.  
  1812.             modGUI.inserisciradiobutton('PAGATA', 'pagamento', 'T', FALSE);
  1813.  
  1814.             modGUI.inseriscitesto('NUOVA DATA PAGAMENTO MULTA');
  1815.  
  1816.             modGUI.inserisciinput('nuovaDataPagamento', 'DATA', 'date', TRUE,TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD'));
  1817.  
  1818.             modGUI.inserisciinput('nuovaOraPagamento', 'ORA', 'time', TRUE,TO_CHAR(SYSTIMESTAMP, 'hh24:mi'));
  1819.           ELSE
  1820.             modGUI.inserisciradiobutton('MULTA NON PAGATA', 'pagamento', 'F', FALSE);
  1821.  
  1822.             modGUI.inserisciradiobutton('MULTA PAGATA', 'pagamento', 'T', TRUE);
  1823.  
  1824.             modGUI.inseriscitesto('NUOVA DATA PAGAMENTO MULTA');
  1825.  
  1826.             modGUI.inserisciinput('nuovaDataPagamento', 'DATA', 'date', TRUE,TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD'));
  1827.  
  1828.             modGUI.inserisciinput('nuovaOraPagamento', 'ORA', 'time', TRUE,TO_CHAR(SYSTIMESTAMP, 'hh24:mi'));
  1829.           END IF;
  1830.  
  1831.           modGUI.acapo();
  1832.  
  1833.           --modGUI.inseriscitesto('Nuovo Importo');
  1834.  
  1835.           modGUI.inserisciinput('nuovoimporto', 'NUOVO IMPORTO', 'number', TRUE,dettagliomulte.importo);
  1836.  
  1837.           --modGUI.inseriscitesto('Nuova Causa');
  1838.  
  1839.           modGUI.inserisciinput('nuovacausa', 'NUOVA CAUSA', 'text', TRUE,dettagliomulte.causa);
  1840.       END LOOP;
  1841.  
  1842.       modGUI.INSERISCIBOTTONERESET('RESET');
  1843.  
  1844.       modGUI.INSERISCIBOTTONEFORM('MODIFICA MULTA');
  1845.  
  1846.       modGUI.chiudiform;
  1847.  
  1848.         modGUI.apriintestazione(3);
  1849.  
  1850.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1851.  
  1852.         modGUI.chiudiintestazione(3);
  1853.  
  1854.       modGUI.apridiv(TRUE);
  1855.  
  1856.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'ANNULLA',gruppo1||'.dettagliomulte','&'||'idriga='|| idriga);
  1857.  
  1858.       modGUI.chiudidiv;
  1859.     END IF;
  1860.  
  1861.     modGUI.chiudidiv;
  1862.  
  1863.     modGUI.chiudipagina;
  1864. END modificacampimulte;
  1865.  
  1866.  /*
  1867.  *  modificaCampiMulteExec - FRANCESCO CONSONNI
  1868.  *  La procedura esegue il codice SQL che cambia i dati di una certa multa
  1869.  *
  1870.  *  Parametri
  1871.  *  @nuovaDataEmissione: nuova data di emissione della multa
  1872.  *  @nuovaOraEmissione: nuova ora di emissione della multa
  1873.  *  @nuovaDataPagamento: nuova data di pagamento della multa
  1874.  *  @nuovaOraPagamento: nuova ora di pagamento della multa
  1875.  *  @nuovoimporto: nuovo importo della multa
  1876.  *  @nuovacausa: nuova causa della multa
  1877.  *  @pagamento: variabile che stabilisce se la multa è stata pagata o meno
  1878.  */
  1879.  PROCEDURE MODIFICACAMPIMULTEEXEC(id_sessione        VARCHAR2,
  1880.                                                    nome               VARCHAR2,
  1881.                                                    ruolo              VARCHAR2,
  1882.                                                    idriga             INTEGER,
  1883.                                                    pagamento          VARCHAR2,
  1884.                                                    nuovadataemissione VARCHAR2,
  1885.                                                    nuovaoraemissione  VARCHAR2,
  1886.                                                    nuovadatapagamento VARCHAR2,
  1887.                                                    nuovaorapagamento  VARCHAR2,
  1888.                                                    nuovoimporto       NUMBER,
  1889.                                                    nuovacausa         VARCHAR2)
  1890. IS
  1891.   --devo sostituire il carattere dei due punti che viene massacrato nel passaggio attraverso le pagine
  1892.   var_oraemissione  VARCHAR2(8) := REPLACE(NUOVAORAEMISSIONE, '%3A', ':');
  1893.   var_orapagamento  VARCHAR2(8) := REPLACE(NUOVAORAPAGAMENTO, '%3A', ':');
  1894.   --concateno data e ora per ricostruire l'ora finale
  1895.   var_dataemissione DATE := TO_DATE(NUOVADATAEMISSIONE||VAR_ORAEMISSIONE, 'yyyy-mm-ddhh24:mi');
  1896.   var_datapagata    DATE := TO_DATE(NUOVADATAPAGAMENTO||VAR_ORAPAGAMENTO, 'yyyy-mm-ddhh24:mi');
  1897.   esistenzamulta    INTEGER DEFAULT 0;
  1898. BEGIN
  1899.     IF PAGAMENTO = 'F' THEN
  1900.       VAR_DATAPAGATA := NULL;
  1901.     END IF;
  1902.  
  1903.     modGUI.apripagina('HoC | Modifica Campi Multa - Esito', id_sessione, nome,ruolo);
  1904.  
  1905.     modGUI.apriintestazione(2);
  1906.  
  1907.     modGUI.inseriscitesto('MODIFICA CAMPI MULTA - ESITO');
  1908.  
  1909.     modGUI.chiudiintestazione(2);
  1910.  
  1911.     modGUI.apridiv;
  1912.  
  1913.     SELECT COUNT(MULTE.IDMULTA)
  1914.     INTO   esistenzamulta
  1915.     FROM   MULTE
  1916.     WHERE  IDMULTA = idriga
  1917.        AND MULTE.CANCELLATO = 'F';
  1918.  
  1919.     IF esistenzamulta = 0 THEN
  1920.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  1921.  
  1922.         modGUI.apriintestazione(3);
  1923.  
  1924.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1925.  
  1926.         modGUI.chiudiintestazione(3);
  1927.  
  1928.       modGUI.apridiv(TRUE);
  1929.  
  1930.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  1931.  
  1932.       modGUI.chiudidiv;
  1933.     ELSIF var_datapagata < var_dataemissione THEN
  1934. modGUI.esitooperazione('KO', 'LA DATA DI PAGAMENTO DEVE ESSERE SUCCESSIVA A QUELLA DI EMISSIONE');
  1935.  
  1936. modGUI.apriintestazione(3);
  1937.  
  1938.   modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1939.  
  1940. modGUI.chiudiintestazione(3);
  1941.  
  1942.   modGUI.apridiv(TRUE);
  1943.  
  1944.   modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA RICERCA',gruppo1||'.cronologiaMulte');
  1945.  
  1946.   modGUI.chiudidiv;
  1947. ELSE
  1948.   UPDATE MULTE
  1949.   SET    MULTE.dataaSSEGNAZIONE = VAR_DATAEMISSIONE,
  1950.          MULTE.IMPORTO = nuovoimporto,
  1951.          MULTE.CAUSA = nuovacausa,
  1952.          MULTE.PAGATA = VAR_DATAPAGATA
  1953.   WHERE  MULTE.IDMULTA = idriga;
  1954.  
  1955.         if(SQL%ROWCOUNT != 0)THEN
  1956.     COMMIT;
  1957.     modGUI.esitooperazione('OK', 'CAMPI AGGIORNATI CON SUCCESSO');
  1958.     ELSE
  1959.     modGUI.esitooperazione('KO', 'ERRORE NELL`AGGIORNAMENTO DEI CAMPI');
  1960.     END IF;
  1961.  
  1962.     modGUI.apriintestazione(3);
  1963.  
  1964.     modGUI.inseriscitesto('ALTRE OPERAZIONI');
  1965.  
  1966.     modGUI.chiudiintestazione(3);
  1967.  
  1968.   modGUI.apridiv(TRUE);
  1969.  
  1970.   modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  1971.  
  1972.   modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
  1973.  
  1974.   modGUI.chiudidiv;
  1975. END IF;
  1976.  
  1977. modGUI.chiudidiv;
  1978.  
  1979. modGUI.chiudipagina;
  1980. END modificacampimulteexec;
  1981.  
  1982.  /*
  1983.  *  pagamentoMulte - FRANCESCO CONSONNI
  1984.  *  La procedura permette di filtrare sulle multe che possono essere pagate
  1985.  */
  1986.  PROCEDURE PAGAMENTOMULTE(id_sessione VARCHAR2,
  1987.                                            nome        VARCHAR2,
  1988.                                            ruolo       VARCHAR2)
  1989. IS
  1990.   minimportoquery NUMBER DEFAULT -1;
  1991.   maximportoquery NUMBER DEFAULT -1;
  1992. BEGIN
  1993.     modGUI.apripagina('HoC | Pagamento Multe', id_sessione, nome, ruolo);
  1994.  
  1995.     modGUI.apriintestazione(2);
  1996.  
  1997.     modGUI.inseriscitesto('PAGAMENTO MULTE');
  1998.  
  1999.     modGUI.chiudiintestazione(2);
  2000.  
  2001.     modGUI.apridiv;
  2002.  
  2003.     --qui il form di ricerca
  2004.     modGUI.apriform(gruppo1||'.pagamentoMulteDisplay');
  2005.  
  2006.     modGUI.inserisciinputhidden('id_sessione', id_sessione);
  2007.  
  2008.     modGUI.inserisciinputhidden('nome', nome);
  2009.  
  2010.     modGUI.inserisciinputhidden('ruolo', ruolo);
  2011.  
  2012.     modGUI.inserisciinput('datada', 'CERCA DAL', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
  2013.  
  2014.     modGUI.inserisciinput('dataa', 'CERCA AL', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
  2015.  
  2016. modGUI.inserisciradiobutton('VISUALIZZA MULTE PER LA AUTORIMESSA', 'filtrodati', 'auto', TRUE);
  2017.  
  2018. modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
  2019.  
  2020. modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
  2021.  
  2022. FOR autorimessequery IN (SELECT IDautorimessa,
  2023.                                 INDIRIZZO
  2024.                          FROM   AUTORIMESSE
  2025.                          ORDER  BY IDautorimessa) LOOP
  2026.     modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
  2027.     autorimessequery.indirizzo, FALSE);
  2028. END LOOP;
  2029.  
  2030. modGUI.chiudiselect;
  2031.  
  2032. modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
  2033.  
  2034. modGUI.apriselect('responsabile', 'Scegli un responsabile');
  2035.  
  2036. FOR responsabiliquery IN (SELECT PERSONE.cognome         AS var_cognome,
  2037.                                  PERSONE.nome            AS var_nome,
  2038.                                  DIPENDENTI.IDDIPENDENTE AS idresponsabile
  2039.                           FROM   PERSONE
  2040.                                  inner join DIPENDENTI
  2041.                                          ON DIPENDENTI.IDPERSONA =
  2042.                                             PERSONE.IDPERSONA
  2043.                           WHERE  DIPENDENTI.TIPODIPENDENTE = 'R'
  2044.                              AND DIPENDENTI.CANCELLATO = 'F') LOOP
  2045. modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
  2046. END LOOP;
  2047.  
  2048. modGUI.chiudiselect;
  2049.  
  2050. --filtro in base all'importo, viene automaticamente precaricato con il minimo e massimo importo trovato sul database
  2051. SELECT MIN(IMPORTO),
  2052.        MAX(IMPORTO)
  2053. INTO   minimportoquery, maximportoquery
  2054. FROM   MULTE
  2055. WHERE  MULTE.CANCELLATO = 'F';
  2056.  
  2057. modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
  2058.  
  2059. modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
  2060.  
  2061. modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
  2062.  
  2063. modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
  2064.  
  2065. modGUI.inserisciinput('filtrocliente', 'Nome o Cognome Cliente', 'text', FALSE);
  2066.  
  2067. modGUI.INSERISCIBOTTONERESET('RESET');
  2068.  
  2069. modGUI.INSERISCIBOTTONEFORM('CERCA');
  2070.  
  2071. modGUI.chiudiform;
  2072.  
  2073. modGUI.chiudidiv;
  2074.  
  2075. modGUI.chiudipagina;
  2076. END pagamentomulte;
  2077.  
  2078. /*
  2079.  *  pagamentoMulteDisplay - FRANCESCO CONSONNI
  2080.  *  La procedura mostra la lista delle multe pagabili filtrate dalla procedura statisticheMulte
  2081.  *
  2082.  *  Parametri
  2083.  *  @datada: data di inizio intervallo di ricerca
  2084.  *  @dataa: data di fine intervallo di ricerca
  2085.  *  @filtrodati: variabile che stabilisce se si filtrerà in base alle autorimesse o ai responsabili
  2086.  *  @autorimessa: id della autorimessa del filtro
  2087.  *  @responsabile: id del responsabile del filtro
  2088.  *  @minImporto: importo minimo delle multe sulle quale filtrare
  2089.  *  @maxImporto: importo massimo delle multe sulle quale filtrare
  2090.  *  @filtrocliente: stringa su cui cercare similitudini per il nome del cliente
  2091.  */
  2092.  PROCEDURE PAGAMENTOMULTEDISPLAY(id_sessione   VARCHAR2,
  2093.                                                   nome          VARCHAR2,
  2094.                                                   ruolo         VARCHAR2,
  2095.                                                   datada        VARCHAR2,
  2096.                                                   dataa         VARCHAR2,
  2097.                                                   filtrodati    VARCHAR2,
  2098.                                                   autorimessa   INTEGER,
  2099.                                                   responsabile  INTEGER,
  2100.                                                   minimporto    INTEGER,
  2101.                                                   maximporto    INTEGER,
  2102.                                                   filtrocliente VARCHAR2)
  2103. IS
  2104.   var_autorimessa  INTEGER DEFAULT NULL;
  2105.   var_responsabile INTEGER DEFAULT NULL;
  2106.   descautorimessa  VARCHAR2(100) DEFAULT NULL;
  2107.   descresponsabile VARCHAR2(100) DEFAULT NULL;
  2108.   var_datada       DATE;
  2109.   var_dataa        DATE;
  2110.   contamulte       INTEGER DEFAULT 0;
  2111. BEGIN
  2112.     var_datada := TO_DATE(datada, 'yyyy-mm-dd');
  2113.  
  2114.     var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
  2115.  
  2116.     modGUI.apripagina('HoC | Pagamento Multe - Risultati Ricerca', id_sessione,
  2117.     nome
  2118.     , ruolo);
  2119.  
  2120.     IF filtrodati = 'auto' THEN
  2121.       var_autorimessa := autorimessa;
  2122.  
  2123.       IF var_autorimessa != 0 THEN
  2124.         SELECT AUTORIMESSE.INDIRIZZO
  2125.         INTO   descautorimessa
  2126.         FROM   AUTORIMESSE
  2127.         WHERE  AUTORIMESSE.IDautorimessa = var_autorimessa;
  2128.       ELSE
  2129.         descautorimessa := 'Tutte le autorimesse';
  2130.       END IF;
  2131.     ELSE
  2132.       var_responsabile := responsabile;
  2133.  
  2134.       SELECT PERSONE.cognome
  2135.              ||' '
  2136.              ||PERSONE.nome
  2137.       INTO   descresponsabile
  2138.       FROM   PERSONE,
  2139.              DIPENDENTI
  2140.       WHERE  PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
  2141.          AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
  2142.     END IF;
  2143.  
  2144.     SELECT COUNT(IDMULTA)
  2145.     INTO   contamulte
  2146.     FROM   VISTAPAGAMENTOMULTEDISPLAY
  2147.     WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
  2148.        AND ( IDDIPENDENTE = var_responsabile
  2149.               OR ( CASE
  2150.                      WHEN var_autorimessa = 0 THEN 0
  2151.                      ELSE 1
  2152.                    END ) = 0
  2153.               OR IDautorimessa = var_autorimessa )
  2154.        AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
  2155.        AND nomeCLIENTE||' '||cognomeCLIENTE LIKE '%'||filtrocliente||'%'
  2156.        AND CANCELLATO = 'F'
  2157.        AND PAGATA IS NULL;
  2158.  
  2159.     IF var_datada > var_dataa THEN
  2160. modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INIZIO INTERVALLO');
  2161. ELSIF minimporto > maximporto THEN
  2162. modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`SUPERIORE A IMPORTO MASSIMO');
  2163. ELSE
  2164.   modGUI.apriintestazione(2);
  2165.  
  2166.   modGUI.inseriscitesto('PAGAMENTO MULTE - RISULTATI RICERCA');
  2167.  
  2168.   modGUI.chiudiintestazione(2);
  2169.  
  2170.   modGUI.apridiv;
  2171.  
  2172.   -- pilotando la modalità posso stabilire in base a cosa filtrare
  2173.   modGUI.apritabella;
  2174.  
  2175.   modGUI.apririgatabella;
  2176.  
  2177.   modGUI.intestazionetabella('STATISTICHE DI');
  2178.  
  2179.   modGUI.aprielementotabella;
  2180.  
  2181.   modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
  2182.  
  2183.   modGUI.chiudielementotabella;
  2184.  
  2185.   modGUI.chiudirigatabella;
  2186.  
  2187.   IF filtrodati = 'auto' THEN
  2188.     modGUI.apririgatabella;
  2189.  
  2190.     modGUI.intestazionetabella('AUTORIMESSA DI');
  2191.  
  2192.     modGUI.aprielementotabella;
  2193.  
  2194.     modGUI.elementotabella(descautorimessa);
  2195.  
  2196.     modGUI.chiudielementotabella;
  2197.  
  2198.     modGUI.chiudirigatabella;
  2199.   ELSE
  2200.     modGUI.apririgatabella;
  2201.  
  2202.     modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
  2203.  
  2204.     modGUI.aprielementotabella;
  2205.  
  2206.     modGUI.elementotabella(descresponsabile);
  2207.  
  2208.     modGUI.chiudielementotabella;
  2209.  
  2210.     modGUI.chiudirigatabella;
  2211.   END IF;
  2212.  
  2213.   modGUI.chiuditabella;
  2214.  
  2215.   --tabella di tutte le multe
  2216.   modGUI.apritabella;
  2217.  
  2218.   modGUI.apririgatabella;
  2219.  
  2220.   modGUI.intestazionetabella('DATA EMISSIONE');
  2221.  
  2222.   modGUI.intestazionetabella('IMPORTO');
  2223.  
  2224.   modGUI.intestazionetabella('CAUSA');
  2225.  
  2226.   modGUI.intestazionetabella('CLIENTE MULTATO');
  2227.  
  2228.   modGUI.intestazionetabella('PAGA MULTA');
  2229.   --la penna in questa procedura ridireziona al pagamento della multa
  2230.  
  2231.   modGUI.chiudirigatabella;
  2232.  
  2233.   IF CONTAMULTE = 0 THEN
  2234.     modGUI.chiuditabella();
  2235.  
  2236.     modGUI.apridiv(TRUE);
  2237.  
  2238.     modGUI.inseriscitesto('NESSUNA MULTA TROVATA');
  2239.  
  2240.     modGUI.chiudidiv;
  2241.   ELSE
  2242.     FOR righemulte IN (SELECT *
  2243.                        FROM   VISTAPAGAMENTOMULTEDISPLAY
  2244.                        WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN
  2245.                               var_datada AND var_dataa
  2246.                           AND ( IDDIPENDENTE = var_responsabile
  2247.                                  OR ( CASE
  2248.                                         WHEN var_autorimessa = 0 THEN 0
  2249.                                         ELSE 1
  2250.                                       END ) = 0
  2251.                                  OR IDautorimessa = var_autorimessa )
  2252.                           AND IMPORTO BETWEEN MINIMPORTO AND MAXIMPORTO
  2253.                           AND nomeCLIENTE
  2254.                               ||' '
  2255.                               ||cognomeCLIENTE LIKE '%'
  2256.                                                     ||filtrocliente
  2257.                                                     ||'%'
  2258.                        ORDER  BY dataaSSEGNAZIONE DESC) LOOP
  2259.         modGUI.apririgatabella;
  2260.  
  2261.         modGUI.aprielementotabella;
  2262.  
  2263.         modGUI.elementotabella(
  2264.         TO_CHAR(RIGHEMULTE.dataassegnazione, 'DD-MON-YY HH24:MI:SS'));
  2265.  
  2266.         modGUI.chiudielementotabella;
  2267.  
  2268.         modGUI.aprielementotabella;
  2269.  
  2270.         modGUI.elementotabella('&euro; '||TO_CHAR(RIGHEMULTE.importo, '9990D99'));
  2271.  
  2272.         modGUI.chiudielementotabella;
  2273.  
  2274.         modGUI.aprielementotabella;
  2275.  
  2276.         modGUI.elementotabella(RIGHEMULTE.causa);
  2277.  
  2278.         modGUI.chiudielementotabella;
  2279.  
  2280.         modGUI.aprielementotabella;
  2281.  
  2282.         modGUI.elementotabella(RIGHEMULTE.nomecliente||' '||RIGHEMULTE.cognomecliente);
  2283.  
  2284.         modGUI.chiudielementotabella;
  2285.  
  2286.         modGUI.aprielementotabella;
  2287.  
  2288.         modGUI.inseriscipenna(gruppo1||'.pagamentoMulteExec', id_sessione, nome, ruolo,RIGHEMULTE.idmulta);
  2289.  
  2290.         modGUI.chiudielementotabella;
  2291.  
  2292.         modGUI.chiudirigatabella;
  2293.     END LOOP;
  2294.  
  2295.     modGUI.chiuditabella;
  2296.   END IF;
  2297. END IF;
  2298.  
  2299. modGUI.apriintestazione(3);
  2300.  
  2301.   modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2302.  
  2303. modGUI.chiudiintestazione(3);
  2304.  
  2305. modGUI.apridiv(TRUE);
  2306.  
  2307. modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
  2308.  
  2309. modGUI.chiudidiv;
  2310.  
  2311. modGUI.chiudidiv;
  2312.  
  2313. modGUI.chiudipagina;
  2314. END pagamentomultedisplay;
  2315.  
  2316.  /*
  2317.  *  pagamentoMulteExec - FRANCESCO CONSONNI
  2318.  *  La procedura esegue lo script SQL che paga una multa, impostandone la data di pagamento a SYSTIMESTAMP
  2319.  *
  2320.  *  Parametri
  2321.  *  @idriga: indice della multa da pagare sul database
  2322.  */
  2323.  PROCEDURE PAGAMENTOMULTEEXEC(id_sessione VARCHAR2,
  2324.                                                nome        VARCHAR2,
  2325.                                                ruolo       VARCHAR2,
  2326.                                                idriga      INTEGER)
  2327. IS
  2328.   esistenzamulta INTEGER DEFAULT 0;
  2329. BEGIN
  2330.     modGUI.apripagina('HoC | Pagamento Multa - Esito', id_sessione, nome, ruolo);
  2331.  
  2332.     modGUI.apriintestazione(2);
  2333.  
  2334.     modGUI.inseriscitesto('PAGAMENTO MULTA - ESITO');
  2335.  
  2336.     modGUI.chiudiintestazione(2);
  2337.  
  2338.     modGUI.apridiv;
  2339.  
  2340.     SELECT COUNT(MULTE.IDMULTA)
  2341.     INTO   esistenzamulta
  2342.     FROM   MULTE
  2343.     WHERE  IDMULTA = idriga
  2344.        AND MULTE.CANCELLATO = 'F';
  2345.  
  2346.     IF esistenzamulta = 0 THEN
  2347.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  2348.  
  2349.         modGUI.apriintestazione(3);
  2350.  
  2351.           modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2352.  
  2353.         modGUI.chiudiintestazione(3);
  2354.  
  2355.       modGUI.apridiv(TRUE);
  2356.  
  2357.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
  2358.  
  2359.       modGUI.chiudidiv;
  2360.     ELSE
  2361.       UPDATE MULTE
  2362.       SET    MULTE.PAGATA = SYSTIMESTAMP
  2363.       WHERE  MULTE.IDMULTA = idriga;
  2364.     if(SQL%ROWCOUNT != 0)THEN
  2365.         COMMIT;
  2366.         modGUI.esitooperazione('OK', 'MULTA PAGATA CON SUCCESSO IL '||TO_CHAR(SYSTIMESTAMP, 'DD-MON-YYYY HH24:MI:SS'));
  2367.         ELSE
  2368.         modGUI.esitooperazione('KO', 'ERRORE NEL PAGAMENTO DELLA MULTA');
  2369.         END IF;
  2370.  
  2371.     modGUI.apriintestazione(3);
  2372.  
  2373.     modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2374.  
  2375.     modGUI.chiudiintestazione(3);
  2376.  
  2377.       modGUI.apridiv(TRUE);
  2378.  
  2379.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
  2380.  
  2381.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'VAI A DETTAGLIO',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
  2382.  
  2383.       modGUI.chiudidiv;
  2384.     END IF;
  2385.  
  2386.     modGUI.chiudidiv;
  2387.  
  2388.     modGUI.chiudipagina;
  2389. END pagamentomulteexec;
  2390.  
  2391.  /*
  2392.  *  rimuoviMulteConferma - FRANCESCO CONSONNI
  2393.  *  La procedura chiede la conferma della rimozione della multa
  2394.  *
  2395.  *  Parametri
  2396.  *  @idriga:stringa opportunamente formattata che permette di stabilire l'id della multa e se deriva da un ingresso orario o un abbonamento
  2397.  *  @tipoingresso:specifica se è un ingresso orario o un abbonamento
  2398.  */
  2399.  PROCEDURE RIMUOVIMULTECONFERMA(id_sessione  VARCHAR2,
  2400.                                                  nome         VARCHAR2,
  2401.                                                  ruolo        VARCHAR2,
  2402.                                                  idriga       VARCHAR2,
  2403.                                                  tipoingresso VARCHAR2)
  2404. IS
  2405.   esistenzamulta INTEGER DEFAULT 0;
  2406. BEGIN
  2407.  
  2408.     modGUI.apripagina('HoC | Rimozione Multa', id_sessione, nome, ruolo);
  2409.  
  2410.     modGUI.apriintestazione(2);
  2411.  
  2412.     modGUI.inseriscitesto('RIMOZIONE MULTA - CONFERMA');
  2413.  
  2414.     modGUI.chiudiintestazione(2);
  2415.  
  2416.     modGUI.apridiv;
  2417.  
  2418.     SELECT COUNT(MULTE.IDMULTA)
  2419.     INTO   esistenzamulta
  2420.     FROM   MULTE
  2421.     WHERE  IDMULTA = idriga
  2422.        AND MULTE.CANCELLATO = 'F';
  2423.    
  2424.     IF tipoingresso != 'A' AND tipoingresso != 'O' THEN
  2425.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  2426.  
  2427.         modGUI.apriintestazione(3);
  2428.  
  2429.         modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2430.  
  2431.         modGUI.chiudiintestazione(3);
  2432.  
  2433.       modGUI.apridiv(TRUE);
  2434.  
  2435.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  2436.  
  2437.       modGUI.chiudidiv;
  2438.  
  2439.     ELSIF esistenzamulta = 0 THEN
  2440.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  2441.  
  2442. modGUI.apriintestazione(3);
  2443.  
  2444.   modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2445.  
  2446. modGUI.chiudiintestazione(3);
  2447.  
  2448.       modGUI.apridiv(TRUE);
  2449.  
  2450.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  2451.  
  2452.       modGUI.chiudidiv;
  2453.     ELSE
  2454.       modGUI.apridiv(TRUE);
  2455.  
  2456.       modGUI.inseriscitesto('SEI SICURO DI VOLER RIMULVERE LA MULTA?');
  2457.  
  2458.       modGUI.aCapo;
  2459.  
  2460.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'CONFERMA',gruppo1||'.rimuoviMulteExec', '&'||'idriga='||idriga||'&'||'tipoingresso='||tipoingresso);
  2461.  
  2462.       modGUI.inseriscibottone(id_sessione, nome, ruolo, 'TORNA A DETTAGLIO MULTA',gruppo1||'.dettagliomulte', '&'||'idriga='|| idriga);
  2463.  
  2464.       modGUI.chiudidiv;
  2465.     END IF;
  2466.  
  2467.     modGUI.chiudidiv;
  2468.  
  2469.     modGUI.chiudipagina;
  2470. END rimuovimulteconferma;
  2471.  
  2472.  /*
  2473.  *  rimuoviMulteExec - FRANCESCO CONSONNI
  2474.  *  La procedura effettua la query che rimuove una certa multa dalla base di dati
  2475.  *
  2476.  *  Parametri
  2477.  *  @idriga:stringa opportunamente formattata che permette di stabilire l'id della multa e se deriva da un ingresso orario o un abbonamento
  2478.  *  @tipoingresso:specifica se è un ingresso orario o un abbonamento
  2479.  */
  2480.  PROCEDURE RIMUOVIMULTEEXEC(id_sessione  VARCHAR2,
  2481.                                              nome         VARCHAR2,
  2482.                                              ruolo        VARCHAR2,
  2483.                                              idriga       VARCHAR2,
  2484.                                              tipoingresso VARCHAR2)
  2485. IS
  2486.   esistenzamulta INTEGER DEFAULT 0;
  2487. BEGIN
  2488.  
  2489.     modGUI.apripagina('HoC | Rimozione Multa - Esito', id_sessione, nome, ruolo);
  2490.  
  2491.     modGUI.apriintestazione(2);
  2492.  
  2493.     modGUI.inseriscitesto('RIMOZIONE MULTA - ESITO');
  2494.  
  2495.     modGUI.chiudiintestazione(2);
  2496.  
  2497.     modGUI.apridiv;
  2498.  
  2499.     SELECT COUNT(MULTE.IDMULTA)
  2500.     INTO   esistenzamulta
  2501.     FROM   MULTE
  2502.     WHERE  IDMULTA = idriga
  2503.        AND MULTE.CANCELLATO = 'F';
  2504.  
  2505.     IF esistenzamulta = 0 THEN
  2506.       modGUI.esitooperazione('KO', 'MULTA NON TROVATA NEL SISTEMA');
  2507.     ELSE
  2508.       IF tipoingresso = 'A' THEN --sono in un abbonamento
  2509.        
  2510.         SAVEPOINT aggiornamentoMulta;
  2511.        
  2512.         UPDATE MULTE
  2513.         SET    MULTE.CANCELLATO = 'T'
  2514.         WHERE  MULTE.IDMULTA = idriga;
  2515.  
  2516.         /*UPDATE INGRESSIABBONAMENTI
  2517.         SET    INGRESSIABBONAMENTI.IDMULTA = NULL
  2518.         WHERE  INGRESSIABBONAMENTI.IDMULTA = idriga;*/
  2519.  
  2520.         if(SQL%ROWCOUNT != 0)THEN
  2521.         COMMIT;
  2522.         modGUI.esitooperazione('OK', 'MULTA RIMOSSA CON SUCCESSO DAL SISTEMA');
  2523.         ELSE
  2524.         ROLLBACK TO aggiornamentoMulta;
  2525.         modGUI.esitooperazione('KO', 'ERRORE NELLA RIMOZIONE DELLA MULTA');
  2526.         END IF;
  2527.        
  2528.       ELSIF tipoingresso = 'O' THEN
  2529.      
  2530.         SAVEPOINT aggiornamentoMulta;
  2531.      
  2532.         UPDATE MULTE
  2533.         SET    MULTE.CANCELLATO = 'T'
  2534.         WHERE  MULTE.IDMULTA = idriga;
  2535.  
  2536.         /*UPDATE INGRESSIORARI
  2537.         SET    INGRESSIORARI.IDMULTA = NULL
  2538.         WHERE  INGRESSIORARI.IDMULTA = idriga;*/
  2539.  
  2540.         if(SQL%ROWCOUNT != 0)THEN
  2541.         COMMIT;
  2542.         modGUI.esitooperazione('OK', 'MULTA RIMOSSA CON SUCCESSO DAL SISTEMA');
  2543.         ELSE
  2544.         ROLLBACK TO aggiornamentoMulta;
  2545.         modGUI.esitooperazione('KO', 'ERRORE NELLA RIMOZIONE DELLA MULTA');
  2546.         END IF;
  2547.    
  2548.     ELSE
  2549.       modGUI.esitooperazione('KO', 'INGRESSO NON TROVATO NEL SISTEMA');
  2550.  
  2551.  
  2552.       END IF;
  2553.  
  2554.     END IF;
  2555.  
  2556.     modGUI.apriintestazione(3);
  2557.  
  2558.     modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2559.  
  2560.     modGUI.chiudiintestazione(3);
  2561.  
  2562.     modGUI.apridiv(TRUE);
  2563.  
  2564.     modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
  2565.  
  2566.     modGUI.chiudidiv;
  2567.  
  2568.     modGUI.chiudidiv;
  2569.  
  2570.     modGUI.chiudipagina;
  2571. END rimuovimulteexec;
  2572.  
  2573.  
  2574.  /*
  2575.  *  segnalaClienti - FRANCESCO CONSONNI
  2576.  *  La procedura permette di impostare i filtri per la segnalazione di clienti "problematici"
  2577.  */
  2578.  PROCEDURE SEGNALACLIENTI(id_sessione VARCHAR2,
  2579.                                            nome        VARCHAR2,
  2580.                                            ruolo       VARCHAR2)
  2581. IS
  2582. BEGIN
  2583.     --apro la pagina
  2584.     modGUI.apripagina('HoC | Segnala Clienti', id_sessione, nome, ruolo);
  2585.  
  2586.     modGUI.apriintestazione(2);
  2587.  
  2588.     modGUI.inseriscitesto('SEGNALA CLIENTI');
  2589.  
  2590.     modGUI.chiudiintestazione(2);
  2591.  
  2592.     modGUI.apridiv;
  2593.  
  2594.     modGUI.apriform(gruppo1||'.segnalaClientiDisplay');
  2595.  
  2596.     modGUI.inserisciinputhidden('id_sessione', id_sessione);
  2597.  
  2598.     modGUI.inserisciinputhidden('nome', nome);
  2599.  
  2600.     modGUI.inserisciinputhidden('ruolo', ruolo);
  2601.  
  2602.     modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
  2603.  
  2604.     modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
  2605.  
  2606.     --importo minimo
  2607.     --modGUI.inseriscitesto('Minimo somma degli importi multe:');
  2608.  
  2609.     modGUI.inserisciinput('minImporto', 'MINIMO SOMMA DEGLI IMPORTI (OBBLIGATORIO):', 'number', TRUE);
  2610.  
  2611.     modGUI.INSERISCIBOTTONERESET('RESET');
  2612.  
  2613.     modGUI.INSERISCIBOTTONEFORM('CERCA');
  2614.  
  2615.     modGUI.chiudiform;
  2616.  
  2617.     modGUI.chiudidiv;
  2618.  
  2619.     modGUI.chiudipagina;
  2620. END segnalaclienti;
  2621.  
  2622.  
  2623. /*
  2624.  *  segnalaClientiDisplay - FRANCESCO CONSONNI
  2625.  *  La procedura mostra i dettagli dei clienti "problematici" e fornisce un link per inserirli in blacklist rapidamente
  2626.  *
  2627.  *  Parametri
  2628.  *  @datada: data di inizio intervallo di ricerca
  2629.  *  @dataa: data di fine intervallo di ricerca
  2630.  *  @minImporto: importo minimo perchè un cliente sia "segnalato"
  2631.  */
  2632. PROCEDURE SEGNALACLIENTIDISPLAY(id_sessione VARCHAR2,
  2633.                                                   nome        VARCHAR2,
  2634.                                                   ruolo       VARCHAR2,
  2635.                                                   datada      VARCHAR2,
  2636.                                                   dataa       VARCHAR2,
  2637.                                                   minimporto  INTEGER)
  2638. IS
  2639.   dettaglicliente   clienti%ROWTYPE;
  2640.   var_datada        DATE;
  2641.   var_dataa         DATE;
  2642.   var_codicefiscale VARCHAR2(16);
  2643.   var_cognome       VARCHAR2(45);
  2644.   var_nome          VARCHAR2(45);
  2645.   var_email         VARCHAR2(45);
  2646.   var_numeropatente VARCHAR2(10);
  2647.   conteggioclienti  INTEGER DEFAULT 0;
  2648.   idClienteBlacklist  INTEGER DEFAULT 0;  
  2649. BEGIN
  2650.     var_datada := TO_DATE(datada, 'yyyy-mm-dd');
  2651.  
  2652.     var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
  2653.  
  2654.     modGUI.apripagina('HoC | Segnala Clienti - Risultato Ricerca', id_sessione,nome, ruolo);
  2655.  
  2656.     SELECT COUNT(VIEW_IDCLIENTE)
  2657.     INTO   conteggioclienti
  2658.     FROM   VISTASEGNALACLIENTI
  2659.     WHERE  VIEW_TOTMULTE >= ( VIEW_TOTINGRESSI / 2 )
  2660.        AND VIEW_TOTIMPORTO >= MINIMPORTO;
  2661.  
  2662.     --qui controllo che non siano state inserite date illegali
  2663.     IF datada > dataa THEN
  2664. modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INZIO INTERVALLO');
  2665. ELSE
  2666.   modGUI.acapo;
  2667.  
  2668.   modGUI.apriintestazione(2);
  2669.  
  2670.   modGUI.inseriscitesto('SEGNALA CLIENTI - RISULTATO RICERCA');
  2671.  
  2672.   modGUI.chiudiintestazione(2);
  2673.  
  2674.   modGUI.apridiv;
  2675.  
  2676.   modGUI.apritabella;
  2677.  
  2678.   modGUI.apririgatabella;
  2679.  
  2680.   --modGUI.intestazionetabella('cognome');
  2681.   modGUI.intestazionetabella('CLIENTE');
  2682.  
  2683.   modGUI.intestazionetabella('CODICE FISCALE');
  2684.  
  2685.   modGUI.intestazionetabella('NUMERO DI PATENTE');
  2686.  
  2687.   modGUI.intestazionetabella('NUMERO DI INGRESSI');
  2688.  
  2689.   modGUI.intestazionetabella('NUMERO DI MULTE');
  2690.  
  2691.   modGUI.intestazionetabella('IMPORTO COMPLESSIVO MULTE');
  2692.  
  2693.   modGUI.intestazionetabella('DETTAGLIO CLIENTE');
  2694.   --la lente all interno rimanda alla procedura appropriata
  2695.  
  2696.   modGUI.intestazionetabella('INSERISCI IN BLACKLIST');
  2697.   --la penna all interno rimanda alla procedura appropriata
  2698.  
  2699.   modGUI.chiudirigatabella;
  2700.  
  2701.   IF CONTEGGIOCLIENTI = 0 THEN
  2702.     modGUI.chiuditabella();
  2703.  
  2704.     modGUI.apridiv(TRUE);
  2705.  
  2706.     modGUI.inseriscitesto('NESSUN CLIENTE DA SEGNALARE');
  2707.  
  2708.     modGUI.chiudidiv;
  2709.   ELSE
  2710.     FOR clientisegnalati IN (SELECT *
  2711.                              FROM   VISTASEGNALACLIENTI
  2712.                              WHERE  VIEW_TOTMULTE >= ( VIEW_TOTINGRESSI / 2 )
  2713.                                 AND VIEW_TOTIMPORTO >= MINIMPORTO) LOOP
  2714.         --con l'id cliente noto faccio il fetch delle informazioni del cliente
  2715.         SELECT PERSONE.CODICEFISCALE,
  2716.                PERSONE.cognome,
  2717.                PERSONE.nome,
  2718.                PERSONE.EMAIL,
  2719.                CLIENTI.NUMEROPATENTE
  2720.         INTO   var_codicefiscale, var_cognome, var_nome, var_email,
  2721.                var_numeropatente
  2722.         FROM   CLIENTI
  2723.                join PERSONE
  2724.                  ON PERSONE.IDPERSONA = CLIENTI.IDPERSONA
  2725.         WHERE  CLIENTI.IDCLIENTE = CLIENTISEGNALATI.view_idcliente;
  2726.  
  2727.         modGUI.apririgatabella;
  2728.  
  2729.         modGUI.aprielementotabella;
  2730.  
  2731.         modGUI.inseriscitesto(var_nome||' '||var_cognome);
  2732.  
  2733.         modGUI.chiudielementotabella;
  2734.  
  2735.         modGUI.aprielementotabella;
  2736.  
  2737.         modGUI.inseriscitesto(VAR_CODICEFISCALE);
  2738.  
  2739.         modGUI.chiudielementotabella;
  2740.  
  2741.         modGUI.aprielementotabella;
  2742.  
  2743.         modGUI.inseriscitesto(VAR_NUMEROPATENTE);
  2744.  
  2745.         modGUI.chiudielementotabella;
  2746.  
  2747.         modGUI.aprielementotabella;
  2748.  
  2749.         modGUI.inseriscitesto(CLIENTISEGNALATI.view_totingressi);
  2750.  
  2751.         modGUI.chiudielementotabella;
  2752.  
  2753.         modGUI.aprielementotabella;
  2754.  
  2755.         modGUI.inseriscitesto(CLIENTISEGNALATI.view_totmulte);
  2756.  
  2757.         modGUI.chiudielementotabella;
  2758.  
  2759.         modGUI.aprielementotabella;
  2760.  
  2761. modGUI.inseriscitesto('&euro; '||TO_CHAR(CLIENTISEGNALATI.view_totimporto, '9990D99'));
  2762.  
  2763. modGUI.chiudielementotabella;
  2764.  
  2765. modGUI.aprielementotabella;
  2766.  
  2767. modGUI.inseriscilente('gruppo5.moreInfoClient', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
  2768.  
  2769. modGUI.chiudielementotabella;
  2770.  
  2771. modGUI.aprielementotabella;
  2772.  
  2773. SELECT count(idcliente) INTO idClienteBlacklist FROM blacklist WHERE blacklist.idcliente=CLIENTISEGNALATI.view_idcliente AND (blacklist.durata > SYSDATE OR blacklist.durata IS NULL);
  2774.  
  2775. IF idClienteBlacklist != 0 THEN
  2776. modGUI.inseriscitesto('Gia` in Blacklist');
  2777. ELSE
  2778. modGUI.inseriscipenna('gruppo5.formInsertBlacklist', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
  2779. END IF;
  2780.  
  2781. modGUI.chiudielementotabella;
  2782.  
  2783. modGUI.chiudirigatabella;
  2784. END LOOP;
  2785.  
  2786. modGUI.chiuditabella;
  2787. END IF;
  2788. END IF;
  2789.  
  2790. modGUI.apriintestazione(3);
  2791.  
  2792.   modGUI.inseriscitesto('ALTRE OPERAZIONI');
  2793.  
  2794. modGUI.chiudiintestazione(3);
  2795.  
  2796. modGUI.apridiv(TRUE);
  2797.  
  2798. modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA SEGNALAZIONE',gruppo1||'.segnalaClienti');
  2799.  
  2800. modGUI.chiudidiv;
  2801.  
  2802. modGUI.chiudidiv;
  2803.  
  2804. modGUI.chiudipagina;
  2805. END segnalaclientidisplay;
  2806.  
  2807.  /*
  2808.  *  statisticheMulte - FRANCESCO CONSONNI
  2809.  *  La procedura permette di impostare i filtri del calcolo delle statistiche delle multe
  2810.  *
  2811.  */
  2812.  PROCEDURE STATISTICHEMULTE(id_sessione VARCHAR2,
  2813.                                              nome        VARCHAR2,
  2814.                                              ruolo       VARCHAR2)
  2815. IS
  2816. BEGIN
  2817.     --apro la pagina
  2818.     modGUI.apripagina('HoC | Statistiche Multe', id_sessione, nome, ruolo);
  2819.  
  2820.     modGUI.apriintestazione(2);
  2821.  
  2822.     modGUI.inseriscitesto('STATISTICHE MULTE');
  2823.  
  2824.     modGUI.chiudiintestazione(2);
  2825.  
  2826.     modGUI.apridiv;
  2827.  
  2828.     --form di ricerca
  2829.     modGUI.apriform(gruppo1||'.statisticheMulteDisplay');
  2830.  
  2831.     modGUI.inserisciinputhidden('id_sessione', id_sessione);
  2832.  
  2833.     modGUI.inserisciinputhidden('nome', nome);
  2834.  
  2835.     modGUI.inserisciinputhidden('ruolo', ruolo);
  2836.  
  2837.     modGUI.inserisciinput('datada', 'CERCA DAL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-01-01');
  2838.  
  2839.     modGUI.inserisciinput('dataa', 'CERCA AL:', 'date', TRUE,TO_CHAR(SYSDATE, 'yyyy')||'-12-31');
  2840.  
  2841. --posso scegliere tra le singole autorimesse/tutte le autorimesse o quelle gestite da un certo responsabile
  2842. modGUI.inserisciradiobutton('VISUALIZZA STATISTICHE PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
  2843.  
  2844. modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
  2845.  
  2846. modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
  2847.  
  2848. FOR autorimessequery IN (SELECT IDautorimessa,
  2849.                                 INDIRIZZO
  2850.                          FROM   AUTORIMESSE
  2851.                          ORDER  BY IDautorimessa) LOOP
  2852.     modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
  2853.     autorimessequery.indirizzo, FALSE);
  2854. END LOOP;
  2855.  
  2856. modGUI.chiudiselect;
  2857.  
  2858. modGUI.inserisciradiobutton('VISUALIZZA LE STASTISTICHE DELLE AUTORIMESSE GESTITE DA', 'filtrodati', 'resp', FALSE);
  2859.  
  2860. modGUI.apriselect('responsabile', 'Scegli un responsabile');
  2861.  
  2862. FOR responsabiliquery IN (SELECT PERSONE.cognome         AS var_cognome,
  2863.                                  PERSONE.nome            AS var_nome,
  2864.                                  DIPENDENTI.IDDIPENDENTE AS idresponsabile
  2865.                           FROM   PERSONE
  2866.                                  inner join DIPENDENTI
  2867.                                          ON DIPENDENTI.IDPERSONA =
  2868.                                             PERSONE.IDPERSONA
  2869.                           WHERE  DIPENDENTI.TIPODIPENDENTE = 'R'
  2870.                              AND DIPENDENTI.CANCELLATO = 'F') LOOP
  2871. modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome
  2872.                                                                 ||' '
  2873.                                                                 ||responsabiliquery.var_nome, FALSE);
  2874. END LOOP;
  2875.  
  2876. modGUI.chiudiselect;
  2877.  
  2878. modGUI.INSERISCIBOTTONERESET('RESET');
  2879.  
  2880. modGUI.INSERISCIBOTTONEFORM('CERCA');
  2881.  
  2882. modGUI.chiudiform;
  2883.  
  2884. modGUI.chiudidiv;
  2885.  
  2886. modGUI.chiudipagina;
  2887. END statistichemulte;
  2888.  
  2889. /*
  2890.  *  statisticheMulteDisplay - FRANCESCO CONSONNI
  2891.  *  La procedura mostra i dati statistici delle multe filtrate dalla procedura statisticheMulte
  2892.  *
  2893.  *  Parametri
  2894.  *  @datada: data di inizio intervallo di ricerca
  2895.  *  @dataa: data di fine intervallo di ricerca
  2896.  *  @filtrodati: variabile che stabilisce se si filtrerà in base alle autorimesse o ai responsabili
  2897.  *  @autorimessa: id della autorimessa del filtro
  2898.  *  @responsabile: id del responsabile del filtro
  2899.  */
  2900.  PROCEDURE STATISTICHEMULTEDISPLAY(id_sessione  VARCHAR2,
  2901.                                                     nome         VARCHAR2,
  2902.                                                     ruolo        VARCHAR2,
  2903.                                                     datada       VARCHAR2,
  2904.                                                     dataa        VARCHAR2,
  2905.                                                     filtrodati   VARCHAR2,
  2906.                                                     autorimessa  INTEGER,
  2907.                                                     responsabile INTEGER)
  2908. IS
  2909.   --variabili che vengono valorizzate con i risultati delle query di volta in volta
  2910.   totmulte         INTEGER DEFAULT 0;
  2911.   mediamultepagate INTEGER DEFAULT 0;
  2912.   totimporto       NUMBER(6, 2) DEFAULT 0.00;
  2913.   mediaimporto     NUMBER(6, 2) DEFAULT 0.00;
  2914.   var_autorimessa  INTEGER DEFAULT NULL;
  2915.   var_responsabile INTEGER DEFAULT NULL;
  2916.   descautorimessa  VARCHAR2(100) DEFAULT NULL;
  2917.   descresponsabile VARCHAR2(100) DEFAULT NULL;
  2918.   var_datada       DATE;
  2919.   var_dataa        DATE;
  2920.   conteggiomulte   INTEGER DEFAULT 0;
  2921. BEGIN
  2922.     var_datada := TO_DATE(datada, 'yyyy-mm-dd');
  2923.  
  2924.     var_dataa := TO_DATE(dataa, 'yyyy-mm-dd');
  2925.  
  2926.     modGUI.apripagina('HoC | Statistiche Multe - Risultato Ricerca', id_sessione,nome, ruolo);
  2927.  
  2928.     --pilotando la modalità posso stabilire in base a cosa filtrare
  2929.     --qui carico i dati relativi ai filtri che verranno stampati nella tabella
  2930.     IF filtrodati = 'auto' THEN
  2931.       var_autorimessa := autorimessa;
  2932.  
  2933.       IF var_autorimessa != 0 THEN
  2934.         SELECT AUTORIMESSE.INDIRIZZO
  2935.         INTO   descautorimessa
  2936.         FROM   AUTORIMESSE
  2937.         WHERE  AUTORIMESSE.IDautorimessa = var_autorimessa;
  2938.       ELSE
  2939.         descautorimessa := 'Tutte le autorimesse';
  2940.       END IF;
  2941.     ELSE
  2942.       var_responsabile := responsabile;
  2943.  
  2944.       SELECT PERSONE.cognome
  2945.              ||' '
  2946.              ||PERSONE.nome
  2947.       INTO   descresponsabile
  2948.       FROM   PERSONE,
  2949.              DIPENDENTI
  2950.       WHERE  PERSONE.IDPERSONA = DIPENDENTI.IDPERSONA
  2951.          AND DIPENDENTI.IDDIPENDENTE = var_responsabile;
  2952.     END IF;
  2953.  
  2954.     SELECT COUNT(IDMULTA)
  2955.     INTO   conteggiomulte
  2956.     FROM   VISTASTATISTICHEMULTEDISPLAY
  2957.     WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
  2958.        AND ( IDDIPENDENTE = var_responsabile
  2959.               OR ( CASE
  2960.                      WHEN var_autorimessa = 0 THEN 0
  2961.                      ELSE 1
  2962.                    END ) = 0
  2963.               OR IDautorimessa = var_autorimessa );
  2964.  
  2965.     --qui controllo che non siano state inserite date illegali
  2966.     IF datada > dataa THEN
  2967. modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE RISPETTO A QUELLA DI INZIO INTERVALLO');
  2968. ELSE
  2969.   modGUI.acapo;
  2970.  
  2971.   modGUI.apriintestazione(2);
  2972.  
  2973.   modGUI.inseriscitesto('STATISTICHE MULTE - RISULTATO RICERCA');
  2974.  
  2975.   modGUI.chiudiintestazione(2);
  2976.  
  2977.   modGUI.apridiv;
  2978.  
  2979.   --in base ai dettagli stampo le statistiche richieste
  2980.   --trunc(timestamp) se non ha altri parametri restituisce solo una data di tipo dd/mm/yyyy
  2981.   IF CONTEGGIOMULTE = 0 THEN
  2982.     modGUI.chiuditabella();
  2983.  
  2984.     modGUI.apridiv(TRUE);
  2985.  
  2986.     modGUI.inseriscitesto('NESSUNA MULTA SU CUI CALCOLARE STATISTICHE');
  2987.  
  2988.     modGUI.chiudidiv;
  2989.   ELSE
  2990.     SELECT COUNT(IDMULTA),
  2991.            NVL(SUM(IMPORTO), 0),
  2992.            NVL(AVG(IMPORTO), 0),
  2993.            NVL(TRUNC(AVG(EXTRACT (day FROM PAGATA - dataaSSEGNAZIONE))), 0)
  2994.     INTO   totmulte, totimporto, mediaimporto, mediamultepagate
  2995.     FROM   VISTASTATISTICHEMULTEDISPLAY
  2996.     WHERE  TRUNC(dataaSSEGNAZIONE) BETWEEN var_datada AND var_dataa
  2997.        AND ( IDDIPENDENTE = var_responsabile
  2998.               OR ( CASE
  2999.                      WHEN var_autorimessa = 0 THEN 0
  3000.                      ELSE 1
  3001.                    END ) = 0
  3002.               OR IDautorimessa = var_autorimessa );
  3003.  
  3004.     --sulle righe si ha intestazione a sinistra e elemento normale a destra
  3005.     modGUI.apritabella;
  3006.  
  3007.     modGUI.apririgatabella;
  3008.  
  3009.     modGUI.intestazionetabella('STATISTICHE DI');
  3010.  
  3011.     modGUI.aprielementotabella;
  3012.  
  3013.     modGUI.elementotabella('Giorni dal '||var_datada||' al '||var_dataa);
  3014.  
  3015.     modGUI.chiudielementotabella;
  3016.  
  3017.     modGUI.chiudirigatabella;
  3018.  
  3019.     --stampo le righe che sono o autorimessa o autorimesse gestite da un certo responsabile
  3020.     IF filtrodati = 'auto' THEN
  3021.       modGUI.apririgatabella;
  3022.  
  3023.       modGUI.intestazionetabella('AUTORIMESSA DI');
  3024.  
  3025.       modGUI.aprielementotabella;
  3026.  
  3027.       modGUI.elementotabella(descautorimessa);
  3028.  
  3029.       modGUI.chiudielementotabella;
  3030.  
  3031.       modGUI.chiudirigatabella;
  3032.     ELSE
  3033.       modGUI.apririgatabella;
  3034.  
  3035.       modGUI.intestazionetabella('AUTORIMESSE GESTITE DA');
  3036.  
  3037.       modGUI.aprielementotabella;
  3038.  
  3039.       modGUI.elementotabella(descresponsabile);
  3040.  
  3041.       modGUI.chiudielementotabella;
  3042.  
  3043.       modGUI.chiudirigatabella;
  3044.     END IF;
  3045.  
  3046.     modGUI.apririgatabella;
  3047.  
  3048.     modGUI.intestazionetabella('NUMERO MULTE ASSEGNATE');
  3049.  
  3050.     modGUI.aprielementotabella;
  3051.  
  3052.     modGUI.elementotabella(TOTMULTE);
  3053.  
  3054.     modGUI.chiudielementotabella;
  3055.  
  3056.     modGUI.chiudirigatabella;
  3057.  
  3058.     modGUI.apririgatabella;
  3059.  
  3060.     modGUI.intestazionetabella('IMPORTO COMPLESSIVO MULTE');
  3061.  
  3062.     modGUI.aprielementotabella;
  3063.  
  3064.     modGUI.elementotabella('&euro; '||TO_CHAR(TOTIMPORTO, '99990D99'));
  3065.  
  3066.     modGUI.chiudielementotabella;
  3067.  
  3068.     modGUI.chiudirigatabella;
  3069.  
  3070.     modGUI.apririgatabella;
  3071.  
  3072.     modGUI.intestazionetabella('IMPORTO MEDIO MULTE');
  3073.  
  3074.     modGUI.aprielementotabella;
  3075.  
  3076.     modGUI.elementotabella('&euro; '||TO_CHAR(MEDIAIMPORTO, '99990D99'));
  3077.  
  3078.     modGUI.chiudielementotabella;
  3079.  
  3080.     modGUI.chiudirigatabella;
  3081.  
  3082.     modGUI.apririgatabella;
  3083.  
  3084.     modGUI.intestazionetabella('TEMPO MEDIO DI PAGAMENTO');
  3085.  
  3086.     modGUI.aprielementotabella;
  3087.  
  3088.     modGUI.elementotabella(MEDIAMULTEPAGATE||' Giorni');
  3089.  
  3090.     modGUI.chiudielementotabella;
  3091.  
  3092.     modGUI.chiudirigatabella;
  3093.  
  3094.     modGUI.chiuditabella;
  3095.   END IF;
  3096. END IF;
  3097.  
  3098. modGUI.apriintestazione(3);
  3099.  
  3100. modGUI.inseriscitesto('ALTRE OPERAZIONI');
  3101.  
  3102. modGUI.chiudiintestazione(3);
  3103.  
  3104. --con questo form fornisco un pulsante che fa tornare alla pagina di ricerca, mi trascino dietro solo le variabili di sessione
  3105. modGUI.apridiv(TRUE);
  3106.  
  3107. modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA STATISTICA',gruppo1||'.statisticheMulte');
  3108.  
  3109. modGUI.chiudidiv;
  3110.  
  3111. modGUI.chiudidiv;
  3112.  
  3113. modGUI.chiudipagina;
  3114. END statistichemultedisplay;
  3115.  
  3116.  
  3117. --------FINE FRANCESCO CONSONNI--------
  3118.  
  3119.  
  3120. --------------- INIZIO ALESSANDRO PUCCIA  -------------------------
  3121.  
  3122. /*
  3123.     Funzione che verifica l'esistenza o meno di un'autorimessa
  3124.     @param: var_autorimessa = indirizzo dell'autorimessa
  3125.     @return: true se l'autorimessa esiste, false altrimenti
  3126. */
  3127. FUNCTION checkAutorimessa(var_autorimessa VARCHAR2) RETURN BOOLEAN IS
  3128.     var_contaAutorimessa INTEGER;
  3129. BEGIN
  3130.     SELECT COUNT(idAutorimessa) INTO var_contaAutorimessa
  3131.     FROM Autorimesse
  3132.     WHERE indirizzo = var_autorimessa;
  3133.  
  3134.     RETURN var_contaAutorimessa = 1;
  3135. END checkAutorimessa;
  3136.  
  3137. /*
  3138.     Funzione che verifica l'esistenza o meno di un cliente
  3139.     @param: var_cliente = codice fiscale del cliente
  3140.     @return: true se il cliente esiste, false altrimenti
  3141. */
  3142. FUNCTION checkCliente(var_cliente VARCHAR2) RETURN BOOLEAN IS
  3143.     var_contaCliente INTEGER;
  3144. BEGIN
  3145.     SELECT COUNT(idCliente) INTO var_contaCliente
  3146.     FROM Clienti
  3147.     INNER JOIN Persone ON clienti.idPersona = persone.idPersona
  3148.     WHERE codiceFiscale = var_cliente;
  3149.  
  3150.     RETURN var_contaCliente = 1;
  3151. END checkCliente;
  3152.  
  3153. /*
  3154.     Funzione che verifica l'esistenza e la proprieta' di un veicolo
  3155.     @param: var_targa = targa del veicolo
  3156.     @return: true se il veicolo esiste, false altrimenti
  3157. */
  3158. FUNCTION checkTarga(var_targa VARCHAR2, var_cliente VARCHAR2) RETURN BOOLEAN IS
  3159.     var_contaTarga INTEGER;
  3160. BEGIN
  3161.     IF var_cliente IS NOT NULL THEN
  3162.         SELECT COUNT(veicoli.idVeicolo) INTO var_contaTarga
  3163.         FROM Veicoli
  3164.         INNER JOIN veicoliClienti ON veicoli.idveicolo = veicoliclienti.idVeicolo
  3165.         INNER JOIN clienti ON veicoliclienti.idcliente = clienti.idcliente
  3166.         INNER JOIN persone ON clienti.idpersona = persone.idpersona
  3167.         WHERE targa = var_targa AND codicefiscale = var_cliente;
  3168.     ELSE
  3169.         SELECT COUNT(veicoli.idVeicolo) INTO var_contaTarga
  3170.         FROM Veicoli
  3171.         WHERE targa = var_targa;
  3172.     END IF;
  3173.     RETURN var_contaTarga = 1;
  3174. END checkTarga;
  3175.  
  3176. /*
  3177.     Converte il timestamp ricevuto in input in secondi, considerando l'ora, i minuti e i secondi.
  3178.     @param: var_ora = il timestamp da convertire e di cui mi interessa solamente l'ora, i minuti e i secondi
  3179.     @return: un intero che rappresenta la conversione, in secondi, del timestamp
  3180. */
  3181. FUNCTION convertiOraInSecondi(var_ora TIMESTAMP) RETURN INTEGER IS
  3182. BEGIN
  3183.     RETURN (EXTRACT(HOUR FROM var_ora) * 3600) +
  3184.             (EXTRACT(MINUTE FROM var_ora) * 60) +
  3185.             EXTRACT(SECOND FROM var_ora);
  3186. END convertiOraInSecondi;
  3187.  
  3188. /*
  3189.     Calcola la percentuale di ingressi orari con prenotazione dal punto di vista del cliente
  3190.     @param: var_idCliente = id del cliente di cui mi interessano gli ingressi orari
  3191.     @param: var_anno = anno degli ingressi che mi interessano
  3192. */
  3193. FUNCTION calcoloInfoPrenotCliente(var_idCliente VARCHAR2, var_anno VARCHAR2) RETURN rec_prenot IS
  3194.     -- record che andra' a contenere le informazioni di tutte le prenotazioni fatte dal cliente identificato da var_idcliente
  3195.     -- durante l'anno specificato da var_anno
  3196.     infoPrenotazioni rec_prenot;
  3197. BEGIN
  3198.     SELECT COUNT(ingressiorari.entrataprevista), COUNT(*), AVG(COUNT(ingressiorari.entrataprevista)) * 100
  3199.         INTO infoPrenotazioni.var_conPrenotazione, infoPrenotazioni.var_totale, infoPrenotazioni.var_percentuale
  3200.     FROM ingressiorari
  3201.     INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  3202.     WHERE
  3203.         -- considero solo gli ingressi fatti dal cliente identificato da var_idCliente
  3204.         effettuaingressiorari.idcliente = var_idcliente AND
  3205.         -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
  3206.         -- vengono considerati anche gli ingressiorari che sono ancora in corso, cioè con l'ora di uscita pari a NULL
  3207.         (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT(YEAR FROM orauscita) = var_anno) AND
  3208.         ingressiorari.cancellato = 'F'
  3209.     GROUP BY ingressiorari.entrataprevista;
  3210.  
  3211.     -- calcolo gli ingressi senza prenotazione
  3212.     infoPrenotazioni.var_senzaPrenotazione := infoPrenotazioni.var_totale - infoPrenotazioni.var_conPrenotazione;
  3213.  
  3214.     RETURN infoPrenotazioni;
  3215. END calcoloInfoPrenotCliente;
  3216.  
  3217. /*
  3218.     Calcola le informazioni sugli ingressi orari con prenotazione, dal punto di vista dell'autorimessa, che sono stati
  3219.     fatti in un dato anno
  3220.     @param: var_idAutorimessa = identificativo dell'autorimessa di cui mi interessano gli ingressi orari
  3221.     @param: var_anno = anno degli ingressi che mi interessano
  3222. */
  3223. FUNCTION calcoloInfoPrenotAutorim(var_idAutorimessa VARCHAR2, var_anno VARCHAR2) RETURN rec_prenot IS
  3224.     -- record che andra' a contenere le informazioni di tutte le prenotazioni fatte dal cliente identificato da var_idcliente
  3225.     -- durante l'anno specificato da var_anno
  3226.     infoPrenotazioni rec_prenot;
  3227. BEGIN
  3228.     SELECT COUNT(entrataPrevista), COUNT(*), AVG(COUNT(entrataprevista)) * 100
  3229.         INTO infoPrenotazioni.var_conPrenotazione, infoPrenotazioni.var_totale, infoPrenotazioni.var_percentuale
  3230.     FROM ingressiOrari
  3231.     INNER JOIN box ON ingressiOrari.idBox = box.idBox
  3232.     INNER JOIN aree ON box.idArea = aree.idArea
  3233.     INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
  3234.     WHERE
  3235.         -- considero solamente gli ingressi che vengono fatti nell'autorimessa identificata da var_idAutorimessa
  3236.         autorimesse.idAutorimessa = var_idAutorimessa AND
  3237.         -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
  3238.         -- vengono considerati anche gli ingressiorari che sono ancora in corso, cioè con l'ora di uscita pari a NULL
  3239.         (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT(YEAR FROM orauscita) = var_anno) AND
  3240.         ingressiorari.cancellato = 'F'
  3241.     GROUP BY ingressiOrari.entrataPrevista;
  3242.  
  3243.     -- calcolo gli ingressi senza prenotazione
  3244.     infoPrenotazioni.var_senzaPrenotazione := infoPrenotazioni.var_totale - infoPrenotazioni.var_conPrenotazione;
  3245.  
  3246.     RETURN infoPrenotazioni;
  3247. END calcoloInfoPrenotAutorim;
  3248.  
  3249. /*
  3250.     Calcola il tempo medio di permanenza degli ingressi orari, dal punto di vista dei mesi, che sono stati fatti in una
  3251.     determinata autorimessa e in un periodo di tempo che include l'anno passato come input
  3252.  
  3253.     @param(var_autorimessa): indirizzo dell'autorimessa di cui mi interessano gli ingressi orari
  3254.     @param(var_anno): anno di cui mi interessano gli ingressi orari
  3255.     @return: array di 12 posizioni contentente la media, in secondi, per ogni mese dell'anno specificato da var_anno
  3256. */
  3257. FUNCTION calcoloTempoMese(var_autorimessa VARCHAR2, var_anno INTEGER) RETURN array_int IS
  3258.     CURSOR cur_ingressi IS
  3259.         SELECT oraentrata, orauscita
  3260.         FROM ingressiorari
  3261.         INNER JOIN box ON ingressiorari.idbox = box.idbox
  3262.         INNER JOIN aree ON box.idarea = aree.idarea
  3263.         INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  3264.         WHERE
  3265.             orauscita IS NOT NULL AND
  3266.             -- considero solamente gli ingressi effettuati nell'autorimessa di indirizzo specificato da var_autorimessa
  3267.             autorimesse.indirizzo = var_autorimessa AND
  3268.             -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
  3269.             -- vengono considerati sia ingressi orari con prenotazione che senza
  3270.             (var_anno = EXTRACT(YEAR FROM oraentrata) OR var_anno = EXTRACT(YEAR FROM orauscita)) AND
  3271.             ingressiorari.cancellato = 'F';
  3272.  
  3273.     -- array che conterra' la media per ogni mese in secondi
  3274.     var_calcoloSecondi array_int := array_int();
  3275.     -- array che conterra' il numero di ingressi per quel mese, nel caso di ingressi a cavallo tra due o piu' mesi si considera
  3276.     -- un ingresso per ogni mese "attraversato"
  3277.     var_contatoriIngressi array_int := array_int();
  3278.  
  3279.     -- conterra' l'anno in cui e' stata registrata l'ora di entrata
  3280.     var_annoEntrata INTEGER;
  3281.     -- conterra' l'anno in cui e' stata registrata l'ora di uscita
  3282.     var_annoUscita INTEGER;
  3283.  
  3284.     -- conterra' il mese in cui e' stata registrata l'ora di entrata
  3285.     var_meseEntrata INTEGER;
  3286.     -- conterra' il mese in cui e' stata registrata l'ora di uscita
  3287.     var_meseUscita INTEGER;
  3288.  
  3289.     -- Conterra' l'ultimo giorno del mese X nel caso in cui l'entrata e uscita avvengono in mesi diversi
  3290.     --      OPPURE
  3291.     -- Conterra' l'ultimo giorno del mese di Dicembre (caso limite entrata e uscita a cavallo tra due anni e interessa
  3292.     --  il tempo medio dell'anno di entrata
  3293.     -- In ENTRAMBI i casi la componente indicante l'ora sara'� settata a 23:59:59
  3294.     var_ultimoGiorno DATE;
  3295.     -- Conterra' il primo giorno del mese Y nel caso in cui l'entrata e uscita avvengono in mesi diversi
  3296.     --      OPPURE
  3297.     -- Conterra' il primo giorno del mese di Gennaio (caso limite entrata e uscita a cavallo tra due anni e interessa
  3298.     --  il tempo medio dell'anno di uscita
  3299.     -- In ENTRAMBI i casi la componente indicante l'ora sara'� settata a 0:0:0
  3300.     var_primoGiorno DATE;
  3301. BEGIN
  3302.     FOR i IN 1..12
  3303.     LOOP
  3304.         -- inizializzo l'array che conterra' la media
  3305.         var_calcoloSecondi.extend();
  3306.         var_calcoloSecondi(i) := 0;
  3307.  
  3308.         -- inizializzo l'array di contatori degli ingressi
  3309.         var_contatoriIngressi.extend();
  3310.         var_contatoriIngressi(i) := 0;
  3311.     END LOOP;
  3312.  
  3313.     FOR row_ingressi IN cur_ingressi
  3314.     LOOP
  3315.         -- estraggo l'anno dall'ora di entrata
  3316.         var_annoEntrata := EXTRACT(YEAR FROM row_ingressi.oraEntrata);
  3317.         -- estraggo l'anno dall'ora di uscita
  3318.         var_annoUscita := EXTRACT(YEAR FROM row_ingressi.oraUscita);
  3319.  
  3320.         IF var_annoEntrata = var_annoUscita THEN
  3321.             -- caso in cui l'ingresso e l'uscita avvengono nello stesso anno
  3322.  
  3323.             -- estraggo il mese dall'ora di entrata
  3324.             var_meseEntrata := EXTRACT(MONTH FROM row_ingressi.oraEntrata);
  3325.             -- estraggo il mese dall'ora di uscita
  3326.             var_meseUscita := EXTRACT(MONTH FROM row_ingressi.oraUscita);
  3327.  
  3328.             IF var_meseEntrata != var_meseUscita THEN
  3329.                 -- caso in cui l'ingresso e l'uscita sono in mesi diversi
  3330.  
  3331.                 -- ottengo il primo giorno del mese di uscita
  3332.                 var_primoGiorno := TRUNC(row_ingressi.oraUscita , 'MM');
  3333.                 -- ottengo l'ultimo giorno del mese di ingresso
  3334.                 var_ultimoGiorno := TO_DATE(TO_CHAR((LAST_DAY(CAST(row_ingressi.oraEntrata AS DATE))),
  3335.                                         'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS');
  3336.  
  3337.                 FOR i IN var_meseEntrata .. var_meseUscita
  3338.                 LOOP
  3339.                     -- scorro tra i mesi di permanenza per calcolare i tempi
  3340.  
  3341.                     IF i = var_meseEntrata THEN
  3342.                         -- sono nel mese in cui il cliente entra
  3343.  
  3344.                         -- aggiungo una parte di secondi a quel mese
  3345.                         var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3346.                             ((var_ultimoGiorno - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
  3347.                     ELSIF i = var_meseUscita THEN
  3348.                         -- sono nel mese in cui il cliente esce
  3349.  
  3350.                         -- aggiungo una parte di secondi a quel mese
  3351.                         var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3352.                             ((CAST(row_ingressi.orauscita AS DATE) - var_primoGiorno) * 86400);
  3353.                     ELSE
  3354.                         -- tutti i mesi nel mezzo
  3355.  
  3356.                         -- aggiungo TUTTI i secondi del mese
  3357.                         var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3358.                             (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
  3359.                     END IF;
  3360.  
  3361.                     -- +1 al contatore di quell'ingresso
  3362.                     var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
  3363.                 END LOOP;
  3364.             ELSE
  3365.                 -- caso in cui l'ingresso e l'uscita sono nello stesso mese
  3366.  
  3367.                 -- aggiungo TUTTI i secondi dell'ingresso a quel mese.
  3368.                 var_calcoloSecondi(var_meseEntrata) := var_calcoloSecondi(var_meseEntrata) +
  3369.                     ((CAST(row_ingressi.orauscita AS DATE) - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
  3370.  
  3371.                 -- +1 al contatore per quel mese
  3372.                 var_contatoriIngressi(var_meseEntrata) := var_contatoriIngressi(var_meseEntrata) + 1;
  3373.             END IF;
  3374.         ELSIF var_annoEntrata = var_anno THEN
  3375.             -- caso in cui l'entrata e l'uscita son in 2 anni diversi, "spezzo" l'ingresso considerando solo l'anno di entrata
  3376.  
  3377.             -- estraggo il mese di entrata
  3378.             var_meseEntrata := EXTRACT(MONTH FROM row_ingressi.oraEntrata);
  3379.             -- mi interessa il tempo medio riferito all'anno di entrata, quindi l'ingresso "termina" al mese di Dicembre
  3380.             var_meseUscita := 12;
  3381.  
  3382.             -- ottengo l'ultimo giorno del mese di ingresso
  3383.             var_ultimoGiorno := TO_DATE(TO_CHAR((LAST_DAY(CAST(row_ingressi.oraentrata AS DATE))),
  3384.                                                   'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS');
  3385.  
  3386.             FOR i IN var_meseEntrata .. var_meseUscita
  3387.             LOOP
  3388.                 -- scorro tra i mesi di permanenza per calcolare i tempi
  3389.  
  3390.                 IF i = var_meseEntrata THEN
  3391.                     -- sono nel mese in cui il cliente entra
  3392.  
  3393.                     -- aggiungo una parte di secondi al mese di entrata
  3394.                     var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3395.                         ((var_ultimoGiorno - CAST(row_ingressi.oraentrata AS DATE)) * 86400);
  3396.                 ELSE
  3397.                     -- tutti gli altri mesi
  3398.  
  3399.                     -- aggiungo tutti i secondi del mese
  3400.                     var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3401.                         (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
  3402.                 END IF;
  3403.  
  3404.                 -- +1 al contatore degli ingressi i
  3405.                 var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
  3406.             END LOOP;
  3407.         ELSIF var_annoUscita = var_anno THEN
  3408.             -- caso in cui l'entrata e l'uscita son in 2 anni diversi, "spezzo" l'ingresso considerando solo l'anno di uscita
  3409.  
  3410.             -- mi interessa il tempo medio riferito all'anno di uscita, quindi l'ingresso "inizia" al mese di Gennaio
  3411.             var_meseEntrata := 1;
  3412.             -- estraggo il mese di uscita
  3413.             var_meseUscita := EXTRACT(MONTH FROM row_ingressi.orauscita);
  3414.  
  3415.             -- ottengo il primo giorno del mese di uscita
  3416.             var_primoGiorno := TRUNC(row_ingressi.orauscita , 'MM');
  3417.  
  3418.             FOR i IN var_meseEntrata .. var_meseUscita
  3419.             LOOP
  3420.                 -- scorro tra i vari mesi di permanenza per calcolare i tempi
  3421.  
  3422.                 IF i = var_meseUscita THEN
  3423.                     -- sono nel mese in cui il cliente esce
  3424.  
  3425.                     -- aggiungo una parte di secondi al mese di uscita
  3426.                     var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3427.                         ((CAST(row_ingressi.orauscita AS DATE) - var_primoGiorno) * 86400);
  3428.                 ELSE
  3429.                     -- tutti gli altri mesi
  3430.  
  3431.                     -- aggiungo TUTTI i secondi al mese.
  3432.                     var_calcoloSecondi(i) := var_calcoloSecondi(i) +
  3433.                         (CAST(TO_CHAR(LAST_DAY(TO_DATE(i, 'MM')),'DD') AS INT) * 86400);
  3434.                 END IF;
  3435.  
  3436.                 -- +1 al contatore degli ingressi per il mese i
  3437.                 var_contatoriIngressi(i) := var_contatoriIngressi(i) + 1;
  3438.             END LOOP;
  3439.         END IF;
  3440.     END LOOP;
  3441.  
  3442.     FOR i IN 1..12
  3443.     LOOP
  3444.         -- calcolo la media per ogni mese rispetto al numero di ingressi di quel mese
  3445.         IF (var_contatoriIngressi(i) != 0) THEN
  3446.             var_calcoloSecondi(i) := TRUNC(var_calcoloSecondi(i) / var_contatoriIngressi(i));
  3447.         END IF;
  3448.     END LOOP;
  3449.  
  3450.     RETURN var_calcoloSecondi;
  3451. END calcoloTempoMese;
  3452.  
  3453. /*
  3454.     calcola il tempo medio di permanenza degli ingressi, secondo le fasce orarie, che sono stati fatti in una determinata
  3455.     autorimessa e in un periodo di tempo che include l'anno passato come input
  3456.  
  3457.     @param(var_autorimessa): indirizzo dell'autorimessa di cui mi interessano gli ingressi orari
  3458.     @param(var_anno): anno di cui mi interessano gli ingressi orari
  3459.     @return: array di 12 posizioni contentente la media, in secondi, per ogni fascia oraria degli ingressi con anno specificato
  3460.         da var_anno
  3461. */
  3462. FUNCTION calcoloTempoFascia(var_autorimessa VARCHAR2, var_anno VARCHAR2) RETURN nested_fasce IS
  3463.     CURSOR cur_ingressi IS
  3464.     SELECT oraentrata, orauscita
  3465.         FROM ingressiorari
  3466.         INNER JOIN box ON ingressiorari.idbox = box.idbox
  3467.         INNER JOIN aree ON box.idarea = aree.idarea
  3468.         INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  3469.         WHERE
  3470.             -- vengono considerati solamente gli ingressi portati a termine!!!
  3471.             orauscita IS NOT NULL AND
  3472.             -- considero solamente gli ingressi effettuati nell'autorimessa di indirizzo specificato da var_autorimessa
  3473.             autorimesse.indirizzo = var_autorimessa AND
  3474.             -- considero solo gli ingressi che hanno l'anno di entrata o uscita uguale a quello specificato in var_anno
  3475.             -- vengono considerati sia ingressi orari con prenotazione che senza
  3476.             (var_anno = EXTRACT(YEAR FROM oraentrata) OR var_anno = EXTRACT(YEAR FROM orauscita)) AND
  3477.             ingressiorari.cancellato = 'F';
  3478.  
  3479.     -- contiene tutte le fasce orarie
  3480.     CURSOR cur_fasce IS
  3481.     SELECT fasceorarie.idfasciaoraria, fasceorarie.nome, orainizio, orafine, giorno
  3482.     FROM fasceorarie;
  3483.  
  3484.     -- array che conterra' la media per ogni mese in secondi
  3485.     var_calcoloSecondi nested_fasce := nested_fasce();
  3486.     -- array che conterra' il numero di ingressi per quel mese, nel caso di ingressi a cavallo tra più fasce si considera
  3487.     -- un ingresso per ogni fascia "attraversata"
  3488.     var_contatoriIngressi nested_fasce := nested_fasce();
  3489.  
  3490.     -- conterra' l'anno in cui avviene l'entrata
  3491.     var_annoEntrata INTEGER;
  3492.     -- conterra' l'anno in cui avviene l'uscita
  3493.     var_annoUscita INTEGER;
  3494.  
  3495.     -- conterra' la componente dell'ora in cui viene effettuata l'entrata (trasformata in secondi)
  3496.     var_oraEntrata INTEGER;
  3497.     -- conterra' la componente dell'ora in cui viene effettuata l'uscita (trasformata in secondi)
  3498.     var_oraUscita INTEGER;
  3499.  
  3500.     -- conterra' l'ora di inizio della fascia oraria (trasformata in secondi)
  3501.     var_oraInizioFascia INTEGER;
  3502.     -- conterra' l'ora di fine della fascia oraria (trasformata in secondi)
  3503.     var_oraFineFascia INTEGER;
  3504.  
  3505.     -- conterra' il numero di giorni che intercorrono tra l'entrata e l'uscita
  3506.     var_giorni INTEGER;
  3507.  
  3508.     -- conterra' il giorno da analizzare (per capire la/e fascia/e di appartenenza)
  3509.     var_giornoCorrente TIMESTAMP;
  3510.  
  3511.     var_numeroFasce INTEGER;
  3512. BEGIN
  3513.     SELECT COUNT(*) INTO var_numeroFasce
  3514.     FROM fasceOrarie;
  3515.  
  3516.     FOR i IN 1 .. var_numeroFasce
  3517.     LOOP
  3518.         -- inizializzo la collezione che conterra' la media
  3519.         var_calcoloSecondi.extend();
  3520.         var_calcoloSecondi(i) := 0;
  3521.  
  3522.         -- inizializzo la collezione che conterra' il numero di ingressi per ogni fascia
  3523.         var_contatoriIngressi.extend();
  3524.         var_contatoriIngressi(i) := 0;
  3525.     END LOOP;
  3526.  
  3527.     FOR row_ingressi IN cur_ingressi
  3528.     LOOP
  3529.         -- inizializzo var_giornoCorrente al timestamp di entrata
  3530.         var_giornoCorrente := row_ingressi.oraEntrata;
  3531.  
  3532.         -- anno in cui viene effettuata l'entrata
  3533.         var_annoEntrata := EXTRACT(YEAR FROM row_ingressi.oraEntrata);
  3534.         -- anno in cui viene effettuata l'uscita
  3535.         var_annoUscita := EXTRACT(YEAR FROM row_ingressi.oraUscita);
  3536.  
  3537.         IF var_annoEntrata = var_annoUscita THEN
  3538.             -- sono nel caso in cui l'entrata e l'uscita avvengono nello stesso anno
  3539.  
  3540.             -- Calcolo la differenza in giorni tra il timestamp di uscita e entrata
  3541.             -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
  3542.             -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
  3543.             var_giorni := TO_DATE(TO_CHAR(row_ingressi.oraUscita, 'DD-MON-RR'), 'DD-MON-RR') -
  3544.                     TO_DATE(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR'), 'DD-MON-RR');
  3545.         ELSIF var_annoEntrata = var_anno THEN
  3546.             -- sono nel caso in cui l'entrata e l'uscita avvengono in anni diversi, l'anno da considerare e' quello di
  3547.             -- entrata
  3548.  
  3549.             -- Considero l'ingresso come se terminasse a Dicembre
  3550.             -- Calcolo la differenza tra il 31 Dicembre e il timestamp di entrata
  3551.             -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
  3552.             -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
  3553.             var_giorni := TO_DATE('31-DIC-' || var_anno, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian') -
  3554.                     TO_DATE(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR'), 'DD-MON-RR');
  3555.         ELSIF var_annoUscita = var_anno THEN
  3556.             -- sono nel caso in cui l'entrata e l'uscita avvengono in anni diversi, l'anno da considerare e' quello di
  3557.             -- uscita
  3558.  
  3559.             -- Considero l'ingresso come se iniziasse a Gennaio
  3560.             -- Calcolo la differenza tra il timestamp di uscita e il 1 Gennaio
  3561.             -- Occorre eliminare la componente dell'ora perche' avrei errore di tipo ad assegnarlo a un INTEGER
  3562.             -- Occorre castare a DATE perche' la differenza tra due TIMESTAMP da un tipo INTERVAL
  3563.             var_giorni := TO_DATE(TO_CHAR(row_ingressi.oraUscita, 'DD-MON-RR'), 'DD-MON-RR') -
  3564.                     TO_DATE('1-GEN-' || var_anno, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian');
  3565.         END IF;
  3566.  
  3567.         FOR i IN 0 .. var_giorni
  3568.         LOOP
  3569.             -- scorro tra tutti i giorni di permanenza
  3570.  
  3571.             IF var_giorni = 0 AND var_annoEntrata = var_annoUscita THEN
  3572.                 -- caso in cui l'entrata e l'uscita avvengono nello stesso giorno, stesso anno
  3573.  
  3574.                 -- calcolo l'ora di entrata in secondi
  3575.                 var_oraEntrata := convertiOraInSecondi(row_ingressi.oraEntrata);
  3576.                 -- calcolo l'ora di uscita in secondi
  3577.                 var_oraUscita := convertiOraInSecondi(row_ingressi.oraUscita);
  3578.             ELSIF i = 0 AND var_annoEntrata = var_anno THEN
  3579.                 -- caso in cui l'entrata e l'uscita avvengono in giorni diversi e mi interessa l'anno di entrata,
  3580.                 -- sto considerando il primo giorno
  3581.  
  3582.                 -- calcolo l'ora di entrata in secondi
  3583.                 var_oraEntrata := convertiOraInSecondi(row_ingressi.oraentrata);
  3584.                 -- ora di uscita, in secondi, in questo caso corrisponde a 86399 (23:59:59)
  3585.                 var_oraUscita := 86399;
  3586.             ELSIF i = var_giorni AND var_annoUscita = var_anno THEN
  3587.                 -- caso in cui l'entrata e l'uscita avvengono in giorni diversi e mi interessa l'anno di uscita,
  3588.                 -- sto considerando l'ultimo giorno
  3589.  
  3590.                 -- ora di entrata in questo caso corrisponde a zero
  3591.                 var_oraEntrata := 0;
  3592.                 -- calcolo l'ora di uscita in secondi
  3593.                 var_oraUscita := convertiOraInSecondi(row_ingressi.orauscita);
  3594.             ELSE
  3595.                 -- caso in cui l'entrata e l'uscita avvengono in giorni diversi, sto considerando il giorno nel mezzo
  3596.  
  3597.                 -- ora di entrata, in secondi, in questo caso corrisponde a zero
  3598.                 var_oraEntrata := 0;
  3599.                 -- ora di uscita, in secondi, in questo caso corrisponde a 86399 (23:59:59)
  3600.                 var_oraUscita := 86399;
  3601.             END IF;
  3602.                 FOR row_fasce IN cur_fasce
  3603.                 LOOP
  3604.                     -- scorro tra tutte le fasce valide per quel determinato giorno
  3605.  
  3606.                     IF row_fasce.giorno = TO_CHAR(var_giornoCorrente, 'DY', 'NLS_DATE_LANGUAGE = italian') THEN
  3607.                         -- ora di inizio della fascia, espressa in secondi
  3608.                         var_oraInizioFascia := convertiOraInSecondi(row_fasce.oraInizio);
  3609.                         -- ora di fine della fascia, espressa in secondi
  3610.                         var_oraFineFascia := convertiOraInSecondi(row_fasce.oraFine);
  3611.  
  3612.                         IF (var_oraEntrata >= var_oraInizioFascia AND var_oraUscita <= var_oraFineFascia) THEN
  3613.                             -- caso in cui l'entrata e l'uscita avvengono nella stessa fascia oraria
  3614.  
  3615.                             -- aggiungo tutti i secondi dell'ingresso a quella fascia
  3616.                             var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
  3617.                                 + var_oraUscita - var_oraEntrata;
  3618.  
  3619.                             -- +1 al contatore degli ingressi della fascia
  3620.                             var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
  3621.                         ELSIF (var_oraEntrata >= var_oraInizioFascia AND var_oraEntrata <= var_oraFineFascia) THEN
  3622.                             -- caso in cui l'entrata avviene in una fascia oraria diversa da quella di uscita
  3623.  
  3624.                             -- aggiungo solamente la parte iniziale dell'ingresso a quella fascia
  3625.                             var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
  3626.                                 + var_oraFineFascia - var_oraEntrata;
  3627.  
  3628.                             -- +1 al contatore degli ingressi della fascia
  3629.                             var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
  3630.                         ElSIF (var_oraUscita >= var_oraInizioFascia AND var_oraUscita <= var_oraFineFascia) THEN
  3631.                             -- caso in cui l'uscita avviene in una fascia oraria diversa da quella di entrata
  3632.  
  3633.                             -- aggiungo solamente la parte finale dell'ingresso a quella fascia
  3634.                             var_calcoloSecondi(row_fasce.idfasciaoraria) := var_calcoloSecondi(row_fasce.idfasciaoraria)
  3635.                                 + var_oraUscita - var_oraInizioFascia;
  3636.  
  3637.                             -- +1 al contatore degli ingressi della fascia
  3638.                             var_contatoriIngressi(row_fasce.idfasciaoraria) := var_contatoriIngressi(row_fasce.idfasciaoraria) + 1;
  3639.                         ELSE
  3640.                             -- casi in cui la fascia che sto considerando non mi è utile
  3641.                             EXIT;
  3642.                         END IF;
  3643.                     END IF;
  3644.                 END LOOP;
  3645.  
  3646.             -- avanzo di un giorno
  3647.             var_giornoCorrente := var_giornoCorrente + INTERVAL '1' DAY;
  3648.         END LOOP;
  3649.     END LOOP;
  3650.  
  3651.     FOR i IN 1 .. 12
  3652.     LOOP
  3653.         -- calcolo la media rispetto agli ingressi che si sono avuti in quella fascia
  3654.         IF (var_contatoriIngressi(i) != 0) THEN
  3655.             var_calcoloSecondi(i) := TRUNC(var_calcoloSecondi(i) / var_contatoriIngressi(i));
  3656.         END IF;
  3657.     END LOOP;
  3658.  
  3659.     RETURN var_calcoloSecondi;
  3660. END calcoloTempoFascia;
  3661.  
  3662. PROCEDURE dettagliXGiorni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  3663. BEGIN
  3664.     modGUI.apriPagina('HoC | Visualizza dettagli ingressi maggiori di X giorni', id_Sessione, nome, ruolo);
  3665.     modGUI.aCapo;
  3666.    
  3667.     modGUI.apriIntestazione(2);
  3668.         modGUI.inserisciTesto('VISUALIZZA DETTAGLI INGRESSI MAGGIORI DI X GIORNI');
  3669.     modGUI.chiudiIntestazione(2);
  3670.    
  3671.     modGUI.apriDiv;
  3672.  
  3673.     modGUI.apriForm('gruppo1.visualizzaDettagliXGiorni');
  3674.  
  3675.     modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3676.     modGUI.inserisciInputHidden('nome', nome);
  3677.     modGUI.inserisciInputHidden('ruolo', ruolo);
  3678.  
  3679.     -- input del numero di giorni che si andranno a considerare per gli ingressi
  3680.     modGUI.inserisciInput('var_giorni', 'Giorni', 'number', TRUE);
  3681.  
  3682.     modGUI.inserisciBottoneReset;
  3683.     modGUI.inserisciBottoneForm('RICERCA');
  3684.     modGUI.chiudiForm;
  3685.  
  3686.     modGUI.chiudiDiv;
  3687.  
  3688.     modGUI.chiudiPagina;
  3689. END dettagliXGiorni;
  3690.  
  3691. PROCEDURE permanenzaNonAbbonati(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  3692. BEGIN
  3693.     modGUI.apriPagina('HoC | Statistiche permanenza', id_Sessione, nome, ruolo);
  3694.     modGUI.aCapo;
  3695.    
  3696.     modGUI.apriIntestazione(2);
  3697.         modGUI.inserisciTesto('TEMPO MEDIO PERMANENZA NON ABBONATI');
  3698.     modGUI.chiudiIntestazione(2);
  3699.    
  3700.     IF ruolo = 'A' OR ruolo = 'S' THEN
  3701.         DECLARE
  3702.             CURSOR cur_autorimesse IS
  3703.                 SELECT autorimesse.indirizzo
  3704.                 FROM autorimesse
  3705.                 ORDER BY autorimesse.indirizzo;
  3706.                    
  3707.             -- l'amministratore e superuser potranno vedere tutti gli anni degli ingressi.
  3708.             CURSOR cur_anni IS
  3709.                 SELECT DISTINCT EXTRACT(YEAR FROM oraentrata) AS anno
  3710.                 FROM ingressiorari
  3711.                 WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
  3712.                 UNION
  3713.                 SELECT DISTINCT EXTRACT(YEAR FROM orauscita) AS anno
  3714.                 FROM ingressiOrari
  3715.                 WHERE oraentrata IS NOT NULL AND oraUscita IS NOT NULL;
  3716.                    
  3717.             row_anno cur_anni%ROWTYPE;
  3718.         BEGIN
  3719.             OPEN cur_anni;
  3720.             FETCH cur_anni INTO row_anno;
  3721.                
  3722.             IF cur_anni%ROWCOUNT = 0 THEN
  3723.                 modGUI.apriIntestazione(3);
  3724.                     modGUI.inserisciTesto('Non ci sono ingressi registrati per nessuna autorimessa');
  3725.                 modGUI.chiudiIntestazione(3);
  3726.                 modGUI.chiudiPagina;
  3727.                 CLOSE cur_anni;
  3728.                 RETURN;
  3729.             END IF;
  3730.             modGUI.apriDiv;
  3731.             modGUI.apriForm('gruppo1.visualizzaPermanenza');
  3732.             modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3733.             modGUI.inserisciInputHidden('nome', nome);
  3734.             modGUI.inserisciInputHidden('ruolo', ruolo);
  3735.                
  3736.             modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  3737.                 FOR row_autorimessa IN cur_autorimesse
  3738.                 LOOP    
  3739.                     modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  3740.                 END LOOP;
  3741.             modGUI.chiudiSelect;
  3742.            
  3743.             modGUI.apriSelect('var_anno', 'ANNO');
  3744.                 LOOP
  3745.                     modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
  3746.                    
  3747.                     FETCH cur_anni INTO row_anno;
  3748.                     EXIT WHEN cur_anni%NOTFOUND;
  3749.                 END LOOP;
  3750.             modGUI.chiudiSelect;
  3751.             CLOSE cur_anni;
  3752.         END;
  3753.     ELSIF ruolo = 'R' THEN
  3754.         DECLARE
  3755.             var_idSede INTEGER;
  3756.         BEGIN
  3757.             SELECT sedi.idSede INTO var_idSede
  3758.             FROM sessioni
  3759.             INNER JOIN persone ON sessioni.idpersona = persone.idpersona
  3760.             INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
  3761.             INNER JOIN sedi ON dipendenti.iddipendente = sedi.iddipendente
  3762.             WHERE permanenzanonabbonati.nome = persone.nome AND sessioni.ruolo = 'R' AND
  3763.                 permanenzaNonAbbonati.id_Sessione = sessioni.idSessione;
  3764.            
  3765.             DECLARE
  3766.                 CURSOR cur_autorimesse IS
  3767.                     SELECT autorimesse.indirizzo
  3768.                     FROM autorimesse
  3769.                     WHERE var_idSede = autorimesse.idSede
  3770.                     ORDER BY autorimesse.indirizzo;
  3771.                
  3772.                 -- i responsabili potranno vedere solamente gli anni degli ingressi alle autorimesse collegate alla sede
  3773.                 -- gestita
  3774.                 CURSOR cur_anni IS
  3775.                     SELECT anno FROM
  3776.                     (
  3777.                         SELECT DISTINCT idBox, EXTRACT(YEAR FROM oraentrata) AS anno
  3778.                         FROM ingressiorari
  3779.                         WHERE orauscita IS NOT NULL
  3780.                         UNION
  3781.                         SELECT DISTINCT idBox,EXTRACT(YEAR FROM orauscita) AS anno
  3782.                         FROM ingressiOrari
  3783.                         WHERE oraentrata IS NOT NULL
  3784.                     ) prova
  3785.                     INNER JOIN box ON prova.idbox = box.idbox
  3786.                     INNER JOIN aree ON box.idarea = aree.idarea
  3787.                     INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  3788.                     WHERE var_idSede = autorimesse.idSede
  3789.                     GROUP BY anno
  3790.                     ORDER BY anno;
  3791.                    
  3792.                 row_anno cur_anni%ROWTYPE;
  3793.             BEGIN
  3794.                 OPEN cur_anni;
  3795.                 FETCH cur_anni INTO row_anno;
  3796.                
  3797.                 IF cur_anni%ROWCOUNT = 0 THEN
  3798.                     modGUI.apriIntestazione(3);
  3799.                         modGUI.inserisciTesto('Non ci sono ingressi registrati per le autorimesse del responsabile');
  3800.                     modGUI.chiudiIntestazione(3);
  3801.                     modGUI.chiudiPagina;
  3802.                     CLOSE cur_anni;
  3803.                     RETURN;
  3804.                 END IF;
  3805.                 modGUI.apriDiv;
  3806.                 modGUI.apriForm('gruppo1.visualizzaPermanenza');
  3807.                 modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3808.                 modGUI.inserisciInputHidden('nome', nome);
  3809.                 modGUI.inserisciInputHidden('ruolo', ruolo);
  3810.                
  3811.                 modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  3812.                     FOR row_autorimessa IN cur_autorimesse
  3813.                     LOOP    
  3814.                         modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);  
  3815.                     END LOOP;
  3816.                 modGUI.chiudiSelect;
  3817.                
  3818.                 modGUI.apriSelect('var_anno', 'ANNO');
  3819.                     LOOP
  3820.                         modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
  3821.                        
  3822.                         FETCH cur_anni INTO row_anno;
  3823.                         EXIT WHEN cur_anni%NOTFOUND;
  3824.                     END LOOP;
  3825.                 modGUI.chiudiSelect;
  3826.                 CLOSE cur_anni;
  3827.             END;
  3828.            
  3829.             EXCEPTION
  3830.                 WHEN NO_DATA_FOUND THEN
  3831.                     modGUI.apriIntestazione(3);
  3832.                         modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
  3833.                     modGUI.chiudiIntestazione(3);
  3834.                     modGUI.chiudiPagina;
  3835.                     RETURN;
  3836.         END;
  3837.     END IF;
  3838.    
  3839.     modGUI.inserisciTesto('MEDIA PER:');
  3840.     modGUI.aCapo;
  3841.     modGUI.inserisciRadioButton('MESE', 'var_tipo', '0', true);
  3842.     modGUI.inserisciRadioButton('FASCIA ORARIA', 'var_tipo', '1', false);
  3843.     modGUI.inserisciRadioButton('CLIENTE', 'var_tipo', '2', false);
  3844.  
  3845.     modGUI.inserisciBottoneReset;
  3846.     modGUI.inserisciBottoneForm('CALCOLA MEDIA');
  3847.     modGUI.chiudiForm;    
  3848.    
  3849.     modGUI.chiudiDiv;
  3850.    
  3851.     modGUI.chiudiPagina;
  3852. END permanenzaNonAbbonati;
  3853.  
  3854. PROCEDURE areeFasce(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  3855. BEGIN
  3856.     modGUI.apriPagina('HoC | Visualizza associazioni aree con fasce', id_Sessione, nome, ruolo);
  3857.     modGUI.aCapo;
  3858.    
  3859.     modGUI.apriIntestazione(2);
  3860.         modGUI.inserisciTesto('VISUALIZZA ASSOCIAZIONI AREE CON FASCE');
  3861.     modGUI.chiudiIntestazione(2);
  3862.  
  3863.     IF ruolo = 'A' OR ruolo = 'S' OR ruolo = 'C' THEN
  3864.         modGUI.apriDiv;
  3865.         modGUI.apriForm('gruppo1.visualizzaAreeFasce');
  3866.         modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3867.         modGUI.inserisciInputHidden('nome', nome);
  3868.         modGUI.inserisciInputHidden('ruolo', ruolo);
  3869.        
  3870.         -- l'amministrator, super user e i clienti potranno vedere informazioni su tutte le aree
  3871.         modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  3872.         modGUI.inserisciOpzioneSelect('', '-- Tutte le autorimesse --');
  3873.         FOR row_autorimessa IN (SELECT indirizzo
  3874.                                     FROM autorimesse)
  3875.         LOOP
  3876.             modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  3877.         END LOOP;
  3878.         modGUI.chiudiSelect;
  3879.     ELSIF ruolo = 'R' THEN
  3880.         DECLARE
  3881.             var_idSede INTEGER;
  3882.         BEGIN
  3883.             SELECT sedi.idSede INTO var_idSede
  3884.             FROM sessioni
  3885.             INNER JOIN persone ON sessioni.idpersona = persone.idpersona
  3886.             INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
  3887.             INNER JOIN sedi ON dipendenti.iddipendente = sedi.iddipendente
  3888.             WHERE areefasce.nome = persone.nome AND sessioni.ruolo = 'R' AND areefasce.id_Sessione = sessioni.idSessione;
  3889.            
  3890.             DECLARE
  3891.                 -- i responsabili potranno vedere solamente le autorimesse collegate alla loro sede
  3892.                 CURSOR cur_autorimesse IS
  3893.                     SELECT autorimesse.indirizzo
  3894.                     FROM sedi
  3895.                     INNER JOIN autorimesse ON sedi.idSede = autorimesse.idsede
  3896.                     WHERE autorimesse.idSede = var_idSede;
  3897.              
  3898.                 row_autorimessa cur_autorimesse%ROWTYPE;
  3899.             BEGIN
  3900.                 OPEN cur_autorimesse;
  3901.                 FETCH cur_autorimesse INTO row_autorimessa;
  3902.                  
  3903.                 IF cur_autorimesse%ROWCOUNT = 0 THEN
  3904.                     modGUI.apriIntestazione(3);
  3905.                         modGUI.inserisciTesto('La sede del responsabile non e'' associata a nessuna autorimessa');
  3906.                     modGUI.chiudiIntestazione(3);
  3907.                    
  3908.                     modGUI.chiudiPagina;
  3909.                     RETURN;
  3910.                 END IF;
  3911.                 modGUI.apriDiv;
  3912.                 modGUI.apriForm('gruppo1.visualizzaAreeFasce');
  3913.                 modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3914.                 modGUI.inserisciInputHidden('nome', nome);
  3915.                 modGUI.inserisciInputHidden('ruolo', ruolo);
  3916.                
  3917.                 modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  3918.                 LOOP
  3919.                     modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  3920.                      
  3921.                     FETCH cur_autorimesse INTO row_autorimessa;
  3922.                     EXIT WHEN cur_autorimesse%NOTFOUND;  
  3923.                 END LOOP;
  3924.                 modGUI.chiudiSelect;
  3925.             END;
  3926.         EXCEPTION
  3927.             WHEN NO_DATA_FOUND THEN
  3928.                 modGUI.apriIntestazione(3);
  3929.                     modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
  3930.                 modGUI.chiudiIntestazione(3);
  3931.                
  3932.                 modGUI.chiudiPagina;
  3933.                 RETURN;
  3934.         END;
  3935.     ELSIF ruolo = 'O' THEN
  3936.         DECLARE
  3937.             -- gli operatori potranno vedere solo le autorimesse in cui lavorano
  3938.             CURSOR cur_autorimesse IS
  3939.             SELECT autorimesse.indirizzo
  3940.             FROM sessioni
  3941.             INNER JOIN persone ON sessioni.idpersona = persone.idpersona
  3942.             INNER JOIN dipendenti ON persone.idpersona = dipendenti.idpersona
  3943.             INNER JOIN autorimesse ON dipendenti.idautorimessa = autorimesse.idautorimessa
  3944.             WHERE areefasce.nome = persone.nome AND sessioni.ruolo = 'O';
  3945.          
  3946.             row_autorimessa cur_autorimesse%ROWTYPE;
  3947.         BEGIN
  3948.             OPEN cur_autorimesse;
  3949.             FETCH cur_autorimesse INTO row_autorimessa;
  3950.                    
  3951.             IF cur_autorimesse%ROWCOUNT = 0 THEN
  3952.                 modGUI.apriIntestazione(3);
  3953.                     modGUI.inserisciTesto('L''operatore non lavora in nessuna autorimessa');
  3954.                 modGUI.chiudiIntestazione(3);
  3955.                 modGUI.chiudiPagina;
  3956.                 RETURN;
  3957.             END IF;
  3958.             modGUI.apriDiv;
  3959.             modGUI.apriForm('gruppo1.visualizzaAreeFasce');
  3960.             modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  3961.             modGUI.inserisciInputHidden('nome', nome);
  3962.             modGUI.inserisciInputHidden('ruolo', ruolo);
  3963.                
  3964.             LOOP    
  3965.                 modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  3966.                 modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  3967.                  
  3968.                 FETCH cur_autorimesse INTO row_autorimessa;
  3969.                 EXIT WHEN cur_autorimesse%NOTFOUND;  
  3970.             END LOOP;
  3971.             modGUI.chiudiSelect;
  3972.         END;
  3973.     END IF;
  3974.     modGUI.inserisciBottoneReset;
  3975.     modGUI.inserisciBottoneForm('CERCA');
  3976.  
  3977.     modGUI.chiudiForm;
  3978.  
  3979.     modGUI.chiudiDiv;
  3980.  
  3981.     modGUI.chiudiPagina;
  3982.    
  3983. END areeFasce;
  3984.  
  3985. PROCEDURE visualizzaDettagliXGiorni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_giorni VARCHAR2) IS
  3986.     CURSOR cur_dettagli IS
  3987.     SELECT nome, cognome, indirizzo, autorimesse.idAutorimessa, clienteid
  3988.     FROM (
  3989.         SELECT persone.nome, persone.cognome, clienti.idcliente AS clienteid, idbox
  3990.         FROM clienti
  3991.         INNER JOIN persone ON clienti.idpersona = persone.idpersona
  3992.         INNER JOIN effettuaingressiorari ON effettuaingressiorari.idcliente = clienti.idcliente
  3993.         INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
  3994.         WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL AND ingressiorari.cancellato = 'F'
  3995.         UNION
  3996.         SELECT persone.nome, persone.cognome, clienti.idcliente AS clienteid, idbox
  3997.         FROM clienti
  3998.         INNER JOIN persone ON clienti.idpersona = persone.idpersona
  3999.         INNER JOIN effettuaIngressiAbbonamenti ON clienti.idcliente = effettuaingressiabbonamenti.idcliente
  4000.         INNER JOIN ingressiabbonamenti ON effettuaingressiabbonamenti.idingressoabbonamento = ingressiabbonamenti.idingressoabbonamento
  4001.         WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
  4002.     ) tabApp
  4003.     INNER JOIN box ON tabApp.idbox = box.idbox
  4004.     INNER JOIN aree ON box.idarea = aree.idarea
  4005.     INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  4006.     WHERE clienteid NOT IN (SELECT idCliente
  4007.                                     FROM effettuaingressiorari
  4008.                                     INNER JOIN ingressiorari
  4009.                                         ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
  4010.                                     WHERE ((CAST(orauscita AS DATE) - CAST(oraentrata AS DATE))) <= var_giorni) AND
  4011.         clienteid NOT IN (SELECT idCliente
  4012.                                     FROM effettuaIngressiAbbonamenti
  4013.                                     INNER JOIN ingressiabbonamenti
  4014.                                         ON effettuaingressiabbonamenti.idingressoabbonamento = ingressiabbonamenti.idingressoabbonamento
  4015.                                     WHERE ((CAST(orauscita AS DATE) - CAST(oraentrata AS DATE))) <= var_giorni)
  4016.     GROUP BY nome, cognome, indirizzo, autorimesse.idautorimessa, clienteid
  4017.     ORDER BY indirizzo;
  4018.  
  4019.     var_exists BOOLEAN := FALSE;
  4020. BEGIN
  4021.     modGUI.apriPagina('HoC | Visualizza dettagli ingressi maggiori di X giorni', id_Sessione, nome, ruolo);
  4022.     modGUI.aCapo;
  4023.    
  4024.     modGUI.apriIntestazione(2);
  4025.         modGUI.inserisciTesto('VISUALIZZA DETTAGLI INGRESSI MAGGIORI DI X GIORNI');
  4026.     modGUI.chiudiIntestazione(2);
  4027.  
  4028.     IF TO_NUMBER(var_giorni) < 0 THEN
  4029.         modGUI.apriDiv;
  4030.             modGUI.esitoOperazione('KO', 'Numero giorni non valido');
  4031.         modGUI.chiudiDiv;
  4032.        
  4033.         modGUI.apriIntestazione(3);
  4034.             modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4035.         modGUI.chiudiIntestazione(3);
  4036.         modGUI.apriDiv(TRUE);
  4037.             modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.dettagliXgiorni');
  4038.         modGUI.chiudiDiv;
  4039.         modGUI.chiudiPagina;
  4040.         RETURN;
  4041.     END IF;
  4042.    
  4043.     modGUI.apriDiv;
  4044.  
  4045.     modGUI.apriTabella;
  4046.     modGUI.apriRigaTabella;
  4047.         modGUI.intestazioneTabella('CLIENTE');
  4048.         modGUI.intestazioneTabella('DETTAGLI CLIENTE');
  4049.         modGUI.intestazioneTabella('AUTORIMESSE');
  4050.         modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
  4051.     modGUI.chiudiRigaTabella;
  4052.  
  4053.     FOR row_dettagli IN cur_dettagli
  4054.     LOOP
  4055.         var_exists := TRUE;
  4056.         modGUI.apriRigaTabella;
  4057.             modGUI.apriElementoTabella;
  4058.                 modGUI.elementoTabella(row_dettagli.nome || ' ' || row_dettagli.cognome);
  4059.             modGUI.chiudiElementoTabella;
  4060.  
  4061.             modGUI.apriElementoTabella;
  4062.                 modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_dettagli.clienteid);
  4063.             modGUI.chiudiElementoTabella;
  4064.  
  4065.             modGUI.apriElementoTabella;
  4066.                 modGUI.elementoTabella(row_dettagli.indirizzo);
  4067.             modGUI.chiudiElementoTabella;
  4068.  
  4069.             modGUI.apriElementoTabella;
  4070.                 modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_dettagli.idAutorimessa);
  4071.             modGUI.chiudiElementoTabella;
  4072.         modGUI.chiudiRigaTabella;
  4073.     END LOOP;
  4074.     modGUI.chiudiTabella;
  4075.     modGUI.chiudiDiv;
  4076.  
  4077.     IF NOT var_exists THEN
  4078.         modGUI.apriDiv(TRUE);
  4079.             modGUI.inserisciTesto('Nessun dato da visualizzare');
  4080.         modGUI.chiudiDiv;
  4081.         modGUI.aCapo;
  4082.     END IF;
  4083.  
  4084.     modGUI.apriIntestazione(3);
  4085.         modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4086.     modGUI.chiudiIntestazione(3);
  4087.     modGUI.apriDiv(TRUE);
  4088.         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.dettagliXgiorni');
  4089.     modGUI.chiudiDiv;
  4090.    
  4091.     modGUI.chiudiPagina;
  4092. END visualizzaDettagliXGiorni;
  4093.  
  4094. PROCEDURE visualizzaPermanenza(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2, var_anno VARCHAR2,
  4095.     var_tipo VARCHAR2) IS
  4096.        
  4097.     var_giorni INTEGER;
  4098.     var_ore INTEGER;
  4099.     var_minuti INTEGER;
  4100. BEGIN
  4101.     modGUI.apriPagina('HoC | Statistiche permanenza', id_Sessione, nome, ruolo);
  4102.     modGUI.aCapo;
  4103.    
  4104.     modGUI.apriIntestazione(2);
  4105.         modGUI.inserisciTesto('TEMPO MEDIO PERMANENZA NON ABBONATI');
  4106.     modGUI.chiudiIntestazione(2);
  4107.  
  4108.     modGUI.apriIntestazione(3);
  4109.         modGUI.inserisciTesto('AUTORIMESSA DI RIFERIMENTO: ');
  4110.         DECLARE
  4111.             var_idAutorimessa INTEGER;
  4112.         BEGIN
  4113.             SELECT idAutorimessa INTO var_idAutorimessa
  4114.             FROM autorimesse
  4115.             WHERE indirizzo = var_autorimessa;
  4116.            
  4117.             modGUI.collegamento(var_autorimessa, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione || '&nome=' ||
  4118.                 nome || '&ruolo=' || ruolo || '&idRiga=' || var_idAutorimessa);
  4119.         END;
  4120.         modGUI.aCapo;
  4121.         modGUI.inserisciTesto('ANNO DI RIFERIMENTO: ');
  4122.         modGUI.collegamento(var_anno,
  4123.                             'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo ||
  4124.                             '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || '&var_targa=' || '&var_dataInizio=' ||
  4125.                             var_anno || '-1-1' || '&var_dataFine=' || var_anno || '-12-31');
  4126.     modGUI.chiudiIntestazione(3);
  4127.    
  4128.     modGUI.apriDiv;
  4129.  
  4130.     IF var_tipo = 0 THEN
  4131.         DECLARE
  4132.             var_calcoloSecondi array_int := array_int();
  4133.         BEGIN
  4134.             var_calcoloSecondi := calcoloTempoMese(var_autorimessa, var_anno);
  4135.    
  4136.             modGUI.apriTabella;
  4137.             modGUI.apriRigaTabella;
  4138.                 modGUI.intestazioneTabella('MESE');
  4139.                 modGUI.intestazioneTabella('GIORNI');
  4140.                 modGUI.intestazioneTabella('ORE');
  4141.                 modGUI.intestazioneTabella('MINUTI');
  4142.                 modGUI.intestazioneTabella('SECONDI');
  4143.             modGUI.chiudiRigaTabella;
  4144.  
  4145.             FOR i IN 1..12
  4146.             LOOP
  4147.                 DECLARE
  4148.                     var_show BOOLEAN := var_calcoloSecondi(i) != 0;
  4149.                 BEGIN
  4150.                     var_minuti := TRUNC(var_calcoloSecondi(i) / 60);
  4151.                     var_calcoloSecondi(i) := var_calcoloSecondi(i) - (var_minuti * 60);
  4152.        
  4153.                     var_ore := TRUNC(var_minuti / 60);
  4154.                     var_minuti := var_minuti - (var_ore * 60);
  4155.        
  4156.                     var_giorni := TRUNC(var_ore / 24);
  4157.                     var_ore := var_ore - (var_giorni * 24);
  4158.        
  4159.                     modGUI.apriRigaTabella;
  4160.                         modGUI.apriElementoTabella;
  4161.                             IF NOT var_show THEN
  4162.                                 modGUI.ElementoTabella(TO_CHAR(TO_DATE(i, 'MM'), 'Month', 'NLS_DATE_LANGUAGE = italian'));
  4163.                             ELSE
  4164.                                 -- se ci sono stati ingressi per quel mese inserisco un collegamento per farli visualizzare
  4165.                                 modGUI.collegamento(TO_CHAR(TO_DATE(i, 'MM'), 'Month', 'NLS_DATE_LANGUAGE = italian'),
  4166.                                     'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo='
  4167.                                     || ruolo || '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || '&var_targa=' ||
  4168.                                     '&var_dataInizio=' || var_anno || '-' || i || '-1' || '&var_dataFine=' ||
  4169.                                     TO_CHAR(LAST_DAY(TO_DATE('1-' || i || '-' || var_anno, 'DD-MM-RR')), 'YYYY-MM-DD'));
  4170.                             END IF;
  4171.                         modGUI.chiudiElementoTabella;
  4172.        
  4173.                         modGUI.apriElementoTabella;
  4174.                             modGUI.elementoTabella(var_giorni);
  4175.                         modGUI.chiudiElementoTabella;
  4176.                         dbms_output.put_line('giorni ' || var_giorni);
  4177.        
  4178.                         modGUI.apriElementoTabella;
  4179.                             modGUI.elementoTabella(var_ore);
  4180.                         modGUI.chiudiElementoTabella;
  4181.                         dbms_output.put_line('ore ' || var_ore);
  4182.        
  4183.                         modGUI.apriElementoTabella;
  4184.                             modGUI.elementoTabella(var_minuti);
  4185.                         modGUI.chiudiElementoTabella;
  4186.        
  4187.                         dbms_output.put_line('minuti ' || var_minuti);
  4188.                         modGUI.apriElementoTabella;
  4189.                             modGUI.elementoTabella(var_calcoloSecondi(i));
  4190.                         modGUI.chiudiElementoTabella;
  4191.                         dbms_output.put_line('secondi ' || var_calcoloSecondi(i));
  4192.        
  4193.                     modGUI.chiudiRigaTabella;
  4194.                 END;
  4195.             END LOOP;
  4196.         END;
  4197.         modGUI.chiudiTabella;
  4198.         modGUI.chiudiDiv;
  4199.     ELSIF var_tipo = 1 THEN
  4200.         DECLARE
  4201.             --contiene le fasce orarie ordinate per giorno e ora di inizio
  4202.             CURSOR cur_fasce IS
  4203.                 SELECT fasceorarie.idfasciaoraria, fasceorarie.nome
  4204.                     FROM fasceorarie
  4205.                     ORDER BY CASE
  4206.                         WHEN giorno = 'LUN' THEN 1
  4207.                         WHEN giorno = 'MAR' THEN 2
  4208.                         WHEN giorno = 'MER' THEN 3
  4209.                         WHEN giorno = 'GIO' THEN 4
  4210.                         WHEN giorno = 'VEN' THEN 5
  4211.                         WHEN giorno = 'SAB' THEN 6
  4212.                         WHEN giorno = 'DOM' THEN 7
  4213.                     END, orainizio ASC, oraFine ASC;
  4214.                         var_calcoloSecondi nested_fasce := nested_fasce();
  4215.             row_fascia cur_fasce%ROWTYPE;
  4216.         BEGIN
  4217.             OPEN cur_fasce;
  4218.             FETCH cur_fasce INTO row_fascia;
  4219.            
  4220.             IF cur_fasce%ROWCOUNT = 0 THEN
  4221.                 modGUI.apriIntestazione(3);
  4222.                     modGUI.inserisciTesto('Non ci sono ancora fasce orarie');
  4223.                 modGUI.chiudiIntestazione(3);
  4224.  
  4225.                 modGUI.apriIntestazione(3);
  4226.                     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4227.                 modGUI.chiudiIntestazione(3);
  4228.                 modGUI.apriDiv(TRUE);
  4229.                     modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.permanenzaNonAbbonati');
  4230.                 modGUI.chiudiDiv;
  4231.                 modGUI.chiudiPagina;
  4232.                 CLOSE cur_fasce;
  4233.                 RETURN;
  4234.             END IF;
  4235.             var_calcoloSecondi := calcoloTempoFascia(var_autorimessa, var_anno);
  4236.    
  4237.             modGUI.apriTabella;
  4238.             modGUI.apriRigaTabella;
  4239.                 modGUI.intestazioneTabella('FASCIA');
  4240.                 modGUI.intestazioneTabella('DETTAGLIO FASCIA');
  4241.                 modGUI.intestazioneTabella('GIORNI');
  4242.                 modGUI.intestazioneTabella('ORE');
  4243.                 modGUI.intestazioneTabella('MINUTI');
  4244.                 modGUI.intestazioneTabella('SECONDI');
  4245.             modGUI.chiudiRigaTabella;
  4246.    
  4247.             LOOP
  4248.                 var_minuti := TRUNC(var_calcoloSecondi(row_fascia.idfasciaoraria) / 60);
  4249.                 var_calcoloSecondi(row_fascia.idfasciaoraria) := var_calcoloSecondi(row_fascia.idfasciaoraria) - (var_minuti * 60);
  4250.    
  4251.                 var_ore := TRUNC(var_minuti / 60);
  4252.                 var_minuti := var_minuti - (var_ore * 60);
  4253.    
  4254.                 var_giorni := TRUNC(var_ore / 24);
  4255.                 var_ore := var_ore - (var_giorni * 24);
  4256.    
  4257.                 modGui.apriRigaTabella;
  4258.                     modGUI.apriElementoTabella;
  4259.                         modGUI.elementoTabella(row_fascia.nome);
  4260.                     modGUI.chiudiElementoTabella;
  4261.    
  4262.                     modGUI.apriElementoTabella;
  4263.                         modGUI.inserisciLente('gruppo1.dettaglioFascia', id_Sessione, nome, ruolo, row_fascia.idFasciaoraria);
  4264.                     modGUI.chiudiElementoTabella;
  4265.    
  4266.                     modGUI.apriElementoTabella;
  4267.                         modGUI.elementoTabella(var_giorni);
  4268.                     modGUI.chiudiElementoTabella;
  4269.    
  4270.                     modGUI.apriElementoTabella;
  4271.                         modGUI.elementoTabella(var_ore);
  4272.                     modGUI.chiudiElementoTabella;
  4273.    
  4274.                     modGUI.ApriElementoTabella;
  4275.                         modGUI.ElementoTabella(var_minuti);
  4276.                     modGUI.ChiudiElementoTabella;
  4277.    
  4278.                     modGUI.apriElementoTabella;
  4279.                         modGUI.elementoTabella(var_calcoloSecondi(row_fascia.idfasciaoraria));
  4280.                     modGUI.chiudiElementoTabella;
  4281.                 modGUI.chiudiRigaTabella;
  4282.                
  4283.                 FETCH cur_fasce INTO row_fascia;
  4284.                 EXIT WHEN cur_fasce%NOTFOUND;
  4285.             END LOOP;
  4286.         END;
  4287.         modGUI.chiudiTabella;
  4288.         modGUI.chiudiDiv;
  4289.         ELSIF var_tipo = 2 THEN
  4290.             DECLARE
  4291.                 var_secondi INTEGER;
  4292.                 var_minuti INTEGER;
  4293.                 var_ore INTEGER;
  4294.                 var_giorni INTEGER;
  4295.                 CURSOR cur_media IS
  4296.                     SELECT clienti.idCliente, nome, cognome, codicefiscale,
  4297.                         AVG(((CASE WHEN EXTRACT(YEAR FROM orauscita) = var_anno
  4298.                                     THEN CAST(orauscita AS DATE)
  4299.                                     ELSE TO_DATE('31-DIC-' || var_anno || ' 23:59:59', 'DD-MON-RR HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian')
  4300.                                     END)
  4301.                             -
  4302.                             (CASE WHEN EXTRACT(YEAR FROM oraEntrata) = var_anno
  4303.                                     THEN CAST(oraEntrata AS DATE)
  4304.                                     ELSE TO_DATE('1-GEN-' || var_anno || ' 0:0:0', 'DD-MON-RR HH24:MI:SS','NLS_DATE_LANGUAGE = italian')
  4305.                                     END))
  4306.                             * 86400) AS media
  4307.                     FROM clienti
  4308.                     INNER JOIN persone ON clienti.idPersona = persone.idpersona
  4309.                     INNER JOIN effettuaingressiorari ON clienti.idcliente = effettuaingressiorari.idcliente
  4310.                     INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
  4311.                     INNER JOIN box ON ingressiorari.idBox = box.idBox
  4312.                     INNER JOIN aree ON box.idArea = aree.idArea
  4313.                     INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
  4314.                     WHERE (EXTRACT(YEAR FROM oraentrata) = var_anno OR EXTRACT (YEAR FROM orauscita) = var_anno) AND
  4315.                         autorimesse.indirizzo = var_autorimessa AND ingressiorari.cancellato = 'F' AND
  4316.                         oraentrata IS NOT NULL AND orauscita IS NOT NULL
  4317.                     GROUP BY clienti.idCliente, codiceFiscale, nome, cognome
  4318.                     ORDER BY nome, cognome;
  4319.  
  4320.                 var_exists BOOLEAN := FALSE;
  4321.             BEGIN
  4322.             modGUI.apriTabella;
  4323.             modGUI.apriRigaTabella;
  4324.                 modGUI.intestazioneTabella('CLIENTE');
  4325.                 modGUI.intestazioneTabella('DETTAGLI CLIENTE');
  4326.                 modGUI.intestazioneTabella('GIORNI');
  4327.                 modGUI.intestazioneTabella('ORE');
  4328.                 modGUI.intestazioneTabella('MINUTI');
  4329.                 modGUI.intestazioneTabella('SECONDI');
  4330.             modGUI.chiudiRigaTabella;
  4331.  
  4332.             FOR row_media IN cur_media
  4333.             LOOP
  4334.                 var_exists := TRUE;
  4335.                 var_secondi := row_media.media;
  4336.  
  4337.                 var_minuti := TRUNC(var_secondi / 60);
  4338.                 var_secondi := var_secondi - (var_minuti * 60);
  4339.  
  4340.                 var_ore := TRUNC(var_minuti / 60);
  4341.                 var_minuti := var_minuti - (var_ore * 60);
  4342.  
  4343.                 var_giorni := TRUNC(var_ore / 24);
  4344.                 var_ore := var_ore - (var_giorni * 24);
  4345.  
  4346.                 modGUI.apriRigaTabella;
  4347.                     modGUI.apriElementoTabella;
  4348.                         modGUI.collegamento(row_media.nome || ' ' || row_media.cognome,
  4349.                             'gruppo1.visualizzaCronologia?id_Sessione=' || id_sessione || '&nome=' || nome || '&ruolo=' || ruolo ||
  4350.                             '&var_autorimessa=' || var_autorimessa || '&var_cliente=' || row_media.codicefiscale || '&var_targa=' ||
  4351.                             '&var_dataInizio=' || var_anno || '-1-1' || '&var_dataFine=' || '2019-12-31');
  4352.                     modGUI.chiudiElementoTabella;
  4353.                     modGUI.apriElementoTabella;
  4354.                         modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_media.idCliente);
  4355.                     modGUI.chiudiElementoTabella;
  4356.                     modGUI.apriElementoTabella;
  4357.                         modGUI.elementoTabella(var_giorni);
  4358.                     modGUI.chiudiElementoTabella;
  4359.                     modGUI.apriElementoTabella;
  4360.                         modGUI.elementoTabella(var_ore);
  4361.                     modGUI.chiudiElementoTabella;
  4362.                     modGUI.apriElementoTabella;
  4363.                         modGUI.elementoTabella(var_minuti);
  4364.                     modGUI.chiudiElementoTabella;
  4365.                     modGUI.apriElementoTabella;
  4366.                         modGUI.elementoTabella(var_secondi);
  4367.                     modGUI.chiudiElementoTabella;
  4368.                 modGUI.chiudiRigaTabella;
  4369.             END LOOP;
  4370.             modGUI.chiudiTabella;
  4371.             modGUI.chiudiDiv;
  4372.             IF NOT var_exists THEN
  4373.                 modGUI.apriDiv(TRUE);
  4374.                     modGUI.inserisciTesto('Nessun dato da visualizzare');
  4375.                 modGUI.chiudiDiv;
  4376.                 modGUI.aCapo;
  4377.             END IF;
  4378.         END;
  4379.     END IF;
  4380.  
  4381.     modGUI.apriIntestazione(3);
  4382.         modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4383.     modGUI.chiudiIntestazione(3);
  4384.     modGUI.apriDiv(TRUE);
  4385.         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'CALCOLA NUOVA MEDIA', 'gruppo1.permanenzaNonAbbonati');
  4386.     modGUI.chiudiDiv;
  4387.  
  4388.     modGUI.chiudiPagina;
  4389. END visualizzaPermanenza;
  4390.  
  4391. PROCEDURE percentualePrenotazioni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  4392. -- solo amministratore e super user
  4393. BEGIN
  4394.     modGUI.apriPagina('HoC | Percentuale prenotazioni', id_Sessione, nome, ruolo);
  4395.     modGUI.aCapo;
  4396.    
  4397.     modGUI.apriIntestazione(2);
  4398.         modGUI.inserisciTesto('PERCENTUALE PRENOTAZIONI');
  4399.     modGUI.chiudiIntestazione(2);
  4400.    
  4401.     DECLARE        
  4402.         CURSOR cur_anni IS
  4403.             -- l'amministratore e il super user potranno vedere tutti gli anni in cui sono stati effettuati ingressi
  4404.             SELECT DISTINCT EXTRACT(YEAR FROM oraentrata) AS anno
  4405.             FROM ingressiorari
  4406.             WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL
  4407.             UNION
  4408.             SELECT DISTINCT EXTRACT(YEAR FROM orauscita) AS anno
  4409.             FROM ingressiOrari
  4410.             WHERE oraentrata IS NOT NULL AND orauscita IS NOT NULL;
  4411.            
  4412.         row_anno cur_anni%ROWTYPE;
  4413.     BEGIN
  4414.         OPEN cur_anni;
  4415.         FETCH cur_anni INTO row_anno;
  4416.                
  4417.         IF cur_anni%ROWCOUNT = 0 THEN
  4418.             modGUI.apriIntestazione(3);
  4419.                 modGUI.InserisciTesto('Non ci sono ingressi registrati');
  4420.             modGUI.chiudiIntestazione(3);
  4421.             modGUI.chiudiPagina;
  4422.             CLOSE cur_anni;
  4423.             RETURN;
  4424.         END IF;
  4425.         modGUI.apriDiv;
  4426.         modGUI.apriForm('gruppo1.visualizzaPercentuale');
  4427.         modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4428.         modGUI.inserisciInputHidden('nome', nome);
  4429.         modGUI.inserisciInputHidden('ruolo', ruolo);
  4430.        
  4431.         modGUI.apriSelect('var_anno', 'ANNO');
  4432.             LOOP
  4433.                 modGUI.inserisciOpzioneSelect(row_anno.anno, row_anno.anno, FALSE);
  4434.                
  4435.                 FETCH cur_anni INTO row_anno;
  4436.                 EXIT WHEN cur_anni%NOTFOUND;
  4437.             END LOOP;
  4438.         modGUI.chiudiSelect;
  4439.         CLOSE cur_anni;
  4440.     END;
  4441.        
  4442.     modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4443.     modGUI.inserisciInputHidden('nome', nome);
  4444.     modGUI.inserisciInputHidden('ruolo', ruolo);
  4445.  
  4446.     modGUI.inserisciTesto('PERCENTUALE PER:');
  4447.     modGUI.aCapo;
  4448.     modGUI.inserisciRadioButton('AUTORIMESSA', 'var_tipo', '0', true);
  4449.     modGUI.inserisciRadioButton('CLIENTE', 'var_tipo', '1', false);
  4450.    
  4451.     modGUI.inserisciBottoneReset;
  4452.     modGUI.inserisciBottoneForm('CALCOLA');
  4453.     modGUI.chiudiForm;
  4454.        
  4455.     modGUI.chiudiDiv;
  4456.     modGUI.chiudiPagina;
  4457. END percentualePrenotazioni;
  4458.  
  4459. PROCEDURE visualizzaPercentuale(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_anno VARCHAR2, var_tipo VARCHAR2) IS
  4460. -- solo amministratore e super user
  4461.     prenotazione rec_prenot;
  4462. BEGIN
  4463.     modGUI.apriPagina('HoC | Percentuale prenotazioni', id_Sessione, nome, ruolo);
  4464.     modGUI.aCapo;
  4465.    
  4466.     IF var_tipo = 0 THEN
  4467.         DECLARE
  4468.             CURSOR cur_autorimesse IS
  4469.                 SELECT idautorimessa, indirizzo
  4470.                 FROM autorimesse
  4471.                 ORDER BY indirizzo ASC;
  4472.  
  4473.             var_exists BOOLEAN := FALSE;            
  4474.         BEGIN
  4475.             modGUI.apriIntestazione(2);
  4476.                 modGUI.inserisciTesto('PERCENTUALE PER AUTORIMESSE');
  4477.             modGUI.chiudiIntestazione(2);
  4478.  
  4479.         modGUI.apriDiv;
  4480.         modGUI.apriTabella;
  4481.             modGUI.apriRigaTabella;
  4482.             modGUI.intestazioneTabella('AUTORIMESSA');
  4483.             modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
  4484.             modGUI.intestazioneTabella('INGRESSI TOTALI');
  4485.             modGUI.intestazioneTabella('INGRESSI CON PRENOTAZIONE');
  4486.             modGUI.intestazioneTabella('INGRESSI SENZA PRENOTAZIONE');
  4487.             modGUI.intestazioneTabella('PERCENTUALE');
  4488.         modGUI.chiudiRigaTabella;
  4489.  
  4490.         FOR row_autorimesse IN cur_autorimesse
  4491.         LOOP
  4492.             prenotazione := calcoloInfoPrenotAutorim(row_autorimesse.idAutorimessa, var_anno);
  4493.             var_exists := TRUE;
  4494.             modGUI.apriRigaTabella;
  4495.  
  4496.             -- INDIRIZZO + DETTAGLI DELL'AUTORIMESSA --
  4497.             modGUI.apriElementoTabella;
  4498.                 modGUI.elementoTabella(row_autorimesse.indirizzo);
  4499.             modGUI.chiudiElementoTabella;
  4500.  
  4501.             modGUI.apriElementoTabella;
  4502.                 modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_autorimesse.idAutorimessa);
  4503.             modGUI.chiudiElementoTabella;
  4504.  
  4505.             -- NUMERO DI INGRESSI TOTALI --
  4506.             modGUI.apriElementoTabella;
  4507.                 modGUI.elementoTabella(prenotazione.var_totale);
  4508.             modGUI.chiudiElementoTabella;
  4509.  
  4510.             modGUI.apriElementoTabella;
  4511.                 modGUI.elementoTabella(prenotazione.var_conPrenotazione);
  4512.             modGUI.chiudiElementoTabella;
  4513.  
  4514.             modGUI.apriElementoTabella;
  4515.                 modGUI.elementoTabella(prenotazione.var_senzaPrenotazione);
  4516.             modGUI.chiudiElementoTabella;
  4517.  
  4518.             modGUI.apriElementoTabella;
  4519.             IF prenotazione.var_percentuale IS NULL THEN
  4520.                 modGUI.elementoTabella('0%');
  4521.             ELSE
  4522.                 modGUI.elementoTabella(prenotazione.var_percentuale || '%');
  4523.             END IF;
  4524.             modGUI.chiudiElementoTabella;
  4525.             modGUI.chiudiRigaTabella;
  4526.         END LOOP;
  4527.        
  4528.         modGUI.chiudiTabella;
  4529.         modGUI.chiudiDiv;
  4530.         IF NOT var_exists THEN
  4531.             modGUI.apriDiv(TRUE);
  4532.                 modGUI.inserisciTesto('Nessun dato da visualizzare');
  4533.             modGUI.chiudiDiv;
  4534.         END IF;
  4535.         END;
  4536.     ELSE
  4537.         DECLARE
  4538.             CURSOR cur_persone IS
  4539.                 SELECT idCliente, nome, cognome
  4540.                 FROM persone
  4541.                 INNER JOIN clienti ON persone.idpersona = clienti.idpersona
  4542.                 ORDER BY cognome, nome ASC;
  4543.                
  4544.             var_exists BOOLEAN := FALSE;
  4545.         BEGIN
  4546.             modGUI.apriIntestazione(2);
  4547.                 modGUI.inserisciTesto('PERCENTUALE PER CLIENTI');
  4548.             modGUI.chiudiIntestazione(2);
  4549.    
  4550.             modGUI.apriDiv;
  4551.             modGUI.apriTabella;
  4552.             modGUI.apriRigaTabella;
  4553.                 modGUI.intestazioneTabella('GENERALITA''');
  4554.                 modGUI.intestazioneTabella('DETTAGLI CLIENTE');
  4555.                 modGUI.intestazioneTabella('INGRESSI TOTALI');
  4556.                 modGUI.intestazioneTabella('INGRESSI CON PRENOTAZIONE');
  4557.                 modGUI.intestazioneTabella('INGRESSI SENZA PRENOTAZIONE');
  4558.                 modGUI.intestazioneTabella('PERCENTUALE');
  4559.             modGUI.chiudiRigaTabella;
  4560.    
  4561.             FOR row_persone IN cur_persone
  4562.             LOOP
  4563.                 prenotazione := calcoloInfoPrenotCliente(row_persone.idcliente, var_anno);
  4564.                 var_exists := TRUE;
  4565.                 modGUI.apriRigaTabella;
  4566.    
  4567.                     -- GENERALITA' DEL CLIENTE --
  4568.                     modGUI.apriElementoTabella;
  4569.                         modGUI.elementoTabella(row_persone.cognome || ' ' || row_persone.nome);
  4570.                     modGUI.chiudiElementoTabella;
  4571.                    
  4572.                     -- DETTAGLI DEL CLIENTE --
  4573.                     modGUI.apriElementoTabella;
  4574.                         modGUI.inserisciLente('gruppo5.moreInfoClient', id_Sessione, nome, ruolo, row_persone.idCliente);
  4575.                     modGUI.chiudiElementoTabella;
  4576.    
  4577.                     -- NUMERO DI INGRESSI TOTALI --
  4578.                     modGUI.apriElementoTabella;
  4579.                         modGUI.elementoTabella(prenotazione.var_totale);
  4580.                     modGUI.chiudiElementoTabella;
  4581.    
  4582.                     -- NUMERO DI PRENOTAZIONI --
  4583.                     modGUI.apriElementoTabella;
  4584.                         modGUI.elementoTabella(prenotazione.var_conPrenotazione);
  4585.                     modGUI.chiudiElementoTabella;
  4586.    
  4587.                     -- NUMERO DI INGRESSI SENZA PRENOTAZIONE --
  4588.                     modGUI.apriElementoTabella;
  4589.                         modGUI.elementoTabella(prenotazione.var_senzaPrenotazione);
  4590.                     modGUI.chiudiElementoTabella;
  4591.    
  4592.                     -- PERCENTUALE DI PRENOTAZIONI RISPETTO AL TOTALE
  4593.                     modGUI.apriElementoTabella;
  4594.                         IF prenotazione.var_percentuale IS NULL THEN
  4595.                             modGUI.elementoTabella('0%');
  4596.                         ELSE
  4597.                             modGUI.elementoTabella(prenotazione.var_percentuale || '%');
  4598.                         END IF;
  4599.                     modGUI.chiudiElementoTabella;
  4600.                 modGUI.chiudiRigaTabella;
  4601.             END LOOP;
  4602.            
  4603.             modGUI.chiudiTabella;
  4604.             modGUI.chiudiDiv;
  4605.             IF NOT var_exists THEN
  4606.                 modGUI.apriDiv(TRUE);
  4607.                     modGUI.inserisciTesto('Nessun dato da visualizzare');
  4608.                 modGUI.chiudiDiv;
  4609.             END IF;
  4610.         END;
  4611.     END IF;
  4612.  
  4613.     modGUI.apriIntestazione(3);
  4614.     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4615.     modGUI.chiudiIntestazione(3);
  4616.     modGUI.apriDiv(TRUE);
  4617.         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'CALCOLO NUOVA PERCENTUALE', 'gruppo1.percentualePrenotazioni');
  4618.     modGUI.chiudiDiv;
  4619.  
  4620.     modGUI.chiudiPagina;
  4621. END visualizzaPercentuale;
  4622.  
  4623. PROCEDURE cronologiaAccessi(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  4624.     CURSOR cur_autorimesse IS
  4625.         SELECT idautorimessa, indirizzo
  4626.         FROM autorimesse;
  4627.  
  4628.     row_autorimesse cur_autorimesse%ROWTYPE;
  4629. BEGIN
  4630.     modGUI.apriPagina('HoC | Cronologia Accessi', id_Sessione, nome, ruolo);
  4631.     modGUI.aCapo;
  4632.    
  4633.     modGUI.apriIntestazione(2);
  4634.         modGUI.InserisciTesto('CRONOLOGIA ACCESSI');
  4635.     modGUI.chiudiIntestazione(2);
  4636.  
  4637.     IF (ruolo = 'A' OR ruolo = 'S') THEN
  4638.         modGUI.apriDiv;
  4639.         modGUI.apriForm('gruppo1.visualizzaCronologia');
  4640.         modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4641.         modGUI.inserisciInputHidden('nome', nome);
  4642.         modGUI.inserisciInputHidden('ruolo', ruolo);
  4643.         -- l'amministratore e super user potranno filtrare per qualasiasi autorimessa
  4644.         modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  4645.         modGUI.inserisciOpzioneSelect('', '--Tutte le autorimesse--');
  4646.        
  4647.         FOR row_autorimesse IN (SELECT indirizzo
  4648.                                 FROM autorimesse)
  4649.         LOOP
  4650.             modGUI.inserisciOpzioneSelect(row_autorimesse.indirizzo, row_autorimesse.indirizzo);
  4651.         END LOOP;
  4652.         modGUI.chiudiSelect;
  4653.     ELSIF ruolo = 'R' THEN
  4654.         DECLARE
  4655.             var_idSede INTEGER;
  4656.         BEGIN
  4657.             SELECT idSede INTO var_idSede
  4658.                 FROM sessioni
  4659.                 INNER JOIN dipendenti ON sessioni.idpersona = dipendenti.idpersona
  4660.                 INNER JOIN persone ON dipendenti.idpersona = persone.idpersona
  4661.                 INNER JOIN sedi ON dipendenti.idDipendente = sedi.iddipendente
  4662.                 WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'R' AND
  4663.                     sessioni.idSessione = cronologiaAccessi.id_Sessione;
  4664.            
  4665.             DECLARE
  4666.                 -- il responsabile puo' filtrare solamente per le autorimesse collegate alla sua sede
  4667.                 CURSOR cur_autorimesse IS
  4668.                     SELECT autorimesse.indirizzo
  4669.                     FROM sedi
  4670.                     INNER JOIN autorimesse ON sedi.idsede = autorimesse.idsede
  4671.                     WHERE sedi.idSede = var_idSede;
  4672.                
  4673.                 row_autorimessa cur_autorimesse%ROWTYPE;
  4674.             BEGIN
  4675.                 OPEN cur_autorimesse;
  4676.                 FETCH cur_autorimesse INTO row_autorimessa;
  4677.                        
  4678.                 IF cur_autorimesse%ROWCOUNT = 0 THEN
  4679.                     modGUI.apriIntestazione(3);
  4680.                         modGUI.inserisciTesto('La sede del responsabile non ha autorimesse collegate');
  4681.                     modGUI.chiudiIntestazione(3);
  4682.                     modGUI.chiudiPagina;
  4683.                     CLOSE cur_autorimesse;
  4684.                     RETURN;
  4685.                 END IF;
  4686.                
  4687.                 modGUI.apriDiv;
  4688.                 modGUI.apriForm('gruppo1.visualizzaCronologia');
  4689.                 modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4690.                 modGUI.inserisciInputHidden('nome', nome);
  4691.                 modGUI.inserisciInputHidden('ruolo', ruolo);
  4692.                
  4693.                 modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  4694.                 LOOP    
  4695.                     modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  4696.                      
  4697.                     FETCH cur_autorimesse INTO row_autorimessa;
  4698.                     EXIT WHEN cur_autorimesse%NOTFOUND;  
  4699.                 END LOOP;
  4700.                 modGUI.chiudiSelect;
  4701.             END;
  4702.             EXCEPTION
  4703.                 WHEN NO_DATA_FOUND THEN
  4704.                     modGUI.apriIntestazione(3);
  4705.                         modGUI.inserisciTesto('Il responsabile non gestisce nessuna sede');
  4706.                     modGUI.chiudiIntestazione(3);
  4707.                     modGUI.chiudiPagina;
  4708.                     RETURN;
  4709.         END;
  4710.     ELSIF ruolo = 'O' THEN
  4711.         DECLARE
  4712.             -- l'operatore puo' filtrare solamente per le autorimesse in cui lavora
  4713.             CURSOR cur_autorimesse IS
  4714.             SELECT autorimesse.indirizzo
  4715.                 FROM sessioni
  4716.                 INNER JOIN dipendenti ON sessioni.idpersona = dipendenti.idpersona
  4717.                 INNER JOIN persone ON dipendenti.idpersona = persone.idpersona
  4718.                 INNER JOIN autorimesse ON dipendenti.idautorimessa = autorimesse.idautorimessa
  4719.                 WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'O' AND
  4720.                     sessioni.idSessione = cronologiaAccessi.id_Sessione;
  4721.            
  4722.             row_autorimessa cur_autorimesse%ROWTYPE;
  4723.         BEGIN
  4724.             OPEN cur_autorimesse;
  4725.             FETCH cur_autorimesse INTO row_autorimessa;
  4726.                    
  4727.             IF cur_autorimesse%ROWCOUNT = 0 THEN
  4728.                 modGUI.apriIntestazione(3);
  4729.                     modGUI.inserisciTesto('L''operatore non lavora in nessuna autorimessa');
  4730.                 modGUI.chiudiIntestazione(3);
  4731.                 modGUI.chiudiPagina;
  4732.                 CLOSE cur_autorimesse;
  4733.                 RETURN;
  4734.             END IF;
  4735.            
  4736.             modGUI.apriDiv;
  4737.             modGUI.apriForm('gruppo1.visualizzaCronologia');
  4738.             modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4739.             modGUI.inserisciInputHidden('nome', nome);
  4740.             modGUI.inserisciInputHidden('ruolo', ruolo);
  4741.            
  4742.             modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  4743.             LOOP    
  4744.                 modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  4745.                  
  4746.                 FETCH cur_autorimesse INTO row_autorimessa;
  4747.                 EXIT WHEN cur_autorimesse%NOTFOUND;
  4748.                 CLOSE cur_autorimesse;
  4749.             END LOOP;
  4750.             modGUI.chiudiSelect;
  4751.         END;
  4752.     ELSIF ruolo = 'C' THEN
  4753.         DECLARE
  4754.             -- il cliente puo' filtrare solamente per le autorimesse in cui ha effettuato ingressi
  4755.             CURSOR cur_autorimesse IS
  4756.                 SELECT DISTINCT autorimesse.indirizzo
  4757.                 FROM sessioni
  4758.                 INNER JOIN clienti ON sessioni.idpersona = clienti.idpersona
  4759.                 INNER JOIN persone ON clienti.idpersona = persone.idpersona
  4760.                 INNER JOIN effettuaingressiorari ON clienti.idcliente = effettuaingressiorari.idcliente
  4761.                 INNER JOIN ingressiorari ON effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
  4762.                 INNER JOIN box ON ingressiorari.idbox = box.idbox
  4763.                 INNER JOIN aree ON box.idarea = aree.idarea
  4764.                 INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  4765.                 WHERE persone.nome = cronologiaAccessi.nome AND sessioni.ruolo = 'C' AND
  4766.                     sessioni.idSessione = cronologiaAccessi.id_Sessione AND oraentrata IS NOT NULL AND orauscita IS NOT NULL
  4767.                 ORDER BY autorimesse.indirizzo;
  4768.            
  4769.             row_autorimessa cur_autorimesse%ROWTYPE;
  4770.         BEGIN
  4771.             OPEN cur_autorimesse;
  4772.             FETCH cur_autorimesse INTO row_autorimessa;
  4773.                    
  4774.             IF cur_autorimesse%ROWCOUNT = 0 THEN
  4775.                 modGUI.apriIntestazione(3);
  4776.                     modGUI.inserisciTesto('Il cliente non ha mai effettuato accessi con biglietto');
  4777.                 modGUI.chiudiIntestazione(3);
  4778.                 modGUI.chiudiPagina;
  4779.                 CLOSE cur_autorimesse;
  4780.                 RETURN;
  4781.             END IF;
  4782.            
  4783.             modGUI.apriDiv;
  4784.             modGUI.apriForm('gruppo1.visualizzaCronologia');
  4785.             modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  4786.             modGUI.inserisciInputHidden('nome', nome);
  4787.             modGUI.inserisciInputHidden('ruolo', ruolo);
  4788.            
  4789.             modGUI.apriSelect('var_autorimessa', 'AUTORIMESSA');
  4790.             LOOP    
  4791.                 modGUI.inserisciOpzioneSelect(row_autorimessa.indirizzo, row_autorimessa.indirizzo);
  4792.                  
  4793.                 FETCH cur_autorimesse INTO row_autorimessa;
  4794.                 EXIT WHEN cur_autorimesse%NOTFOUND;  
  4795.             END LOOP;
  4796.             modGUI.chiudiSelect;
  4797.             CLOSE cur_autorimesse;
  4798.         END;    
  4799.     END IF;
  4800.      
  4801.     -- codice fiscale, campo non obbligatorio
  4802.     IF ruolo != 'C' THEN
  4803.         -- se l'utente non e' un cliente espongo il campo di input per inserire un codice fiscale
  4804.         modGUI.inserisciInput('var_cliente', 'Codice Fiscale', 'text', false);
  4805.     ELSE
  4806.         -- se l'utente non e' un cliente evito di fargli inserire codici fiscali di altre persone o di nuovo il suo
  4807.         DECLARE
  4808.             var_cf CHAR(16);
  4809.         BEGIN
  4810.  
  4811.         SELECT codiceFiscale INTO var_cf
  4812.         FROM sessioni
  4813.         INNER JOIN persone ON sessioni.idpersona = persone.idpersona
  4814.         WHERE persone.nome = cronologiaAccessi.nome AND ruolo = 'C';
  4815.  
  4816.         modGUI.inserisciInputHidden('var_cliente', var_cf);
  4817.  
  4818.         END;
  4819.     END IF;
  4820.  
  4821.     -- targa, campo non obbligatorio
  4822.     modGUI.inserisciInput('var_targa', 'Targa', 'text', FALSE);
  4823.  
  4824.     -- data di inizio, campo obbligatorio
  4825.     modGUI.inserisciInput('var_dataInizio', 'DATA INIZIO', 'date', TRUE);
  4826.  
  4827.     -- data di fine, campo obbligatorio
  4828.     modGUI.inserisciInput('var_dataFine', 'DATA FINE', 'date', TRUE);
  4829.  
  4830.     modGUI.inserisciBottoneReset;
  4831.     modGUI.inserisciBottoneForm('CERCA');
  4832.     modGUI.chiudiForm;
  4833.  
  4834.     modGUI.chiudiDiv;
  4835.  
  4836.     modGUI.chiudiPagina;
  4837. END cronologiaAccessi;
  4838.  
  4839. PROCEDURE visualizzaCronologia(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2 DEFAULT '',
  4840.     var_cliente VARCHAR2 DEFAULT '', var_targa VARCHAR2 DEFAULT '', var_dataInizio VARCHAR2, var_dataFine VARCHAR2) IS
  4841.  
  4842.     var_contaAutorimessa INTEGER;
  4843.     var_contaCliente INTEGER;
  4844.     var_contaTarga INTEGER;
  4845.  
  4846.     CURSOR cur_ingressi IS
  4847.         SELECT IngressiOrari.idIngressoOrario, entrataprevista, oraentrata, orauscita,
  4848.                 clienti.idCliente, CodiceFiscale,
  4849.                 targa, modello, veicoli.idVeicolo,
  4850.                 autorimesse.idAutorimessa, autorimesse.indirizzo,
  4851.                 aree.idArea,
  4852.                 idmulta
  4853.         FROM ingressiorari
  4854.         INNER JOIN box ON ingressiOrari.idBox = box.idBox
  4855.         INNER JOIN aree ON box.idArea = aree.idArea
  4856.         INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  4857.         INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  4858.         INNER JOIN clienti ON effettuaIngressiOrari.idCliente = clienti.idCliente
  4859.         INNER JOIN persone ON clienti.idPersona = persone.idPersona
  4860.         INNER JOIN veicoli ON effettuaingressiorari.idveicolo = veicoli.idveicolo
  4861.         WHERE autorimesse.indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
  4862.                                                             ELSE var_autorimessa END) AND
  4863.             codiceFiscale LIKE (CASE WHEN var_cliente IS NULL THEN '%'
  4864.                                                                 ELSE var_cliente END) AND
  4865.             veicoli.targa LIKE (CASE WHEN var_targa IS NULL THEN '%'
  4866.                                           ELSE var_targa END) AND
  4867.             oraEntrata <= TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_dataFine, 'YYYY-MM-DD'), 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS') AND
  4868.             oraUscita >= TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_dataInizio, 'YYYY-MM-DD'), 'DD-MON-RR') || ' 0:0:0', 'DD-MON-RR HH24:MI:SS') AND
  4869.             ingressiorari.cancellato = 'F'
  4870.         ORDER BY autorimesse.idAutorimessa, clienti.idCliente, veicoli.idVeicolo, oraEntrata ASC;
  4871.  
  4872.     var_noRecord BOOLEAN := true;
  4873. BEGIN
  4874.     modGUI.apriPagina('HoC | Cronologia Accessi', id_Sessione, nome, ruolo);
  4875.     modGUI.apriIntestazione(2);
  4876.         modGUI.inserisciTesto('CRONOLOGIA ACCESSI');
  4877.     modGUI.chiudiIntestazione(2);
  4878.  
  4879.     modGUI.apriDiv;
  4880.  
  4881.     IF TO_DATE(var_dataInizio, 'YYYY-MM-DD') > TO_DATE(var_dataFine, 'YYYY-MM-DD') THEN
  4882.         modGUI.esitoOperazione('KO', 'Data inizio maggiore di data fine');
  4883.         modGUI.chiudiDiv;
  4884.  
  4885.         modGUI.apriIntestazione(3);
  4886.         modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4887.     modGUI.chiudiIntestazione(3);
  4888.         modGUI.apriDiv(TRUE);
  4889.             modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4890.         modGUI.chiudiDiv;
  4891.         modGUI.chiudiPagina;
  4892.         RETURN;
  4893.     END IF;
  4894.    
  4895.     IF var_cliente IS NOT NULL THEN
  4896.         IF LENGTH(var_cliente) != 16 THEN
  4897.             modGUI.esitoOperazione('KO', 'Codice fiscale non valido');
  4898.             modGUI.chiudiDiv;
  4899.  
  4900.             modGUI.apriIntestazione(3);
  4901.             modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4902.         modGUI.chiudiIntestazione(3);
  4903.             modGUI.apriDiv(TRUE);
  4904.                 modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4905.             modGUI.chiudiDiv;
  4906.             modGUI.chiudiPagina;
  4907.             RETURN;
  4908.         END IF;
  4909.    
  4910.         IF NOT checkCliente(var_cliente) THEN
  4911.             modGUI.esitoOperazione('KO', 'Il cliente specificato non esiste');
  4912.             modGUI.chiudiDiv;
  4913.             modGUI.apriIntestazione(3);
  4914.             modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4915.         modGUI.chiudiIntestazione(3);
  4916.             modGUI.apriDiv(TRUE);
  4917.                 modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4918.             modGUI.chiudiDiv;
  4919.             modGUI.chiudiPagina;
  4920.             RETURN;
  4921.         END IF;
  4922.     END IF;
  4923.  
  4924.     IF var_targa IS NOT NULL THEN
  4925.         IF LENGTH(var_targa) != 7 THEN
  4926.             modGUI.esitoOperazione('KO', 'Targa non valida');
  4927.             modGUI.chiudiDiv;
  4928.  
  4929.             modGUI.apriIntestazione(3);
  4930.             modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4931.         modGUI.chiudiIntestazione(3);
  4932.             modGUI.apriDiv(TRUE);
  4933.                 modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4934.             modGUI.chiudiDiv;
  4935.             modGUI.chiudiPagina;
  4936.             RETURN;
  4937.         END IF;
  4938.        
  4939.         IF ruolo = 'C' THEN
  4940.             -- in questo modo non espongo i link alle targhe di altri clienti
  4941.             IF NOT checkTarga(var_targa, var_cliente) THEN
  4942.                 modGUI.esitoOperazione('KO', 'Il veicolo specificato non e'' di proprieta'' del cliente o non esiste');
  4943.                 modGUI.chiudiDiv;
  4944.                 modGUI.apriIntestazione(3);
  4945.                 modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4946.             modGUI.chiudiIntestazione(3);    
  4947.                 modGUI.apriDiv(TRUE);
  4948.                     modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4949.                 modGUI.chiudiDiv;
  4950.                 modGUI.chiudiPagina;
  4951.                 RETURN;
  4952.             END IF;
  4953.         ELSE
  4954.             IF NOT checkTarga(var_targa, '') THEN
  4955.                 modGUI.esitoOperazione('KO', 'Il veicolo specificato non esiste');
  4956.                 modGUI.chiudiDiv;
  4957.                 modGUI.apriIntestazione(3);
  4958.                 modGUI.inserisciTesto('ALTRE OPERAZIONI');
  4959.             modGUI.chiudiIntestazione(3);    
  4960.                 modGUI.apriDiv(TRUE);
  4961.                     modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.cronologiaAccessi');
  4962.                 modGUI.chiudiDiv;
  4963.                 modGUI.chiudiPagina;
  4964.                 RETURN;
  4965.             END IF;
  4966.         END IF;
  4967.     END IF;
  4968.  
  4969.     modGUI.apriIntestazione(3);
  4970.         modGUI.inserisciTesto('DATA DI INIZIO: ' || TO_CHAR(TO_DATE(var_dataInizio, 'YYYY-MM-DD'), 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = italian'));
  4971.         modGUI.aCapo;
  4972.         modGUI.inserisciTesto('DATA DI FINE: ' || TO_CHAR(TO_DATE(var_dataFine, 'YYYY-MM-DD'), 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = italian'));
  4973.         modGUI.aCapo;
  4974.        
  4975.         IF var_autorimessa IS NOT NULL THEN
  4976.             modGUI.inserisciTesto('AUTORIMESSA: ');
  4977.             DECLARE
  4978.                 var_idAutorimessa INTEGER;
  4979.             BEGIN
  4980.                 SELECT idAutorimessa INTO var_idAutorimessa
  4981.                 FROM autorimesse
  4982.                 WHERE indirizzo = var_autorimessa;
  4983.                    
  4984.                 modGUI.collegamento(var_autorimessa, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
  4985.                             nome || '&ruolo=' || ruolo || '&idRiga=' || var_idAutorimessa);
  4986.             END;
  4987.             modGUI.aCapo;
  4988.         END IF;
  4989.        
  4990.         IF var_cliente IS NOT NULL THEN
  4991.             modGUI.inserisciTesto('CLIENTE: ');
  4992.             DECLARE
  4993.                 var_idCliente INTEGER;
  4994.             BEGIN
  4995.                 SELECT idCliente INTO var_idCliente
  4996.                 FROM clienti
  4997.                 INNER JOIN persone ON clienti.idpersona = persone.idpersona
  4998.                 WHERE persone.codicefiscale = var_cliente;
  4999.                    
  5000.                 modGUI.collegamento(var_cliente, 'gruppo5.moreInfoClient?id_Sessione=' || id_Sessione || '&nome=' || nome ||
  5001.                     '&ruolo=' || ruolo || '&idRiga=' || var_idCliente);
  5002.                 modGUI.aCapo;
  5003.             END;
  5004.         END IF;
  5005.        
  5006.         IF var_targa IS NOT NULL THEN
  5007.             modGUI.inserisciTesto('VEICOLO: ');
  5008.             DECLARE
  5009.                 var_idVeicolo INTEGER;
  5010.             BEGIN
  5011.                 SELECT idVeicolo INTO var_idVeicolo
  5012.                 FROM veicoli
  5013.                 WHERE veicoli.targa = var_targa;
  5014.                
  5015.                 modGUI.collegamento(var_targa, 'gruppo5.moreInfoCar?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo='
  5016.                     || ruolo || '&idRiga=' || var_idVeicolo);
  5017.             END;
  5018.         END IF;
  5019.     modGUI.chiudiIntestazione(3);
  5020.  
  5021.     DECLARE
  5022.         -- variabili di controllo per organizzare le tabelle da far vedere
  5023.         primo INTEGER;
  5024.         secondo INTEGER;
  5025.         terzo INTEGER;
  5026.     BEGIN
  5027.         primo := -1;
  5028.         secondo := -1;
  5029.         terzo := -1;
  5030.         FOR row_ingressi IN cur_ingressi
  5031.         LOOP
  5032.             var_noRecord := FALSE;
  5033.  
  5034.             IF primo != row_ingressi.idAutorimessa THEN
  5035.                 IF primo != -1 THEN
  5036.                     modGUI.chiudiTabella;
  5037.                     modGUI.apriIntestazione(3);
  5038.                 ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
  5039.                     modGUI.apriIntestazione(3);
  5040.                 END IF;
  5041.  
  5042.                 IF var_autorimessa IS NULL THEN
  5043.                     modGUI.inserisciTesto('AUTORIMESSA: ');
  5044.                         modGUI.collegamento(row_ingressi.indirizzo, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione ||
  5045.                             '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_ingressi.idAutorimessa);
  5046.                 END IF;
  5047.                 modGUI.aCapo;
  5048.  
  5049.                 primo := row_ingressi.idAutorimessa;
  5050.                 secondo := -1;
  5051.                 terzo := -1;
  5052.             END IF;
  5053.             IF secondo != row_ingressi.idcliente THEN
  5054.  
  5055.                 IF secondo != -1 THEN
  5056.                     modGUI.chiudiTabella;
  5057.                     modGUI.apriIntestazione(3);
  5058.                 ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
  5059.                     modGUI.apriIntestazione(3);
  5060.                 END IF;
  5061.  
  5062.                 IF var_cliente IS NULL THEN
  5063.                     modGUI.inserisciTesto('CLIENTE: ');
  5064.                    
  5065.                     modGUI.collegamento(row_ingressi.codiceFiscale, 'gruppo5.moreInfoClient?id_Sessione=' || id_Sessione ||
  5066.                         '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_ingressi.idCliente);
  5067.                     modGUI.aCapo;
  5068.                 END IF;
  5069.  
  5070.                 secondo := row_ingressi.idCliente;
  5071.                 terzo := -1;
  5072.             END IF;
  5073.             IF terzo != row_ingressi.idVeicolo THEN
  5074.  
  5075.                 IF terzo != -1 THEN
  5076.                     modGUI.chiudiTabella;
  5077.                     modGUI.apriIntestazione(3);
  5078.                 ELSIF primo = -1 AND secondo = -1 AND terzo = -1 THEN
  5079.                     modGUI.apriIntestazione(3);
  5080.                 END IF;
  5081.  
  5082.                 IF var_targa IS NULL THEN
  5083.                     modGUI.inserisciTesto('VEICOLO: ');
  5084.                     DECLARE
  5085.                         var_idVeicolo INTEGER;
  5086.                     BEGIN
  5087.                         SELECT idVeicolo INTO var_idVeicolo
  5088.                         FROM veicoli
  5089.                         WHERE targa = row_ingressi.targa;
  5090.                         modGUI.collegamento(row_ingressi.targa, 'gruppo5.moreInfoCar?id_Sessione=' || id_Sessione || '&nome=' ||
  5091.                             nome || '&ruolo=' || ruolo || '&idRiga=' || var_idVeicolo);
  5092.                     END;
  5093.                 END IF;
  5094.  
  5095.                 modGUI.chiudiIntestazione(3);
  5096.                 modGUI.apriTabella;
  5097.  
  5098.                 modGUI.apriRigaTabella;
  5099.                     modGUI.intestazioneTabella('ENTRATA PREVISTA');
  5100.                     modGUI.intestazioneTabella('ORA ENTRATA');
  5101.                     modGUI.intestazioneTabella('ORA USCITA');
  5102.                     modGUI.intestazioneTabella('DETTAGLI INGRESSO');
  5103.                     modGUI.intestazioneTabella('DETTAGLI AREA');
  5104.                     modGUI.intestazioneTabella('MULTA');
  5105.                 modGUI.chiudiRigaTabella;
  5106.  
  5107.                 terzo := row_ingressi.idVeicolo;
  5108.             END IF;
  5109.  
  5110.             modGUI.apriRigaTabella;
  5111.  
  5112.             -- ENTRATA PREVISTA--
  5113.             modGUI.apriElementoTabella;
  5114.         IF row_ingressi.entrataPrevista IS NOT NULL THEN
  5115.                     modGUI.elementoTabella(TO_CHAR(row_ingressi.entrataPrevista, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
  5116.                     modGUI.aCapo;
  5117.                     modGUI.elementoTabella(TO_CHAR(row_ingressi.entrataPrevista, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
  5118.                 ELSE
  5119.             modGUI.elementoTabella('--');
  5120.                 END IF;
  5121.         modGUI.chiudiElementoTabella;
  5122.  
  5123.             -- ENTRATA --
  5124.             modGUI.apriElementoTabella;
  5125.                 modGUI.elementoTabella(TO_CHAR(row_ingressi.oraEntrata, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
  5126.                 modGUI.aCapo;
  5127.                 modGUI.elementoTabella(TO_CHAR(row_ingressi.oraEntrata, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
  5128.             modGUI.chiudiElementoTabella;
  5129.  
  5130.             -- USCITA --
  5131.             modGUI.apriElementoTabella;
  5132.                 modGUI.elementoTabella(TO_CHAR(row_ingressi.orauscita, 'DD-MON-RR', 'NLS_DATE_LANGUAGE = italian'));
  5133.                 modGUI.aCapo;
  5134.                 modGUI.elementoTabella(TO_CHAR(row_ingressi.orauscita, 'HH24:MI:SS', 'NLS_DATE_LANGUAGE = italian'));
  5135.             modGUI.chiudiElementoTabella;
  5136.  
  5137.             -- ALTRI DETTAGLI INGRESSO ORARIO --
  5138.             modGUI.apriElementoTabella;
  5139.                 modGUI.inserisciLente('gruppo1.visualizzaBiglietto', id_Sessione, nome, ruolo, row_ingressi.idIngressoOrario);
  5140.             modGUI.chiudiElementoTabella;
  5141.  
  5142.             -- DETTAGLIO DELL'AREA UTILIZZATA --
  5143.             modGUI.apriElementoTabella;
  5144.                 modGUI.inserisciLente('gruppo2.visualizzaArea', id_Sessione, nome, ruolo, row_ingressi.idarea);
  5145.             modGUI.chiudiElementoTabella;
  5146.  
  5147.             -- MULTE --
  5148.             modGUI.apriElementoTabella;
  5149.                 IF row_ingressi.idMulta IS NULL AND ruolo != 'C' THEN
  5150.                     -- Se ad un ingresso non e' stata associata ancora una multa, espongo la procedura di inserimento
  5151.                     modGUI.inserisciPenna('gruppo1.inserisciCampiMulte', id_Sessione, nome, ruolo, row_ingressi.idingressoorario || 'O');
  5152.                 ELSE
  5153.                     -- Se ad un ingresso e' stata gia' associata una multa, espongo la procedura di visualizzazione
  5154.                     modGUI.inserisciLente('gruppo1.dettaglioCampiMulte', id_Sessione, nome, ruolo, row_ingressi.idmulta);
  5155.                     modGUI.inserisciCestino('gruppo1.rimuoviMulteConferma', id_Sessione, nome, ruolo, row_ingressi.idmulta, '&tipoingresso=O');
  5156.         END IF;
  5157.             modGUI.chiudiElementoTabella;
  5158.  
  5159.             modGUI.chiudiRigaTabella;
  5160.         END LOOP;
  5161.         modGUI.chiudiTabella;
  5162.         modGUI.chiudiDiv;
  5163.     END;
  5164.  
  5165.     IF var_noRecord THEN
  5166.         modGUI.apriDiv;
  5167.         modGUI.apriTabella;
  5168.             modGUI.apriRigaTabella;
  5169.                 modGUI.intestazioneTabella('ENTRATA PREVISTA');
  5170.                 modGUI.intestazioneTabella('ORA ENTRATA');
  5171.                 modGUI.intestazioneTabella('ORA USCITA');
  5172.                 modGUI.intestazioneTabella('DETTAGLI INGRESSO');
  5173.                 modGUI.intestazioneTabella('DETTAGLI AREA');
  5174.                 modGUI.intestazioneTabella('MULTA');
  5175.             modGUI.chiudiRigaTabella;
  5176.         modGUI.chiudiTabella;
  5177.         modGUI.chiudiDiv;
  5178.         modGUI.apriDiv(TRUE);
  5179.             modGUI.inserisciTesto('Non ci sono ingressi registrati per questo periodo e con questi filtri');
  5180.         modGUI.chiudiDiv;
  5181.     END IF;
  5182.  
  5183.     modGUI.chiudiPagina;
  5184. END visualizzaCronologia;
  5185.  
  5186. -- questa procedura visualizza i record della tabella areefasceorarie a seconda del filtro var_autorimessa
  5187. -- @param(autorimessa) = indirizzo dell'autorimessa (se non specificato considero tutte le autorimesse)
  5188. PROCEDURE visualizzaAreeFasce(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_autorimessa VARCHAR2) IS
  5189.     CURSOR cur_areeFasce IS
  5190.         SELECT autorimesse.idautorimessa, indirizzo, areeFasceOrarie.idArea, areeFasceOrarie.idFasciaoraria, nome, costo
  5191.         FROM autorimesse
  5192.         INNER JOIN aree ON autorimesse.idAutorimessa = aree.idAutorimessa
  5193.         INNER JOIN areeFasceorarie ON aree.idArea = areefasceorarie.idArea
  5194.         INNER JOIN fasceorarie ON areeFasceOrarie.idFasciaOraria = fasceorarie.idfasciaoraria
  5195.         WHERE indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
  5196.                                 ELSE var_autorimessa END)
  5197.         ORDER BY areeFasceOrarie.idArea, CASE
  5198.                         WHEN giorno = 'LUN' THEN 1
  5199.                         WHEN giorno = 'MAR' THEN 2
  5200.                         WHEN giorno = 'MER' THEN 3
  5201.                         WHEN giorno = 'GIO' THEN 4
  5202.                         WHEN giorno = 'VEN' THEN 5
  5203.                         WHEN giorno = 'SAB' THEN 6
  5204.                         WHEN giorno = 'DOM' THEN 7
  5205.                     END, oraInizio ASC, oraFine ASC;
  5206.  
  5207.     CURSOR cur_aree IS
  5208.         SELECT autorimesse.idAutorimessa, indirizzo, idArea
  5209.         FROM aree
  5210.         INNER JOIN autorimesse ON aree.idAutorimessa = autorimesse.idAutorimessa
  5211.         WHERE indirizzo LIKE (CASE WHEN var_autorimessa IS NULL THEN '%'
  5212.                                   ELSE var_autorimessa END)
  5213.         AND aree.idArea NOT IN (SELECT idArea
  5214.                                       FROM areeFasceOrarie);
  5215.  
  5216.     var_exists BOOLEAN := FALSE;
  5217.     var_idArea INTEGER;
  5218. BEGIN
  5219.     modGUI.apriPagina('HoC | Visualizza associazioni aree con fasce', id_Sessione, nome, ruolo);
  5220.     modGUI.aCapo;
  5221.    
  5222.     modGUI.apriIntestazione(2);
  5223.         modGUI.inserisciTesto('VISUALIZZA ASSOCIAZIONI AREE CON FASCE');
  5224.     modGUI.chiudiIntestazione(2);
  5225.  
  5226.     modGUI.apriDiv;
  5227.  
  5228.     DECLARE
  5229.         primo INTEGER;
  5230.     BEGIN
  5231.         primo := -1;
  5232.  
  5233.         FOR row_areeFasce IN cur_areeFasce
  5234.         LOOP
  5235.             var_exists := TRUE;
  5236.        
  5237.             IF primo != row_areeFasce.idArea THEN
  5238.                 IF primo != -1 THEN
  5239.                     modGUI.chiudiTabella;
  5240.                     modGUI.apriDiv(TRUE);
  5241.                         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'ASSOCIA NUOVA FASCIA', 'gruppo1.nuovaAreaFascia1',
  5242.                             '&idRiga=' || row_areeFasce.idArea);
  5243.                     modGUI.chiudiDiv;
  5244.                 END IF;
  5245.  
  5246.                 IF primo != row_areeFasce.idArea THEN
  5247.                     modGUI.apriIntestazione(3);
  5248.                             modGUI.inserisciTesto('AUTORIMESSA: ');
  5249.                             modGUI.collegamento(row_areefasce.indirizzo, 'gruppo2.visualizzaAutorimessa?id_Sessione=' || id_Sessione ||
  5250.                                 '&nome=' || nome || '&ruolo=' || ruolo || '&idRiga=' || row_areeFasce.idAutorimessa);
  5251.                             modGUI.aCapo;
  5252.                             modGUI.inserisciTesto('AREA: ');
  5253.                             modGUI.collegamento(row_areefasce.idArea, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
  5254.                                 nome || '&ruolo=' || ruolo || '&idRiga=' || row_areeFasce.idArea);
  5255.                     modGUI.chiudiIntestazione(3);
  5256.  
  5257.                     primo := row_areeFasce.idArea;
  5258.                 ELSE
  5259.                     modGUI.apriIntestazione(3);
  5260.                         modGUI.inserisciTesto('AREA: ');
  5261.                         modGUI.collegamento(row_areefasce.idArea, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' ||
  5262.                             nome || '&ruolo=' || ruolo || '&idRiga=' || row_areefasce.idArea);
  5263.                     modGUI.chiudiIntestazione(3);
  5264.  
  5265.                     primo := row_areeFasce.idArea;
  5266.                 END IF;
  5267.  
  5268.                 modGUI.apriTabella;
  5269.                 modGUI.apriRigaTabella;
  5270.                     modGUI.intestazioneTabella('FASCIA');
  5271.                     modGUI.intestazioneTabella('DETTAGLI FASCIA');
  5272.                     modGUI.intestazioneTabella('COSTO');
  5273.                     IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
  5274.                         modGUI.intestazioneTabella('MODIFICA ASSOCIAZIONE');
  5275.                     END IF;
  5276.                 modGUI.chiudiRigaTabella;
  5277.             END IF;
  5278.             modGUI.apriRigaTabella;
  5279.  
  5280.             modGUI.apriElementoTabella;
  5281.                 modGUI.elementoTabella(row_areeFasce.nome);
  5282.             modGUI.chiudiElementoTabella;
  5283.  
  5284.             modGUI.apriElementoTabella;
  5285.                 modGUI.inserisciLente('gruppo1.dettaglioFascia', id_Sessione, nome, ruolo, row_areeFasce.idFasciaoraria);
  5286.             modGUI.chiudiElementoTabella;
  5287.  
  5288.             modGUI.apriElementoTabella;
  5289.                 modGUI.elementoTabella(TO_CHAR(row_areeFasce.costo,'9990.09') || '&#8364/h');
  5290.             modGUI.chiudiElementoTabella;
  5291.  
  5292.             IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
  5293.             modGUI.apriElementoTabella;
  5294.                 modGUI.inserisciPenna('gruppo1.nuovaAreaFascia2', id_Sessione, nome, ruolo, row_areeFasce.idArea,
  5295.                 '&var_idFascia' || '=' || row_areeFasce.idFasciaOraria);
  5296.             modGUI.chiudiElementoTabella;
  5297.             END IF;
  5298.         var_idArea := row_areeFasce.idArea;
  5299.             modGUI.chiudiRigaTabella;
  5300.         END LOOP;
  5301.  
  5302.     END;
  5303.    
  5304.     IF var_exists THEN
  5305.         modGUI.chiudiTabella;
  5306.         modGUI.apriDiv(TRUE);
  5307.             modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'ASSOCIA NUOVA FASCIA', 'gruppo1.nuovaAreaFascia1',
  5308.                 '&idRiga=' || var_idArea);
  5309.         modGUI.chiudiDiv;
  5310.     END IF;
  5311.     modGUI.chiudiDiv;
  5312.    
  5313.     IF NOT var_exists THEN
  5314.         modGUI.apriDiv;
  5315.         modGUI.apriTabella;
  5316.             modGUI.apriRigaTabella;
  5317.                 modGUI.intestazioneTabella('FASCIA');
  5318.                 modGUI.intestazioneTabella('DETTAGLI FASCIA');
  5319.                 modGUI.intestazioneTabella('COSTO');
  5320.                 IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
  5321.                     modGUI.intestazioneTabella('MODIFICA ASSOCIAZIONE');
  5322.                 END IF;
  5323.             modGUI.chiudiRigaTabella;
  5324.         modGUI.chiudiTabella;
  5325.         modGUI.chiudiDiv;
  5326.  
  5327.         modGUI.apriDiv(TRUE);
  5328.             modGUI.inserisciTesto('Nessun dato da visualizzare');
  5329.         modGUI.chiudiDiv;
  5330.     END IF;
  5331.    
  5332.     modGUI.apriIntestazione(3);
  5333.         modGUI.inserisciTesto('AREE CHE NON SONO STATE ANCORA ASSOCIATE A NESSUNA FASCIA ORARIA');
  5334.     modGUI.chiudiIntestazione(3);
  5335.  
  5336.     modGUI.apriDiv;
  5337.     modGUI.apriTabella;
  5338.  
  5339.     modGUI.apriRigaTabella;
  5340.         modGUI.intestazioneTabella('AREA');
  5341.         modGUI.intestazioneTabella('DETTAGLI AREA');
  5342.         IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
  5343.             modGUI.intestazioneTabella('ASSOCIA FASCE');
  5344.         END IF;
  5345.         modGUI.intestazioneTabella('AUTORIMESSA');
  5346.         modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
  5347.     modGUI.chiudiRigaTabella;
  5348.     var_exists := FALSE;
  5349.  
  5350.     FOR row_area IN cur_aree
  5351.     LOOP
  5352.         var_exists := TRUE;
  5353.         modGUI.apriRigaTabella;
  5354.             modGUI.apriElementoTabella;
  5355.                 modGUI.elementoTabella(row_area.idArea);
  5356.             modGUI.chiudiElementoTabella;
  5357.  
  5358.             modGUI.apriElementoTabella;
  5359.                 modGUI.inserisciLente('gruppo2.visualizzaArea', id_Sessione, nome, ruolo, row_area.idArea);
  5360.             modGUI.chiudiElementoTabella;
  5361.  
  5362.             IF ruolo = 'A' OR ruolo = 'R' OR ruolo = 'S' THEN
  5363.             modGUI.apriElementoTabella;
  5364.                 modGUI.inserisciPenna('gruppo1.nuovaAreaFascia1', id_Sessione, nome, ruolo, row_area.idArea);
  5365.             modGUI.chiudiElementoTabella;
  5366.             END IF;
  5367.            
  5368.             modGUI.apriElementoTabella;
  5369.                 modGUI.elementoTabella(row_area.indirizzo);
  5370.             modGUI.chiudiElementoTabella;
  5371.  
  5372.             modGUI.apriElementoTabella;
  5373.                 modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, row_area.idAutorimessa);
  5374.             modGUI.chiudiElementoTabella;
  5375.  
  5376.         modGUI.chiudiRigaTabella;
  5377.     END LOOP;
  5378.     modGUI.chiudiTabella;
  5379.  
  5380.     modGUI.chiudiDiv;
  5381.  
  5382.     IF NOT var_exists THEN
  5383.         modGUI.apriDiv(TRUE);
  5384.             modGUI.inserisciTesto('Nessun dato da visualizzare');
  5385.         modGUI.chiudiDiv;
  5386.         modGUI.aCapo;
  5387.     END IF;
  5388.  
  5389.     modGUI.apriIntestazione(3);
  5390.         modGUI.inserisciTesto('ALTRE OPERAZIONI');
  5391.     modGUI.chiudiIntestazione(3);
  5392.     modGUI.apriDiv(TRUE);
  5393.         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'EFFETTUA UNA NUOVA RICERCA', 'gruppo1.areeFasce');
  5394.     modGUI.chiudiDiv;
  5395.  
  5396.     modGUI.chiudiPagina;
  5397. END visualizzaAreeFasce;
  5398.  
  5399. PROCEDURE dettaglioFascia(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2) IS
  5400.     var_nome VARCHAR2(45);
  5401.     var_oraInizio TIMESTAMP;
  5402.     var_oraFine TIMESTAMP;
  5403.     var_giorno CHAR(3);
  5404. BEGIN
  5405.     modGUI.apriPagina('HoC | Dettaglio fascia', id_Sessione, nome, ruolo);
  5406.     modGUI.aCapo;
  5407.     modGUI.apriIntestazione(2);
  5408.         modGUI.inserisciTesto('DETTAGLIO FASCIA');
  5409.     modGUI.chiudiIntestazione(2);
  5410.  
  5411.     SELECT nome, orainizio, orafine, giorno INTO var_nome, var_oraInizio, var_oraFine, var_giorno
  5412.     FROM fasceorarie
  5413.     WHERE idFasciaoraria = idRiga;
  5414.  
  5415.     modGUI.apriDiv;
  5416.     modGUI.apriTabella;
  5417.  
  5418.     modGUI.apriRigaTabella;
  5419.         modGUI.intestazioneTabella('NOME');
  5420.         modGUI.apriElementoTabella;
  5421.             modGUI.elementoTabella(var_nome);
  5422.         modGUI.chiudiElementoTabella;
  5423.     modGUI.chiudiRigaTabella;
  5424.  
  5425.     modGUI.apriRigaTabella;
  5426.         modGUI.intestazioneTabella('ORA INIZIO');
  5427.         modGUI.apriElementoTabella;
  5428.             modGUI.elementoTabella(TO_CHAR(var_oraInizio, 'HH24:MI:SS'));
  5429.         modGUI.chiudiElementoTabella;
  5430.     modGUI.chiudiRigaTabella;
  5431.  
  5432.     modGUI.apriRigaTabella;
  5433.         modGUI.intestazioneTabella('ORA FINE');
  5434.         modGUI.apriElementoTabella;
  5435.             modGUI.elementoTabella(TO_CHAR(var_oraFine, 'HH24:MI:SS'));
  5436.         modGUI.chiudiElementoTabella;
  5437.     modGUI.chiudiRigaTabella;
  5438.  
  5439.     modGUI.apriRigaTabella;
  5440.         modGUI.intestazioneTabella('GIORNO');
  5441.         modGUI.apriElementoTabella;
  5442.             modGUI.elementoTabella(var_giorno);
  5443.         modGUI.chiudiElementoTabella;
  5444.     modGUI.chiudiRigaTabella;
  5445.     modGUI.chiudiTabella;
  5446.     modGUI.chiudiDiv;
  5447.  
  5448.     modGUI.chiudiPagina;
  5449. END dettaglioFascia;
  5450.  
  5451. PROCEDURE autorimessaTipoCarb(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
  5452. BEGIN
  5453.     modGUI.apriPagina('HoC | Autorimessa con piu'' tipi di carburante', id_Sessione, nome, ruolo);
  5454.     modGUI.aCapo;
  5455.     modGUI.apriIntestazione(2);
  5456.         modGUI.inserisciTesto('AUTORIMESSA CON PIU'' TIPI DI CARBURANTE');
  5457.     modGUI.chiudiIntestazione(2);
  5458.  
  5459.     modGUI.apriDiv;
  5460.  
  5461.     modGUI.apriForm('gruppo1.visualizzaAutorimessaTC');
  5462.  
  5463.     modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  5464.     modGUI.inserisciInputHidden('nome', nome);
  5465.     modGUI.inserisciInputHidden('ruolo', ruolo);
  5466.  
  5467.     modGUI.inserisciInput('var_data', 'DATA', 'date', true);
  5468.     modGUI.apriSelect('var_tipo', 'TIPO CARBURANTE');
  5469.         modGUI.inserisciOpzioneSelect('N', 'NORMALE');
  5470.         modGUI.inserisciOpzioneSelect('GPL', 'GPL');
  5471.     modGUI.chiudiSelect;
  5472.     modGUI.inserisciBottoneReset('RESET');
  5473.     modGUI.inserisciBottoneForm('CERCA');
  5474.  
  5475.     modGUI.chiudiForm;
  5476.     modGUI.chiudiDiv;
  5477.  
  5478.     modGUI.chiudiPagina;
  5479. END autorimessaTipoCarb;
  5480.  
  5481. -- questa procedura implementa il calcolo della statistica numero 6:
  5482. -- Trovare il nome del parcheggio che ha il quantitativo massimo di veicoli parcheggiati con lo stesso tipo di carburante
  5483. -- @Param(var_data) = data (vengono considerati solo gli ingressi che attraversano questa data)
  5484. PROCEDURE visualizzaAutorimessaTC(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_data VARCHAR2, var_tipo VARCHAR2) IS
  5485. BEGIN
  5486.     modGUI.apriPagina('HoC | Autorimessa con piu'' tipi di carburante', id_Sessione, nome, ruolo);
  5487.     modGUI.aCapo;
  5488.     modGUI.apriIntestazione(2);
  5489.         modGUI.inserisciTesto('AUTORIMESSA CON PIU'' TIPI DI CARBURANTE');
  5490.     modGUI.chiudiIntestazione(2);
  5491.  
  5492.     modGUI.apriDiv;
  5493.  
  5494.     modGUI.apriTabella;
  5495.  
  5496.     modGUI.apriRigaTabella;
  5497.         modGUI.intestazioneTabella('AUTORIMESSA');
  5498.         modGUI.intestazioneTabella('DETTAGLI AUTORIMESSA');
  5499.         modGUI.intestazioneTabella('NUMERO');
  5500.     modGUI.chiudiRigaTabella;
  5501.    
  5502.     DECLARE
  5503.         var_idAutorimessa INTEGER;
  5504.         var_indirizzo VARCHAR2(100);
  5505.         var_numero INTEGER;
  5506.        
  5507.     BEGIN
  5508.         SELECT autorimesse.idAutorimessa, indirizzo, COUNT(alimentazione) AS numero INTO
  5509.             var_idAutorimessa, var_indirizzo, var_numero
  5510.         FROM
  5511.             (
  5512.                 SELECT oraentrata, orauscita, idbox, alimentazione
  5513.                 FROM ingressiorari
  5514.                 INNER JOIN effettuaingressiorari ON ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  5515.                 INNER JOIN veicoli ON effettuaingressiorari.idveicolo = veicoli.idveicolo
  5516.                 WHERE ingressiOrari.cancellato = 'F'
  5517.             UNION ALL
  5518.                 SELECT oraentrata, orauscita, idbox, alimentazione
  5519.                 FROM ingressiabbonamenti
  5520.                 INNER JOIN effettuaingressiabbonamenti
  5521.                     ON ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
  5522.                 INNER JOIN veicoli ON effettuaingressiabbonamenti.idveicolo = veicoli.idveicolo
  5523.                 WHERE ingressiAbbonamenti.cancellato = 'F'
  5524.             ) tabApp
  5525.             INNER JOIN box ON tabApp.idBox = box.idbox
  5526.             INNER JOIN aree ON box.idarea  = aree.idarea
  5527.             INNER JOIN autorimesse ON aree.idautorimessa = autorimesse.idautorimessa
  5528.             WHERE
  5529.                 -- considero gli ingressi che sono avvenuti e terminati
  5530.                 oraentrata IS NOT NULL AND orauscita IS NOT NULL AND
  5531.                 (TO_TIMESTAMP(TO_CHAR(TO_TIMESTAMP(var_data, 'YYYY-MM-DD'), 'DD-MON-RR'), 'DD-MON-RR') BETWEEN
  5532.                     TO_TIMESTAMP(TO_CHAR(oraentrata, 'DD-MON-RR') || ' 0:0:0', 'DD-MON-RR HH24:MI:SS')  AND
  5533.                     TO_TIMESTAMP(TO_CHAR(orauscita, 'DD-MON-RR') || ' 23:59:59', 'DD-MON-RR HH24:MI:SS')) AND
  5534.                 alimentazione = var_tipo
  5535.             GROUP BY autorimesse.idautorimessa, autorimesse.indirizzo, alimentazione
  5536.             ORDER BY numero DESC, alimentazione ASC
  5537.             FETCH FIRST 1 ROW ONLY;
  5538.            
  5539.         modGUI.apriRigaTabella;
  5540.             modGUI.apriElementoTabella;
  5541.                 modGUI.elementoTabella(var_indirizzo);
  5542.             modGUI.chiudiElementoTabella;
  5543.        
  5544.             modGUI.apriElementoTabella;
  5545.                 modGUI.inserisciLente('gruppo2.visualizzaAutorimessa', id_Sessione, nome, ruolo, var_idAutorimessa);
  5546.             modGUI.chiudiElementoTabella;
  5547.        
  5548.             modGUI.apriElementoTabella;
  5549.                 modGUI.elementoTabella(var_numero);
  5550.             modGUI.chiudiElementoTabella;
  5551.         modGUI.chiudiRigaTabella;
  5552.        
  5553.         modGUI.chiudiTabella;
  5554.         modGUI.chiudiDiv;
  5555.         EXCEPTION
  5556.             WHEN NO_DATA_FOUND THEN
  5557.                 modGUI.chiudiTabella;
  5558.                 modGUI.chiudiDiv;
  5559.                 modGUI.apriDiv(TRUE);
  5560.                     modGUI.inserisciTesto('Nessun dato da visualizzare');
  5561.                 modGUI.chiudiDiv;
  5562.                 modGUI.aCapo;
  5563.     END;
  5564.  
  5565.     modGUI.apriIntestazione(3);
  5566.         modGUI.inserisciTesto('ALTRE OPERAZIONI');
  5567.     modGUI.chiudiIntestazione(3);
  5568.     modGUI.apriDiv(TRUE);
  5569.         modGUI.inserisciBottone(id_Sessione, nome, ruolo, 'INDIETRO', 'gruppo1.autorimessaTipoCarb');
  5570.     modGUI.chiudiDiv;
  5571.    
  5572.     modGUI.chiudiPagina;
  5573.  
  5574. END visualizzaAutorimessaTC;
  5575.  
  5576. -- questa procedura implementa il form nel caso in cui si voglia associare una fascia ad un area (già passata come input)
  5577. -- oppure se la fascia era già stata associata aggiornare il campo costo di un record della tabella areefasceorarie
  5578. -- @Param(idRiga) = id della fascia oraria
  5579. PROCEDURE nuovaAreaFascia1(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2) IS
  5580.     CURSOR cur_fasce IS
  5581.         SELECT idfasciaoraria, nome
  5582.         FROM fasceorarie
  5583.         ORDER BY CASE
  5584.                     WHEN giorno = 'LUN' THEN 1
  5585.                     WHEN giorno = 'MAR' THEN 2
  5586.                     WHEN giorno = 'MER' THEN 3
  5587.                     WHEN giorno = 'GIO' THEN 4
  5588.                     WHEN giorno = 'VEN' THEN 5
  5589.                     WHEN giorno = 'SAB' THEN 6
  5590.                     WHEN giorno = 'DOM' THEN 7
  5591.                     END, oraInizio, oraFine;
  5592.        
  5593.         row_fascia cur_fasce%ROWTYPE;
  5594. BEGIN
  5595.     modGUI.apriPagina('HoC | Inserimento/modifica associazione area a fascia', id_Sessione, nome, ruolo);
  5596.     modGUI.aCapo;
  5597.     modGUI.apriIntestazione(2);
  5598.         modGUI.inserisciTesto('INSERIMENTO/MODIFICA ASSOCIAZIONE AREA A FASCIA');
  5599.     modGUI.chiudiIntestazione(2);
  5600.  
  5601.     OPEN cur_fasce;
  5602.     FETCH cur_fasce INTO row_fascia;
  5603.    
  5604.     IF cur_fasce%ROWCOUNT = 0 THEN
  5605.         modGUI.apriIntestazione(3);
  5606.             modGUI.inserisciTesto('Non ci sono ancora fasce orarie');
  5607.         modGUI.chiudiIntestazione(3);
  5608.         modGUI.chiudiPagina;
  5609.         CLOSE cur_fasce;
  5610.     END IF;
  5611.    
  5612.     modGUI.apriIntestazione(3);
  5613.         modGUI.inserisciTesto('AREA: ');
  5614.         modGUI.collegamento(idRiga, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
  5615.             ruolo || '&idRiga=' || idRiga);
  5616.     modGUI.chiudiIntestazione(3);
  5617.    
  5618.     modGUI.apriDiv;
  5619.         modGUI.apriForm('gruppo1.modAreaFasciaRis');
  5620.  
  5621.         modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  5622.         modGUI.inserisciInputHidden('nome', nome);
  5623.         modGUI.inserisciInputHidden('ruolo', ruolo);
  5624.         modGUI.inserisciInputHidden('var_idArea', idRiga);
  5625.  
  5626.         modGUI.apriSelect('var_idFascia', 'FASCIA');
  5627.         LOOP
  5628.             modGUI.inserisciOpzioneSelect(row_fascia.idfasciaoraria, row_fascia.nome);
  5629.             FETCH cur_fasce INTO row_fascia;
  5630.             EXIT WHEN cur_fasce%NOTFOUND;
  5631.         END LOOP;
  5632.         modGUI.chiudiSelect;
  5633.         CLOSE cur_fasce;
  5634.  
  5635.         modGUI.inserisciInput('var_costo', 'Costo', 'number', true);
  5636.         modGUI.inserisciRadioButton('INSERIMENTO', 'var_tipo', '0', true);
  5637.         modGUI.inserisciRadioButton('MODIFICA', 'var_tipo', '1', false);
  5638.         modGUI.inserisciBottoneReset;
  5639.         modGUI.inserisciBottoneForm('SUBMIT');
  5640.         modGUI.chiudiForm;
  5641.  
  5642.     modGUI.chiudiDiv;
  5643.  
  5644.     modGUI.chiudiPagina;
  5645. END nuovaAreaFascia1;
  5646.  
  5647. -- questa procedura implementa il form nel caso in cui si voglia semplicemente modificare il costo di un record della
  5648. -- tabella areefasceorarie
  5649. -- @Param(var_idFascia) = id della fascia oraria
  5650. -- @Param(costo) = costo da inserire
  5651. PROCEDURE nuovaAreaFascia2(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2, var_idFascia VARCHAR2) IS
  5652. BEGIN
  5653.     modGUI.apriPagina('HoC | Modifica associazione area a fascia', id_Sessione, nome, ruolo);
  5654.     modGUI.aCapo;
  5655.     modGUI.apriIntestazione(2);
  5656.         modGUI.inserisciTesto('MODIFICA ASSOCIAZIONE AREA A FASCIA');
  5657.     modGUI.chiudiIntestazione(2);
  5658.  
  5659.     modGUI.apriIntestazione(3);
  5660.         modGUI.inserisciTesto('AREA: ');
  5661.         modGUI.collegamento(idRiga, 'gruppo2.visualizzaArea?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
  5662.             ruolo || '&idRiga=' || idRiga);
  5663.         modGUI.aCapo;
  5664.         modGUI.inserisciTesto('FASCIA: ');
  5665.         modGUI.collegamento(var_idFascia, 'gruppo1.dettaglioFascia?id_Sessione=' || id_Sessione || '&nome=' || nome || '&ruolo=' ||
  5666.             ruolo || '&idRiga=' || var_idFascia);
  5667.     modGUI.chiudiIntestazione(3);
  5668.    
  5669.     modGUI.apriDiv;
  5670.         modGUI.apriForm('gruppo1.modAreaFasciaRis');
  5671.  
  5672.         modGUI.inserisciInputHidden('id_Sessione', id_Sessione);
  5673.         modGUI.inserisciInputHidden('nome', nome);
  5674.         modGUI.inserisciInputHidden('ruolo', ruolo);
  5675.         modGUI.inserisciInputHidden('var_idArea', idRiga);
  5676.         modGUI.inserisciInputHidden('var_idFascia', var_idFascia);
  5677.  
  5678.         modGUI.inserisciInput('var_costo', 'Costo', 'number', true);
  5679.          
  5680.         modGUI.inserisciInputHidden('var_tipo', '1');
  5681.         modGUI.inserisciBottoneReset;
  5682.         modGUI.inserisciBottoneForm('SUBMIT');
  5683.         modGUI.chiudiForm;
  5684.  
  5685.     modGUI.chiudiDiv;
  5686.  
  5687.     modGUI.chiudiPagina;
  5688. END nuovaAreaFascia2;
  5689.  
  5690. /*
  5691.     Questa procedura inserisce un nuovo record di tipo <idArea, idFasciaOraria, costo> alla tabella AreeFasceorarie se non è
  5692.     già presente, altrimenti modifica il campo costo
  5693.     @Param(var_idArea) = id dell'area
  5694.     @Param(var_idFascia) = id della fascia oraria
  5695.     @Param(costo) = costo da inserire
  5696. */
  5697. PROCEDURE modAreaFasciaRis(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_idArea VARCHAR2, var_idFascia VARCHAR2,
  5698.     var_costo VARCHAR2, var_tipo VARCHAR2) IS
  5699. BEGIN
  5700.     modGUI.apriPagina('HoC | Inserimento/Modifica associazione area a fascia', id_Sessione, nome, ruolo);
  5701.     modGUI.aCapo;
  5702.     modGUI.apriIntestazione(2);
  5703.         modGUI.inserisciTesto('INSERIMENTO/MODIFICA ASSOCIAZIONE AREA A FASCIA');
  5704.     modGUI.chiudiIntestazione(2);
  5705.  
  5706.     modGUI.apriDiv;
  5707.      
  5708.     IF TO_NUMBER(var_costo) <= 0 THEN
  5709.         modGUI.esitoOperazione('KO', 'Costo non valido');
  5710.         modGUI.chiudiDiv;
  5711.         modGUI.chiudiPagina;
  5712.         RETURN;
  5713.     END IF;
  5714.    
  5715.     DECLARE
  5716.         var_conta INTEGER;
  5717.     BEGIN
  5718.         SELECT idarea INTO var_conta
  5719.         FROM areefasceorarie
  5720.         WHERE idarea = var_idArea AND idFasciaoraria = var_idFascia;
  5721.            
  5722.         IF var_tipo = '0' THEN  
  5723.             modGUI.esitoOperazione('KO', 'Questa associazione esiste gia''');
  5724.         ELSIF var_tipo = '1' THEN
  5725.             UPDATE areefasceorarie
  5726.             SET costo = TO_NUMBER(var_costo)
  5727.             WHERE idArea = TO_NUMBER(var_idArea) AND idFasciaOraria = TO_NUMBER(var_idFascia);
  5728.             COMMIT;
  5729.             modGUI.esitoOperazione('OK', 'Modifica avvenuta con successo');
  5730.         END IF;
  5731.  
  5732.         EXCEPTION
  5733.             -- ancora l'area non era stata associata a questa fascia
  5734.             WHEN NO_DATA_FOUND THEN
  5735.                 INSERT INTO areefasceorarie
  5736.                 VALUES (var_idArea, var_idfascia, var_costo);
  5737.             COMMIT;
  5738.                 modGUI.esitoOperazione('OK', 'Inserimento avvenuto con successo');
  5739.             WHEN OTHERS THEN
  5740.                 modGUI.esitoOperazione('KO', 'Ci sono ingressi ancora attivi per quest''area');
  5741.         END;
  5742.     modGUI.chiudiDiv;
  5743.     modGUI.chiudiPagina;
  5744. END modAreaFasciaRis;
  5745. --------------------------- FINE ALESSANDRO PUCCIA ------------------------------------
  5746.  
  5747.     --------------------------- INIZIO STEFANIA FALCHI-------------------------------------
  5748.  
  5749.     /* CALCOLOPB
  5750.     *  Questa procedura serve ad inserire i dati necessari per il calcolo del prezzo del biglietto
  5751.     *  id_Sessione: numero associato alla sessione corrente
  5752.     *  nome: username dell'utente attualmente connesso
  5753.     *  ruolo: ruolo dell'utente attualmente connesso
  5754.     */
  5755.   PROCEDURE CALCOLOPB(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  5756.   BEGIN
  5757.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  5758.     modGUI.aCapo;
  5759.     modGUI.apriDiv(false,'mycontainer');
  5760.     modGUI.apriIntestazione(2);
  5761.     modGUI.inserisciTesto('INSERIMENTO DATI PER PREVENTIVO');
  5762.     modGUI.chiudiIntestazione(2);
  5763.     modgui.apriForm(gruppo1||'.CALCOLOPB_RIS');
  5764.    
  5765.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  5766.     modgui.inserisciInputHidden('nome',nome);
  5767.     modgui.inserisciInputHidden('ruolo',ruolo);
  5768.    
  5769.     modGUI.inserisciInput('dataEntrata','Data entrata','date', true);
  5770.     modGUI.inserisciInput('oraEntrata','Ora entrata','time',  true);
  5771.     modGUI.inserisciInput('dataUscita','Data uscita','date',  true);
  5772.     modGUI.inserisciInput('oraUscita','Ora uscita','time',  true);
  5773.      
  5774.     modGUI.aCapo;
  5775.     modGUI.apriSelect('var_Veicolo','Targa: ');
  5776.     for x in(select veicoli.idveicolo,veicoli.targa from veicoli) loop
  5777.         modGUI.inserisciOpzioneSelect(x.idveicolo,x.targa,false);
  5778.     end loop;
  5779.     modGUI.chiudiSelect;
  5780.     modGUI.aCapo;
  5781.        
  5782.     modGUI.aCapo;
  5783.     modGUI.apriSelect('var_Autorimessa','Autorimesse: ');
  5784.     for x in(select autorimesse.idautorimessa,autorimesse.indirizzo from autorimesse) loop
  5785.         modGUI.inserisciOpzioneSelect(x.idautorimessa,x.indirizzo,false);
  5786.     end loop;
  5787.     modGUI.chiudiSelect;
  5788.     modGUI.aCapo;
  5789.  
  5790.     modGUI.aCapo;
  5791.     modGUI.aCapo;
  5792.     modGUI.inserisciBottoneReset('RESET');
  5793.     modGUI.inserisciBottoneForm;
  5794.     modgui.chiudiForm;
  5795.     modGUI.chiudiDiv;
  5796.     modGUI.chiudiPagina;
  5797.   END CALCOLOPB;
  5798.  
  5799.     /* CALCOLOPB_RIS
  5800.     *  Questa procedura serve a calcolare il prezzo del biglietto dopo essere stata richiamata da
  5801.     *  CALCOLOPB in cui si inseriscono tutti i parametri necessari
  5802.     *  id_Sessione: numero associato alla sessione corrente
  5803.     *  nome: username dell'utente attualmente connesso
  5804.     *  ruolo: ruolo dell'utente attualmente connesso
  5805.     *  dataEntrata: data in cui l'utente entra nel parcheggio
  5806.     *  oraEntrata: ora in cui l'utente entra nel parcheggio
  5807.     *  dataUscita: data in cui l'utente esce dal parcheggio
  5808.     *  oraUscita: ora in cui l'utente esce dal parcheggio
  5809.     *  area: area in cui viene effettuato il parcheggio
  5810.     */
  5811.   PROCEDURE CALCOLOPB_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, dataEntrata varchar2, oraEntrata varchar2, dataUscita varchar2, oraUscita varchar2, var_Veicolo varchar2, var_Autorimessa varchar2) AS
  5812. var_dataciclo date;
  5813. var_gg varchar2(20);
  5814. var_oraDa varchar2(20);
  5815. var_oraA varchar2(20);
  5816. var_oraInizioCalcolo timestamp;
  5817. var_oraFineCalcolo timestamp;
  5818. var_h number;
  5819. tot number;
  5820. var_oraEntrata varchar(20);
  5821. var_oraUscita varchar2(20);
  5822. var_dataEntrata date;
  5823. var_dataUscita date;
  5824. var_timestampDa timestamp;
  5825. var_timestampA timestamp;
  5826. var_confronto timestamp;
  5827. --ricerca area--
  5828. idAreeLibere GRUPPO2.list_idAree := GRUPPO2.list_idAree(); -- inizializza il vettore aree libere    
  5829. len integer;
  5830. idArea integer;
  5831. i integer;
  5832. larghezzaMin integer;
  5833. Area Aree%RowType;
  5834. --fine ricerca area--  
  5835.   BEGIN
  5836.  
  5837.     --ricerca area--
  5838.     -- associa al vettore le aree libere nell'autorimessa passata che rispettino i requisiti del veicolo passato
  5839.     idAreeLibere := GRUPPO2.queryRicercaArea(id_Sessione, nome, ruolo,var_Autorimessa, var_Veicolo);  
  5840.     len := idAreeLibere.count;
  5841.     larghezzaMin := 0;
  5842.    
  5843.     -- codice che prende l'area con larghezza minima tra quelle disponibili
  5844.     for i in 1 .. len
  5845.     loop
  5846.         select * into Area
  5847.         from Aree
  5848.         where Aree.idArea = idAreeLibere(i)
  5849.         and larghezzaMin = 0
  5850.         or Aree.larghezzaMax < larghezzaMin;
  5851.        
  5852.         if Area.idArea is not null
  5853.         then
  5854.             larghezzaMin := Area.larghezzaMax;
  5855.             idArea := i;
  5856.         end if;
  5857.     end loop;
  5858.     --fine ricerca area--
  5859.  
  5860.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  5861.     modGUI.aCapo;
  5862.     modGUI.apriDiv(false,'mycontainer');
  5863.    
  5864.     modGUI.apriIntestazione(2);
  5865.     modGUI.inserisciTesto('FASCE ORARIE DI RIFERIMENTO');
  5866.     modGUI.chiudiIntestazione(2);
  5867.    
  5868.      modGUI.ApriTabella;
  5869.    
  5870.     --calcolo prezzo biglietto--
  5871.     var_oraEntrata:=to_char(substr(oraEntrata,1,2)||':'||substr(oraEntrata,-2));
  5872.     var_oraUscita:=to_char(substr(oraUscita,1,2)||':'||substr(oraUscita,-2));
  5873.     var_dataEntrata:=to_date(dataEntrata,'YYYY-MM-DD');
  5874.     var_dataUscita:=to_date(dataUscita,'YYYY-MM-DD');
  5875.     var_dataciclo:=var_dataEntrata;
  5876.     tot:=0;
  5877.    
  5878.    if(var_dataciclo<=var_dataUscita and to_number(substr(oraEntrata,1,2))<to_number(substr(oraUscita,1,2))
  5879.    or(var_dataciclo<=var_dataUscita and to_number(substr(oraEntrata,1,2))=to_number(substr(oraUscita,1,2)) and to_number(substr(oraEntrata,-2))=to_number(substr(oraUscita,-2))))then
  5880.  
  5881.    
  5882.     while(var_dataciclo<=var_dataUscita)
  5883.     loop
  5884.     --modGUI.inserisciTesto(to_char(var_dataciclo));
  5885.         if(var_dataciclo=var_dataEntrata)then
  5886.            var_oraDa:=var_oraEntrata;
  5887.         else
  5888.             var_oraDa:='00:00';
  5889.         end if;
  5890.        
  5891.        if(var_dataciclo=var_dataUscita)then
  5892.             var_oraA:=var_oraUscita;
  5893.         else
  5894.             var_oraA:='23:59';
  5895.         end if;
  5896.        
  5897.         var_gg:=upper(substr(to_char(var_dataciclo,'day','NLS_DATE_LANGUAGE = italian'),1,3));
  5898.         var_timestampDa:=to_timestamp('01-JAN-1970 '||var_oraDa,'DD-MON-YYYY HH24:MI');
  5899.         var_timestampA:=to_timestamp('01-JAN-1970 '||var_oraA,'DD-MON-YYYY HH24:MI');
  5900.            --trova fasciaoraria corrispondente e calcola
  5901.           for x in(select distinct fasceorarie.nome,fasceorarie.giorno,fasceorarie.orainizio,fasceorarie.orafine,areefasceorarie.costo,areefasceorarie.idarea
  5902.                     from fasceorarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  5903.                     where fasceorarie.giorno=var_gg and areefasceorarie.idarea=idArea
  5904.                     and fasceorarie.orainizio<=var_timestampDa)      
  5905.             loop
  5906.                  if(var_timestampDa<=x.orainizio)then
  5907.                    var_oraInizioCalcolo:=x.orainizio;
  5908.                 else
  5909.                    var_oraInizioCalcolo:=var_timestampDa;
  5910.                 end if;
  5911.                if(to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI')<=var_timestampA)then
  5912.                     var_oraFineCalcolo:=to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI');
  5913.                 else
  5914.                     var_oraFineCalcolo:=var_timestampA;
  5915.                 end if;
  5916.                 --calcolo ore totali
  5917.                 var_h:=extract(hour from (var_oraFineCalcolo-var_oraInizioCalcolo))+
  5918.                         (extract (minute from (var_oraFineCalcolo-var_oraInizioCalcolo))/60);
  5919.                 if(var_h>0)then
  5920.                     modGUI.ApriRigaTabella;
  5921.                     modGUI.intestazioneTabella('Descrizione');
  5922.                     modGUI.ApriElementoTabella;
  5923.                     modGUI.ElementoTabella(x.nome);
  5924.                     modGUI.ChiudiElementoTabella;
  5925.                     modGUI.ChiudiRigaTabella;
  5926.                     tot:=tot+(x.costo*var_h);
  5927.                 end if;
  5928.             end loop;
  5929.          
  5930.           var_dataciclo:=var_dataciclo+1;
  5931.      
  5932.        
  5933.     end loop;
  5934.    
  5935.     modGUI.ChiudiTabella;
  5936.    
  5937.     modGUI.apriIntestazione(2);
  5938.     modGUI.inserisciTesto('COSTO STIMATO');
  5939.     modGUI.chiudiIntestazione(2);
  5940.  
  5941.     modGUI.ApriTabella;
  5942.     modGUI.ApriRigaTabella;
  5943.     modGUI.intestazioneTabella('Costo');
  5944.     modGUI.ApriElementoTabella;
  5945.     modGUI.ElementoTabella(to_char(tot,'99999999.99')||' €');
  5946.     modGUI.ChiudiElementoTabella;
  5947.     modGUI.ChiudiRigaTabella;
  5948.     modGUI.ChiudiTabella;
  5949.    
  5950.        else
  5951.         modGUI.esitoOperazione('KO','Le date e/o gli orari inseriti non sono validi');
  5952.     end if;
  5953.  
  5954.     modGUI.apriIntestazione(3);
  5955.     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  5956.     modGUI.chiudiIntestazione(3);
  5957.     modGUI.apriDiv(true);
  5958.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Calcolo prezzo biglietto',gruppo1||'.CALCOLOPB');
  5959.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Preventivo','GRUPPO5.PREVENTIVO');
  5960.     modGUI.chiudiDiv;
  5961.     modGUI.aCapo;
  5962.     modGUI.aCapo;
  5963.     modGUI.aCapo;
  5964.     modGUI.chiudiDiv;
  5965.     modGUI.chiudiPagina;
  5966.   END CALCOLOPB_RIS;
  5967.  
  5968.     /* VIS_TARIFFE
  5969.     *  Questa procedura serve a visualizzare tutte le tariffe presenti in base all'area e alla fascia oraria di riferimento
  5970.     *  id_Sessione: numero associato alla sessione corrente
  5971.     *  nome: username dell'utente attualmente connesso
  5972.     *  ruolo: ruolo dell'utente attualmente connesso
  5973.     */
  5974.   PROCEDURE VIS_TARIFFE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  5975.   idRiga varchar2(12);
  5976.   BEGIN
  5977.  
  5978.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  5979.     modGUI.aCapo;
  5980.     modGUI.apriIntestazione(2);
  5981.     modGUI.inserisciTesto('VISUALIZZA TARIFFE');
  5982.     modGUI.chiudiIntestazione(2);
  5983.     modGUI.apriDiv;
  5984.     modGUI.ApriTabella;
  5985.  
  5986.     modGUI.ApriRigaTabella;
  5987.     modGUI.intestazioneTabella('Costo');
  5988.     modGUI.intestazioneTabella('Numero area');
  5989.     modGUI.intestazioneTabella('Descrizione fascia oraria');
  5990.     modGUI.intestazioneTabella('Dettagli');
  5991.     modGUI.ChiudiRigaTabella;
  5992.  
  5993.     for x in ( select fasceorarie.idfasciaoraria, fasceorarie.nome, areefasceorarie.costo, aree.idarea
  5994.                from FasceOrarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  5995.                inner join aree on aree.idarea=areefasceorarie.idarea) loop
  5996.         modGUI.ApriRigaTabella;
  5997.         modGUI.ApriElementoTabella;
  5998.         modGUI.ElementoTabella(to_char(x.costo,'9990.09')||' &#8364/h');
  5999.         modGUI.ChiudiElementoTabella;
  6000.         modGUI.ApriElementoTabella;
  6001.         modGUI.ElementoTabella(x.idarea);
  6002.         modGUI.ChiudiElementoTabella;
  6003.         modGUI.ApriElementoTabella;
  6004.         modGUI.ElementoTabella(x.nome);
  6005.         modGUI.ChiudiElementoTabella;
  6006.         --dettagli
  6007.  
  6008.         idRiga:=to_char(x.idarea,'00000')||to_char(x.idfasciaoraria,'00000');
  6009.  
  6010.         modGUI.ApriElementoTabella;
  6011.         modGUI.inserisciLente(gruppo1||'.DETTAGLITARIFFE',id_Sessione,nome,ruolo,idRiga);
  6012.         modGUI.ChiudiElementoTabella;
  6013.         modGUI.ChiudiRigaTabella;
  6014.     end loop;
  6015.  
  6016.     modGUI.ChiudiTabella;
  6017.     modGUI.chiudiDiv;
  6018.     modGUI.chiudiPagina;
  6019.   END VIS_TARIFFE;
  6020.  
  6021.     /* DETTAGLITARIFFE
  6022.     *  Questa procedura serve a visualizzare i dettagli di una tariffa precedentemente selezionata nella procedura VIS_TARIFFE
  6023.     *  id_Sessione: numero associato alla sessione corrente
  6024.     *  nome: username dell'utente attualmente connesso
  6025.     *  ruolo: ruolo dell'utente attualmente connesso
  6026.     *  idRiga: concatenamento dell'id della facsia oraria e dell'area di riferimento per risalire alla tariffa scelta
  6027.     */
  6028.   PROCEDURE DETTAGLITARIFFE(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2) AS
  6029.   var_costo number;
  6030.   var_nome varchar2(50);
  6031.   var_orainizio timestamp;
  6032.   var_orafine timestamp;
  6033.   var_giorno char(10);
  6034.   var_pt number;
  6035.   var_pl number;
  6036.   var_stato char(10);
  6037.   var_gas char(10);
  6038.   var_lumax number;
  6039.   var_lamax number;
  6040.   var_almax number;
  6041.   var_pmax number;
  6042.   BEGIN
  6043.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6044.     modGUI.aCapo;
  6045.     modGUI.apriIntestazione(2);
  6046.     modGUI.inserisciTesto('VISUALIZZA FASCE ORARIE');
  6047.     modGUI.chiudiIntestazione(2);
  6048.     modGUI.apriDiv;
  6049.  
  6050.     select costo into var_costo from areefasceorarie
  6051.     where idarea=to_number(substr(idRiga,2,6)) and idfasciaoraria=to_number(substr(idRiga,8,7));
  6052.  
  6053.     modGUI.ApriTabella;
  6054.     modGUI.ApriRigaTabella;
  6055.     modGUI.intestazioneTabella('Costo');
  6056.     modGUI.ApriElementoTabella;
  6057.     modGUI.ElementoTabella(to_char(var_costo,'9990.09')||' &#8364/h');
  6058.     modGUI.ChiudiElementoTabella;
  6059.     modGUI.ChiudiRigaTabella;
  6060.     modGUI.ChiudiTabella;
  6061.  
  6062.     modGUI.apriIntestazione(2);
  6063.     modGUI.inserisciTesto('FASCIA ORARIA DI RIFERIMENTO');
  6064.     modGUI.chiudiIntestazione(2);
  6065.  
  6066.     select nome into var_nome from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
  6067.  
  6068.     select orainizio into var_orainizio from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
  6069.  
  6070.     select orafine into var_orafine from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
  6071.  
  6072.     select giorno into var_giorno from fasceorarie where idfasciaoraria=to_number(substr(idRiga,8,7));
  6073.  
  6074.     modGUI.ApriTabella;
  6075.     modGUI.ApriRigaTabella;
  6076.     modGUI.intestazioneTabella('Nome');
  6077.     modGUI.ApriElementoTabella;
  6078.     modGUI.ElementoTabella(to_char(var_nome));
  6079.     modGUI.ChiudiElementoTabella;
  6080.     modGUI.ChiudiRigaTabella;
  6081.     modGUI.ApriRigaTabella;
  6082.     modGUI.intestazioneTabella('Ora inizio');
  6083.     modGUI.ApriElementoTabella;
  6084.     modGUI.ElementoTabella(to_char(substr(var_orainizio,11,8)));
  6085.     modGUI.ChiudiElementoTabella;
  6086.     modGUI.ChiudiRigaTabella;
  6087.     modGUI.ApriRigaTabella;
  6088.     modGUI.intestazioneTabella('Ora fine');
  6089.     modGUI.ApriElementoTabella;
  6090.     modGUI.ElementoTabella(to_char(substr(var_orafine,11,8)));
  6091.     modGUI.ChiudiElementoTabella;
  6092.     modGUI.ChiudiRigaTabella;
  6093.     modGUI.ApriRigaTabella;
  6094.     modGUI.intestazioneTabella('Giorno');
  6095.     modGUI.ApriElementoTabella;
  6096.     modGUI.ElementoTabella(var_giorno);
  6097.     modGUI.ChiudiElementoTabella;
  6098.     modGUI.ChiudiRigaTabella;
  6099.     modGUI.ChiudiTabella;
  6100.  
  6101.     modGUI.apriIntestazione(2);
  6102.     modGUI.inserisciTesto('AREA DI RIFERIMENTO');
  6103.     modGUI.chiudiIntestazione(2);
  6104.  
  6105.     select postitotali into var_pt from aree where idarea=to_number(substr(idRiga,2,6));
  6106.     select postiliberi into var_pl from aree where idarea=to_number(substr(idRiga,2,6));
  6107.     select stato into var_stato from aree where idarea=to_number(substr(idRiga,2,6));
  6108.     select gas into var_gas from aree where idarea=to_number(substr(idRiga,2,6));
  6109.     select lunghezzamax into var_lumax from aree where idarea=to_number(substr(idRiga,2,6));
  6110.     select larghezzamax into var_lamax from aree where idarea=to_number(substr(idRiga,2,6));
  6111.     select altezzamax into var_almax from aree where idarea=to_number(substr(idRiga,2,6));
  6112.     select pesomax into var_pmax from aree where idarea=to_number(substr(idRiga,2,6));
  6113.  
  6114.     modGUI.ApriTabella;
  6115.     modGUI.ApriRigaTabella;
  6116.     modGUI.intestazioneTabella('Posti totali');
  6117.     modGUI.ApriElementoTabella;
  6118.     modGUI.ElementoTabella(to_char(var_pt));
  6119.     modGUI.ChiudiElementoTabella;
  6120.     modGUI.ChiudiRigaTabella;
  6121.     modGUI.ApriRigaTabella;
  6122.     modGUI.intestazioneTabella('Posti liberi');
  6123.     modGUI.ApriElementoTabella;
  6124.     modGUI.ElementoTabella(to_char(var_pl));
  6125.     modGUI.ChiudiElementoTabella;
  6126.     modGUI.ChiudiRigaTabella;
  6127.     modGUI.ApriRigaTabella;
  6128.     modGUI.intestazioneTabella('Stato');
  6129.     modGUI.ApriElementoTabella;
  6130.     modGUI.ElementoTabella(var_stato);
  6131.     modGUI.ChiudiElementoTabella;
  6132.     modGUI.ChiudiRigaTabella;
  6133.     modGUI.ApriRigaTabella;
  6134.     modGUI.intestazioneTabella('Gas');
  6135.     modGUI.ApriElementoTabella;
  6136.     modGUI.ElementoTabella(var_gas);
  6137.     modGUI.ChiudiElementoTabella;
  6138.     modGUI.ChiudiRigaTabella;
  6139.     modGUI.ApriRigaTabella;
  6140.     modGUI.intestazioneTabella('Lunghezza massima');
  6141.     modGUI.ApriElementoTabella;
  6142.     modGUI.ElementoTabella(to_char(var_lumax)||' m');
  6143.     modGUI.ChiudiElementoTabella;
  6144.     modGUI.ChiudiRigaTabella;
  6145.     modGUI.ApriRigaTabella;
  6146.     modGUI.intestazioneTabella('Larghezza massima');
  6147.     modGUI.ApriElementoTabella;
  6148.     modGUI.ElementoTabella(to_char(var_lamax)||' m');
  6149.     modGUI.ChiudiElementoTabella;
  6150.     modGUI.ChiudiRigaTabella;
  6151.     modGUI.ApriRigaTabella;
  6152.     modGUI.intestazioneTabella('Altezza massima');
  6153.     modGUI.ApriElementoTabella;
  6154.     modGUI.ElementoTabella(to_char(var_almax)||' m');
  6155.     modGUI.ChiudiElementoTabella;
  6156.     modGUI.ChiudiRigaTabella;
  6157.     modGUI.ApriRigaTabella;
  6158.     modGUI.intestazioneTabella('Peso massimo');
  6159.     modGUI.ApriElementoTabella;
  6160.     modGUI.ElementoTabella(to_char(var_pmax)||' kg');
  6161.     modGUI.ChiudiElementoTabella;
  6162.     modGUI.ChiudiRigaTabella;
  6163.     modGUI.ChiudiTabella;
  6164.  
  6165.     modGUI.apriDiv(true);
  6166.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_TARIFFE');
  6167.     modGUI.chiudiDiv;
  6168.     modGUI.aCapo;
  6169.     modGUI.aCapo;
  6170.     modGUI.aCapo;
  6171.     modGUI.chiudiDiv;
  6172.     modGUI.chiudiPagina;
  6173.   END DETTAGLITARIFFE;
  6174.  
  6175.     /* TIPOVETTURA
  6176.     *  Questa procedura serve a selezionare il tipo di vettura su cui vogliamo calcolare il numero medio di ingressi per fascia oraria
  6177.     *  id_Sessione: numero associato alla sessione corrente
  6178.     *  nome: username dell'utente attualmente connesso
  6179.     *  ruolo: ruolo dell'utente attualmente connesso
  6180.     */
  6181.   PROCEDURE TIPOVETTURA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6182.   BEGIN
  6183.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  6184.     modGUI.aCapo;
  6185.     modGUI.apriDiv(false,'mycontainer');
  6186.     modGUI.apriIntestazione(2);
  6187.     modGUI.inserisciTesto('INSERIMENTO TIPO VETTURA ');
  6188.     modGUI.chiudiIntestazione(2);
  6189.     modgui.apriForm(gruppo1||'.INGRESSIFASCIAORARIA_RIS');
  6190.  
  6191.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  6192.     modgui.inserisciInputHidden('nome',nome);
  6193.     modgui.inserisciInputHidden('ruolo',ruolo);
  6194.  
  6195.     modGUI.aCapo;
  6196.     modGUI.inserisciRadioButton('Non specificare tipo vettura','tipovettura','no',false);
  6197.     modGUI.inserisciRadioButton('Specifica tipo vettura','tipovettura','si',false);
  6198.     modGUI.aCapo;
  6199.  
  6200.     modGUI.aCapo;
  6201.     modGUI.apriSelect('lun','Lunghezza massima: ');
  6202.     for x in(select distinct lunghezzamax from aree) loop
  6203.         modGUI.inserisciOpzioneSelect(x.lunghezzamax,x.lunghezzamax,false);
  6204.     end loop;
  6205.     modGUI.chiudiSelect;
  6206.     modGUI.aCapo;
  6207.  
  6208.     modGUI.apriSelect('lar','Larghezza massima: ');
  6209.     for x in(select distinct larghezzamax from aree) loop
  6210.         modGUI.inserisciOpzioneSelect(x.larghezzamax,x.larghezzamax,false);
  6211.     end loop;
  6212.     modGUI.chiudiSelect;
  6213.  
  6214.     modGUI.aCapo;
  6215.     modGUI.apriSelect('alt','Altezza massima: ');
  6216.     for x in(select distinct altezzamax from aree) loop
  6217.         modGUI.inserisciOpzioneSelect(x.altezzamax,x.altezzamax,false);
  6218.     end loop;
  6219.     modGUI.chiudiSelect;
  6220.  
  6221.     modGUI.aCapo;
  6222.     modGUI.apriSelect('peso','Peso massimo: ');
  6223.     for x in(select distinct pesomax from aree) loop
  6224.         modGUI.inserisciOpzioneSelect(x.pesomax,x.pesomax,false);
  6225.     end loop;
  6226.     modGUI.chiudiSelect;
  6227.  
  6228.     modGUI.aCapo;
  6229.     modGUI.aCapo;
  6230.     modGUI.inserisciBottoneReset('RESET');
  6231.     modGUI.inserisciBottoneForm;
  6232.     modgui.chiudiForm;
  6233.     modGUI.chiudiDiv;
  6234.     modGUI.chiudiPagina;
  6235.   END TIPOVETTURA;
  6236.  
  6237.     /* INGRESSIFASCIAORARIA_RIS
  6238.     *  Questa procedura serve a visualizzare il numero medio di ingressi per fascia oraria in base al tipo di vettura selezionato
  6239.     *  id_Sessione: numero associato alla sessione corrente
  6240.     *  nome: username dell'utente attualmente connesso
  6241.     *  ruolo: ruolo dell'utente attualmente connesso
  6242.     *  tipovettura: risultato del radiobutton per scegliere se considerare tutte le auto o solo quelle che rispettano i parametri selezionati
  6243.     *  lun: lunghezza massima
  6244.     *  lar: larghezza massima
  6245.     *  alt: altezza massima
  6246.     *  peso: peso massimo
  6247.     */
  6248.   PROCEDURE INGRESSIFASCIAORARIA_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, tipovettura varchar2, lun varchar2, lar varchar2, alt varchar2, peso varchar2) AS
  6249.   BEGIN
  6250.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6251.     modGUI.aCapo;
  6252.     modGUI.apriIntestazione(2);
  6253.     modGUI.inserisciTesto('VISUALIZZA NUMERO MEDIO DI INGRESSI PER FASCIA ORARIA');
  6254.     modGUI.chiudiIntestazione(2);
  6255.     modGUI.apriDiv;
  6256.     modGUI.ApriTabella;
  6257.     if(tipovettura='no')then
  6258.     modGUI.ApriRigaTabella;
  6259.     modGUI.intestazioneTabella('Descrizione');
  6260.     modGUI.intestazioneTabella('Media ingressi orari');
  6261.     modGUI.ChiudiRigaTabella;
  6262.  
  6263.     for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
  6264.               select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
  6265.               from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  6266.               inner join Aree on aree.idarea=areefasceorarie.idarea
  6267.               inner join box on box.idarea=aree.idarea
  6268.               inner join ingressiorari on ingressiorari.idbox=box.idbox
  6269.               where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
  6270.               and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
  6271.               and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
  6272.               group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
  6273.               group by(t.idfasciaoraria,t.nome)) loop
  6274.         modGUI.ApriRigaTabella;
  6275.         modGUI.ApriElementoTabella;
  6276.         modGUI.ElementoTabella(x.nome);
  6277.         modGUI.ChiudiElementoTabella;
  6278.         modGUI.ApriElementoTabella;
  6279.         modGUI.ElementoTabella(x.MediaIngressiOrari);
  6280.         modGUI.ChiudiElementoTabella;
  6281.         modGUI.ChiudiRigaTabella;
  6282.     end loop;
  6283.     else
  6284.     modGUI.apriIntestazione(4);
  6285.     modGUI.inserisciTesto('Lunghezza: '||lun||'m Larghezza: '||lar||'m Altezza: '||alt||'m Peso: '||peso||'kg');
  6286.     modGUI.chiudiIntestazione(4);
  6287.     modGUI.ApriRigaTabella;
  6288.     modGUI.intestazioneTabella('Descrizione');
  6289.     modGUI.intestazioneTabella('Media ingressi orari');
  6290.     modGUI.ChiudiRigaTabella;
  6291.     for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
  6292.               select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
  6293.               from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  6294.               inner join Aree on aree.idarea=areefasceorarie.idarea
  6295.               inner join box on box.idarea=aree.idarea
  6296.               inner join ingressiorari on ingressiorari.idbox=box.idbox
  6297.               where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
  6298.               and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
  6299.               and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
  6300.               and aree.lunghezzamax<=lun and aree.larghezzamax<=lar and aree.altezzamax<=alt and aree.pesomax<=peso
  6301.               group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
  6302.               group by(t.idfasciaoraria,t.nome)) loop
  6303.         modGUI.ApriRigaTabella;
  6304.         modGUI.ApriElementoTabella;
  6305.         modGUI.ElementoTabella(x.nome);
  6306.         modGUI.ChiudiElementoTabella;
  6307.         modGUI.ApriElementoTabella;
  6308.         modGUI.ElementoTabella(x.MediaIngressiOrari);
  6309.         modGUI.ChiudiElementoTabella;
  6310.         modGUI.ChiudiRigaTabella;
  6311.     end loop;
  6312.     end if;
  6313.     modGUI.ChiudiTabella;
  6314.  
  6315.     modGUI.apriIntestazione(4);
  6316.     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  6317.     modGUI.chiudiIntestazione(4);
  6318.     modGUI.apriDiv(true);
  6319.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.TIPOVETTURA');
  6320.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
  6321.     modGUI.chiudiDiv;
  6322.     modGUI.aCapo;
  6323.     modGUI.aCapo;
  6324.     modGUI.aCapo;
  6325.     modGUI.chiudiDiv;
  6326.     modGUI.chiudiPagina;
  6327.   END INGRESSIFASCIAORARIA_RIS;
  6328.  
  6329.     /* FILTROPERCENTUALE
  6330.     *  Questa procedura serve a selezionare i parametri per calcolare la percentuale di posti liberi per fascia oraria o per giorno con o senza raggruppamento per area
  6331.     *  id_Sessione: numero associato alla sessione corrente
  6332.     *  nome: username dell'utente attualmente connesso
  6333.     *  ruolo: ruolo dell'utente attualmente connesso
  6334.     */
  6335.   PROCEDURE FILTROPERCENTUALE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6336.   BEGIN
  6337.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  6338.     modGUI.aCapo;
  6339.  
  6340.     modGUI.apriIntestazione(2);
  6341.     modGUI.inserisciTesto('SELEZIONA AREA E TIPO DI RAGGRUPPAMENTO');
  6342.     modGUI.chiudiIntestazione(2);
  6343.  
  6344.     modgui.apriForm(gruppo1||'.percentualePostiLiberi');
  6345.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  6346.     modgui.inserisciInputHidden('nome',nome);
  6347.     modgui.inserisciInputHidden('ruolo',ruolo);
  6348.     modGUI.aCapo;
  6349.     modGUI.apriSelect('area','Aree: ');
  6350.     for x in(select aree.idarea from aree) loop
  6351.         modGUI.inserisciOpzioneSelect(x.idarea,x.idarea,false);
  6352.     end loop;
  6353.     modGUI.inserisciOpzioneSelect('nessuna','Tutte',false);
  6354.     modGUI.chiudiSelect;
  6355.     modGUI.aCapo;
  6356.     modGUI.apriSelect('raggruppamento','Raggruppa per: ');
  6357.     modGUI.inserisciOpzioneSelect('fasciaoraria','fascia oraria');
  6358.     modGUI.inserisciOpzioneSelect('giorno','giorno');
  6359.     modGUI.chiudiSelect;
  6360.     modGUI.aCapo;
  6361.     modGUI.aCapo;
  6362.  
  6363.     modGUI.inserisciBottoneReset('RESET');
  6364.     modGUI.inserisciBottoneForm;
  6365.     modgui.chiudiForm;
  6366.  
  6367.     modGUI.chiudiPagina;
  6368.   END FILTROPERCENTUALE;
  6369.  
  6370.     /* PERCENTUALEPOSTILIBERI
  6371.     *  Questa procedura serve a calcolare la percentuale di posti liberi per fascia oraria o per giorno con o senza raggruppamento per area
  6372.     *  in base ai parametri precedentemente selezionati in FILTROPERCENTUALE
  6373.     *  id_Sessione: numero associato alla sessione corrente
  6374.     *  nome: username dell'utente attualmente connesso
  6375.     *  ruolo: ruolo dell'utente attualmente connesso
  6376.     *  area: id dell'area per cui scegliamo di raggruppare i dati
  6377.     *  raggruppamento: serve a scegliere se raggruppare per fascia oraria o per giorno
  6378.     */
  6379.   PROCEDURE PERCENTUALEPOSTILIBERI(id_Sessione varchar2, nome varchar2, ruolo varchar2, area varchar2, raggruppamento varchar2) AS
  6380.   BEGIN
  6381. if(raggruppamento='fasciaoraria')then
  6382.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6383.     modGUI.aCapo;
  6384.     modGUI.apriIntestazione(2);
  6385.     modGUI.inserisciTesto('VISUALIZZA PERCENTUALE DEI POSTI LIBERI PER FASCIA ORARIA');
  6386.     modGUI.chiudiIntestazione(2);
  6387.     modGUI.apriDiv;
  6388.     modGUI.ApriTabella;
  6389.  
  6390.     modGUI.ApriRigaTabella;
  6391.     modGUI.intestazioneTabella('Descrizione');
  6392.     modGUI.intestazioneTabella('Posti totali');
  6393.     modGUI.intestazioneTabella('Posti liberi');
  6394.     modGUI.intestazioneTabella('Percentuale posti liberi per fascia oraria');
  6395.     modGUI.ChiudiRigaTabella;
  6396.     if(area='nessuna')then
  6397.         for x in ( select FasceOrarie.idfasciaoraria, FasceOrarie.nome, sum(Aree.PostiTotali) as PT,
  6398.                     sum(Aree.PostiLiberi) as PL,
  6399.                     (sum(Aree.PostiLiberi)/sum(Aree.postitotali))*100 as res
  6400.                     from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
  6401.                     inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
  6402.                     group by (FasceOrarie.idfasciaoraria, FasceOrarie.nome)
  6403.                     order by(fasceorarie.idfasciaoraria)) loop
  6404.             modGUI.ApriRigaTabella;
  6405.             modGUI.ApriElementoTabella;
  6406.             modGUI.ElementoTabella(x.nome);
  6407.             modGUI.ChiudiElementoTabella;
  6408.             modGUI.ApriElementoTabella;
  6409.             modGUI.ElementoTabella(x.PT);
  6410.             modGUI.ChiudiElementoTabella;
  6411.             modGUI.ApriElementoTabella;
  6412.             modGUI.ElementoTabella(x.PL);
  6413.             modGUI.ChiudiElementoTabella;
  6414.             modGUI.ApriElementoTabella;
  6415.             modGUI.ElementoTabella(x.res || '%');
  6416.             modGUI.ChiudiElementoTabella;
  6417.             modGUI.ChiudiRigaTabella;
  6418.         end loop;
  6419.     else
  6420.         for x in ( select FasceOrarie.idfasciaoraria, FasceOrarie.nome, sum(Aree.PostiTotali) as PT,
  6421.                 sum(Aree.PostiLiberi) as PL,
  6422.                 (sum(Aree.PostiLiberi)/sum(Aree.postitotali))*100 as res
  6423.                 from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
  6424.                 inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
  6425.                 where aree.idarea=area
  6426.                 group by (FasceOrarie.idfasciaoraria, FasceOrarie.nome)
  6427.                 order by(fasceorarie.idfasciaoraria)) loop
  6428.             modGUI.ApriRigaTabella;
  6429.             modGUI.ApriElementoTabella;
  6430.             modGUI.ElementoTabella(x.nome);
  6431.             modGUI.ChiudiElementoTabella;
  6432.             modGUI.ApriElementoTabella;
  6433.             modGUI.ElementoTabella(x.PT);
  6434.             modGUI.ChiudiElementoTabella;
  6435.             modGUI.ApriElementoTabella;
  6436.             modGUI.ElementoTabella(x.PL);
  6437.             modGUI.ChiudiElementoTabella;
  6438.             modGUI.ApriElementoTabella;
  6439.             modGUI.ElementoTabella(x.res || '%');
  6440.             modGUI.ChiudiElementoTabella;
  6441.             modGUI.ChiudiRigaTabella;
  6442.         end loop;
  6443.     end if;
  6444.     modGUI.ChiudiTabella;
  6445.     modGUI.apriIntestazione(4);
  6446.     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  6447.     modGUI.chiudiIntestazione(4);
  6448.     modGUI.apriDiv(true);
  6449.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROPERCENTUALE');
  6450.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
  6451.     modGUI.chiudiDiv;
  6452.     modGUI.aCapo;
  6453.     modGUI.aCapo;
  6454.     modGUI.aCapo;
  6455.     modGUI.chiudiDiv;
  6456.     modGUI.chiudiPagina;
  6457. else
  6458.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6459.     modGUI.aCapo;
  6460.     modGUI.apriIntestazione(2);
  6461.     modGUI.inserisciTesto('VISUALIZZA PERCENTUALE DEI POSTI LIBERI PER GIORNO');
  6462.     modGUI.chiudiIntestazione(2);
  6463.     modGUI.apriDiv;
  6464.     modGUI.ApriTabella;
  6465.  
  6466.     modGUI.ApriRigaTabella;
  6467.     modGUI.intestazioneTabella('Giorno');
  6468.     modGUI.intestazioneTabella('Posti totali');
  6469.     modGUI.intestazioneTabella('Posti liberi');
  6470.     modGUI.intestazioneTabella('Percentuale posti liberi per giorno');
  6471.     modGUI.ChiudiRigaTabella;
  6472. if(area='nessuna')then
  6473.     for x in ( select fasceorarie.giorno as gg,sum(aree.postitotali) as PostiTotali,sum(aree.postiliberi) as PostiLiberi,
  6474.                (sum(aree.postiliberi)/sum(aree.postitotali))*100 as PostiLiberiPerGiorno
  6475.                from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
  6476.                inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
  6477.                group by(fasceorarie.giorno)) loop
  6478.         modGUI.ApriRigaTabella;
  6479.         modGUI.ApriElementoTabella;
  6480.         modGUI.ElementoTabella(x.gg);
  6481.         modGUI.ChiudiElementoTabella;
  6482.         modGUI.ApriElementoTabella;
  6483.         modGUI.ElementoTabella(x.PostiTotali);
  6484.         modGUI.ChiudiElementoTabella;
  6485.         modGUI.ApriElementoTabella;
  6486.         modGUI.ElementoTabella(x.PostiLiberi);
  6487.         modGUI.ChiudiElementoTabella;
  6488.         modGUI.ApriElementoTabella;
  6489.         modGUI.ElementoTabella(x.PostiLiberiPerGiorno||'%');
  6490.         modGUI.ChiudiElementoTabella;
  6491.         modGUI.ChiudiRigaTabella;
  6492.     end loop;
  6493. else
  6494.     for x in ( select fasceorarie.giorno as gg,sum(aree.postitotali) as PostiTotali,sum(aree.postiliberi) as PostiLiberi,
  6495.                (sum(aree.postiliberi)/sum(aree.postitotali))*100 as PostiLiberiPerGiorno
  6496.                from Aree inner join AreeFasceOrarie on areefasceorarie.idarea = aree.idarea
  6497.                inner join FasceOrarie on fasceorarie.idfasciaoraria = areefasceorarie.idfasciaoraria
  6498.                where aree.idarea=area
  6499.                group by(fasceorarie.giorno)) loop
  6500.         modGUI.ApriRigaTabella;
  6501.         modGUI.ApriElementoTabella;
  6502.         modGUI.ElementoTabella(x.gg);
  6503.         modGUI.ChiudiElementoTabella;
  6504.         modGUI.ApriElementoTabella;
  6505.         modGUI.ElementoTabella(x.PostiTotali);
  6506.         modGUI.ChiudiElementoTabella;
  6507.         modGUI.ApriElementoTabella;
  6508.         modGUI.ElementoTabella(x.PostiLiberi);
  6509.         modGUI.ChiudiElementoTabella;
  6510.         modGUI.ApriElementoTabella;
  6511.         modGUI.ElementoTabella(x.PostiLiberiPerGiorno||'%');
  6512.         modGUI.ChiudiElementoTabella;
  6513.         modGUI.ChiudiRigaTabella;
  6514.     end loop;
  6515. end if;
  6516.     modGUI.ChiudiTabella;
  6517.  
  6518.     modGUI.apriIntestazione(4);
  6519.     modGUI.inserisciTesto('ALTRE OPERAZIONI');
  6520.     modGUI.chiudiIntestazione(4);
  6521.     modGUI.apriDiv(true);
  6522.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROPERCENTUALE');
  6523.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Visualizza tariffe',gruppo1||'.VIS_TARIFFE');
  6524.     modGUI.chiudiDiv;
  6525.     modGUI.aCapo;
  6526.     modGUI.aCapo;
  6527.     modGUI.aCapo;
  6528.     modGUI.chiudiDiv;
  6529.     modGUI.chiudiPagina;
  6530. end if;
  6531.   END PERCENTUALEPOSTILIBERI;
  6532.  
  6533.     /* FILTROCATEGORIA
  6534.     *  Questa procedura serve a scegliere la categoria dei veicoli su cui invocare la procedura MULTE_RIS
  6535.     *  id_Sessione: numero associato alla sessione corrente
  6536.     *  nome: username dell'utente attualmente connesso
  6537.     *  ruolo: ruolo dell'utente attualmente connesso
  6538.     */
  6539.   PROCEDURE FILTROCATEGORIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6540.   BEGIN
  6541.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  6542.     modGUI.aCapo;
  6543.     modGUI.apriIntestazione(2);
  6544.     modGUI.inserisciTesto('SELEZIONARE LA CATEGORIA');
  6545.     modGUI.chiudiIntestazione(2);
  6546.  
  6547.     modgui.apriForm(gruppo1||'.MULTE_RIS');
  6548.  
  6549.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  6550.     modgui.inserisciInputHidden('nome',nome);
  6551.     modgui.inserisciInputHidden('ruolo',ruolo);
  6552.  
  6553.     modGUI.aCapo;
  6554.     modGUI.apriSelect('cat','Categoria: ');
  6555.     for x in(select aree.idarea,aree.lunghezzamax,aree.larghezzamax,aree.altezzamax,aree.pesomax from aree)loop
  6556.         modGUI.inserisciOpzioneSelect(x.idarea,'Lunghezza '||to_char(x.lunghezzamax)||'m  larghezza '||to_char(x.larghezzamax)||'m  altezza '||to_char(x.altezzamax)||'m  peso '||to_char(x.pesomax)||'kg',false);
  6557.     end loop;
  6558.     modGUI.inserisciOpzioneSelect('Tutte','Tutte',false);
  6559.     modGUI.chiudiSelect;
  6560.     modGUI.aCapo;
  6561.  
  6562.     modGUI.inserisciTesto('GPL:');
  6563.     modGUI.aCapo;
  6564.     modGUI.inserisciRadioButton('Si','gpl','GPL',false);
  6565.     modGUI.inserisciRadioButton('No','gpl','N',false);
  6566.     modGUI.inserisciRadioButton('Indifferente','gpl','Indifferente',false);
  6567.     modGUI.aCapo;
  6568.     modGUI.aCapo;
  6569.     modGUI.inserisciBottoneReset('RESET');
  6570.     modGUI.inserisciBottoneForm;
  6571.     modgui.chiudiForm;
  6572.     modGUI.chiudiDiv;
  6573.     modGUI.chiudiPagina;
  6574.   END FILTROCATEGORIA;
  6575.  
  6576. PROCEDURE INGRESSIFASCIAORARIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6577. BEGIN
  6578.  
  6579.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6580.     modGUI.aCapo;
  6581.     modGUI.apriIntestazione(2);
  6582.     modGUI.inserisciTesto('VISUALIZZA NUMERO MEDIO DI INGRESSI PER FASCIA ORARIA');
  6583.     modGUI.chiudiIntestazione(2);
  6584.     modGUI.apriDiv;
  6585.     modGUI.ApriTabella;
  6586.    
  6587.     modGUI.ApriRigaTabella;
  6588.     modGUI.intestazioneTabella('Descrizione');
  6589.     modGUI.intestazioneTabella('Media ingressi orari');
  6590.     modGUI.ChiudiRigaTabella;
  6591.    
  6592.     for x in (select t.idfasciaoraria,t.nome, avg(NumeroIngressiOrari) as MediaIngressiOrari from(
  6593.               select Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'), count(IngressiOrari.idingressoorario) as NumeroIngressiOrari
  6594.               from FasceOrarie inner join AreeFasceOrarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  6595.               inner join Aree on aree.idarea=areefasceorarie.idarea
  6596.               inner join box on box.idarea=aree.idarea
  6597.               inner join ingressiorari on ingressiorari.idbox=box.idbox
  6598.               where to_char(ingressiorari.oraentrata, 'hh24:mi:ss')>=to_char(fasceorarie.orainizio, 'hh24:mi:ss')
  6599.               and to_char(ingressiorari.oraentrata, 'hh24:mi:ss')<=to_char(fasceorarie.orafine, 'hh24:mi:ss')
  6600.               and upper(substr(to_char(ingressiorari.oraentrata,'day','NLS_DATE_LANGUAGE = italian'),0,3))=fasceorarie.giorno
  6601.               group by(Fasceorarie.idfasciaoraria,FasceOrarie.nome,trunc(ingressiorari.oraentrata,'dd'))) t
  6602.               group by(t.idfasciaoraria,t.nome)) loop
  6603.         modGUI.ApriRigaTabella;
  6604.         modGUI.ApriElementoTabella;
  6605.         modGUI.ElementoTabella(x.nome);
  6606.         modGUI.ChiudiElementoTabella;
  6607.         modGUI.ApriElementoTabella;
  6608.         modGUI.ElementoTabella(x.MediaIngressiOrari);
  6609.         modGUI.ChiudiElementoTabella;
  6610.         modGUI.ChiudiRigaTabella;
  6611.     end loop;
  6612.  
  6613.     modGUI.ChiudiTabella;
  6614.     modGUI.chiudiDiv;
  6615.     modGUI.chiudiPagina;
  6616.    
  6617. END INGRESSIFASCIAORARIA;
  6618.  
  6619.     /* MULTE_RIS
  6620.     *  Questa procedura serve a selezionare i dettagli dei veicoli che hanno preso sanzioni per un importo inferiore ad almeno una
  6621.     *  delle sanzioni prese dai veicoli della categoria precedentemente selezionata in FILTROCATEGORIA
  6622.     *  id_Sessione: numero associato alla sessione corrente
  6623.     *  nome: username dell'utente attualmente connesso
  6624.     *  ruolo: ruolo dell'utente attualmente connesso
  6625.     *  cat: id dell'area che contiene la larghezza, lunghezza, altezza, peso massimi
  6626.     *  gpl: risultato del radiobutton per scegliere se considerare o meno i veicoli a gpl
  6627.     */
  6628.   PROCEDURE MULTE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,cat varchar2, gpl varchar2) AS
  6629.   var_lun number;
  6630.   var_lar number;
  6631.   var_peso number;
  6632.   var_alt number;
  6633.   var_minimo number;
  6634.   BEGIN
  6635.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6636.     modGUI.aCapo;
  6637.     modGUI.apriIntestazione(2);
  6638.     modGUI.inserisciTesto('VEICOLI CHE HANNO TUTTE LE MULTE MINORI DI ALMENO UNA MULTA DELLA CATEGORIA SCELTA');
  6639.     modGUI.chiudiIntestazione(2);
  6640.     modGUI.apriDiv;
  6641.     modGUI.ApriTabella;
  6642.  
  6643.     modGUI.ApriRigaTabella;
  6644.     modGUI.intestazioneTabella('Targa');
  6645.     modGUI.intestazioneTabella('Modello');
  6646.     modGUI.intestazioneTabella('Colore');
  6647.     modGUI.intestazioneTabella('Dettagli');
  6648.     modGUI.ChiudiRigaTabella;
  6649.  
  6650.     if(cat='Tutte' and gpl='Indifferente')then
  6651.         select max(t.minimo) into var_minimo from(
  6652.         select veicoli.idveicolo,max(multe.importo) as minimo
  6653.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  6654.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  6655.         inner join multe on multe.idmulta=ingressiorari.idmulta
  6656.         group by(veicoli.idveicolo)) t;
  6657.     end if;
  6658.  
  6659.     if(cat!='Tutte' and gpl!='Indifferente')then
  6660.         select aree.lunghezzamax,aree.larghezzamax,aree.pesomax,aree.altezzamax
  6661.         into var_lun,var_lar,var_peso,var_alt
  6662.         from aree where aree.idarea=cat;
  6663.  
  6664.         modGUI.apriIntestazione(4);
  6665.         modGUI.inserisciTesto('Lunghezza: '||var_lun||'m Larghezza: '||var_lar||'m Altezza: '||var_alt||'m Peso: '||var_peso||'kg');
  6666.         modGUI.chiudiIntestazione(4);
  6667.  
  6668.         select max(t.minimo) into var_minimo from(
  6669.         select veicoli.idveicolo,max(multe.importo) as minimo
  6670.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  6671.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  6672.         inner join multe on multe.idmulta=ingressiorari.idmulta
  6673.         where veicoli.lunghezza<=var_lun and veicoli.larghezza<=var_lar and veicoli.peso<=var_peso and veicoli.altezza<=var_alt
  6674.         and veicoli.alimentazione=gpl
  6675.         group by(veicoli.idveicolo)) t;
  6676.     end if;
  6677.  
  6678.     if(cat!='Tutte' and gpl='Indifferente')then
  6679.         select aree.lunghezzamax,aree.larghezzamax,aree.pesomax,aree.altezzamax
  6680.         into var_lun,var_lar,var_peso,var_alt
  6681.         from aree where aree.idarea=cat;
  6682.  
  6683.         modGUI.apriIntestazione(4);
  6684.         modGUI.inserisciTesto('Lunghezza: '||var_lun||'m Larghezza: '||var_lar||'m Altezza: '||var_alt||'m Peso: '||var_peso||'kg');
  6685.         modGUI.chiudiIntestazione(4);
  6686.  
  6687.         select max(t.minimo) into var_minimo from(
  6688.         select veicoli.idveicolo,max(multe.importo) as minimo
  6689.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  6690.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  6691.         inner join multe on multe.idmulta=ingressiorari.idmulta
  6692.         where veicoli.lunghezza<=var_lun and veicoli.larghezza<=var_lar and veicoli.peso<=var_peso and veicoli.altezza<=var_alt
  6693.         group by(veicoli.idveicolo)) t;
  6694.     else
  6695.         select max(t.minimo) into var_minimo from(
  6696.         select veicoli.idveicolo,max(multe.importo) as minimo
  6697.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  6698.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  6699.         inner join multe on multe.idmulta=ingressiorari.idmulta
  6700.         where veicoli.alimentazione=gpl
  6701.         group by(veicoli.idveicolo)) t;
  6702.     end if;
  6703.  
  6704.  
  6705.     for x in (
  6706.     select veicoli.idveicolo,veicoli.targa,veicoli.modello,veicoli.colore from(
  6707.         select veicoli.idveicolo,max(multe.importo) as massimo
  6708.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  6709.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  6710.         inner join multe on multe.idmulta=ingressiorari.idmulta
  6711.         group by(veicoli.idveicolo)) t
  6712.     inner join veicoli on veicoli.idveicolo=t.idveicolo
  6713.     where massimo<var_minimo
  6714.     ) loop
  6715.         modGUI.ApriRigaTabella;
  6716.         modGUI.ApriElementoTabella;
  6717.         modGUI.ElementoTabella(x.targa);
  6718.         modGUI.ChiudiElementoTabella;
  6719.         modGUI.ApriElementoTabella;
  6720.         modGUI.ElementoTabella(x.modello);
  6721.         modGUI.ChiudiElementoTabella;
  6722.         modGUI.ApriElementoTabella;
  6723.         modGUI.ElementoTabella(x.colore);
  6724.         modGUI.ChiudiElementoTabella;
  6725.         modGUI.ApriElementoTabella;
  6726.         modGUI.inserisciLente(gruppo1||'.DETT_VEICOLI',id_Sessione,nome,ruolo,x.idveicolo);
  6727.         modGUI.ChiudiElementoTabella;
  6728.         modGUI.ChiudiRigaTabella;
  6729.     end loop;
  6730.     modGUI.ChiudiTabella;
  6731.  
  6732.     modGUI.apriDiv(true);
  6733.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROCATEGORIA');
  6734.     modGUI.chiudiDiv;
  6735.     modGUI.aCapo;
  6736.     modGUI.aCapo;
  6737.     modGUI.aCapo;
  6738.     modGUI.chiudiDiv;
  6739.     modGUI.chiudiPagina;
  6740.   END MULTE_RIS;
  6741.  
  6742.     /* VIS_FASCEORARIE
  6743.     *  Questa procedura serve a visualizzare tutte le fasce orarie possibili
  6744.     *  id_Sessione: numero associato alla sessione corrente
  6745.     *  nome: username dell'utente attualmente connesso
  6746.     *  ruolo: ruolo dell'utente attualmente connesso
  6747.     */
  6748.   PROCEDURE VIS_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6749.   BEGIN
  6750.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  6751.     modGUI.aCapo;
  6752.     modGUI.apriIntestazione(2);
  6753.     modGUI.inserisciTesto('VISUALIZZA FASCE ORARIE');
  6754.     modGUI.chiudiIntestazione(2);
  6755.     modGUI.apriDiv;
  6756.     modGUI.ApriTabella;
  6757.  
  6758.     modGUI.ApriRigaTabella;
  6759.     modGUI.intestazioneTabella('Descrizione');
  6760.     modGUI.intestazioneTabella('Ora inizio');
  6761.     modGUI.intestazioneTabella('Ora fine');
  6762.     modGUI.intestazioneTabella('Giorno');
  6763.     if(ruolo!='C')then
  6764.     modGUI.intestazioneTabella('Modifica');
  6765.     modGUI.intestazioneTabella('Elimina');
  6766.     end if;
  6767.     modGUI.ChiudiRigaTabella;
  6768.  
  6769.     for x in ( select fasceorarie.idfasciaoraria, fasceorarie.nome, to_char(fasceorarie.orainizio, 'hh24:mi:ss') as orainizio, to_char(fasceorarie.orafine, 'hh24:mi:ss') as orafine, fasceorarie.giorno
  6770.                from FasceOrarie) loop
  6771.         modGUI.ApriRigaTabella;
  6772.         modGUI.ApriElementoTabella;
  6773.         modGUI.ElementoTabella(x.nome);
  6774.         modGUI.ChiudiElementoTabella;
  6775.         modGUI.ApriElementoTabella;
  6776.         modGUI.ElementoTabella(x.orainizio);
  6777.         modGUI.ChiudiElementoTabella;
  6778.         modGUI.ApriElementoTabella;
  6779.         modGUI.ElementoTabella(x.orafine);
  6780.         modGUI.ChiudiElementoTabella;
  6781.         modGUI.ApriElementoTabella;
  6782.         modGUI.ElementoTabella(x.giorno);
  6783.         modGUI.ChiudiElementoTabella;
  6784.         if(ruolo!='C')then
  6785.         --modifica
  6786.         modGUI.ApriElementoTabella;
  6787.         modGUI.inserisciPenna(gruppo1||'.MOD_FASCEORARIE',id_Sessione,nome,ruolo,x.idfasciaoraria);
  6788.         modGUI.ChiudiElementoTabella;
  6789.         --elimina
  6790.         modGUI.ApriElementoTabella;
  6791.         modGUI.inserisciCestino(gruppo1||'.EL_FASCEORARIE',id_Sessione,nome,ruolo,x.idfasciaoraria);
  6792.         modGUI.ChiudiElementoTabella;
  6793.         end if;
  6794.         modGUI.ChiudiRigaTabella;
  6795.     end loop;
  6796.  
  6797.     modGUI.ChiudiTabella;
  6798.     modGUI.chiudiDiv;
  6799.     modGUI.chiudiPagina;
  6800.   END VIS_FASCEORARIE;
  6801.  
  6802.     /* INS_FASCEORARIE
  6803.     *  Questa procedura serve ad inserire i parametri di una nuovuna nuova fascia oraria
  6804.     *  id_Sessione: numero associato alla sessione corrente
  6805.     *  nome: username dell'utente attualmente connesso
  6806.     *  ruolo: ruolo dell'utente attualmente connesso
  6807.     */
  6808.   PROCEDURE INS_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  6809.   BEGIN
  6810.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  6811.     modGUI.aCapo;
  6812.     modGUI.apriDiv(false,'mycontainer');
  6813.     modGUI.apriIntestazione(2);
  6814.     modGUI.inserisciTesto('INSERIMENTO FASCIA ORARIA ');
  6815.     modGUI.chiudiIntestazione(2);
  6816.     modgui.apriForm(gruppo1||'.INS_FASCEORARIE_RIS');
  6817.  
  6818.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  6819.     modgui.inserisciInputHidden('nome',nome);
  6820.     modgui.inserisciInputHidden('ruolo',ruolo);
  6821.  
  6822.     modGUI.inserisciInput('descrizione','Nome','text', true);
  6823.     modGUI.inserisciInput('oraInizio','Ora inizio','time',  true);
  6824.     modGUI.inserisciInput('oraFine','Ora fine','time',  true);
  6825.  
  6826.     modGUI.aCapo;
  6827.     modGUI.apriSelect('gg','Giorno: ');
  6828.     modGUI.inserisciOpzioneSelect('LUN','Lunedi',false);
  6829.     modGUI.inserisciOpzioneSelect('MAR','Martedi',false);
  6830.     modGUI.inserisciOpzioneSelect('MER','Mercoledi',false);
  6831.     modGUI.inserisciOpzioneSelect('GIO','Giovedi',false);
  6832.     modGUI.inserisciOpzioneSelect('VEN','Venerdi',false);
  6833.     modGUI.inserisciOpzioneSelect('SAB','Sabato',false);
  6834.     modGUI.inserisciOpzioneSelect('DOM','Domenica',false);
  6835.     modGUI.chiudiSelect;
  6836.     modGUI.aCapo;
  6837.  
  6838.     modGUI.aCapo;
  6839.     modGUI.aCapo;
  6840.     modGUI.inserisciBottoneReset('RESET');
  6841.     modGUI.inserisciBottoneForm;
  6842.     modgui.chiudiForm;
  6843.     modGUI.chiudiDiv;
  6844.     modGUI.chiudiPagina;
  6845.   END INS_FASCEORARIE;
  6846.  
  6847.     /* INS_FASCEORARIE_RIS
  6848.     *  Questa procedura serve a visualizzare il risultato dell'inserimento di una nuova fascia oraria
  6849.     *  id_Sessione: numero associato alla sessione corrente
  6850.     *  nome: username dell'utente attualmente connesso
  6851.     *  ruolo: ruolo dell'utente attualmente connesso
  6852.     *  descrizione: descrizione della fascia oraria
  6853.     *  oraInizio: ora di inizio della fascia oraria
  6854.     *  oraFine: ora di fine della fascia oraria
  6855.     *  gg: giorno di riferimento della fascia oraria
  6856.     */
  6857.   PROCEDURE INS_FASCEORARIE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,descrizione varchar2, oraInizio varchar2, oraFine varchar2, gg varchar2) AS
  6858.   x number;
  6859.   BEGIN
  6860.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  6861.     modGUI.aCapo;
  6862.     modGUI.apriDiv(false,'mycontainer');
  6863.     modGUI.apriIntestazione(2);
  6864.     modGUI.inserisciTesto('INSERIMENTO FASCIA ORARIA ');
  6865.     modGUI.chiudiIntestazione(2);
  6866.  
  6867. if(oraInizio>oraFine)then
  6868.     modGUI.esitoOperazione('KO','Gli orari di inizio e fine fascia oraria non sono congruenti');
  6869. else
  6870.     x:=fasceorarieseq.nextval;
  6871.     INSERT INTO FasceOrarie(idfasciaoraria,nome,orainizio,orafine,giorno)
  6872.     values (x,descrizione,to_timestamp('01-JAN-1970 '||substr(to_char(oraInizio),1,2)||':'||substr(to_char(oraInizio),-2),'DD-MON-YYYY HH24:MI'),to_timestamp('01-JAN-1970 '||substr(to_char(oraFine),1,2)||':'||substr(to_char(oraFine),-2),'DD-MON-YYYY HH24:MI'),to_char(gg));
  6873.     if(SQL%ROWCOUNT != 0)then
  6874.         commit;
  6875.         modGUI.esitoOperazione('OK','La nuova fascia oraria e` stata inserita con successo');
  6876.     else
  6877.         modGUI.esitoOperazione('KO','La nuova fascia oraria non e` stata inserita correttamente');
  6878.     end if;
  6879. end if;
  6880.  
  6881.     modGUI.apriDiv(true);
  6882.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.INS_FASCEORARIE');
  6883.     modGUI.chiudiDiv;
  6884.     modGUI.aCapo;
  6885.     modGUI.aCapo;
  6886.     modGUI.aCapo;
  6887.     modGui.chiudiDiv;
  6888.     modGUI.chiudiPagina;
  6889. EXCEPTION
  6890. WHEN OTHERS THEN
  6891.         modGUI.esitoOperazione('KO','La nuova fascia oraria non e` stata inserita correttamente perche` si sovrappone ad altre fasce orarie gia` esistenti');    
  6892.         modGui.chiudiDiv;
  6893.         modGUI.apriDiv(true);
  6894.         modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.INS_FASCEORARIE');
  6895.         modGUI.chiudiDiv;
  6896.         modGUI.aCapo;
  6897.         modGUI.aCapo;
  6898.         modGUI.aCapo;
  6899.         modGUI.chiudiPagina;
  6900.   END INS_FASCEORARIE_RIS;
  6901.  
  6902.     /* MOD_FASCEORARIE
  6903.     *  Questa procedura serve a visualizzare la fascia oraria da modificare
  6904.     *  id_Sessione: numero associato alla sessione corrente
  6905.     *  nome: username dell'utente attualmente connesso
  6906.     *  ruolo: ruolo dell'utente attualmente connesso
  6907.     *  idRiga: id della fascia oraria selezionata in VIS_FASCEORARIE
  6908.     */
  6909.   PROCEDURE MOD_FASCEORARIE(id_Sessione varchar2, nome varchar2, ruolo varchar2,idRiga varchar2) AS
  6910.   BEGIN
  6911.     modGUI.apriPagina('HoC | Modifica dati', id_Sessione, nome, ruolo);
  6912.     modGUI.aCapo;
  6913.     modGUI.apriDiv(false,'mycontainer');
  6914.     modGUI.apriIntestazione(2);
  6915.     modGUI.inserisciTesto('MODIFICA FASCIA ORARIA ');
  6916.     modGUI.chiudiIntestazione(2);
  6917.  
  6918.     modgui.apriForm(gruppo1||'.MOD_FASCEORARIE_RIS');
  6919.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  6920.     modgui.inserisciInputHidden('nome',nome);
  6921.     modgui.inserisciInputHidden('ruolo',ruolo);
  6922.     modgui.inserisciInputHidden('idRiga',idRiga);
  6923.  
  6924.     for x in(select fasceorarie.idfasciaoraria,fasceorarie.nome as nome,fasceorarie.orainizio as orainizio, fasceorarie.orafine as orafine, fasceorarie.giorno as gg
  6925.     from fasceorarie where fasceorarie.idfasciaoraria=idRiga)loop
  6926.  
  6927.     modGUI.inserisciInput('var_descrizione','Nome','text',  true,x.nome);
  6928.     modGUI.inserisciInput('var_oraInizio','Ora inizio','time',  true);
  6929.     modGUI.inserisciInput('var_oraFine','Ora fine','time',  true);
  6930.     modGUI.aCapo;
  6931.     modGUI.apriSelect('var_gg','Giorno: ');                            
  6932.     modGUI.inserisciOpzioneSelect('LUN','Lunedi',false);
  6933.     modGUI.inserisciOpzioneSelect('MAR','Martedi',false);
  6934.     modGUI.inserisciOpzioneSelect('MER','Mercoledi',false);
  6935.     modGUI.inserisciOpzioneSelect('GIO','Giovedi',false);
  6936.     modGUI.inserisciOpzioneSelect('VEN','Venerdi',false);
  6937.     modGUI.inserisciOpzioneSelect('SAB','Sabato',false);
  6938.     modGUI.inserisciOpzioneSelect('DOM','Domenica',false);
  6939.     modGUI.chiudiSelect;
  6940.     modGUI.aCapo;
  6941.     end loop;
  6942.  
  6943.     modGUI.aCapo;
  6944.     modGUI.aCapo;
  6945.     modGUI.inserisciBottoneReset('RESET');
  6946.     modGUI.inserisciBottoneForm;
  6947.     modgui.chiudiForm;
  6948.     modGUI.chiudiDiv;
  6949.     modGUI.chiudiPagina;
  6950.   END MOD_FASCEORARIE;
  6951.  
  6952.     /* MOD_FASCEORARIE_RIS
  6953.     *  Questa procedura serve a modificare effettivamente la fascia oraria e visualizzarne il risultato
  6954.     *  id_Sessione: numero associato alla sessione corrente
  6955.     *  nome: username dell'utente attualmente connesso
  6956.     *  ruolo: ruolo dell'utente attualmente connesso
  6957.     *  idRiga: id della fascia oraria da modificare
  6958.     *  var_descrizione: descrizione della fascia oraria
  6959.     *  var_oraInizio: ora d'ini
  6960.     *  var_oraFine:
  6961.     *  var_gg:
  6962.     */
  6963.   PROCEDURE MOD_FASCEORARIE_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2, var_descrizione varchar2, var_oraInizio varchar2, var_oraFine varchar2, var_gg varchar2) AS
  6964.   BEGIN
  6965.     modGUI.apriPagina('HoC | Modifica dati', id_Sessione, nome, ruolo);
  6966.     modGUI.aCapo;
  6967.     modGUI.apriDiv(false,'mycontainer');
  6968.     modGUI.apriIntestazione(2);
  6969.     modGUI.inserisciTesto('MODIFICA FASCIA ORARIA ');
  6970.     modGUI.chiudiIntestazione(2);
  6971.     UPDATE fasceorarie
  6972.     SET nome = var_descrizione,
  6973.         orainizio = to_timestamp('01-JAN-1970 '||substr(to_char(var_oraInizio),1,2)||':'||substr(to_char(var_oraInizio),-2)),
  6974.         orafine = to_timestamp('01-JAN-1970 '||substr(to_char(var_oraFine),1,2)||':'||substr(to_char(var_oraFine),-2)),
  6975.         giorno = var_gg
  6976.     WHERE fasceorarie.idfasciaoraria=idRiga;
  6977.     if SQL%ROWCOUNT != 0 then
  6978.         commit;
  6979.         modGUI.esitoOperazione('OK','La fascia oraria e` stata modificata correttamente');
  6980.     else
  6981.         modGUI.esitoOperazione('KO','La fascia oraria e` stata modificata correttamente');
  6982.     end if;
  6983.  
  6984.     modGUI.apriDiv(true);
  6985.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
  6986.     modGUI.chiudiDiv;
  6987.     modGUI.aCapo;
  6988.     modGUI.aCapo;
  6989.     modGUI.aCapo;
  6990.     modGui.chiudiDiv;
  6991.     modGUI.chiudiPagina;
  6992. EXCEPTION
  6993. WHEN OTHERS THEN
  6994.         modGUI.esitoOperazione('KO','La fascia oraria non e` stata modificata correttamente perche` si sovrappone ad altre fasce orarie gia` esistenti');    
  6995.         modGui.chiudiDiv;
  6996.         modGUI.apriDiv(true);
  6997.         modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
  6998.         modGUI.chiudiDiv;
  6999.         modGUI.chiudiPagina;
  7000. END MOD_FASCEORARIE_RIS;
  7001.  
  7002.     /* EL_FASCEORARIE
  7003.     *  Questa procedura serve ad eliminare la fascia oraria selezionata in VIS_FASCEORARIE e visualizzarne il risultato
  7004.     *  id_Sessione: numero associato alla sessione corrente
  7005.     *  nome: username dell'utente attualmente connesso
  7006.     *  ruolo: ruolo dell'utente attualmente connesso
  7007.     *  idRiga: id della fascia oraria da eliminare
  7008.     */
  7009.   PROCEDURE EL_FASCEORARIE(id_Sessione varchar2,nome varchar2,ruolo varchar2,idRiga varchar2) AS
  7010.   BEGIN
  7011.     modGUI.apriPagina('HoC | Elimina dati', id_Sessione, nome, ruolo);
  7012.     modGUI.aCapo;
  7013.     modGUI.apriDiv(false,'mycontainer');
  7014.     modGUI.apriIntestazione(2);
  7015.     modGUI.inserisciTesto('ELIMINA FASCIA ORARIA ');
  7016.     modGUI.chiudiIntestazione(2);
  7017.  
  7018.     DELETE FROM areefasceorarie WHERE areefasceorarie.idfasciaoraria=idRiga;
  7019.     DELETE FROM fasceorarie WHERE fasceorarie.idfasciaoraria=idRiga;
  7020.  
  7021.     if SQL%ROWCOUNT != 0 then
  7022.         commit;
  7023.         modGUI.esitoOperazione('OK','La fascia oraria e` stata eliminata correttamente');
  7024.     else
  7025.         modGUI.esitoOperazione('KO','La fascia oraria non e` stata eliminata correttamente');
  7026.     end if;
  7027.  
  7028.     modGUI.apriDiv(true);
  7029.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.VIS_FASCEORARIE');
  7030.     modGUI.chiudiDiv;
  7031.     modGUI.aCapo;
  7032.     modGUI.aCapo;
  7033.     modGUI.aCapo;
  7034.     modGui.chiudiDiv;
  7035.     modGUI.chiudiPagina;
  7036.   END EL_FASCEORARIE;
  7037.  
  7038.     /* FILTRO_VEICOLI
  7039.     *  Questa procedura serve a selezionare un cliente, un periodo di posteggio ed una autorimessa per poi trovare i veicoli
  7040.     *  che sono riconducibili ai parametri selezionati nella procedura VEICOLI_RIS
  7041.     *  id_Sessione: numero associato alla sessione corrente
  7042.     *  nome: username dell'utente attualmente connesso
  7043.     *  ruolo: ruolo dell'utente attualmente connesso
  7044.     */
  7045.   PROCEDURE FILTRO_VEICOLI(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  7046.   BEGIN
  7047.     modGUI.apriPagina('HoC | Inserisci dati', id_Sessione, nome, ruolo);
  7048.     modGUI.aCapo;
  7049.     modGUI.apriIntestazione(2);
  7050.     modGUI.inserisciTesto('VEICOLI RICONDUCIBILI AL CLIENTE IN UN DETERMINATO PERIODO IN UNA DETERMINATA AUTORIMESSA');
  7051.     modGUI.chiudiIntestazione(2);
  7052.  
  7053.     modgui.apriForm(gruppo1||'.VEICOLI_RIS');
  7054.  
  7055.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  7056.     modgui.inserisciInputHidden('nome',nome);
  7057.     modgui.inserisciInputHidden('ruolo',ruolo);
  7058.  
  7059.     modGUI.apriSelect('var_autorimessa','Autorimessa: ');
  7060.     for x in(select autorimesse.idautorimessa,autorimesse.indirizzo from autorimesse) loop
  7061.         modGUI.inserisciOpzioneSelect(x.idautorimessa,x.indirizzo,false);
  7062.     end loop;
  7063.     modGUI.chiudiSelect;
  7064.  
  7065.     modGUI.apriSelect('var_cliente','Cliente: ');
  7066.     for x in(select persone.nome,persone.cognome,clienti.idcliente from persone inner join clienti on clienti.idpersona=persone.idpersona) loop
  7067.         modGUI.inserisciOpzioneSelect(x.idcliente,x.nome||' '||x.cognome,false);
  7068.     end loop;
  7069.     modGUI.chiudiSelect;
  7070.  
  7071.     modGUI.inserisciInput('dataInizio','Data iniziale','date', true);
  7072.     modGUI.inserisciInput('dataFine', 'Data finale','date', true);
  7073.  
  7074.     modGUI.aCapo;
  7075.     modGUI.aCapo;
  7076.     modGUI.inserisciBottoneReset('RESET');
  7077.     modGUI.inserisciBottoneForm;
  7078.     modGUI.chiudiPagina;
  7079.   END FILTRO_VEICOLI;
  7080.  
  7081.     /* VEICOLI_RIS
  7082.     *  Questa procedura serve a visualizzare i veicoli che sono riconducibili a un cliente
  7083.     *  e che sono stati posteggiati in un determinato periodo e in una determinata autorimessa
  7084.     *  id_Sessione: numero associato alla sessione corrente
  7085.     *  nome: username dell'utente attualmente connesso
  7086.     *  ruolo: ruolo dell'utente attualmente connesso
  7087.     *  var_autorimessa: id dell'autorimessa selezionata
  7088.     *  var_cliente: id del cliente selezionato
  7089.     *  dataInizio: data d'inizio dei posteggi
  7090.     *  dataFine: data di fine dei posteggi
  7091.     */
  7092.   PROCEDURE VEICOLI_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2,var_autorimessa varchar2,var_cliente varchar2,dataInizio varchar2, dataFine varchar2) AS
  7093.   idRiga varchar2(12);
  7094.   var_nome varchar2(50);
  7095.   var_cognome varchar2(50);
  7096.   var_indirizzo varchar2(50);
  7097.   BEGIN
  7098.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  7099.     modGUI.aCapo;
  7100.     select persone.nome into var_nome from persone inner join clienti on persone.idpersona=clienti.idpersona where clienti.idcliente=var_cliente;
  7101.     select persone.cognome into var_cognome from persone inner join clienti on persone.idpersona=clienti.idpersona where clienti.idcliente=var_cliente;
  7102.     select autorimesse.indirizzo into var_indirizzo from autorimesse where autorimesse.idautorimessa=var_autorimessa;
  7103.     modGUI.apriIntestazione(2);
  7104.     modGUI.inserisciTesto('VEICOLI RICONDUCIBILI AL CLIENTE '||var_nome||' '||var_cognome|| ' DAL '||dataInizio||' AL '||dataFine||' IN '||var_indirizzo);
  7105.     modGUI.chiudiIntestazione(2);
  7106.     modGUI.apriDiv;
  7107.     modGUI.ApriTabella;
  7108.  
  7109.     modGUI.ApriRigaTabella;
  7110.     modGUI.intestazioneTabella('Targa');
  7111.     modGUI.intestazioneTabella('Modello');
  7112.     modGUI.intestazioneTabella('Colore');
  7113.     modGUI.intestazioneTabella('Dettagli');
  7114.     modGUI.ChiudiRigaTabella;
  7115.  
  7116.     for x in (select veicoli.targa, veicoli.modello, veicoli.colore, veicoli.idveicolo from(
  7117.         select veicoli.idveicolo, effettuaingressiorari.idcliente
  7118.         from veicoli inner join effettuaingressiorari on veicoli.idveicolo=effettuaingressiorari.idveicolo
  7119.         inner join ingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  7120.         inner join box on box.idbox=ingressiorari.idbox
  7121.         inner join aree on aree.idarea=box.idarea
  7122.         where effettuaingressiorari.idcliente=var_cliente
  7123.         and aree.idautorimessa=var_autorimessa
  7124.         and to_char(ingressiorari.oraentrata, 'YYYY-MM-DD')>=dataInizio
  7125.         and to_char(ingressiorari.orauscita, 'YYYY-MM-DD')<=dataFine
  7126.  
  7127.         UNION ALL
  7128.  
  7129.         select veicoli.idveicolo, effettuaingressiabbonamenti.idcliente
  7130.         from veicoli inner join effettuaingressiabbonamenti on veicoli.idveicolo=effettuaingressiabbonamenti.idveicolo
  7131.         inner join ingressiabbonamenti on ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento
  7132.         inner join box on box.idbox=ingressiabbonamenti.idbox
  7133.         inner join aree on aree.idarea=box.idarea
  7134.         where effettuaingressiabbonamenti.idcliente=var_cliente
  7135.         and aree.idautorimessa=var_autorimessa
  7136.         and to_char(ingressiabbonamenti.oraentrata, 'YYYY-MM-DD')>=dataInizio
  7137.         and to_char(ingressiabbonamenti.orauscita, 'YYYY-MM-DD')<=dataFine
  7138.     ) t inner join veicoli on t.idveicolo=veicoli.idveicolo
  7139.     ) loop
  7140.         modGUI.ApriRigaTabella;
  7141.         modGUI.ApriElementoTabella;
  7142.         modGUI.ElementoTabella(x.targa);
  7143.         modGUI.ChiudiElementoTabella;
  7144.         modGUI.ApriElementoTabella;
  7145.         modGUI.ElementoTabella(x.modello);
  7146.         modGUI.ChiudiElementoTabella;
  7147.         modGUI.ApriElementoTabella;
  7148.         modGUI.ElementoTabella(x.colore);
  7149.         modGUI.ChiudiElementoTabella;
  7150.         modGUI.ApriElementoTabella;
  7151.         modGUI.inserisciLente(gruppo1||'.DETT_VEICOLI',id_Sessione,nome,ruolo,x.idveicolo);
  7152.         modGUI.ChiudiElementoTabella;
  7153.         modGUI.ChiudiRigaTabella;
  7154.     end loop;
  7155.     modGUI.ChiudiTabella;
  7156.  
  7157.     modGUI.apriDiv(true);
  7158.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.FILTROCATEGORIA');
  7159.     modGUI.chiudiDiv;
  7160.     modGUI.aCapo;
  7161.     modGUI.aCapo;
  7162.     modGUI.aCapo;
  7163.     modGUI.chiudiDiv;
  7164.     modGUI.chiudiPagina;
  7165.   END VEICOLI_RIS;
  7166.  
  7167.     /* DETT_VEICOLI
  7168.     *  Questa procedura serve a visualizzare i dettagli di un veicolo selezionato dalla procedura VEICOLI_RIS
  7169.     *  id_Sessione: numero associato alla sessione corrente
  7170.     *  nome: username dell'utente attualmente connesso
  7171.     *  ruolo: ruolo dell'utente attualmente connesso
  7172.     *  idRiga: id del veicolo di cui si vogliono visualizzare i dettagli
  7173.     */
  7174.   PROCEDURE DETT_VEICOLI(id_Sessione varchar2, nome varchar2, ruolo varchar2, idRiga varchar2) AS
  7175.   var_targa char(7);
  7176.   var_produttore varchar2(45);
  7177.   var_modello varchar2(45);
  7178.   var_colore varchar2(45);
  7179.   var_alt number;
  7180.   var_lun number;
  7181.   var_lar number;
  7182.   var_peso number;
  7183.   var_alimentazione char(5);
  7184.   var_annotazione varchar2(100);
  7185.   BEGIN
  7186.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  7187.     modGUI.aCapo;
  7188.     modGUI.apriIntestazione(2);
  7189.     modGUI.inserisciTesto('DETTAGLI VEICOLI');
  7190.     modGUI.chiudiIntestazione(2);
  7191.     modGUI.apriDiv;
  7192.  
  7193.     modGUI.ApriTabella;
  7194.     select targa into var_targa from veicoli where idveicolo=idRiga;
  7195.     modGUI.ApriRigaTabella;
  7196.     modGUI.intestazioneTabella('Targa');
  7197.     modGUI.ApriElementoTabella;
  7198.     modGUI.ElementoTabella(var_targa);
  7199.     modGUI.ChiudiElementoTabella;
  7200.     modGUI.ChiudiRigaTabella;
  7201.     select produttore into var_produttore from veicoli where idveicolo=idRiga;
  7202.     modGUI.ApriRigaTabella;
  7203.     modGUI.intestazioneTabella('Produttore');
  7204.     modGUI.ApriElementoTabella;
  7205.     modGUI.ElementoTabella(var_produttore);
  7206.     modGUI.ChiudiElementoTabella;
  7207.     modGUI.ChiudiRigaTabella;
  7208.     select modello into var_modello from veicoli where idveicolo=idRiga;
  7209.     modGUI.ApriRigaTabella;
  7210.     modGUI.intestazioneTabella('Modello');
  7211.     modGUI.ApriElementoTabella;
  7212.     modGUI.ElementoTabella(var_modello);
  7213.     modGUI.ChiudiElementoTabella;
  7214.     modGUI.ChiudiRigaTabella;
  7215.     select colore into var_colore from veicoli where idveicolo=idRiga;
  7216.     modGUI.ApriRigaTabella;
  7217.     modGUI.intestazioneTabella('Colore');
  7218.     modGUI.ApriElementoTabella;
  7219.     modGUI.ElementoTabella(var_colore);
  7220.     modGUI.ChiudiElementoTabella;
  7221.     modGUI.ChiudiRigaTabella;
  7222.     select altezza into var_alt from veicoli where idveicolo=idRiga;
  7223.     modGUI.ApriRigaTabella;
  7224.     modGUI.intestazioneTabella('Altezza');
  7225.     modGUI.ApriElementoTabella;
  7226.     modGUI.ElementoTabella(to_char(var_alt)||' m');
  7227.     modGUI.ChiudiElementoTabella;
  7228.     modGUI.ChiudiRigaTabella;
  7229.     select larghezza into var_lar from veicoli where idveicolo=idRiga;
  7230.     modGUI.ApriRigaTabella;
  7231.     modGUI.intestazioneTabella('Larghezza');
  7232.     modGUI.ApriElementoTabella;
  7233.     modGUI.ElementoTabella(to_char(var_lar)||' m');
  7234.     modGUI.ChiudiElementoTabella;
  7235.     modGUI.ChiudiRigaTabella;
  7236.     select lunghezza into var_lun from veicoli where idveicolo=idRiga;
  7237.     modGUI.ApriRigaTabella;
  7238.     modGUI.intestazioneTabella('Lunghezza');
  7239.     modGUI.ApriElementoTabella;
  7240.     modGUI.ElementoTabella(to_char(var_lun)||' m');
  7241.     modGUI.ChiudiElementoTabella;
  7242.     modGUI.ChiudiRigaTabella;
  7243.     select peso into var_peso from veicoli where idveicolo=idRiga;
  7244.     modGUI.ApriRigaTabella;
  7245.     modGUI.intestazioneTabella('Peso');
  7246.     modGUI.ApriElementoTabella;
  7247.     modGUI.ElementoTabella(to_char(var_peso)||' kg');
  7248.     modGUI.ChiudiElementoTabella;
  7249.     modGUI.ChiudiRigaTabella;
  7250.     select alimentazione into var_alimentazione from veicoli where idveicolo=idRiga;
  7251.     modGUI.ApriRigaTabella;
  7252.     modGUI.intestazioneTabella('Alimentazione');
  7253.     modGUI.ApriElementoTabella;
  7254.     modGUI.ElementoTabella(var_alimentazione);
  7255.     modGUI.ChiudiElementoTabella;
  7256.     modGUI.ChiudiRigaTabella;
  7257.     select annotazione into var_annotazione from veicoli where idveicolo=idRiga;
  7258.     modGUI.ApriRigaTabella;
  7259.     modGUI.intestazioneTabella('Note');
  7260.     modGUI.ApriElementoTabella;
  7261.     modGUI.ElementoTabella(var_annotazione);
  7262.     modGUI.ChiudiElementoTabella;
  7263.     modGUI.ChiudiRigaTabella;
  7264.     modGUI.ChiudiTabella;
  7265.  
  7266.     modGUI.chiudiDiv;
  7267.     modGUI.chiudiPagina;
  7268.   END DETT_VEICOLI;
  7269.  
  7270.     /* PERMANENZAMEDIA
  7271.     *  Questa procedura serve a selezionare un periodo ed una soglia su cui calcolare PERMANENZAMEDIA_RIS
  7272.     *  id_Sessione: numero associato alla sessione corrente
  7273.     *  nome: username dell'utente attualmente connesso
  7274.     *  ruolo: ruolo dell'utente attualmente connesso
  7275.     *  idRiga: id del veicolo di cui si vogliono visualizzare i dettagli
  7276.     */
  7277.   PROCEDURE PERMANENZAMEDIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
  7278.   BEGIN
  7279.  
  7280.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  7281.     modGUI.aCapo;
  7282.     modGUI.apriIntestazione(2);
  7283.     modGUI.inserisciTesto('CLASSIFICA DEI TEMPI MEDI DI PERMANENZA IN OGNI AUTORIMESSA DI TUTTI I VEICOLI');
  7284.     modGUI.chiudiIntestazione(2);
  7285.  
  7286.     modgui.apriForm(gruppo1||'.PERMANENZAMEDIA_RIS');
  7287.  
  7288.     modgui.inserisciInputHidden('id_Sessione',id_Sessione);
  7289.     modgui.inserisciInputHidden('nome',nome);
  7290.     modgui.inserisciInputHidden('ruolo',ruolo);
  7291.  
  7292.     modGUI.inserisciInput('dataInizio','Data iniziale','date',  true);
  7293.     modGUI.inserisciInput('dataFine','Data finale','date',  true);
  7294.     modGUI.inserisciInput('soglia','Soglia','number',  true);
  7295.  
  7296.     modGUI.aCapo;
  7297.     modGUI.aCapo;
  7298.     modGUI.inserisciBottoneReset('RESET');
  7299.     modGUI.inserisciBottoneForm;
  7300.     modGUI.chiudiPagina;
  7301.  
  7302.   END PERMANENZAMEDIA;
  7303.  
  7304.     /* PERMANENZAMEDIA_RIS
  7305.     *  Questa procedura serve a calcolare la classifica, in un determinato periodo, dei tempi medi di permanenza in ogni
  7306.     *  autorimessa di tutti i veicoli di propriet� di ogni cliente escludendo quelli per cui il tempo medio � inferiore ad una soglia
  7307.     *  id_Sessione: numero associato alla sessione corrente
  7308.     *  nome: username dell'utente attualmente connesso
  7309.     *  ruolo: ruolo dell'utente attualmente connesso
  7310.     *  dataInizio: data d'inizio del periodo di permanenza su cui calcolare la classifica
  7311.     *  dataFine: data di fine del periodo di permanenza su cui calcolare la classifica
  7312.     *  soglia: soglia minima del tempo medio di permanenza
  7313.     */
  7314.   PROCEDURE PERMANENZAMEDIA_RIS(id_Sessione varchar2, nome varchar2, ruolo varchar2, dataInizio varchar2,dataFine varchar2,soglia number) AS
  7315.   BEGIN
  7316.     modGUI.apriPagina('HoC | Visualizza dati', id_Sessione, nome, ruolo);
  7317.     modGUI.aCapo;
  7318.     modGUI.apriIntestazione(2);
  7319.     modGUI.inserisciTesto('CLASSIFICA DEI TEMPI MEDI DI PERMANENZA IN OGNI AUTORIMESSA DI TUTTI I VEICOLI');
  7320.     modGUI.chiudiIntestazione(2);
  7321.     modGUI.apriDiv;
  7322.     modGUI.ApriTabella;
  7323.     modGUI.ApriRigaTabella;
  7324.     modGUI.intestazioneTabella('Autorimessa');
  7325.     modGUI.intestazioneTabella('Cliente');
  7326.     modGUI.intestazioneTabella('Veicolo');
  7327.     modGUI.intestazioneTabella('Tempo medio di permanenza');
  7328.     modGUI.ChiudiRigaTabella;
  7329.  
  7330.     for x in (select autorimesse.indirizzo,persone.nome,persone.cognome, veicoli.targa, t.avgdiff from(
  7331.                 select aree.idautorimessa,effettuaingressiorari.idveicolo,effettuaingressiorari.idcliente,
  7332.                 avg(extract(day from (ingressiorari.orauscita-ingressiorari.oraentrata))*24*60 +
  7333.                 extract (hour from (ingressiorari.orauscita-ingressiorari.oraentrata))*60+
  7334.                 extract (minute from (ingressiorari.orauscita-ingressiorari.oraentrata)))as avgdiff
  7335.                 from ingressiorari inner join effettuaingressiorari on ingressiorari.idingressoorario=effettuaingressiorari.idingressoorario
  7336.                 inner join box on box.idbox=ingressiorari.idbox
  7337.                 inner join aree on aree.idarea=box.idarea
  7338.                 where ingressiorari.orauscita is not null
  7339.                 and to_char(ingressiorari.oraentrata, 'YYYY-MM-DD')>=dataInizio
  7340.                 and to_char(ingressiorari.orauscita, 'YYYY-MM-DD')<=dataFine
  7341.                 group by(aree.idautorimessa,effettuaingressiorari.idveicolo,effettuaingressiorari.idcliente)
  7342.  
  7343.                 UNION ALL
  7344.  
  7345.                 select aree.idautorimessa,effettuaingressiabbonamenti.idveicolo,effettuaingressiabbonamenti.idcliente,
  7346.                 avg(extract(day from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata))*24*60 +
  7347.                 extract (hour from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata))*60+
  7348.                 extract (minute from (ingressiabbonamenti.orauscita-ingressiabbonamenti.oraentrata)))as avgdiff
  7349.                 from ingressiabbonamenti inner join effettuaingressiabbonamenti on ingressiabbonamenti.idingressoabbonamento=effettuaingressiabbonamenti.idingressoabbonamento
  7350.                 inner join box on box.idbox=ingressiabbonamenti.idbox
  7351.                 inner join aree on aree.idarea=box.idarea
  7352.                 where ingressiabbonamenti.orauscita is not null
  7353.                 and to_char(ingressiabbonamenti.oraentrata, 'YYYY-MM-DD')>=dataInizio
  7354.                 and to_char(ingressiabbonamenti.orauscita, 'YYYY-MM-DD')<=dataFine
  7355.                 group by(aree.idautorimessa,effettuaingressiabbonamenti.idveicolo,effettuaingressiabbonamenti.idcliente)
  7356.  
  7357.                 ) t
  7358.               inner join autorimesse on t.idautorimessa=autorimesse.idautorimessa
  7359.               inner join veicoli on t.idveicolo=veicoli.idveicolo
  7360.               inner join clienti on clienti.idcliente=t.idcliente
  7361.               inner join persone on persone.idpersona=clienti.idpersona
  7362.               where t.avgdiff>=soglia
  7363.               order by autorimesse.idautorimessa, clienti.idcliente, t.avgdiff desc) loop
  7364.         modGUI.ApriRigaTabella;
  7365.         modGUI.ApriElementoTabella;
  7366.         modGUI.ElementoTabella(x.indirizzo);
  7367.         modGUI.ChiudiElementoTabella;
  7368.         modGUI.ApriElementoTabella;
  7369.         modGUI.ElementoTabella(x.nome||' '||x.cognome);
  7370.         modGUI.ChiudiElementoTabella;
  7371.         modGUI.ApriElementoTabella;
  7372.         modGUI.ElementoTabella(x.targa);
  7373.         modGUI.ChiudiElementoTabella;
  7374.         modGUI.ApriElementoTabella;
  7375.         modGUI.ElementoTabella(x.avgdiff||' minuti');
  7376.         modGUI.ChiudiElementoTabella;
  7377.         modGUI.ChiudiRigaTabella;
  7378.     end loop;
  7379.     modGUI.ChiudiTabella;
  7380.  
  7381.     modGUI.apriDiv(true);
  7382.     modGUI.inserisciBottone(id_Sessione,nome,ruolo,'Indietro',gruppo1||'.PERMANENZAMEDIA');
  7383.     modGUI.chiudiDiv;
  7384.     modGUI.aCapo;
  7385.     modGUI.aCapo;
  7386.     modGUI.aCapo;
  7387.     modGUI.chiudiDiv;
  7388.     modGUI.chiudiPagina;
  7389.   END PERMANENZAMEDIA_RIS;
  7390.  
  7391. /*PREZZOBIGLIETTO
  7392. * FUNZIONE RICHIAMATA DAL TRIGGER PER CALCOLARE IL PREZZO DEI BIGLIETTI
  7393. */
  7394. FUNCTION PREZZOBIGLIETTO(dataEntrata varchar2, oraEntrata varchar2, dataUscita varchar2, oraUscita varchar2, area varchar2) RETURN NUMBER AS
  7395.   var_dataciclo date;
  7396.   var_gg varchar2(20);
  7397.   var_oraDa varchar2(20);
  7398.   var_oraA varchar2(20);
  7399.   var_oraInizioCalcolo timestamp;
  7400.   var_oraFineCalcolo timestamp;
  7401.   var_h number;
  7402.   tot number;
  7403.   var_oraEntrata varchar(20);
  7404.   var_oraUscita varchar2(20);
  7405.   var_dataEntrata date;
  7406.   var_dataUscita date;
  7407.   var_timestampDa timestamp;
  7408.   var_timestampA timestamp;
  7409. BEGIN
  7410.   --calcolo prezzo biglietto--
  7411.     var_oraEntrata:=to_char(substr(oraEntrata,1,2)||':'||substr(oraEntrata,-2));
  7412.     var_oraUscita:=to_char(substr(oraUscita,1,2)||':'||substr(oraUscita,-2));
  7413.     var_dataEntrata:=to_date(dataEntrata,'YYYY-MM-DD');
  7414.     var_dataUscita:=to_date(dataUscita,'YYYY-MM-DD');
  7415.     var_dataciclo:=var_dataEntrata;
  7416.     tot:=0;
  7417.     while(var_dataciclo<=var_dataUscita)
  7418.     loop
  7419.         if(var_dataciclo=var_dataEntrata)then
  7420.            var_oraDa:=var_oraEntrata;
  7421.         else
  7422.             var_oraDa:='00:00';
  7423.         end if;
  7424.  
  7425.        if(var_dataciclo=var_dataUscita)then
  7426.             var_oraA:=var_oraUscita;
  7427.         else
  7428.             var_oraA:='23:59';
  7429.         end if;
  7430.  
  7431.      var_gg:=upper(substr(to_char(var_dataciclo,'day','NLS_DATE_LANGUAGE = italian'),1,3));
  7432.         var_timestampDa:=to_timestamp('01-GEN-1970 '||var_oraDa,'DD-MON-YYYY HH24:MI');
  7433.        var_timestampA:=to_timestamp('01-GEN-1970 '||var_oraA,'DD-MON-YYYY HH24:MI');
  7434.            --trova fasciaoraria corrispondente e calcola
  7435.           for x in(select fasceorarie.nome,fasceorarie.giorno,fasceorarie.orainizio,fasceorarie.orafine,areefasceorarie.costo
  7436.                     from fasceorarie inner join areefasceorarie on fasceorarie.idfasciaoraria=areefasceorarie.idfasciaoraria
  7437.                     where fasceorarie.giorno=var_gg and areefasceorarie.idarea=area
  7438.                     and fasceorarie.orainizio<=var_timestampDa)
  7439.             loop
  7440.                  if(var_timestampDa<=to_timestamp(to_char(x.orainizio,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI'))then
  7441.                    var_oraInizioCalcolo:=x.orainizio;
  7442.                 else
  7443.                    var_oraInizioCalcolo:=var_timestampDa;
  7444.                 end if;
  7445.                if(to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI')<=var_timestampA)then
  7446.                     var_oraFineCalcolo:=to_timestamp(to_char(x.orafine,'DD-MON-YYYY HH24:MI'),'DD-MON-YYYY HH24:MI');
  7447.                 else
  7448.                     var_oraFineCalcolo:=var_timestampA;
  7449.                 end if;
  7450.                 --calcolo ore totali
  7451.                 var_h:=extract(hour from (var_oraFineCalcolo-var_oraInizioCalcolo))+(extract (minute from (var_oraFineCalcolo-var_oraInizioCalcolo))/60);
  7452.                 if(var_h>=0)then
  7453.                     tot:=tot+(x.costo*var_h);
  7454.                 end if;
  7455.             end loop;
  7456.           var_dataciclo:=var_dataciclo+1;
  7457.     end loop;
  7458.     RETURN tot;
  7459. END PREZZOBIGLIETTO;
  7460.  
  7461. ------------------------- FINE STEFANIA FALCHI --------------------------------------
  7462.  
  7463. ------------------------- INIZIO GIUSEPPE BISICCHIA ----------------------------------
  7464.  
  7465. PROCEDURE cittanomulte (
  7466.     id_sessione   VARCHAR2,
  7467.     nome          VARCHAR2,
  7468.     ruolo         VARCHAR2
  7469. ) IS
  7470.  
  7471.     CURSOR c_citta IS
  7472.     ( SELECT
  7473.         autorimesse.idautorimessa,
  7474.         autorimesse.indirizzo AS indirizzo
  7475.     FROM
  7476.         autorimesse
  7477.     MINUS
  7478.     ( SELECT
  7479.         autorimesse.idautorimessa,
  7480.         autorimesse.indirizzo AS indirizzo
  7481.     FROM
  7482.         ingressiorari,
  7483.         box,
  7484.         aree,
  7485.         autorimesse,
  7486.         multe
  7487.     WHERE
  7488.         multe.idmulta = ingressiorari.idmulta
  7489.         AND ingressiorari.idbox = box.idbox
  7490.         AND box.idarea = aree.idarea
  7491.         AND aree.idautorimessa = autorimesse.idautorimessa
  7492.     GROUP BY
  7493.         autorimesse.idautorimessa,
  7494.         autorimesse.indirizzo
  7495.     HAVING
  7496.         COUNT(*) <> 0
  7497.     UNION
  7498.     SELECT
  7499.         autorimesse.idautorimessa,
  7500.         autorimesse.indirizzo AS indirizzo
  7501.     FROM
  7502.         ingressiabbonamenti,
  7503.         box,
  7504.         aree,
  7505.         autorimesse,
  7506.         multe
  7507.     WHERE
  7508.         multe.idmulta = ingressiabbonamenti.idmulta
  7509.         AND ingressiabbonamenti.idbox = box.idbox
  7510.         AND box.idarea = aree.idarea
  7511.         AND aree.idautorimessa = autorimesse.idautorimessa
  7512.     GROUP BY
  7513.         autorimesse.idautorimessa,
  7514.         autorimesse.indirizzo
  7515.     HAVING
  7516.         COUNT(*) <> 0
  7517.     )
  7518.     );
  7519.  
  7520.     cnt       NUMBER;
  7521.     v_citta   autorimesse.indirizzo%TYPE;
  7522. BEGIN
  7523.     cnt := 0;
  7524.     modgui.apripagina('HoC | CittaNoMulte', id_sessione, nome, ruolo);
  7525.     modgui.apriintestazione(2);
  7526.     modgui.inseriscitesto('AUTORIMESSE DOVE NON SONO STATE ASSEGNATE MULTE');
  7527.     modgui.chiudiintestazione(2);
  7528.     modgui.apritabella;
  7529.     modgui.apririgatabella;
  7530.     modgui.intestazionetabella('Autorimessa');
  7531.     modgui.chiudirigatabella;
  7532.     FOR v_citta IN c_citta LOOP
  7533.         cnt := cnt + 1;
  7534.         modgui.apririgatabella;
  7535.         modgui.aprielementotabella;
  7536.         modgui.elementotabella(v_citta.indirizzo);
  7537.         modgui.chiudielementotabella;
  7538.         modgui.chiudirigatabella;
  7539.     END LOOP;
  7540.  
  7541.     modgui.chiuditabella;
  7542.     IF ( cnt = 0 ) THEN
  7543.         modgui.apridiv(true);
  7544.         modgui.inseriscitesto('IN TUTTE LE AUTORIMESSE E'' STATA ASSEGNATA ALMENO UNA MULTA!');
  7545.         modgui.chiudidiv;
  7546.     END IF;
  7547.  
  7548.     modgui.chiudipagina;
  7549. END cittanomulte;
  7550.  
  7551.  
  7552. PROCEDURE clientepiumulte (
  7553.     id_sessione   VARCHAR2,
  7554.     nome          VARCHAR2,
  7555.     ruolo         VARCHAR2,
  7556.     altri         VARCHAR2 DEFAULT 'F'
  7557. ) IS
  7558.  
  7559.     CURSOR c_clienti IS
  7560.     SELECT
  7561.         idpersona,
  7562.         nome,
  7563.         cognome,
  7564.         SUM(cnt) AS maxmulte
  7565.     FROM
  7566.         (
  7567.             SELECT
  7568.                 persone.idpersona,
  7569.                 persone.nome,
  7570.                 persone.cognome,
  7571.                 COUNT(*) AS cnt
  7572.             FROM
  7573.                 ingressiabbonamenti,
  7574.                 effettuaingressiabbonamenti,
  7575.                 multe,
  7576.                 clienti,
  7577.                 persone
  7578.             WHERE
  7579.                 ingressiabbonamenti.idmulta = multe.idmulta
  7580.                 AND ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
  7581.                 AND effettuaingressiabbonamenti.idcliente = clienti.idcliente
  7582.                 AND clienti.idpersona = persone.idpersona
  7583.             GROUP BY
  7584.                 persone.idpersona,
  7585.                 persone.nome,
  7586.                 persone.cognome
  7587.             UNION
  7588.             SELECT
  7589.                 persone.idpersona,
  7590.                 persone.nome,
  7591.                 persone.cognome,
  7592.                 COUNT(*) AS cnt
  7593.             FROM
  7594.                 ingressiorari,
  7595.                 effettuaingressiorari,
  7596.                 multe,
  7597.                 clienti,
  7598.                 persone
  7599.             WHERE
  7600.                 ingressiorari.idmulta = multe.idmulta
  7601.                 AND ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  7602.                 AND effettuaingressiorari.idcliente = clienti.idcliente
  7603.                 AND clienti.idpersona = persone.idpersona
  7604.             GROUP BY
  7605.                 persone.idpersona,
  7606.                 persone.nome,
  7607.                 persone.cognome
  7608.         )
  7609.     GROUP BY
  7610.         idpersona,
  7611.         nome,
  7612.         cognome
  7613.     ORDER BY
  7614.         SUM(cnt) DESC;
  7615.  
  7616.     SUBTYPE clientemultetype IS c_clienti%rowtype;
  7617.     v_cliente    clientemultetype;
  7618.     v_maxmulte   NUMBER;
  7619. BEGIN
  7620.     OPEN c_clienti;
  7621.     modgui.apripagina('HoC | ClientePiuMulte', id_sessione, nome, ruolo);
  7622.     modgui.apriintestazione(2);
  7623.     IF altri = 'F' THEN
  7624.         modgui.inseriscitesto('CLIENTE CON PIU'' MULTE');
  7625.     ELSE
  7626.         modgui.inseriscitesto('CLIENTI CON PIU'' MULTE');
  7627.     END IF;
  7628.  
  7629.     modgui.chiudiintestazione(2);
  7630.     FETCH c_clienti INTO v_cliente;
  7631.     modgui.apridiv();
  7632.     modgui.apritabella;
  7633.     modgui.apririgatabella;
  7634.     modgui.intestazionetabella('Cliente');
  7635.     modgui.intestazionetabella('Numero Multe');
  7636.     modgui.chiudirigatabella;
  7637.     IF ( c_clienti%notfound ) THEN
  7638.         modgui.chiuditabella;
  7639.         modgui.apridiv(true);
  7640.         modgui.inseriscitesto('NESSUN CLIENTE HA MULTE ASSEGNATE!');
  7641.         modgui.chiudidiv;
  7642.     ELSE
  7643.         modgui.apririgatabella;
  7644.         modgui.aprielementotabella;
  7645.         modgui.elementotabella(v_cliente.nome
  7646.                                || ' '
  7647.                                || v_cliente.cognome);
  7648.         modgui.chiudielementotabella;
  7649.         modgui.aprielementotabella;
  7650.         modgui.elementotabella(v_cliente.maxmulte);
  7651.         v_maxmulte := v_cliente.maxmulte;
  7652.         modgui.chiudielementotabella;
  7653.         modgui.chiudirigatabella;
  7654.         IF altri = 'T' THEN
  7655.             LOOP
  7656.                 FETCH c_clienti INTO v_cliente;
  7657.                 EXIT WHEN c_clienti%notfound OR v_cliente.maxmulte < v_maxmulte;
  7658.                 modgui.apririgatabella;
  7659.                 modgui.aprielementotabella;
  7660.                 modgui.elementotabella(v_cliente.nome
  7661.                                        || ' '
  7662.                                        || v_cliente.cognome);
  7663.                 modgui.chiudielementotabella;
  7664.                 modgui.aprielementotabella;
  7665.                 modgui.elementotabella(v_cliente.maxmulte);
  7666.                 modgui.chiudielementotabella;
  7667.                 modgui.chiudirigatabella;
  7668.             END LOOP;
  7669.  
  7670.             modgui.chiuditabella;
  7671.         ELSE
  7672.             modgui.chiuditabella;
  7673.             FETCH c_clienti INTO v_cliente;
  7674.             IF v_cliente.maxmulte = v_maxmulte THEN
  7675.                 modgui.apriintestazione(3);
  7676.                 modgui.inseriscitesto('ALTRE OPERAZIONI');
  7677.                 modgui.chiudiintestazione(3);
  7678.                 modgui.apridiv(true);
  7679.                 modgui.inseriscibottone(id_sessione, nome, ruolo, 'VISUALIZZA ALTRI CLIENTI', 'clientepiumulte',
  7680.                                         '&altri=T');
  7681.                 modgui.chiudidiv;
  7682.             END IF;
  7683.  
  7684.         END IF;
  7685.  
  7686.     END IF;
  7687.  
  7688.     modgui.chiudidiv;
  7689.     CLOSE c_clienti;
  7690.     modgui.chiudipagina;
  7691. END clientepiumulte;
  7692.  
  7693. PROCEDURE confrontaveicoli (
  7694.     id_sessione     VARCHAR2,
  7695.     ruolo           VARCHAR2,
  7696.     nome            VARCHAR2,
  7697.     datada          VARCHAR2,
  7698.     dataa           VARCHAR2,
  7699.     v_autorimessa   VARCHAR2,
  7700.     tipo1           VARCHAR2,
  7701.     tipo2           VARCHAR2
  7702. ) IS
  7703.  
  7704.     cnt            INTEGER;
  7705.     inizio         DATE;
  7706.     finedata       DATE;
  7707.     filterheader   VARCHAR2(420);
  7708.     CURSOR veicoli IS
  7709.     ( SELECT
  7710.         v.targa,
  7711.         v.produttore,
  7712.         v.modello,
  7713.         v.colore,
  7714.         v.altezza,
  7715.         v.larghezza,
  7716.         v.lunghezza,
  7717.         v.peso,
  7718.         COUNT(*) AS numabbonamenti
  7719.     FROM
  7720.         veicoli              v,
  7721.         abbonamentiveicoli   av,
  7722.         abbonamenti          a
  7723.     WHERE
  7724.         v.idveicolo = av.idveicolo
  7725.         AND v.alimentazione = tipo1
  7726.         AND av.idabbonamento = a.idabbonamento
  7727.         AND a.datainizio >= inizio
  7728.         AND a.datainizio <= finedata
  7729.         AND EXISTS (
  7730.             SELECT
  7731.                 *
  7732.             FROM
  7733.                 box           b,
  7734.                 aree          ar,
  7735.                 autorimesse   au
  7736.             WHERE
  7737.                 b.idabbonamento = a.idabbonamento
  7738.                 AND b.idarea = ar.idarea
  7739.                 AND ar.idautorimessa = au.idautorimessa
  7740.                 AND au.idautorimessa = v_autorimessa
  7741.         )
  7742.     GROUP BY
  7743.         v.idveicolo,
  7744.         v.targa,
  7745.         v.produttore,
  7746.         v.modello,
  7747.         v.colore,
  7748.         v.altezza,
  7749.         v.larghezza,
  7750.         v.lunghezza,
  7751.         v.peso,
  7752.         v.alimentazione,
  7753.         v.annotazione
  7754.     HAVING
  7755.         COUNT(*) > ALL (
  7756.             SELECT
  7757.                 COUNT(*)
  7758.             FROM
  7759.                 veicoli              v,
  7760.                 abbonamentiveicoli   av,
  7761.                 abbonamenti          a
  7762.             WHERE
  7763.                 v.idveicolo = av.idveicolo
  7764.                 AND v.alimentazione = tipo2
  7765.                 AND av.idabbonamento = a.idabbonamento
  7766.                 AND a.datainizio >= inizio
  7767.                 AND a.datainizio <= finedata
  7768.                 AND EXISTS (
  7769.                     SELECT
  7770.                         *
  7771.                     FROM
  7772.                         box           b,
  7773.                         aree          ar,
  7774.                         autorimesse   au
  7775.                     WHERE
  7776.                         b.idabbonamento = a.idabbonamento
  7777.                         AND b.idarea = ar.idarea
  7778.                         AND ar.idautorimessa = au.idautorimessa
  7779.                         AND au.idautorimessa = v_autorimessa
  7780.                 )
  7781.             GROUP BY
  7782.                 v.idveicolo
  7783.         )
  7784.     );
  7785.  
  7786. BEGIN
  7787.     cnt := 0;
  7788.     inizio := to_date(datada, 'YYYY-MM-DD');
  7789.     finedata := to_date(dataa, 'YYYY-MM-DD');
  7790.     modgui.apripagina('HoC | Confrontaveicoli', id_sessione, nome, ruolo);
  7791.     modgui.apriintestazione(2);
  7792.     modgui.inseriscitesto('CONFRONTA TIPI VEICOLI PER NUMERO DI ABBONAMEMTI');
  7793.     modgui.chiudiintestazione(2);
  7794.     modgui.apridiv;
  7795.     SELECT
  7796.         indirizzo
  7797.     INTO filterheader
  7798.     FROM
  7799.         autorimesse
  7800.     WHERE
  7801.         idautorimessa = v_autorimessa;
  7802.  
  7803.     filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
  7804.     modgui.apriintestazione(3);
  7805.     modgui.inseriscitesto(upper(filterheader));
  7806.     modgui.chiudiintestazione(3);
  7807.     modgui.apriintestazione(3);
  7808.     modgui.inseriscitesto(tipo1
  7809.                           || ' vs '
  7810.                           || tipo2);
  7811.     modgui.chiudiintestazione(3);
  7812.     IF inizio > finedata THEN
  7813.         modgui.esitooperazione('KO', 'Le date inserite sono errate!');
  7814.     ELSE
  7815.         IF tipo1 = tipo2 THEN
  7816.             modgui.esitooperazione('KO', 'Inserire tipologie di veicoli diversi tra di loro!');
  7817.         ELSE
  7818.             modgui.apridiv;
  7819.             modgui.apritabella;
  7820.             modgui.apririgatabella;
  7821.             modgui.intestazionetabella('Targa');
  7822.             modgui.intestazionetabella('Produttore');
  7823.             modgui.intestazionetabella('Modello');
  7824.             modgui.intestazionetabella('Colore');
  7825.             modgui.intestazionetabella('Dimensioni');
  7826.             modgui.intestazionetabella('Peso');
  7827.             modgui.intestazionetabella('Numero Abbonamenti');
  7828.             modgui.chiudirigatabella;
  7829.             FOR v IN veicoli LOOP
  7830.                 cnt := cnt + 1;
  7831.                 modgui.apririgatabella;
  7832.                 modgui.aprielementotabella;
  7833.                 modgui.elementotabella(v.targa);
  7834.                 modgui.chiudielementotabella;
  7835.                 modgui.aprielementotabella;
  7836.                 modgui.elementotabella(v.produttore);
  7837.                 modgui.chiudielementotabella;
  7838.                 modgui.aprielementotabella;
  7839.                 modgui.elementotabella(v.modello);
  7840.                 modgui.chiudielementotabella;
  7841.                 modgui.aprielementotabella;
  7842.                 modgui.elementotabella(v.colore);
  7843.                 modgui.chiudielementotabella;
  7844.                 modgui.aprielementotabella;
  7845.                 modgui.elementotabella(v.lunghezza
  7846.                                        || ' x '
  7847.                                        || v.larghezza
  7848.                                        || ' x '
  7849.                                        || v.altezza);
  7850.  
  7851.                 modgui.chiudielementotabella;
  7852.                 modgui.aprielementotabella;
  7853.                 modgui.elementotabella(v.peso);
  7854.                 modgui.chiudielementotabella;
  7855.                 modgui.aprielementotabella;
  7856.                 modgui.elementotabella(v.numabbonamenti);
  7857.                 modgui.chiudielementotabella;
  7858.             END LOOP;
  7859.  
  7860.             modgui.chiuditabella;
  7861.             IF cnt = 0 THEN
  7862.                 modgui.apridiv(true);
  7863.                 modgui.inseriscitesto('NON SONO STATI TROVATI VEICOLI CORRISPONDENTI AI PARAMETRI DI RICERCA');
  7864.                 modgui.chiudidiv;
  7865.             END IF;
  7866.  
  7867.             modgui.chiudidiv;
  7868.         END IF;
  7869.     END IF;
  7870.  
  7871.     modgui.apriintestazione(3);
  7872.     modgui.inseriscitesto('ALTRE OPERAZIONI');
  7873.     modgui.chiudiintestazione(3);
  7874.     modgui.apridiv(true);
  7875.     modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.piuabbonamenti');
  7876.     modgui.chiudidiv;
  7877.     modgui.chiudipagina;
  7878. END confrontaveicoli;
  7879.  
  7880. PROCEDURE introiti (
  7881.     id_sessione   VARCHAR2,
  7882.     nome          VARCHAR2,
  7883.     ruolo         VARCHAR2
  7884. ) IS
  7885. BEGIN
  7886.     modgui.apripagina('HoC | Introiti', id_sessione, nome, ruolo);
  7887.     modgui.apriintestazione(2);
  7888.     modgui.inseriscitesto('INTROITI');
  7889.     modgui.chiudiintestazione(2);
  7890.     modgui.apriform(gruppo1||'.visualizzaintroiti');
  7891.     modgui.inserisciinputhidden('id_Sessione', id_sessione);
  7892.     modgui.inserisciinputhidden('ruolo', ruolo);
  7893.     modgui.inserisciinputhidden('nome', nome);
  7894.     modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
  7895.     modgui.inserisciinput('dataA', 'Fine', 'date', true);
  7896.     modgui.inseriscitesto('Filtra per');
  7897.     modgui.inserisciradiobutton('Tutti i parcheggi', 'filtro', 'N', true);
  7898.     modgui.inserisciradiobutton('Sede', 'filtro', 'S');
  7899.     modgui.apriselect('sede', 'Sede');
  7900.     FOR x IN (
  7901.         SELECT
  7902.             a.idsede,
  7903.             a.indirizzo
  7904.         FROM
  7905.             sedi a
  7906.     ) LOOP modgui.inserisciopzioneselect(x.idsede, x.indirizzo);
  7907.     END LOOP;
  7908.  
  7909.     modgui.chiudiselect();
  7910.     modgui.inserisciradiobutton('Autorimessa', 'filtro', 'A');
  7911.     modgui.apriselect('autorimessa', 'Autorimessa');
  7912.     FOR x IN (
  7913.         SELECT
  7914.             a.idautorimessa,
  7915.             a.indirizzo
  7916.         FROM
  7917.             autorimesse a
  7918.     ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
  7919.     END LOOP;
  7920.  
  7921.     modgui.chiudiselect();
  7922.     modgui.inseriscibottonereset('RESET');
  7923.     modgui.inseriscibottoneform('CALCOLA');
  7924.     modgui.chiudiform;
  7925.     modgui.chiudipagina;
  7926. END introiti;
  7927.  
  7928. PROCEDURE piuabbonamenti (
  7929.     id_sessione   VARCHAR2,
  7930.     nome          VARCHAR2,
  7931.     ruolo         VARCHAR2
  7932. ) IS
  7933. BEGIN
  7934.     modgui.apripagina('HoC | PiuAbbonamenti', id_sessione, nome, ruolo);
  7935.     modgui.apriintestazione(2);
  7936.     modgui.inseriscitesto('CONFRONTA TIPI DI VEICOLO PER NUMERO DI ABBONAMENTI');
  7937.     modgui.chiudiintestazione(2);
  7938.     modgui.apriform(gruppo1||'.confrontaveicoli');
  7939.     modgui.inserisciinputhidden('id_Sessione', id_sessione);
  7940.     modgui.inserisciinputhidden('ruolo', ruolo);
  7941.     modgui.inserisciinputhidden('nome', nome);
  7942.     modgui.apriselect('tipo1', 'Primo tipo di veicoli');
  7943.     FOR x IN (
  7944.         SELECT
  7945.             v.alimentazione
  7946.         FROM
  7947.             veicoli v
  7948.         GROUP BY
  7949.             v.alimentazione
  7950.     ) LOOP modgui.inserisciopzioneselect(x.alimentazione, x.alimentazione); -- con false a tutti ottengo il primo risultato
  7951.     END LOOP;
  7952.  
  7953.     modgui.chiudiselect();
  7954.     modgui.apriselect('tipo2', 'Secondo tipo di veicoli');
  7955.     FOR x IN (
  7956.         SELECT
  7957.             v.alimentazione
  7958.         FROM
  7959.             veicoli v
  7960.         GROUP BY
  7961.             v.alimentazione
  7962.     ) LOOP modgui.inserisciopzioneselect(x.alimentazione, x.alimentazione, true); --metto true a tutti così ottengo l'ultimo risultato
  7963.     END LOOP;
  7964.  
  7965.     modgui.chiudiselect();
  7966.     modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
  7967.     modgui.inserisciinput('dataA', 'Fine', 'date', true);
  7968.     modgui.apriselect('v_autorimessa', 'Autorimessa');
  7969.     FOR x IN (
  7970.         SELECT
  7971.             a.idautorimessa,
  7972.             a.indirizzo
  7973.         FROM
  7974.             autorimesse a
  7975.     ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
  7976.     END LOOP;
  7977.  
  7978.     modgui.chiudiselect();
  7979.     modgui.inseriscibottonereset('RESET');
  7980.     modgui.inseriscibottoneform('CONFRONTA');
  7981.     modgui.chiudiform;
  7982.     modgui.chiudipagina;
  7983. END piuabbonamenti;
  7984.  
  7985. PROCEDURE selezionaingressi (
  7986.     id_sessione   VARCHAR2,
  7987.     nome          VARCHAR2,
  7988.     ruolo         VARCHAR2
  7989. ) IS
  7990. BEGIN
  7991.     modgui.apripagina('HoC | SelezionaIngressi', id_sessione, nome, ruolo);
  7992.     modgui.apriintestazione(2);
  7993.     modgui.inseriscitesto('INGRESSI');
  7994.     modgui.chiudiintestazione(2);
  7995.     modgui.apridiv;
  7996.     modgui.apriform(gruppo1||'.visualizzaingressi');
  7997.     modgui.inserisciinputhidden('id_Sessione', id_sessione);
  7998.     modgui.inserisciinputhidden('ruolo', ruolo);
  7999.     modgui.inserisciinputhidden('nome', nome);
  8000.     modgui.inserisciinput('dataDa', 'Inizio', 'date', true);
  8001.     modgui.inserisciinput('dataA', 'Fine', 'date', true);
  8002.     modgui.apriselect('v_idcliente', 'Cliente');
  8003.     FOR x IN (
  8004.         SELECT
  8005.             c.idcliente,
  8006.             p.nome,
  8007.             p.cognome
  8008.         FROM
  8009.             clienti   c,
  8010.             persone   p
  8011.         WHERE
  8012.             c.idpersona = p.idpersona
  8013.     ) LOOP modgui.inserisciopzioneselect(x.idcliente, x.nome
  8014.                                                       || ' '
  8015.                                                       || x.cognome);
  8016.     END LOOP;
  8017.  
  8018.     modgui.inserisciopzioneselect(-1, 'Tutti', true);
  8019.     modgui.chiudiselect();
  8020.     modgui.inseriscitesto('Filtra per');
  8021.     modgui.inserisciradiobutton('Tutti i parcheggi', 'filtro', 'N', true);
  8022.     modgui.inserisciradiobutton('Sede', 'filtro', 'S');
  8023.     modgui.apriselect('sede', 'Sede');
  8024.     FOR x IN (
  8025.         SELECT
  8026.             a.idsede,
  8027.             a.indirizzo
  8028.         FROM
  8029.             sedi a
  8030.     ) LOOP modgui.inserisciopzioneselect(x.idsede, x.indirizzo);
  8031.     END LOOP;
  8032.  
  8033.     modgui.chiudiselect();
  8034.     modgui.inserisciradiobutton('Autorimessa', 'filtro', 'A');
  8035.     modgui.apriselect('autorimessa', 'Autorimessa');
  8036.     FOR x IN (
  8037.         SELECT
  8038.             a.idautorimessa,
  8039.             a.indirizzo
  8040.         FROM
  8041.             autorimesse a
  8042.     ) LOOP modgui.inserisciopzioneselect(x.idautorimessa, x.indirizzo);
  8043.     END LOOP;
  8044.  
  8045.     modgui.chiudiselect();
  8046.     modgui.inseriscicheckbox('Prenotati', 'prenotati', 'T', true);
  8047.     modgui.inseriscicheckbox('Non Prenotati', 'nonprenotati', 'T', true);
  8048.     modgui.inseriscicheckbox('In corso', 'incorso', 'T', true);
  8049.     modgui.inseriscicheckbox('Conclusi', 'conclusi', 'T', true);
  8050.     modgui.inseriscibottonereset('RESET');
  8051.     modgui.inseriscibottoneform('VISUALIZZA');
  8052.     modgui.chiudiform;
  8053.     modgui.chiudipagina;
  8054. END selezionaingressi;
  8055.  
  8056. PROCEDURE selezionaingresso (
  8057.     id_sessione   VARCHAR2,
  8058.     nome          VARCHAR2,
  8059.     ruolo         VARCHAR2
  8060. ) AS
  8061. BEGIN
  8062.     modgui.apripagina('HoC | SelezionaIngresso', id_sessione, nome, ruolo);
  8063.     modgui.apriintestazione(2);
  8064.     modgui.inseriscitesto('SELEZIONA INGRESSO');
  8065.     modgui.chiudiintestazione(2);
  8066.     modgui.apridiv;
  8067.     modgui.apriform(gruppo1||'.visualizzabiglietto');
  8068.     modgui.inserisciinputhidden('id_Sessione', id_sessione);
  8069.     modgui.inserisciinputhidden('ruolo', ruolo);
  8070.     modgui.inserisciinputhidden('nome', nome);
  8071.     modgui.apriselect('idriga', 'Codice Ingresso');
  8072.     FOR x IN (
  8073.         SELECT
  8074.             i.idingressoorario
  8075.         FROM
  8076.             ingressiorari i
  8077.     ) LOOP modgui.inserisciopzioneselect(x.idingressoorario, x.idingressoorario);
  8078.     END LOOP;
  8079.  
  8080.     modgui.chiudiselect();
  8081.     modgui.inseriscibottonereset('RESET');
  8082.     modgui.inseriscibottoneform('VISUALIZZA');
  8083.     modgui.chiudiform;
  8084.     modgui.chiudipagina;
  8085. END selezionaingresso;
  8086.  
  8087. PROCEDURE visualizzabiglietto (
  8088.     id_sessione   VARCHAR2,
  8089.     nome          VARCHAR2,
  8090.     ruolo         VARCHAR2,
  8091.     idriga        VARCHAR2
  8092. ) IS
  8093.  
  8094.     CURSOR c IS
  8095.     SELECT
  8096.         *
  8097.     FROM
  8098.         ingressiorari
  8099.     WHERE
  8100.         idingressoorario = idriga;
  8101.  
  8102.     biglietto        ingressiorari%rowtype;
  8103.     clienteid        clienti.idcliente%TYPE;
  8104.     veicoloid        veicoli.idveicolo%TYPE;
  8105.     clientenome      persone.nome%TYPE;
  8106.     clientecognome   persone.cognome%TYPE;
  8107.     veicolo          veicoli.targa%TYPE;
  8108.     autorimessaind   autorimesse.indirizzo%TYPE;
  8109.     autorimessaid    autorimesse.idautorimessa%TYPE;
  8110.     numero           box.numero%TYPE;
  8111.     piano            box.piano%TYPE;
  8112.     colonna          box.numerocolonna%TYPE;
  8113.     boxid            box.idbox%TYPE;
  8114.     cancellato       ingressiorari.cancellato%TYPE;
  8115.     v_causa          multe.causa%TYPE;
  8116.     multaid          multe.idmulta%type;
  8117. BEGIN
  8118.     modgui.apripagina('HoC | VisualizzaBiglietto', id_sessione, nome, ruolo);
  8119.     OPEN c;
  8120.     FETCH c INTO biglietto;
  8121.     modgui.apriintestazione(2);
  8122.     modgui.inseriscitesto('DETTAGLIO INGRESSO ORARIO');
  8123.     modgui.chiudiintestazione(2);
  8124.     IF c%notfound THEN
  8125.         modgui.esitooperazione('KO', 'L''ingresso orario selezionato non esiste!');
  8126.     ELSE
  8127.         SELECT UNIQUE
  8128.             veicoli.idveicolo,
  8129.             persone.nome,
  8130.             persone.cognome,
  8131.             veicoli.targa,
  8132.             clienti.idcliente,
  8133.             clienti.cancellato
  8134.         INTO
  8135.             veicoloid,
  8136.             clientenome,
  8137.             clientecognome,
  8138.             veicolo,
  8139.             clienteid,
  8140.             cancellato
  8141.         FROM
  8142.             persone,
  8143.             clienti,
  8144.             veicoli,
  8145.             effettuaingressiorari
  8146.         WHERE
  8147.             effettuaingressiorari.idingressoorario = idriga
  8148.             AND clienti.idcliente = effettuaingressiorari.idcliente
  8149.             AND veicoli.idveicolo = effettuaingressiorari.idveicolo
  8150.             AND persone.idpersona = clienti.idpersona;
  8151.  
  8152.         SELECT
  8153.             unique indirizzo,
  8154.             autorimesse.idautorimessa,
  8155.             box.idbox,
  8156.             box.numero,
  8157.             box.piano,
  8158.             box.numerocolonna
  8159.         INTO
  8160.             autorimessaind,
  8161.             autorimessaid,
  8162.             boxid,
  8163.             numero,
  8164.             piano,
  8165.             colonna
  8166.         FROM
  8167.             autorimesse,
  8168.             box,
  8169.             ingressiorari,
  8170.             aree
  8171.         WHERE
  8172.             ingressiorari.idingressoorario = idriga
  8173.             AND ingressiorari.idbox = box.idbox
  8174.             AND box.idarea = aree.idarea
  8175.             AND aree.idautorimessa = autorimesse.idautorimessa;
  8176.  
  8177.         modgui.apritabella;
  8178.         modgui.apririgatabella;
  8179.         modgui.intestazionetabella('Codice Ingresso');
  8180.         modgui.aprielementotabella;
  8181.         modgui.elementotabella(biglietto.idingressoorario);
  8182.         modgui.chiudielementotabella;
  8183.         modgui.chiudirigatabella;
  8184.         modgui.apririgatabella;
  8185.         modgui.intestazionetabella('Cliente');
  8186.         modgui.aprielementotabella;
  8187.         IF cancellato = 'T' THEN
  8188.             clientenome := '* CLIENTE';
  8189.             clientecognome := 'CANCELLATO *';
  8190.         END IF;
  8191.         modgui.collegamento(clientenome
  8192.                                || ' '
  8193.                                || clientecognome,'gruppo5.moreinfoclient?id_Sessione=' || id_Sessione || '&nome=' ||
  8194.                 nome || '&ruolo=' || ruolo || '&idRiga=' || clienteid);
  8195.  
  8196.         modgui.chiudielementotabella;
  8197.         modgui.chiudirigatabella;
  8198.         modgui.apririgatabella;
  8199.         modgui.intestazionetabella('Veicolo');
  8200.         modgui.aprielementotabella;
  8201.         modgui.collegamento(veicolo,'gruppo5.moreinfocar?id_Sessione=' || id_Sessione || '&nome=' ||
  8202.                 nome || '&ruolo=' || ruolo || '&idRiga=' || veicoloid);
  8203.         modgui.chiudielementotabella;
  8204.         modgui.chiudirigatabella;
  8205.         IF ( biglietto.entrataprevista IS NOT NULL ) THEN
  8206.             modgui.apririgatabella;
  8207.             modgui.intestazionetabella('Entrata prevista');
  8208.             modgui.aprielementotabella;
  8209.             modgui.elementotabella(biglietto.entrataprevista);
  8210.             modgui.chiudielementotabella;
  8211.         END IF;
  8212.  
  8213.         modgui.chiudirigatabella;
  8214.         modgui.apririgatabella;
  8215.         modgui.intestazionetabella('Entrata');
  8216.         modgui.aprielementotabella;
  8217.         IF biglietto.oraentrata IS NULL THEN
  8218.             modgui.elementotabella('Non effettuata');
  8219.         ELSE
  8220.             modgui.elementotabella(biglietto.oraentrata);
  8221.         END IF;
  8222.  
  8223.         modgui.chiudielementotabella;
  8224.         modgui.chiudirigatabella;
  8225.         modgui.apririgatabella;
  8226.         modgui.intestazionetabella('Uscita');
  8227.         modgui.aprielementotabella;
  8228.         IF biglietto.orauscita IS NULL THEN
  8229.             modgui.elementotabella('Non effettuata');
  8230.         ELSE
  8231.             modgui.elementotabella(biglietto.orauscita);
  8232.         END IF;
  8233.  
  8234.         modgui.chiudielementotabella;
  8235.         modgui.chiudirigatabella;
  8236.         modgui.apririgatabella;
  8237.         modgui.intestazionetabella('Autorimessa');
  8238.         modgui.aprielementotabella;
  8239.         modgui.collegamento(autorimessaind,'gruppo2.visualizzaautorimessa?id_Sessione=' || id_Sessione || '&nome=' ||
  8240.                 nome || '&ruolo=' || ruolo || '&idRiga=' || autorimessaid);
  8241.         modgui.chiudielementotabella;
  8242.         modgui.chiudirigatabella;
  8243.         modgui.apririgatabella;
  8244.         modgui.intestazionetabella('Box');
  8245.         modgui.aprielementotabella;
  8246.  
  8247.         modgui.collegamento('Colonna '
  8248.                                || colonna
  8249.                                || ' - '
  8250.                                || 'Piano '
  8251.                                || piano
  8252.                                || ' - '
  8253.                                || 'Numero '
  8254.                                || numero,'gruppo2.visualizzabox?id_Sessione=' || id_Sessione || '&nome=' ||
  8255.                 nome || '&ruolo=' || ruolo || '&idRiga=' || boxid);
  8256.  
  8257.         modgui.chiudielementotabella;
  8258.         modgui.chiudirigatabella;
  8259.         modgui.apririgatabella;
  8260.         modgui.intestazionetabella('Costo');
  8261.         modgui.aprielementotabella;
  8262.         IF biglietto.orauscita IS NULL THEN
  8263.             modgui.elementotabella('-');
  8264.         ELSE
  8265.             modgui.elementotabella(biglietto.costo || '&#8364;');
  8266.         END IF;
  8267.  
  8268.         modgui.chiudielementotabella;
  8269.         modgui.chiudirigatabella;
  8270.         IF ( biglietto.idmulta IS NOT NULL ) THEN
  8271.             SELECT
  8272.                 causa,
  8273.                 idmulta
  8274.             INTO v_causa, multaid
  8275.             FROM
  8276.                 multe
  8277.             WHERE
  8278.                 multe.idmulta = biglietto.idmulta;
  8279.  
  8280.             modgui.apririgatabella;
  8281.             modgui.intestazionetabella('Causa Multa');
  8282.             modgui.aprielementotabella;
  8283.             modgui.collegamento(v_causa,'gruppo1.dettagliomulte?id_Sessione=' || id_Sessione || '&nome=' ||
  8284.                 nome || '&ruolo=' || ruolo || '&idRiga=' || multaid);
  8285.             modgui.chiudielementotabella;
  8286.         END IF;
  8287.  
  8288.         modgui.chiuditabella;
  8289.     END IF;
  8290.  
  8291.     CLOSE c;
  8292.     modgui.apriintestazione(3);
  8293.     modgui.inseriscitesto('ALTRE OPERAZIONI');
  8294.     modgui.chiudiintestazione(3);
  8295.     modgui.apridiv(true);
  8296.     modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.selezionaingresso');
  8297.     modgui.chiudidiv;
  8298.     modgui.chiudipagina;
  8299. END visualizzabiglietto;
  8300.  
  8301. PROCEDURE visualizzaingressi (
  8302.     id_sessione    VARCHAR2,
  8303.     ruolo          VARCHAR2,
  8304.     nome           VARCHAR2,
  8305.     datada         VARCHAR2,
  8306.     dataa          VARCHAR2,
  8307.     filtro         VARCHAR2,
  8308.     autorimessa    VARCHAR2,
  8309.     sede           VARCHAR2,
  8310.     prenotati      VARCHAR2 DEFAULT 'F',
  8311.     nonprenotati   VARCHAR2 DEFAULT 'F',
  8312.     incorso        VARCHAR2 DEFAULT 'F',
  8313.     conclusi       VARCHAR2 DEFAULT 'F',
  8314.     v_idcliente    VARCHAR2 DEFAULT -1
  8315. ) IS
  8316.  
  8317.     cnt              INTEGER;
  8318.     inizio           DATE;
  8319.     finedata         DATE;
  8320.     filterheader     VARCHAR2(420);
  8321.     clienteid        clienti.idcliente%TYPE;
  8322.     veicoloid        veicoli.idveicolo%TYPE;
  8323.     clientenome      persone.nome%TYPE;
  8324.     clientecognome   persone.cognome%TYPE;
  8325.     veicolo          veicoli.targa%TYPE;
  8326.     cancellato       ingressiorari.cancellato%TYPE;
  8327.     CURSOR tickets IS
  8328.     SELECT
  8329.         autorimesse.indirizzo   AS autorimessaind,
  8330.         sedi.indirizzo          AS sedeind,
  8331.         ingressiorari.idingressoorario,
  8332.         ingressiorari.costo,
  8333.         ingressiorari.oraentrata,
  8334.         ingressiorari.orauscita,
  8335.         ingressiorari.entrataprevista,
  8336.         clienti.idcliente
  8337.     FROM
  8338.         ingressiorari,
  8339.         effettuaingressiorari,
  8340.         box,
  8341.         aree,
  8342.         autorimesse,
  8343.         sedi,
  8344.         clienti
  8345.     WHERE
  8346.         box.idbox = ingressiorari.idbox
  8347.         AND box.idarea = aree.idarea
  8348.         AND aree.idautorimessa = autorimesse.idautorimessa
  8349.         AND autorimesse.idsede = sedi.idsede
  8350.         AND ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  8351.         AND effettuaingressiorari.idcliente = clienti.idcliente
  8352.         AND ( ( trunc(ingressiorari.oraentrata) >= inizio
  8353.                 AND trunc(ingressiorari.oraentrata) <= finedata )
  8354.               OR ( trunc(ingressiorari.entrataprevista) >= inizio
  8355.                    AND trunc(ingressiorari.entrataprevista) <= finedata ) )
  8356.         AND ( filtro = 'N'
  8357.               OR ( filtro = 'A'
  8358.                    AND autorimesse.idautorimessa = autorimessa )
  8359.               OR ( filtro = 'S'
  8360.                    AND sedi.idsede = sede ) )
  8361.         AND ( ( prenotati = 'F'
  8362.                 AND nonprenotati = 'F' )
  8363.               OR ( prenotati = 'T'
  8364.                    AND ingressiorari.entrataprevista IS NOT NULL )
  8365.               OR ( nonprenotati = 'T'
  8366.                    AND ingressiorari.entrataprevista IS NULL ) )
  8367.         AND ( ( incorso = 'F'
  8368.                 AND conclusi = 'F' )
  8369.               OR ( incorso = 'T'
  8370.                    AND ingressiorari.orauscita IS NULL )
  8371.               OR ( conclusi = 'T'
  8372.                    AND ingressiorari.orauscita IS NOT NULL ) )
  8373.         AND ( ( v_idcliente = - 1 )
  8374.               OR ( clienti.idcliente = v_idcliente ) )
  8375.     ORDER BY
  8376.         ingressiorari.oraentrata;
  8377.  
  8378. BEGIN
  8379.     cnt := 0;
  8380.     inizio := to_date(datada, 'YYYY-MM-DD');
  8381.     finedata := to_date(dataa, 'YYYY-MM-DD');
  8382.     modgui.apripagina('HoC | VisualizzaIngressi', id_sessione, nome, ruolo);
  8383.     modgui.apriintestazione(2);
  8384.     modgui.inseriscitesto('INGRESSI');
  8385.     modgui.chiudiintestazione(2);
  8386.     modgui.apridiv;
  8387.     IF filtro = 'S' THEN
  8388.         SELECT
  8389.             indirizzo
  8390.         INTO filterheader
  8391.         FROM
  8392.             sedi
  8393.         WHERE
  8394.             idsede = sede;
  8395.  
  8396.         filterheader := 'RISULTATO RICERCA PER: sede di ' || filterheader;
  8397.     ELSE
  8398.         IF filtro = 'A' THEN
  8399.             SELECT
  8400.                 indirizzo
  8401.             INTO filterheader
  8402.             FROM
  8403.                 autorimesse
  8404.             WHERE
  8405.                 idautorimessa = autorimessa;
  8406.  
  8407.             filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
  8408.         ELSE
  8409.             filterheader := 'RISULTATO RICERCA PER: tutte le autorimesse';
  8410.         END IF;
  8411.     END IF;
  8412.  
  8413.     modgui.apriintestazione(3);
  8414.     modgui.inseriscitesto(upper(filterheader));
  8415.     modgui.chiudiintestazione(3);
  8416.     IF filtro = 'A' THEN
  8417.         SELECT
  8418.             sedi.indirizzo
  8419.         INTO filterheader
  8420.         FROM
  8421.             sedi,
  8422.             autorimesse
  8423.         WHERE
  8424.             autorimesse.idautorimessa = autorimessa
  8425.             AND sedi.idsede = autorimesse.idsede;
  8426.  
  8427.         filterheader := 'sede: ' || filterheader;
  8428.         modgui.apriintestazione(3);
  8429.         modgui.inseriscitesto(upper(filterheader));
  8430.         modgui.chiudiintestazione(3);
  8431.     END IF;
  8432.  
  8433.     IF v_idcliente != -1 THEN
  8434.         SELECT
  8435.             persone.nome,
  8436.             persone.cognome
  8437.         INTO
  8438.             clientenome,
  8439.             clientecognome
  8440.         FROM
  8441.             clienti,
  8442.             persone
  8443.         WHERE
  8444.             clienti.idcliente = v_idcliente
  8445.             AND persone.idpersona = clienti.idpersona;
  8446.  
  8447.         filterheader := 'cliente: '
  8448.                         || clientenome
  8449.                         || ' '
  8450.                         || clientecognome;
  8451.         modgui.apriintestazione(3);
  8452.         modgui.inseriscitesto(upper(filterheader));
  8453.         modgui.chiudiintestazione(3);
  8454.     END IF;
  8455.  
  8456.     IF inizio > finedata THEN
  8457.         modgui.esitooperazione('KO', 'Le date inserite sono errate!');
  8458.     ELSE
  8459.         modgui.apridiv;
  8460.         modgui.apritabella;
  8461.         modgui.apririgatabella;
  8462.         IF v_idcliente = -1 THEN
  8463.             modgui.intestazionetabella('Cliente');
  8464.         END IF;
  8465.         modgui.intestazionetabella('Veicolo');
  8466.         IF filtro != 'A' THEN
  8467.             modgui.intestazionetabella('Autorimessa');
  8468.         END IF;
  8469.         modgui.intestazionetabella('Entrata');
  8470.         modgui.intestazionetabella('Uscita');
  8471.         modgui.intestazionetabella('Prenotazione');
  8472.         modgui.intestazionetabella('Costo (&#8364;)');
  8473.         modgui.intestazionetabella('Dettaglio');
  8474.         modgui.chiudirigatabella;
  8475.         FOR ticket IN tickets LOOP
  8476.             cnt := cnt + 1;
  8477.             SELECT UNIQUE
  8478.                 veicoli.idveicolo,
  8479.                 persone.nome,
  8480.                 persone.cognome,
  8481.                 veicoli.targa,
  8482.                 clienti.idcliente,
  8483.                 clienti.cancellato
  8484.             INTO
  8485.                 veicoloid,
  8486.                 clientenome,
  8487.                 clientecognome,
  8488.                 veicolo,
  8489.                 clienteid,
  8490.                 cancellato
  8491.             FROM
  8492.                 persone,
  8493.                 clienti,
  8494.                 veicoli,
  8495.                 effettuaingressiorari
  8496.             WHERE
  8497.                 effettuaingressiorari.idingressoorario = ticket.idingressoorario
  8498.                 AND clienti.idcliente = effettuaingressiorari.idcliente
  8499.                 AND veicoli.idveicolo = effettuaingressiorari.idveicolo
  8500.                 AND persone.idpersona = clienti.idpersona;
  8501.  
  8502.             modgui.apririgatabella;
  8503.             IF v_idcliente = -1 THEN
  8504.                 modgui.aprielementotabella;
  8505.                 modgui.elementotabella(clientenome
  8506.                                        || ' '
  8507.                                        || clientecognome);
  8508.                 modgui.chiudielementotabella;
  8509.             END IF;
  8510.  
  8511.             modgui.aprielementotabella;
  8512.             modgui.elementotabella(veicolo);
  8513.             modgui.chiudielementotabella;
  8514.             IF filtro != 'A' THEN
  8515.                 modgui.aprielementotabella;
  8516.                 modgui.elementotabella(ticket.autorimessaind);
  8517.                 modgui.chiudielementotabella;
  8518.             END IF;
  8519.  
  8520.             modgui.aprielementotabella;
  8521.             IF ticket.oraentrata IS NULL THEN
  8522.                 modgui.elementotabella('Non effettuata');
  8523.             ELSE
  8524.                 modgui.elementotabella(trunc(ticket.oraentrata));
  8525.             END IF;
  8526.  
  8527.             modgui.chiudielementotabella;
  8528.             modgui.aprielementotabella;
  8529.             IF ticket.orauscita IS NULL THEN
  8530.                 modgui.elementotabella('Non effettuata');
  8531.             ELSE
  8532.                 modgui.elementotabella(trunc(ticket.orauscita));
  8533.             END IF;
  8534.  
  8535.             modgui.chiudielementotabella;
  8536.             modgui.aprielementotabella;
  8537.             IF ticket.entrataprevista IS NULL THEN
  8538.                 modgui.elementotabella('No');
  8539.             ELSE
  8540.                 modgui.elementotabella('Si');
  8541.             END IF;
  8542.  
  8543.             modgui.chiudielementotabella;
  8544.             modgui.aprielementotabella;
  8545.             IF ticket.orauscita IS NULL THEN
  8546.                 modgui.elementotabella('-');
  8547.             ELSE
  8548.                 modgui.elementotabella(ticket.costo);
  8549.             END IF;
  8550.  
  8551.             modgui.chiudielementotabella;
  8552.             modgui.aprielementotabella;
  8553.             modgui.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, ticket.idingressoorario);
  8554.             modgui.chiudielementotabella;
  8555.             modgui.chiudirigatabella;
  8556.         END LOOP;
  8557.  
  8558.         modgui.chiuditabella;
  8559.         IF cnt = 0 THEN
  8560.             modgui.apridiv(true);
  8561.             modgui.inseriscitesto('NON SONO STATI EFFETTUATI INGRESSI NEL PERIODO SELEZIONATO');
  8562.             modgui.chiudidiv;
  8563.         END IF;
  8564.  
  8565.         modgui.chiudidiv;
  8566.     END IF;
  8567.  
  8568.     modgui.apriintestazione(3);
  8569.     modgui.inseriscitesto('ALTRE OPERAZIONI');
  8570.     modgui.chiudiintestazione(3);
  8571.     modgui.apridiv(true);
  8572.     modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.selezionaingressi');
  8573.     modgui.chiudidiv;
  8574.     modgui.chiudipagina;
  8575. END visualizzaingressi;
  8576.  
  8577. PROCEDURE visualizzaintroiti (
  8578.     id_sessione   VARCHAR2,
  8579.     ruolo         VARCHAR2,
  8580.     nome          VARCHAR2,
  8581.     datada        VARCHAR2,
  8582.     dataa         VARCHAR2,
  8583.     filtro        VARCHAR2,
  8584.     autorimessa   VARCHAR2,
  8585.     sede          VARCHAR2
  8586. ) IS
  8587.  
  8588.     tot            NUMBER(6, 2);
  8589.     cnt            INTEGER;
  8590.     inizio         DATE;
  8591.     finedata       DATE;
  8592.     filterheader   VARCHAR2(420);
  8593.     CURSOR tickets IS
  8594.     SELECT
  8595.         autorimesse.indirizzo   AS autorimessaind,
  8596.         sedi.indirizzo          AS sedeind,
  8597.         ingressiorari.idingressoorario,
  8598.         ingressiorari.costo,
  8599.         ingressiorari.oraentrata,
  8600.         ingressiorari.orauscita
  8601.     FROM
  8602.         ingressiorari,
  8603.         box,
  8604.         aree,
  8605.         autorimesse,
  8606.         sedi
  8607.     WHERE
  8608.         box.idbox = ingressiorari.idbox
  8609.         AND box.idarea = aree.idarea
  8610.         AND aree.idautorimessa = autorimesse.idautorimessa
  8611.         AND autorimesse.idsede = sedi.idsede
  8612.         AND trunc(ingressiorari.orauscita) >= inizio
  8613.         AND trunc(ingressiorari.orauscita) <= finedata
  8614.         AND ( filtro = 'N'
  8615.               OR ( filtro = 'A'
  8616.                    AND autorimesse.idautorimessa = autorimessa )
  8617.               OR ( filtro = 'S'
  8618.                    AND sedi.idsede = sede ) )
  8619.     ORDER BY
  8620.         ingressiorari.oraentrata;
  8621.  
  8622. BEGIN
  8623.     tot := 0.00;
  8624.     cnt := 0;
  8625.     inizio := to_date(datada, 'YYYY-MM-DD');
  8626.     finedata := to_date(dataa, 'YYYY-MM-DD');
  8627.     modgui.apripagina('HoC | VisualizzaIntroiti', id_sessione, nome, ruolo);
  8628.     FOR t IN tickets LOOP
  8629.         cnt := cnt + 1;
  8630.         IF t.costo is not null THEN
  8631.             tot := tot + t.costo;
  8632.         END IF;
  8633.     END LOOP;
  8634.  
  8635.     modgui.apriintestazione(2);
  8636.     modgui.inseriscitesto('INTROITI');
  8637.     modgui.chiudiintestazione(2);
  8638.     IF filtro = 'S' THEN
  8639.         SELECT
  8640.             indirizzo
  8641.         INTO filterheader
  8642.         FROM
  8643.             sedi
  8644.         WHERE
  8645.             idsede = sede;
  8646.  
  8647.         filterheader := 'RISULTATO RICERCA PER: sede di ' || filterheader;
  8648.     ELSE
  8649.         IF filtro = 'A' THEN
  8650.             SELECT
  8651.                 indirizzo
  8652.             INTO filterheader
  8653.             FROM
  8654.                 autorimesse
  8655.             WHERE
  8656.                 idautorimessa = autorimessa;
  8657.  
  8658.             filterheader := 'RISULTATO RICERCA PER: autorimessa di ' || filterheader;
  8659.         ELSE
  8660.             filterheader := 'RISULTATO RICERCA PER: tutte le autorimesse';
  8661.         END IF;
  8662.     END IF;
  8663.  
  8664.     modgui.apriintestazione(3);
  8665.     modgui.inseriscitesto(upper(filterheader));
  8666.     modgui.chiudiintestazione(3);
  8667.     IF filtro = 'A' THEN
  8668.         SELECT
  8669.             sedi.indirizzo
  8670.         INTO filterheader
  8671.         FROM
  8672.             sedi,
  8673.             autorimesse
  8674.         WHERE
  8675.             autorimesse.idautorimessa = autorimessa
  8676.             AND sedi.idsede = autorimesse.idsede;
  8677.  
  8678.         filterheader := 'sede: ' || filterheader;
  8679.         modgui.apriintestazione(3);
  8680.         modgui.inseriscitesto(upper(filterheader));
  8681.         modgui.chiudiintestazione(3);
  8682.     END IF;
  8683.  
  8684.     IF inizio > finedata THEN
  8685.         modgui.esitooperazione('KO', 'Le date inserite sono errate!');
  8686.     ELSE
  8687.         modgui.apritabella;
  8688.         modgui.apririgatabella;
  8689.         modgui.intestazionetabella('Inizio Periodo');
  8690.         modgui.intestazionetabella('Fine Periodo');
  8691.         modgui.intestazionetabella('Numero Ingressi');
  8692.         modgui.intestazionetabella('Introiti Totali (&#8364;)');
  8693.         modgui.chiudirigatabella;
  8694.         modgui.apririgatabella;
  8695.         modgui.aprielementotabella;
  8696.         modgui.elementotabella(inizio);
  8697.         modgui.chiudielementotabella;
  8698.         modgui.aprielementotabella;
  8699.         modgui.elementotabella(finedata);
  8700.         modgui.chiudielementotabella;
  8701.         modgui.aprielementotabella;
  8702.         modgui.elementotabella(cnt);
  8703.         modgui.chiudielementotabella;
  8704.         modgui.aprielementotabella;
  8705.         modgui.elementotabella(tot);
  8706.         modgui.chiudielementotabella;
  8707.         modgui.chiudirigatabella;
  8708.         modgui.chiuditabella;
  8709.         IF cnt > 0 THEN
  8710.             modgui.apriintestazione(3);
  8711.             modgui.inseriscitesto('ELENCO INGRESSI');
  8712.             modgui.chiudiintestazione(3);
  8713.             modgui.apritabella;
  8714.             modgui.apririgatabella;
  8715.             modgui.intestazionetabella('Codice Ingresso');
  8716.             IF filtro = 'N' THEN
  8717.                 modgui.intestazionetabella('Sede');
  8718.             END IF;
  8719.             IF filtro != 'A' THEN
  8720.                 modgui.intestazionetabella('Autorimessa');
  8721.             END IF;
  8722.             modgui.intestazionetabella('Entrata');
  8723.             modgui.intestazionetabella('Uscita');
  8724.             modgui.intestazionetabella('Costo (&#8364;)');
  8725.             modgui.intestazionetabella('Dettaglio');
  8726.             modgui.chiudirigatabella;
  8727.             FOR ticket IN tickets LOOP
  8728.                 modgui.apririgatabella;
  8729.                 modgui.aprielementotabella;
  8730.                 modgui.elementotabella(ticket.idingressoorario);
  8731.                 modgui.chiudielementotabella;
  8732.                 IF filtro = 'N' THEN
  8733.                     modgui.aprielementotabella;
  8734.                     modgui.elementotabella(ticket.sedeind);
  8735.                     modgui.chiudielementotabella;
  8736.                 END IF;
  8737.  
  8738.                 IF filtro != 'A' THEN
  8739.                     modgui.aprielementotabella;
  8740.                     modgui.elementotabella(ticket.autorimessaind);
  8741.                     modgui.chiudielementotabella;
  8742.                 END IF;
  8743.  
  8744.                 modgui.aprielementotabella;
  8745.                 modgui.elementotabella(trunc(ticket.oraentrata));
  8746.                 modgui.chiudielementotabella;
  8747.                 modgui.aprielementotabella;
  8748.                 modgui.elementotabella(trunc(ticket.orauscita));
  8749.                 modgui.chiudielementotabella;
  8750.                 modgui.aprielementotabella;
  8751.                 IF ticket.costo IS NOT NULL THEN
  8752.                     modgui.elementotabella(ticket.costo);
  8753.                 ELSE
  8754.                     modgui.elementotabella('-');
  8755.                 END IF;
  8756.  
  8757.                 modgui.chiudielementotabella;
  8758.                 modgui.aprielementotabella;
  8759.                 modgui.inseriscilente(gruppo1||'.visualizzabiglietto', id_sessione, nome, ruolo, ticket.idingressoorario);
  8760.                 modgui.chiudielementotabella;
  8761.                 modgui.chiudirigatabella;
  8762.             END LOOP;
  8763.  
  8764.             modgui.chiuditabella;
  8765.         END IF;
  8766.  
  8767.     END IF;
  8768.  
  8769.     modgui.apriintestazione(3);
  8770.     modgui.inseriscitesto('ALTRE OPERAZIONI');
  8771.     modgui.chiudiintestazione(3);
  8772.     modgui.apridiv(true);
  8773.     modgui.inseriscibottone(id_sessione, nome, ruolo, 'FAI UNA NUOVA RICERCA', gruppo1||'.introiti');
  8774.     modgui.chiudidiv;
  8775.     modgui.chiudipagina;
  8776. END visualizzaintroiti;
  8777.  
  8778. FUNCTION ritiroorario (
  8779.     v_id_veicolo effettuaingressiorari.idveicolo%TYPE
  8780. ) RETURN boolean AS
  8781.  
  8782.     /*clientenonparcheggiato EXCEPTION;
  8783.     PRAGMA exception_init ( clientenonparcheggiato, -1445 );*/
  8784.     v_id_ingresso ingressiorari.idingressoorario%TYPE;
  8785.     CURSOR ingressi IS
  8786.     SELECT
  8787.         ingressiorari.idingressoorario
  8788.     INTO v_id_ingresso
  8789.     FROM
  8790.         ingressiorari,
  8791.         effettuaingressiorari
  8792.     WHERE
  8793.         effettuaingressiorari.idingressoorario = ingressiorari.idingressoorario
  8794.         AND effettuaingressiorari.idveicolo = v_id_veicolo
  8795.         AND ingressiorari.orauscita IS NULL
  8796.         AND ingressiorari.oraentrata is not null;
  8797.  
  8798. BEGIN
  8799.     SAVEPOINT start_transaction;
  8800.     OPEN ingressi;
  8801.     FETCH ingressi INTO v_id_ingresso;
  8802.     IF ( ingressi%notfound ) THEN
  8803.         RAISE clientenonparcheggiato;
  8804.     END IF;
  8805.     UPDATE ingressiorari
  8806.     SET
  8807.         orauscita = (
  8808.             SELECT
  8809.                 SYSTIMESTAMP
  8810.             FROM
  8811.                 dual
  8812.         )
  8813.     WHERE
  8814.         idingressoorario = v_id_ingresso;
  8815.  
  8816.     RETURN true;
  8817. EXCEPTION
  8818.     WHEN OTHERS THEN
  8819.         ROLLBACK TO start_transaction;
  8820.         return false;
  8821. END ritiroorario;
  8822.  
  8823. FUNCTION ingressoorario (
  8824.     v_id_cliente       effettuaingressiorari.idcliente%TYPE,
  8825.     v_id_veicolo       effettuaingressiorari.idveicolo%TYPE,
  8826.     v_id_autorimessa   autorimesse.idautorimessa%TYPE,
  8827.     v_entrata_prev      ingressiorari.entrataprevista%TYPE DEFAULT NULL
  8828. ) RETURN ingressiorari.idingressoorario%TYPE AS
  8829.  
  8830.     cnt                NUMBER;
  8831.     max_entrata_pren   ingressiorari.entrataprevista%TYPE;
  8832.     v_id_box           ingressiorari.idbox%TYPE;
  8833.     v_id_ingresso      ingressiorari.idingressoorario%TYPE;
  8834.     timestmp           ingressiorari.oraentrata%TYPE;
  8835.     /*clientenontrovatoexception EXCEPTION;
  8836.     PRAGMA exception_init ( clientenontrovatoexception, -1440 );
  8837.     veicolonontrovatoexception EXCEPTION;
  8838.     PRAGMA exception_init ( veicolonontrovatoexception, -1441 );
  8839.     autorimessanontrovataexception EXCEPTION;
  8840.     PRAGMA exception_init ( autorimessanontrovataexception, -1442 );
  8841.     clienteancoraparcheggiato EXCEPTION;
  8842.     PRAGMA exception_init ( clienteancoraparcheggiato, -1443 );
  8843.     veicoloancoraparcheggiato EXCEPTION;
  8844.     PRAGMA exception_init ( veicoloancoraparcheggiato, -1444 );
  8845.     prenotazionegiaesistenteexception EXCEPTION;
  8846.     PRAGMA exception_init ( prenotazionegiaesistenteexception, -1446 );
  8847.     veicolononpossedutoexception EXCEPTION;
  8848.     PRAGMA exception_init ( veicolononpossedutoexception, -1447 );
  8849.     boxnontrovatoexception EXCEPTION;*/
  8850. BEGIN
  8851.     SAVEPOINT start_transaction;
  8852.  
  8853.      v_id_box := gruppo2.ricercaposto(v_id_veicolo, v_id_autorimessa);
  8854.      --v_id_box := 2;
  8855.      
  8856.      select count(*)
  8857.      into cnt
  8858.      from box b
  8859.      where b.idBox = v_id_box and b.occupato = 'F' and b.riservato = 'F';
  8860.      
  8861.      if cnt = 0 then
  8862.       raise boxnontrovatoexception;
  8863.      end if;
  8864.  
  8865.  
  8866.     SELECT
  8867.         COUNT(*)
  8868.     INTO cnt
  8869.     FROM
  8870.         clienti
  8871.     WHERE
  8872.         idcliente = v_id_cliente;
  8873.  
  8874.     IF ( cnt = 0 ) THEN
  8875.         RAISE clientenontrovatoexception;
  8876.     END IF;
  8877.     SELECT
  8878.         COUNT(*)
  8879.     INTO cnt
  8880.     FROM
  8881.         veicoli
  8882.     WHERE
  8883.         idveicolo = v_id_veicolo;
  8884.  
  8885.     IF ( cnt = 0 ) THEN
  8886.         RAISE veicolonontrovatoexception;
  8887.     END IF;
  8888.     SELECT
  8889.         COUNT(*)
  8890.     INTO cnt
  8891.     FROM
  8892.         autorimesse
  8893.     WHERE
  8894.         idautorimessa = v_id_autorimessa;
  8895.  
  8896.     IF ( cnt = 0 ) THEN
  8897.         RAISE autorimessanontrovataexception;
  8898.     END IF;
  8899.  
  8900.     --verificare che utente possieda veicolo
  8901.     --verificare che utente non cancellato > vincoli    
  8902.     --verificare che utente non blacklist > vincoli    
  8903.     --verificare che box adatto > vincoli    
  8904.     --verificare che prenotazione non scaduta > vincoli    
  8905.     --verificare che utente non sia già parcheggiato    
  8906.     --verificare che auto non sia già parcheggiata  
  8907.     SELECT
  8908.         COUNT(*)
  8909.     INTO cnt
  8910.     FROM
  8911.         veicoliclienti
  8912.     WHERE
  8913.         idcliente = v_id_cliente
  8914.         AND idveicolo = v_id_veicolo;
  8915.  
  8916.     IF ( cnt = 0 ) THEN
  8917.         RAISE veicolononpossedutoexception;
  8918.     END IF;
  8919.     SELECT
  8920.         COUNT(*)
  8921.     INTO cnt
  8922.     FROM
  8923.         ingressiorari,
  8924.         effettuaingressiorari
  8925.     WHERE
  8926.         ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  8927.         AND effettuaingressiorari.idcliente = v_id_cliente
  8928.         AND ingressiorari.orauscita IS NULL
  8929.         AND ingressiorari.oraentrata is not null;
  8930.  
  8931.     /*IF ( cnt > 0 ) THEN
  8932.         RAISE clienteancoraparcheggiato;
  8933.     END IF;*/
  8934.     SELECT
  8935.         COUNT(*)
  8936.     INTO cnt
  8937.     FROM
  8938.         ingressiorari,
  8939.         effettuaingressiorari
  8940.     WHERE
  8941.         ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  8942.         AND effettuaingressiorari.idveicolo = v_id_veicolo
  8943.         AND ingressiorari.orauscita IS NULL
  8944.         AND ingressiorari.oraentrata is not null;
  8945.  
  8946.     IF ( cnt > 0 ) THEN
  8947.         RAISE veicoloancoraparcheggiato;
  8948.     END IF;
  8949.     /*SELECT
  8950.         COUNT(*)
  8951.     INTO cnt
  8952.     FROM
  8953.         ingressiabbonamenti,
  8954.         effettuaingressiabbonamenti
  8955.     WHERE
  8956.         ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
  8957.         AND effettuaingressiabbonamenti.idcliente = v_id_cliente
  8958.         AND ingressiabbonamenti.orauscita IS NULL
  8959.         AND ingressiabbonamenti.oraentrata IS NOT NULL;
  8960.  
  8961.     IF ( cnt > 0 ) THEN
  8962.         RAISE clienteancoraparcheggiato;
  8963.     END IF;*/
  8964.     SELECT
  8965.         COUNT(*)
  8966.     INTO cnt
  8967.     FROM
  8968.         ingressiabbonamenti,
  8969.         effettuaingressiabbonamenti
  8970.     WHERE
  8971.         ingressiabbonamenti.idingressoabbonamento = effettuaingressiabbonamenti.idingressoabbonamento
  8972.         AND effettuaingressiabbonamenti.idveicolo = v_id_veicolo
  8973.         AND ingressiabbonamenti.orauscita IS NULL
  8974.         AND ingressiabbonamenti.oraentrata IS NOT NULL;
  8975.  
  8976.     IF ( cnt > 0 ) THEN
  8977.         RAISE veicoloancoraparcheggiato;
  8978.     END IF;
  8979.  
  8980.     --contare numero prenotazini valide: se 0 ingressoorario normale o prenotazione, se 1 solo ingresoorari e se prenotazione errore
  8981.     SELECT
  8982.         ingressiorariseq.NEXTVAL,
  8983.         SYSTIMESTAMP
  8984.     INTO
  8985.         v_id_ingresso,
  8986.         timestmp
  8987.     FROM
  8988.         dual;
  8989.    
  8990.      --sostituire cn cursore
  8991.  
  8992.     SELECT
  8993.         COUNT(*)
  8994.     INTO cnt --numero prenotazioni
  8995.     FROM
  8996.         ingressiorari,
  8997.         effettuaingressiorari,
  8998.         box,
  8999.         aree
  9000.     WHERE
  9001.         ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  9002.         AND effettuaingressiorari.idcliente = v_id_cliente
  9003.         AND ingressiorari.orauscita IS NULL
  9004.         --AND ingressiorari.oraentrata IS ? NOT ? NULL;
  9005.         AND ingressiorari.entrataprevista IS NOT NULL
  9006.         AND timestmp <= ingressiorari.entrataprevista + interval '15' minute
  9007.         and effettuaingressiorari.idveicolo = v_id_veicolo
  9008.         AND ingressiorari.idbox = box.idbox and box.idarea = aree.idarea and aree.idautorimessa = v_id_autorimessa;
  9009.      
  9010.     IF v_entrata_prev IS NOT NULL THEN --- prenotazione!    
  9011.         IF cnt != 0 THEN
  9012.             RAISE prenotazionegiaesistenteexception;
  9013.         ELSE
  9014.             timestmp := NULL; --oraentrata
  9015.         END IF;
  9016.     ELSE --ingressoorario
  9017.         IF cnt != 0 THEN --c'e' una prenotazione  
  9018.      
  9019.           --sostituire cn cursore
  9020.             SELECT
  9021.                 ingressiorari.idingressoorario
  9022.             INTO v_id_ingresso
  9023.             FROM
  9024.         ingressiorari,
  9025.         effettuaingressiorari,
  9026.         box,
  9027.         aree
  9028.     WHERE
  9029.         ingressiorari.idingressoorario = effettuaingressiorari.idingressoorario
  9030.         AND effettuaingressiorari.idcliente = v_id_cliente
  9031.         and effettuaingressiorari.idveicolo = v_id_veicolo
  9032.         AND ingressiorari.orauscita IS NULL
  9033.         --AND ingressiorari.oraentrata IS ? NOT ? NULL;
  9034.         AND ingressiorari.entrataprevista IS NOT NULL
  9035.         AND timestmp <= ingressiorari.entrataprevista + interval '15' minute
  9036.         AND ingressiorari.idbox = box.idbox and box.idarea = aree.idarea and aree.idautorimessa = v_id_autorimessa;
  9037.      
  9038.  
  9039.             UPDATE ingressiorari
  9040.             SET
  9041.                 oraentrata = timestmp
  9042.             WHERE
  9043.                 idingressoorario = v_id_ingresso;
  9044.  
  9045.             RETURN v_id_ingresso;
  9046.         END IF;
  9047.     END IF;
  9048.  
  9049.     INSERT INTO ingressiorari (
  9050.         idingressoorario,
  9051.         entrataprevista,
  9052.         oraentrata,
  9053.         idbox
  9054.     ) VALUES (
  9055.         v_id_ingresso,
  9056.         v_entrata_prev,
  9057.         timestmp,
  9058.         v_id_box
  9059.     );
  9060.  
  9061.     INSERT INTO effettuaingressiorari (
  9062.         idveicolo,
  9063.         idcliente,
  9064.         idingressoorario
  9065.     ) VALUES (
  9066.         v_id_veicolo,
  9067.         v_id_cliente,
  9068.         v_id_ingresso
  9069.     );
  9070.  
  9071.     RETURN v_id_ingresso;
  9072. EXCEPTION
  9073.     WHEN OTHERS THEN
  9074.         ROLLBACK TO start_transaction;
  9075.         RAISE;
  9076. END ingressoorario;
  9077.  
  9078. ------------------------- FINE GIUSEPPE BISICCHIA ------------------------------------
  9079.  
  9080. end Gruppo1;
RAW Paste Data