From d0b56238117a3bbb13122144b1eb04d1464a7bb0 Mon Sep 17 00:00:00 2001 From: E-A Date: Thu, 30 Mar 2023 16:46:02 +0200 Subject: [PATCH] embellisha and overhaul logic - report dashboard --- .../WEB-INF/src/content/Language.properties | 57 ++- .../src/reportistica/Reportistica.java | 59 ++- .../docroot/html/init.jsp | 1 + .../docroot/html/view.jsp | 437 ++++++++++-------- 4 files changed, 327 insertions(+), 227 deletions(-) diff --git a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/content/Language.properties b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/content/Language.properties index e769b635..07ea6179 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/content/Language.properties +++ b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/content/Language.properties @@ -1,21 +1,36 @@ +regione_sicilia_paesaggistica=Portale Paesaggistica +portale_liferay_tooltip=liferay-portal-6.2-ce-ga6-6.2.5 +pagina_reportistica=Pagina di reportistica +filtra_pratiche_tooltip=Date per limitare la ricerca + date_picker_inizio=Data iniziale: date_picker_fine=Data finale: pulsante_filtra_submit=Applica range titolo_pagina_reportistica=Dashboard di Reportistica titolo_campi_filtro=Range date di filtro: -titolo_tabella_risultati_stato=Filtra Pratiche per Stato -titolo_tabella_risultati_integrazioni=Filtra Pratiche per Integrazioni -titolo_tabella_risultati_autorizzazioni=Filtra Pratiche Autorizzate e non Autorizzate +titolo_tabella_risultati_stato=Filtro Pratiche per Stato e Tipo +titolo_tabella_risultati_integrazioni=Filtro Pratiche per Integrazioni +titolo_tabella_risultati_autorizzazioni=Filtro Pratiche Autorizzate e non Autorizzate titolo_period=nel periodo -titolo_risultati_aggregati_stato=Report Stati -titolo_risultati_aggregati_integrazioni=Report Integrazioni -titolo_risultati_aggregati_autorizzazioni=Report Autorizzazioni -pulsante_scarica_report_1=CSV Stati -pulsante_scarica_report_2=CSV Integraioni -pulsante_scarica_report_3=CSV Autorizzazioni -stringa_csv_vuoto_stato=CSV stati vuoto -stringa_csv_vuoto_integrazioni=CSV integrazioni vuoto -stringa_csv_vuoto_autorizzazioni=CSV autorizzazioni vuoto +titolo_report_aggreg=Aggregazione Reportistica +pulsante_scarica_report_1=Scarica CSV Stati +pulsante_scarica_report_2=Scarica CSV Integrazioni +pulsante_scarica_report_3=Scarica CSV Autorizzazioni + +stringa_csv_vuoto_stato=Filtro stati senza risultati +stringa_csv_vuoto_integrazioni=Filtro integrazioni senza risultati +stringa_csv_vuoto_autorizzazioni=Filtro autorizzazioni senza risultati + +report_stato_vuoto=Report stati senza risultati +report_integra_vuoto=Report integrazioni senza risultati +report_autor_vuoto=Report autorizzazioni senza risultati + +tipo_procedura=Tipo procedura +traduzione_tipo_procedura=Traduzione Tipo procedura +stato_pratica=Stato pratica +traduzione_stato_pratica=Traduzione Stato pratica + +numero_pratiche=Numero pratiche label_procedura_P0 = 1 tipo_procedura_P0 = Autorizzazione per interventi su Beni Culturali (D.Lgs. 42/2004 art. 21, 31, 48, 49, 50) @@ -24,19 +39,19 @@ tipo_procedura_P1 = Interventi su Beni Culturali mobili label_procedura_P2 = 1.2 tipo_procedura_P2 = Interventi su Beni Culturali immobili label_procedura_P3 = 2 -tipo_procedura_P3 = Verifica preventiva dell’interesse archeologico (D.Lgs. 25/2016, art. 25) +tipo_procedura_P3 = Verifica preventiva dell'interesse archeologico (D.Lgs. 25/2016, art. 25) label_procedura_P4 = 3 tipo_procedura_P4 = Autorizzazione per interventi di edilizia su Beni Culturali (D.Lgs. 42/2004 artt. 21, 22) label_procedura_P5 = 4 tipo_procedura_P5 = Autorizzazione paesaggistica per interventi e/o opere di grande impegno territoriale (D.Lgs. 42/2004 art. 146) label_procedura_P6 = 5 -tipo_procedura_P6 = Autorizzazione paesaggistica per opere il cui impatto è valutato mediante documentazione semplificata (D.Lgs. 42/2004 art. 146) +tipo_procedura_P6 = Autorizzazione paesaggistica per opere il cui impatto è valutato mediante documentazione semplificata (D.Lgs. 42/2004 art. 146) label_procedura_P7 = 6 -tipo_procedura_P7 = Autorizzazione paesaggistica per interventi di lieve entità (L.R. 5/2019 artt. 3, 5) +tipo_procedura_P7 = Autorizzazione paesaggistica per interventi di lieve entità (L.R. 5/2019 artt. 3, 5) label_procedura_P8 = 7 -tipo_procedura_P8 = Accertamento di compatibilità paesaggistica (D.Lgs. 42/2004 art. 146, 167) +tipo_procedura_P8 = Accertamento di compatibilità paesaggistica (D.Lgs. 42/2004 art. 146, 167) label_procedura_P9 = 8 -tipo_procedura_P9 = Accertamento di compatibilità paesaggistica per Sanatorie Edilizie (L. 47/1985 e L.R. 37/1985 – L. 724/1994 – L. 326/2003 e L.R. 15/2004) +tipo_procedura_P9 = Accertamento di compatibilità paesaggistica per Sanatorie Edilizie (L. 47/1985 e L.R. 37/1985 - L. 724/1994 - L. 326/2003 e L.R. 15/2004) label_procedura_P10 = 9 tipo_procedura_P10 = Certificazione di sussistenza vincoli @@ -45,7 +60,7 @@ tipo_procedura_Q1 = Autorizzazione per interventi su Beni Culturali mobili, appa label_procedura_Q2 = 2 tipo_procedura_Q2 = Autorizzazione per interventi su Beni Culturali immobili label_procedura_Q3 = 3 -tipo_procedura_Q3 = Verifica preventiva dell’interesse archeologico +tipo_procedura_Q3 = Verifica preventiva dell'interesse archeologico label_procedura_Q4 = 4 tipo_procedura_Q4 = Autorizzazione prevista dagli strumenti urbanistici per interventi in aree e immobili non assoggettati a tutela ai sensi del D.Lgs. 42/2004 label_procedura_Q5 = 5 @@ -53,11 +68,11 @@ tipo_procedura_Q5 = Autorizzazione per "Settori Speciali" label_procedura_Q6 = 6 tipo_procedura_Q6 = Autorizzazione paesaggistica label_procedura_Q7 = 7 -tipo_procedura_Q7 = Autorizzazione paesaggistica per interventi di lieve entità +tipo_procedura_Q7 = Autorizzazione paesaggistica per interventi di lieve entità label_procedura_Q8 = 8 -tipo_procedura_Q8 = Accertamento di compatibilità paesaggistica +tipo_procedura_Q8 = Accertamento di compatibilità paesaggistica label_procedura_Q9 = 9 -tipo_procedura_Q9 = Accertamento di compatibilità paesaggistica per istanze di Condono Edilizio +tipo_procedura_Q9 = Accertamento di compatibilità paesaggistica per istanze di Condono Edilizio label_procedura_Q10 = 10 tipo_procedura_Q10 = Certificazione di sussistenza vincoli diff --git a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/reportistica/Reportistica.java b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/reportistica/Reportistica.java index 61d70c1e..cec75fea 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/reportistica/Reportistica.java +++ b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/WEB-INF/src/reportistica/Reportistica.java @@ -2,8 +2,6 @@ package reportistica; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.language.LanguageUtil; -import com.liferay.portal.kernel.log.Log; -import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.portlet.PortletResponseUtil; import com.liferay.portal.kernel.util.ContentTypes; import com.liferay.portal.kernel.util.DateFormatFactoryUtil; @@ -15,8 +13,11 @@ import it.tref.liferay.portos.bo.service.IntPraticaLocalServiceUtil; import java.io.IOException; import java.io.StringWriter; import java.math.BigInteger; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Locale; import javax.portlet.PortletException; import javax.portlet.ResourceRequest; @@ -26,24 +27,29 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; public class Reportistica extends MVCPortlet { - private Log _log = LogFactoryUtil.getLog(Reportistica.class); - @Override - public void serveResource(ResourceRequest req, ResourceResponse rep) throws IOException, - PortletException { + public void serveResource(ResourceRequest req, ResourceResponse rep) throws IOException, PortletException { String idAzione = req.getResourceID(); Date dataInizioLavori = ParamUtil.getDate(req, "dataInizioInput", DateFormatFactoryUtil.getSimpleDateFormat("yyyy-MM-dd")); Date dataFineLavori = ParamUtil.getDate(req, "dataFineInput", DateFormatFactoryUtil.getSimpleDateFormat("yyyy-MM-dd")); - String contentType = ContentTypes.APPLICATION_TEXT; - + String contentType = ContentTypes.APPLICATION_TEXT; + Locale loc = req.getLocale(); + String tipo_procedura = LanguageUtil.get(loc, "tipo_procedura"); + String stato_pratica = LanguageUtil.get(loc, "stato_pratica"); + String numero_pratiche = LanguageUtil.get(loc, "numero_pratiche"); + DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); + String nel_periodo =formatter.format(dataInizioLavori) +"-"+formatter.format(dataFineLavori); if ("azioneScarica1".equals(idAzione)) { - String fileName = "report-stati1.csv"; + String fileName = "report_stati"+nel_periodo+".csv"; try( StringWriter sw = new StringWriter(); CSVPrinter csvPrinter = new CSVPrinter(sw, CSVFormat.DEFAULT. - withHeader("TipoProcedura", "StatoPratica", "QuantePratiche") + withHeader( + tipo_procedura, + stato_pratica, + numero_pratiche) ); ){ List i = IntPraticaLocalServiceUtil.filtraPraticheStato(dataInizioLavori, dataFineLavori); @@ -51,9 +57,9 @@ public class Reportistica extends MVCPortlet { for(Object[] record : i){ String tipoprocedura = (String)record[0]; - tipoprocedura+= ":"+LanguageUtil.get(req.getLocale(), "tipo_procedura_"+tipoprocedura); + tipoprocedura+= ":"+LanguageUtil.get(loc, "tipo_procedura_"+tipoprocedura); String statopratica = (String)record[1]; - statopratica+= ":"+LanguageUtil.get(req.getLocale(), "stato-pratica-"+statopratica); + statopratica+= ":"+LanguageUtil.get(loc, "stato-pratica-"+statopratica); BigInteger countStati = (BigInteger)record[2]; csvPrinter.printRecord(tipoprocedura, statopratica, countStati); } @@ -61,19 +67,21 @@ public class Reportistica extends MVCPortlet { PortletResponseUtil.sendFile(req, rep, fileName, sw.toString().getBytes(), contentType); return; - } catch (SystemException e) { + } catch (SystemException | IOException e) { e.printStackTrace(); return; } } if ("azioneScarica2".equals(idAzione)) { - String fileName = "report-integra2.csv"; + String fileName = "report_integ"+nel_periodo+".csv"; try( StringWriter sw = new StringWriter(); CSVPrinter csvPrinter = new CSVPrinter(sw, CSVFormat.DEFAULT. - withHeader("TipoProcedura", "QuantePratiche") + withHeader( + tipo_procedura, + numero_pratiche) ); ){ @@ -81,7 +89,7 @@ public class Reportistica extends MVCPortlet { for(Object[] record : j){ String tipoprocedura = (String)record[0]; - tipoprocedura+= ":"+LanguageUtil.get(req.getLocale(), "tipo_procedura_"+tipoprocedura); + tipoprocedura+= ":"+LanguageUtil.get(loc, "tipo_procedura_"+tipoprocedura); BigInteger countIntegrazioni = (BigInteger)record[1]; csvPrinter.printRecord(tipoprocedura, countIntegrazioni); } @@ -89,29 +97,32 @@ public class Reportistica extends MVCPortlet { PortletResponseUtil.sendFile(req, rep, fileName, sw.toString().getBytes(), contentType); return; - } catch (SystemException e) { + } catch (SystemException | IOException e) { e.printStackTrace(); return; } } if ("azioneScarica3".equals(idAzione)) { - String fileName = "report-autori3.csv"; + String fileName = "report_autor"+nel_periodo+".csv"; try( StringWriter sw = new StringWriter(); CSVPrinter csvPrinter = new CSVPrinter(sw, CSVFormat.DEFAULT. - withHeader("TipoProcedura", "StatoPratica", "QuantePratiche") + withHeader( + tipo_procedura, + stato_pratica, + numero_pratiche) ); ){ - List i = IntPraticaLocalServiceUtil.filtraPraticheStato(dataInizioLavori, dataFineLavori); + List k = IntPraticaLocalServiceUtil.filtraPraticheAutorizzate(dataInizioLavori, dataFineLavori); - for(Object[] record : i){ + for(Object[] record : k){ String tipoprocedura = (String)record[0]; - tipoprocedura+= ":"+LanguageUtil.get(req.getLocale(), "tipo_procedura_"+tipoprocedura); + tipoprocedura+= ":"+LanguageUtil.get(loc, "tipo_procedura_"+tipoprocedura); String statopratica = (String)record[1]; - statopratica+= ":"+LanguageUtil.get(req.getLocale(), "stato-pratica-"+statopratica); + statopratica+= ":"+LanguageUtil.get(loc, "stato-pratica-"+statopratica); BigInteger countStati = (BigInteger)record[2]; csvPrinter.printRecord(tipoprocedura, statopratica, countStati); } @@ -119,7 +130,7 @@ public class Reportistica extends MVCPortlet { PortletResponseUtil.sendFile(req, rep, fileName, sw.toString().getBytes(), contentType); return; - } catch (SystemException e) { + } catch (SystemException | IOException e) { e.printStackTrace(); return; } diff --git a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/init.jsp b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/init.jsp index 51e88fd9..1d5cb80e 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/init.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/init.jsp @@ -14,6 +14,7 @@ <%@taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %> <%@taglib uri="http://liferay.com/tld/util" prefix="liferay-util" %> + diff --git a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/view.jsp b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/view.jsp index ce689fe6..b792822d 100644 --- a/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/view.jsp +++ b/liferay-plugins-sdk-6.2/portlets/portos-reportistica-portlet/docroot/html/view.jsp @@ -1,3 +1,5 @@ +<%@page import="java.util.Map.Entry"%> +<%@page import="java.text.DateFormat"%> <%@page import="reportistica.Reportistica"%> <%@page import="com.liferay.portal.kernel.language.LanguageUtil"%> <%@page import="java.util.TreeMap"%> @@ -20,214 +22,285 @@ <%@page import="com.liferay.portal.kernel.util.ParamUtil"%> <%@page import="com.liferay.portal.kernel.util.DateFormatFactoryUtil"%> <%@page import="com.liferay.portlet.PortletURLFactoryUtil"%> +<%@page import="com.liferay.portal.kernel.util.ListUtil"%> <%@ include file="/html/init.jsp"%> <% Date dataInizioLavori = ParamUtil.getDate(request, "dataInizioInput", DateFormatFactoryUtil.getSimpleDateFormat("yyyy-MM-dd")); Date dataFineLavori = ParamUtil.getDate(request, "dataFineInput", DateFormatFactoryUtil.getSimpleDateFormat("yyyy-MM-dd")); %> - -

- <%= LanguageUtil.get(pageContext, "titolo_pagina_reportistica") %> -

-
-
+ +

<%= LanguageUtil.get(pageContext, "titolo_pagina_reportistica") %>

+
+ + +

<%= LanguageUtil.get(pageContext, "titolo_campi_filtro") %>

-
- - - - - - - -
- - - - - - - - - - - - - -
-
-
- + + + + + + + + +
+ + + + + + + + + + + + + +
+
+
+ +
<% Map stati = new TreeMap(); Map integrazioni = new TreeMap(); Map autorizzazioni = new TreeMap(); - - - for(int p=1;p<=10;p++){ - stati.put("P"+p, BigInteger.valueOf(0)); - stati.put("Q"+p, BigInteger.valueOf(0)); - integrazioni.put("P"+p, BigInteger.valueOf(0)); - integrazioni.put("Q"+p, BigInteger.valueOf(0)); - autorizzazioni.put("P"+p, BigInteger.valueOf(0)); - autorizzazioni.put("Q"+p, BigInteger.valueOf(0)); - } List i = IntPraticaLocalServiceUtil.filtraPraticheStato(dataInizioLavori, dataFineLavori); List j = IntPraticaLocalServiceUtil.filtraPraticheIntegrazioni(dataInizioLavori, dataFineLavori); List k = IntPraticaLocalServiceUtil.filtraPraticheAutorizzate(dataInizioLavori, dataFineLavori); + DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT); + String nel_periodo = LanguageUtil.get(pageContext, "titolo_period") + + " " + + formatter.format(dataInizioLavori) + + "-" + + formatter.format(dataFineLavori); %> -
- -

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_stato") %> <%= LanguageUtil.get(pageContext, "titolo_period") %> -

- <% if(Validator.isNotNull(i)&&!i.isEmpty()){ - for(Object[] record : i){ - String tipoprocedura = (String)record[0]; - String statopratica = (String)record[1]; - BigInteger countStati = (BigInteger)record[2]; - BigInteger rigaCountMappa = stati.get(tipoprocedura); - if(Validator.isNotNull(countStati)&&Validator.isNotNull(rigaCountMappa)) - stati.put(tipoprocedura, countStati.add(rigaCountMappa)); - %> - - <% if(null!=record){%> - <%=tipoprocedura %> - <%=statopratica %> - <%=countStati %> - <%}%> - - <%}%> - - - - - - - - - - - <%}else{ - %>

<%=LanguageUtil.get(pageContext, "stringa_csv_vuoto_stato") %>

- <%} %> - - -

<%= LanguageUtil.get(pageContext, "titolo_risultati_aggregati_stato") %> -

-

<%=stati.toString()%>

-
-
- -

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_integrazioni") %> <%= LanguageUtil.get(pageContext, "titolo_period") %> -

- <% if(Validator.isNotNull(j)&&!j.isEmpty()){ - - for(Object[] record : j){ - String tipoprocedura = (String)record[0]; - BigInteger countIntegrazioni = (BigInteger)record[1]; - - BigInteger rigaCountMappa = integrazioni.get(tipoprocedura); - if(Validator.isNotNull(countIntegrazioni)&&Validator.isNotNull(rigaCountMappa)) - integrazioni.put(tipoprocedura, countIntegrazioni.add(rigaCountMappa)); - %> - - <% if(null!=record){%> - <%=tipoprocedura %> - <%=countIntegrazioni %> - <%}%> - - <%}%> - - - - + - - - - - - <%}else{ - %>

<%=LanguageUtil.get(pageContext, "stringa_csv_vuoto_integrazioni") %>

<%}%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_stato") %> | <%= LanguageUtil.get(pageContext, "titolo_report_aggreg") %>

-

- <%= LanguageUtil.get(pageContext, "titolo_risultati_aggregati_integrazioni") %> -

-

- <%= integrazioni.toString() %> -

+ <%for(Object[] record : i) + {String tipoprocedura = (String)record[0]; + BigInteger countStati = (BigInteger)record[2]; + BigInteger rigaCountMappa = stati.get(tipoprocedura); + if(null!=countStati&null!=tipoprocedura) + {if(null!=rigaCountMappa) + {stati.put(tipoprocedura, countStati.add(rigaCountMappa)); + } + else + {stati.put(tipoprocedura,countStati); + } + } + } + List> statiEntryList=new ArrayList>(stati.entrySet()); + %> + + + + + + + + + + + + + +
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_integrazioni") %> | <%= LanguageUtil.get(pageContext, "titolo_report_aggreg") %>

-

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_autorizzazioni") %> <%= LanguageUtil.get(pageContext, "titolo_period") %> -

- <% if(Validator.isNotNull(k)&&!k.isEmpty()){ + <%for(Object[] record : j) + {String tipoprocedura = (String)record[0]; + BigInteger countInt = (BigInteger)record[1]; + BigInteger rigaCountMappa = integrazioni.get(tipoprocedura); + if(null!=countInt&null!=tipoprocedura) + {if(null!=rigaCountMappa) + {integrazioni.put(tipoprocedura, countInt.add(rigaCountMappa)); + } + else + {integrazioni.put(tipoprocedura,countInt); + } + } + } + List> intEntryList=new ArrayList>(integrazioni.entrySet()); + %> + + + + + + + + + + + + + + +
+
+
- for(Object[] record : k){ - String tipoprocedura = (String)record[0]; - String statopratica = (String)record[1]; - BigInteger countAutori = (BigInteger)record[2]; - BigInteger rigaCountMappa = autorizzazioni.get(tipoprocedura); - if(Validator.isNotNull(countAutori)&&Validator.isNotNull(rigaCountMappa)) - autorizzazioni.put(tipoprocedura, countAutori.add(rigaCountMappa)); - %> - - <% if(null!=record){%> - <%=tipoprocedura %> - <%=statopratica %> - <%=countAutori %> - <%}%> - - <%}%> - - - - - - - - - <%}else{ - %>

<%=LanguageUtil.get(pageContext, "stringa_csv_vuoto_autorizzazioni") %>

<%}%> - -

<%= LanguageUtil.get(pageContext, "titolo_risultati_aggregati_autorizzazioni") %> -

-

<%=autorizzazioni.toString()%>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + -
-
+

<%= LanguageUtil.get(pageContext, "titolo_tabella_risultati_autorizzazioni") %> | <%= LanguageUtil.get(pageContext, "titolo_report_aggreg") %>

+ + <%for(Object[] record : k) + {String tipoprocedura = (String)record[0]; + BigInteger countAuto = (BigInteger)record[2]; + BigInteger rigaCountMappa = autorizzazioni.get(tipoprocedura); + if(null!=countAuto&null!=tipoprocedura) + {if(null!=rigaCountMappa) + {autorizzazioni.put(tipoprocedura, countAuto.add(rigaCountMappa)); + } + else + {autorizzazioni.put(tipoprocedura,countAuto); + } + } + } + List> autoEntryList=new ArrayList>(autorizzazioni.entrySet()); + %> + + + + + + + + + + + + + + + + + +