· 6 years ago · Dec 15, 2019, 12:20 AM
1create 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)
22IS
23 minimportoquery NUMBER DEFAULT -1;
24 maximportoquery NUMBER DEFAULT -1;
25BEGIN
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
48modGUI.inserisciradiobutton('VISUALIZZA LE MULTE PER L` AUTORIMESSA', 'filtrodati', 'auto', TRUE);
49
50modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
51
52modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
53
54FOR autorimessequery IN (SELECT IDautorimessa,
55 INDIRIZZO
56 FROM AUTORIMESSE
57 ORDER BY IDautorimessa) LOOP
58 modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
59 autorimessequery.indirizzo, FALSE);
60END LOOP;
61
62modGUI.chiudiselect;
63
64modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
65
66modGUI.apriselect('responsabile', 'Scegli un responsabile');
67
68FOR 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
77modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
78END LOOP;
79
80modGUI.chiudiselect;
81
82SELECT MIN(IMPORTO),
83 MAX(IMPORTO)
84INTO minimportoquery, maximportoquery
85FROM MULTE
86WHERE MULTE.CANCELLATO = 'F';
87
88modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
89
90modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
91
92modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
93
94modGUI.inseriscitesto('FILTRA TRA I CLIENTI');
95
96modGUI.inserisciinput('filtrocliente', 'NOME O COGNOME CLIENTE', 'text', FALSE);
97
98--modGUI.inseriscitesto('Mostra Multe:');
99
100modGUI.inserisciradiobutton('MOSTRA MULTE PAGATE E NON PAGATE', 'pagamento', 'TF', TRUE);
101
102modGUI.inserisciradiobutton('MOSTRA SOLO MULTE PAGATE', 'pagamento', 'T', FALSE);
103
104modGUI.inserisciradiobutton('MOSTRA SOLO MULTE NON PAGATE', 'pagamento', 'F', FALSE);
105
106modGUI.INSERISCIBOTTONERESET('RESET');
107
108modGUI.INSERISCIBOTTONEFORM('CERCA');
109
110modGUI.chiudiform;
111
112modGUI.chiudidiv;
113
114modGUI.chiudipagina;
115END 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)
144IS
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;
154BEGIN
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
216modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`INFERIORE A QUELLA DI INIZIO INTERVALLO');
217ELSIF minimporto > maximporto THEN
218modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`INFERIORE A IMPORTO MASSIMO');
219ELSE
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;
363END IF;
364
365modGUI.apriintestazione(3);
366
367modGUI.inseriscitesto('ALTRE OPERAZIONI');
368
369modGUI.chiudiintestazione(3);
370
371modGUI.apridiv(TRUE);
372
373modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA CRONOLOGIA',gruppo1||'.cronologiaMulte');
374
375modGUI.chiudidiv;
376
377modGUI.chiudidiv;
378
379modGUI.chiudipagina;
380END 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)
393IS
394 controlloabbonamento INTEGER DEFAULT 0;
395 dettagliomulte multe%ROWTYPE;
396 esistenzamulta INTEGER DEFAULT 0;
397BEGIN
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;
518END 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 */
527PROCEDURE dettagliomulte(id_sessione VARCHAR2,
528 nome VARCHAR2,
529 ruolo VARCHAR2,
530 idriga INTEGER)
531IS
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;
547BEGIN
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;
1162END IF;
1163
1164modGUI.chiudipagina;
1165END 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)
1180IS
1181 dettagliomulte multe%ROWTYPE;
1182 var_idriga VARCHAR2(8);
1183 var_tipoingresso VARCHAR2(1);
1184 esistenzaingresso INTEGER DEFAULT 0;
1185BEGIN
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;
1293END 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)
1302IS
1303BEGIN
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
1326modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
1327
1328modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
1329
1330modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
1331
1332FOR autorimessequery IN (SELECT IDautorimessa,
1333 INDIRIZZO
1334 FROM AUTORIMESSE
1335 ORDER BY IDautorimessa) LOOP
1336 modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
1337 autorimessequery.indirizzo, FALSE);
1338END LOOP;
1339
1340modGUI.chiudiselect;
1341
1342modGUI.inserisciradiobutton('VISUALIZZA GLI INGRESSI DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
1343
1344modGUI.apriselect('responsabile', 'Scegli un responsabile');
1345
1346FOR 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
1355modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
1356END LOOP;
1357
1358modGUI.chiudiselect;
1359
1360modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
1361
1362modGUI.inserisciinput('filtrocliente', 'nome o cognome Cliente', 'text', FALSE);
1363
1364modGUI.INSERISCIBOTTONERESET('RESET');
1365
1366modGUI.INSERISCIBOTTONEFORM('CERCA');
1367
1368modGUI.chiudiform;
1369
1370modGUI.chiudidiv;
1371
1372modGUI.chiudipagina;
1373END 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)
1396IS
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;
1406BEGIN
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
1450modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E` MINORE DI QUELLA DI INIZIO INTERVALLO');
1451ELSE
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
1572modGUI.chiudielementotabella;
1573
1574modGUI.chiudirigatabella;
1575END LOOP;
1576
1577 modGUI.chiuditabella();
1578END IF;
1579END IF;
1580
1581modGUI.apriintestazione(3);
1582
1583 modGUI.inseriscitesto('ALTRE OPERAZIONI');
1584
1585modGUI.chiudiintestazione(3);
1586
1587modGUI.apridiv(TRUE);
1588
1589modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO INSERIMENTO',gruppo1||'.inserisciMulte');
1590
1591modGUI.chiudidiv;
1592
1593modGUI.chiudidiv;
1594
1595modGUI.chiudipagina;
1596END 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)
1615IS
1616 var_tipoingresso VARCHAR2(1);
1617 esistenzaingresso INTEGER DEFAULT 0;
1618BEGIN
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;
1736END 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)
1749IS
1750 esistenzamulta INTEGER DEFAULT 0;
1751 controlloabbonamento INTEGER DEFAULT 0;
1752 dettagliomulte multe%ROWTYPE;
1753BEGIN
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;
1864END 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)
1890IS
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;
1898BEGIN
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
1934modGUI.esitooperazione('KO', 'LA DATA DI PAGAMENTO DEVE ESSERE SUCCESSIVA A QUELLA DI EMISSIONE');
1935
1936modGUI.apriintestazione(3);
1937
1938 modGUI.inseriscitesto('ALTRE OPERAZIONI');
1939
1940modGUI.chiudiintestazione(3);
1941
1942 modGUI.apridiv(TRUE);
1943
1944 modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA RICERCA',gruppo1||'.cronologiaMulte');
1945
1946 modGUI.chiudidiv;
1947ELSE
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;
1975END IF;
1976
1977modGUI.chiudidiv;
1978
1979modGUI.chiudipagina;
1980END 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)
1989IS
1990 minimportoquery NUMBER DEFAULT -1;
1991 maximportoquery NUMBER DEFAULT -1;
1992BEGIN
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
2016modGUI.inserisciradiobutton('VISUALIZZA MULTE PER LA AUTORIMESSA', 'filtrodati', 'auto', TRUE);
2017
2018modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
2019
2020modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
2021
2022FOR autorimessequery IN (SELECT IDautorimessa,
2023 INDIRIZZO
2024 FROM AUTORIMESSE
2025 ORDER BY IDautorimessa) LOOP
2026 modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
2027 autorimessequery.indirizzo, FALSE);
2028END LOOP;
2029
2030modGUI.chiudiselect;
2031
2032modGUI.inserisciradiobutton('VISUALIZZA LE MULTE DELLE AUTORIMESSE GESTITE DA:', 'filtrodati', 'resp', FALSE);
2033
2034modGUI.apriselect('responsabile', 'Scegli un responsabile');
2035
2036FOR 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
2045modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome||' '||responsabiliquery.var_nome, FALSE);
2046END LOOP;
2047
2048modGUI.chiudiselect;
2049
2050--filtro in base all'importo, viene automaticamente precaricato con il minimo e massimo importo trovato sul database
2051SELECT MIN(IMPORTO),
2052 MAX(IMPORTO)
2053INTO minimportoquery, maximportoquery
2054FROM MULTE
2055WHERE MULTE.CANCELLATO = 'F';
2056
2057modGUI.inseriscitesto('IMPORTO COMPRESO TRA I VALORI:');
2058
2059modGUI.inserisciinput('minImporto', 'DA:', 'number', TRUE, minimportoquery);
2060
2061modGUI.inserisciinput('maxImporto', 'A:', 'number', TRUE, maximportoquery);
2062
2063modGUI.inseriscitesto('FILTRA TRA I CLIENTI:');
2064
2065modGUI.inserisciinput('filtrocliente', 'Nome o Cognome Cliente', 'text', FALSE);
2066
2067modGUI.INSERISCIBOTTONERESET('RESET');
2068
2069modGUI.INSERISCIBOTTONEFORM('CERCA');
2070
2071modGUI.chiudiform;
2072
2073modGUI.chiudidiv;
2074
2075modGUI.chiudipagina;
2076END 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)
2103IS
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;
2111BEGIN
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
2160modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INIZIO INTERVALLO');
2161ELSIF minimporto > maximporto THEN
2162modGUI.esitooperazione('KO', 'IMPORTO MINIMO DELLA MULTA E`SUPERIORE A IMPORTO MASSIMO');
2163ELSE
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('€ '||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;
2297END IF;
2298
2299modGUI.apriintestazione(3);
2300
2301 modGUI.inseriscitesto('ALTRE OPERAZIONI');
2302
2303modGUI.chiudiintestazione(3);
2304
2305modGUI.apridiv(TRUE);
2306
2307modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVO PAGAMENTO',gruppo1||'.pagamentoMulte');
2308
2309modGUI.chiudidiv;
2310
2311modGUI.chiudidiv;
2312
2313modGUI.chiudipagina;
2314END 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)
2327IS
2328 esistenzamulta INTEGER DEFAULT 0;
2329BEGIN
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;
2389END 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)
2404IS
2405 esistenzamulta INTEGER DEFAULT 0;
2406BEGIN
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
2442modGUI.apriintestazione(3);
2443
2444 modGUI.inseriscitesto('ALTRE OPERAZIONI');
2445
2446modGUI.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;
2470END 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)
2485IS
2486 esistenzamulta INTEGER DEFAULT 0;
2487BEGIN
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;
2571END 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)
2581IS
2582BEGIN
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;
2620END 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 */
2632PROCEDURE SEGNALACLIENTIDISPLAY(id_sessione VARCHAR2,
2633 nome VARCHAR2,
2634 ruolo VARCHAR2,
2635 datada VARCHAR2,
2636 dataa VARCHAR2,
2637 minimporto INTEGER)
2638IS
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;
2649BEGIN
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
2664modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE DI QUELLA DI INZIO INTERVALLO');
2665ELSE
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
2761modGUI.inseriscitesto('€ '||TO_CHAR(CLIENTISEGNALATI.view_totimporto, '9990D99'));
2762
2763modGUI.chiudielementotabella;
2764
2765modGUI.aprielementotabella;
2766
2767modGUI.inseriscilente('gruppo5.moreInfoClient', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
2768
2769modGUI.chiudielementotabella;
2770
2771modGUI.aprielementotabella;
2772
2773SELECT count(idcliente) INTO idClienteBlacklist FROM blacklist WHERE blacklist.idcliente=CLIENTISEGNALATI.view_idcliente AND (blacklist.durata > SYSDATE OR blacklist.durata IS NULL);
2774
2775IF idClienteBlacklist != 0 THEN
2776modGUI.inseriscitesto('Gia` in Blacklist');
2777ELSE
2778modGUI.inseriscipenna('gruppo5.formInsertBlacklist', id_sessione, nome, ruolo, CLIENTISEGNALATI.view_idcliente);
2779END IF;
2780
2781modGUI.chiudielementotabella;
2782
2783modGUI.chiudirigatabella;
2784END LOOP;
2785
2786modGUI.chiuditabella;
2787END IF;
2788END IF;
2789
2790modGUI.apriintestazione(3);
2791
2792 modGUI.inseriscitesto('ALTRE OPERAZIONI');
2793
2794modGUI.chiudiintestazione(3);
2795
2796modGUI.apridiv(TRUE);
2797
2798modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA SEGNALAZIONE',gruppo1||'.segnalaClienti');
2799
2800modGUI.chiudidiv;
2801
2802modGUI.chiudidiv;
2803
2804modGUI.chiudipagina;
2805END 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)
2815IS
2816BEGIN
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
2842modGUI.inserisciradiobutton('VISUALIZZA STATISTICHE PER LA AUTORIMESSA:', 'filtrodati', 'auto', TRUE);
2843
2844modGUI.apriselect('autorimessa', 'Scegli una autorimessa');
2845
2846modGUI.inserisciopzioneselect(0, 'Tutte le autorimesse', TRUE);
2847
2848FOR autorimessequery IN (SELECT IDautorimessa,
2849 INDIRIZZO
2850 FROM AUTORIMESSE
2851 ORDER BY IDautorimessa) LOOP
2852 modGUI.inserisciopzioneselect(autorimessequery.idautorimessa,
2853 autorimessequery.indirizzo, FALSE);
2854END LOOP;
2855
2856modGUI.chiudiselect;
2857
2858modGUI.inserisciradiobutton('VISUALIZZA LE STASTISTICHE DELLE AUTORIMESSE GESTITE DA', 'filtrodati', 'resp', FALSE);
2859
2860modGUI.apriselect('responsabile', 'Scegli un responsabile');
2861
2862FOR 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
2871modGUI.inserisciopzioneselect(responsabiliquery.idresponsabile, responsabiliquery.var_cognome
2872 ||' '
2873 ||responsabiliquery.var_nome, FALSE);
2874END LOOP;
2875
2876modGUI.chiudiselect;
2877
2878modGUI.INSERISCIBOTTONERESET('RESET');
2879
2880modGUI.INSERISCIBOTTONEFORM('CERCA');
2881
2882modGUI.chiudiform;
2883
2884modGUI.chiudidiv;
2885
2886modGUI.chiudipagina;
2887END 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)
2908IS
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;
2921BEGIN
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
2967modGUI.esitooperazione('KO', 'LA DATA DI FINE INTERVALLO E`MINORE RISPETTO A QUELLA DI INZIO INTERVALLO');
2968ELSE
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('€ '||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('€ '||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;
3096END IF;
3097
3098modGUI.apriintestazione(3);
3099
3100modGUI.inseriscitesto('ALTRE OPERAZIONI');
3101
3102modGUI.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
3105modGUI.apridiv(TRUE);
3106
3107modGUI.inseriscibottone(id_sessione, nome, ruolo, 'NUOVA STATISTICA',gruppo1||'.statisticheMulte');
3108
3109modGUI.chiudidiv;
3110
3111modGUI.chiudidiv;
3112
3113modGUI.chiudipagina;
3114END 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*/
3127FUNCTION checkAutorimessa(var_autorimessa VARCHAR2) RETURN BOOLEAN IS
3128 var_contaAutorimessa INTEGER;
3129BEGIN
3130 SELECT COUNT(idAutorimessa) INTO var_contaAutorimessa
3131 FROM Autorimesse
3132 WHERE indirizzo = var_autorimessa;
3133
3134 RETURN var_contaAutorimessa = 1;
3135END 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*/
3142FUNCTION checkCliente(var_cliente VARCHAR2) RETURN BOOLEAN IS
3143 var_contaCliente INTEGER;
3144BEGIN
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;
3151END 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*/
3158FUNCTION checkTarga(var_targa VARCHAR2, var_cliente VARCHAR2) RETURN BOOLEAN IS
3159 var_contaTarga INTEGER;
3160BEGIN
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;
3174END 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*/
3181FUNCTION convertiOraInSecondi(var_ora TIMESTAMP) RETURN INTEGER IS
3182BEGIN
3183 RETURN (EXTRACT(HOUR FROM var_ora) * 3600) +
3184 (EXTRACT(MINUTE FROM var_ora) * 60) +
3185 EXTRACT(SECOND FROM var_ora);
3186END 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*/
3193FUNCTION 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;
3197BEGIN
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;
3215END 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*/
3223FUNCTION 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;
3227BEGIN
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;
3247END 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*/
3257FUNCTION 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;
3301BEGIN
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;
3451END 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*/
3462FUNCTION 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;
3512BEGIN
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;
3660END calcoloTempoFascia;
3661
3662PROCEDURE dettagliXGiorni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
3663BEGIN
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;
3689END dettagliXGiorni;
3690
3691PROCEDURE permanenzaNonAbbonati(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
3692BEGIN
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;
3852END permanenzaNonAbbonati;
3853
3854PROCEDURE areeFasce(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
3855BEGIN
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
3983END areeFasce;
3984
3985PROCEDURE 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;
4020BEGIN
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;
4092END visualizzaDettagliXGiorni;
4093
4094PROCEDURE 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;
4100BEGIN
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;
4389END visualizzaPermanenza;
4390
4391PROCEDURE percentualePrenotazioni(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
4392-- solo amministratore e super user
4393BEGIN
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;
4457END percentualePrenotazioni;
4458
4459PROCEDURE 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;
4462BEGIN
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;
4621END visualizzaPercentuale;
4622
4623PROCEDURE 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;
4629BEGIN
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;
4837END cronologiaAccessi;
4838
4839PROCEDURE 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;
4873BEGIN
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;
5184END 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)
5188PROCEDURE 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;
5218BEGIN
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') || '€/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;
5397END visualizzaAreeFasce;
5398
5399PROCEDURE 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);
5404BEGIN
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;
5449END dettaglioFascia;
5450
5451PROCEDURE autorimessaTipoCarb(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2) IS
5452BEGIN
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;
5479END 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)
5484PROCEDURE visualizzaAutorimessaTC(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_data VARCHAR2, var_tipo VARCHAR2) IS
5485BEGIN
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
5574END 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
5579PROCEDURE 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;
5594BEGIN
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;
5645END 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
5651PROCEDURE nuovaAreaFascia2(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, idRiga VARCHAR2, var_idFascia VARCHAR2) IS
5652BEGIN
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;
5688END 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*/
5697PROCEDURE modAreaFasciaRis(id_Sessione VARCHAR2, nome VARCHAR2, ruolo VARCHAR2, var_idArea VARCHAR2, var_idFascia VARCHAR2,
5698 var_costo VARCHAR2, var_tipo VARCHAR2) IS
5699BEGIN
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;
5744END 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
5812var_dataciclo date;
5813var_gg varchar2(20);
5814var_oraDa varchar2(20);
5815var_oraA varchar2(20);
5816var_oraInizioCalcolo timestamp;
5817var_oraFineCalcolo timestamp;
5818var_h number;
5819tot number;
5820var_oraEntrata varchar(20);
5821var_oraUscita varchar2(20);
5822var_dataEntrata date;
5823var_dataUscita date;
5824var_timestampDa timestamp;
5825var_timestampA timestamp;
5826var_confronto timestamp;
5827--ricerca area--
5828idAreeLibere GRUPPO2.list_idAree := GRUPPO2.list_idAree(); -- inizializza il vettore aree libere
5829len integer;
5830idArea integer;
5831i integer;
5832larghezzaMin integer;
5833Area 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')||' €/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')||' €/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
6381if(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;
6457else
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;
6472if(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;
6493else
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;
6515end 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;
6530end 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
6576PROCEDURE INGRESSIFASCIAORARIA(id_Sessione varchar2, nome varchar2, ruolo varchar2) AS
6577BEGIN
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
6617END 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
6867if(oraInizio>oraFine)then
6868 modGUI.esitoOperazione('KO','Gli orari di inizio e fine fascia oraria non sono congruenti');
6869else
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;
6879end 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;
6889EXCEPTION
6890WHEN 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;
6992EXCEPTION
6993WHEN 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;
7000END 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*/
7394FUNCTION 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;
7409BEGIN
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;
7459END PREZZOBIGLIETTO;
7460
7461------------------------- FINE STEFANIA FALCHI --------------------------------------
7462
7463------------------------- INIZIO GIUSEPPE BISICCHIA ----------------------------------
7464
7465PROCEDURE 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;
7522BEGIN
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;
7549END cittanomulte;
7550
7551
7552PROCEDURE 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;
7619BEGIN
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;
7691END clientepiumulte;
7692
7693PROCEDURE 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
7786BEGIN
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;
7878END confrontaveicoli;
7879
7880PROCEDURE introiti (
7881 id_sessione VARCHAR2,
7882 nome VARCHAR2,
7883 ruolo VARCHAR2
7884) IS
7885BEGIN
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;
7926END introiti;
7927
7928PROCEDURE piuabbonamenti (
7929 id_sessione VARCHAR2,
7930 nome VARCHAR2,
7931 ruolo VARCHAR2
7932) IS
7933BEGIN
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;
7983END piuabbonamenti;
7984
7985PROCEDURE selezionaingressi (
7986 id_sessione VARCHAR2,
7987 nome VARCHAR2,
7988 ruolo VARCHAR2
7989) IS
7990BEGIN
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;
8054END selezionaingressi;
8055
8056PROCEDURE selezionaingresso (
8057 id_sessione VARCHAR2,
8058 nome VARCHAR2,
8059 ruolo VARCHAR2
8060) AS
8061BEGIN
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;
8085END selezionaingresso;
8086
8087PROCEDURE 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;
8117BEGIN
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 || '€');
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;
8299END visualizzabiglietto;
8300
8301PROCEDURE 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
8378BEGIN
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 (€)');
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;
8575END visualizzaingressi;
8576
8577PROCEDURE 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
8622BEGIN
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 (€)');
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 (€)');
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;
8776END visualizzaintroiti;
8777
8778FUNCTION 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
8798BEGIN
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;
8817EXCEPTION
8818 WHEN OTHERS THEN
8819 ROLLBACK TO start_transaction;
8820 return false;
8821END ritiroorario;
8822
8823FUNCTION 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;*/
8850BEGIN
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;
9072EXCEPTION
9073 WHEN OTHERS THEN
9074 ROLLBACK TO start_transaction;
9075 RAISE;
9076END ingressoorario;
9077
9078------------------------- FINE GIUSEPPE BISICCHIA ------------------------------------
9079
9080end Gruppo1;