templates/analytic/home.html.twig line 1

Open in your IDE?
  1. {% extends 'Layouts/layout.html.twig' %}
  2. {% block title %} Retabit Platform {% endblock %}
  3. {% block content %}
  4. <div class="container pt-3">
  5.     {# insights top #}
  6.     <div class="row align-items-center justify-content-center">
  7.         <div class="col-12 d-none">
  8.             <h1>{{ municipioname.adminunitname|capitalize }}</h1>
  9.         </div>
  10.         <div class="col-12 pt-3 pb-2">
  11.             <div class="d-flex align-items-center">
  12.                 <h4 class="flex-grow-1">{% trans %}Los datos sociales, económicos y medioambientales que RETABIT tiene de {% endtrans %} <strong>{{ municipioname.adminunitname|capitalize }}</strong> {% trans %}para el análisis del parque residencial, son los siguientes{% endtrans %}: </h4>
  13.             </div>
  14.         </div>
  15.     </div>
  16. </div>
  17. <div class="container-fluid box_blue_middle">
  18.     <div class="container">
  19.         <div class="row align-items-center justify-content-center">
  20.             {{include ('components/infobar.html.twig')}}
  21.             
  22.         </div>
  23.     </div>
  24. </div>
  25. <div class="container mt-5 pt-3 pb-3">
  26.     <div class="col-12 pt-3 pb-3">
  27.             <div class="d-flex align-items-center">
  28.                 <h4 class="flex-grow-1">{% trans %}Estos son los análisis propuestos para{% endtrans %} <strong>{{ municipioname.adminunitname|capitalize }}</strong> {% trans %}a partir de la valoración de los datos disponibles. En cada análisis se muestran el resumen de los datos de los edificios y sus habitantes, sus características en las gráficas de barras y los indicadores relacionados.{% endtrans %}  </h4>
  29.             </div>
  30.         </div>
  31.     {# analytic groups #}
  32.     <div class="row align-items-top justify-content-start ">
  33.         {# on group #}
  34.         {# {{dump(analytic_data)}} #}
  35.         {% for item in analytic_data %}
  36.            
  37.         <div class="col-12 p-1 {% if loop.last %} mb-5 {% else %} mb-4 {% endif %}" id="analytic_box_{{loop.index}}">
  38.             {% set title = '' %}
  39.             {% set description = '' %}
  40.             {% for analyticvalue in analytic %}               
  41.                 {% if analyticvalue.id == item.analytic %}
  42.                     {% if app.request.locale == "ca" %}
  43.                         {% set title = analyticvalue.name_ca %}
  44.                         {% set description = analyticvalue.descripcion_ca %}
  45.                     {% elseif app.request.locale == "en" %}
  46.                         {% set title = analyticvalue.name_en %}
  47.                         {% set description = analyticvalue.descripcion_en %}
  48.                     {% else %}
  49.                         {% set title = analyticvalue.name %}
  50.                         {% set description = analyticvalue.descripcion %}
  51.                     {% endif %}
  52.                     
  53.                 {% endif %}
  54.             {% endfor %}
  55.             <div class="analytic_box box_blue_soft p-5">
  56.                 <div class="col-12 mb-3">
  57.                     <h2>{{title}} <a tabindex="0" role="button" title="Header" data-bs-toggle="popover_{{loop.index}}" data-bs-trigger="hover focus" data-bs-title="{{title}}" data-bs-content="{{description}}"><span class="material-symbols-outlined">info</span></a></h2>
  58.                 </div>
  59.                 <div class="d-flex">
  60.                     <div class="col-4 info_box pe-3">
  61.                         
  62.                         <p class="mb-3"><span class="material-symbols-outlined">domain</span> {{item.blg_per}}% <span class="material-symbols-outlined ms-3">groups</span> {{item.hab_per}}%</p>
  63.                         <p class="flex-fill mb-5">{{item.textai|replace({'(': '(<span class="fw-bold">', ')': '</span>)'}) |raw }}</p> <!-- .boxed_text -->
  64.                         <script>
  65.                             $('[data-bs-toggle="popover_{{loop.index}}"]').mouseover(function(){
  66.                                 $('[data-bs-toggle="popover_{{loop.index}}"]').popover();
  67.                             })
  68.                         </script>
  69.                         <div class="mb-3">
  70.                             <a href="{{ path('explore_analytic', {'mun': mun, 'slug': item.slug }) }}" class="btn btn-primary" >{% trans %}Ver más{% endtrans %}</a>
  71.                         </div>
  72.                         
  73.                     </div>
  74.                     <div class="col-4 graphic_box ps-2 pe-3">
  75.                         <h4 class="mb-3">{% trans %}Características de los edificios{% endtrans %}</h4>
  76.                         
  77.                         <div id="carouselExampleIndicators_{{loop.index}}" class="carousel slide">
  78.                             <div class="carousel-indicators">
  79.                                 <button type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
  80.                                 <button type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide-to="1" aria-label="Slide 2"></button>
  81.                                 <button type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide-to="2" aria-label="Slide 3"></button>
  82.                                 <button type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide-to="3" aria-label="Slide 4"></button>
  83.                             </div>
  84.                             <div class="carousel-inner" id="analytic_box_stat_{{loop.index}}">
  85.                                 <div class="carousel-item active">
  86.                                     <h5>{% trans %}Uso del edificio{% endtrans %} <a tabindex="0" role="button" title="Header" data-bs-toggle="popover_use" data-bs-trigger="hover focus" data-bs-title="" data-bs-content=""><span class="material-symbols-outlined" style="font-size: 18px !important;">info</span></a></h5>
  87.                                     <div class="mb-3" id="statUseBox_{{loop.index}}" style="position: relative;"></div>
  88.                                 </div>
  89.                                 <div class="carousel-item">
  90.                                     <h5>{% trans %}Año de construcción{% endtrans %}<a tabindex="0" role="button" title="Header" data-bs-toggle="popover_cons" data-bs-trigger="hover focus" data-bs-title="" data-bs-content=""><span class="material-symbols-outlined" style="font-size: 18px !important;">info</span></a></h5>
  91.                                     <div class="mb-3" id="statYearBox_{{loop.index}}" style="position: relative;"></div>
  92.                                 </div>
  93.                                 <div class="carousel-item">
  94.                                     <h5>{% trans %}Área{% endtrans %}<a tabindex="0" role="button" title="Header" data-bs-toggle="popover_area" data-bs-trigger="hover focus" data-bs-title="" data-bs-content=""><span class="material-symbols-outlined" style="font-size: 18px !important;">info</span></a></h5>
  95.                                     <div class="mb-3" id="statAreaBox_{{loop.index}}" style="position: relative;"></div>
  96.                                 </div>
  97.                                 <div class="carousel-item">
  98.                                     <h5>{% trans %}Porcentaje de ocupación{% endtrans %}<a tabindex="0" role="button" title="Header" data-bs-toggle="popover_por" data-bs-trigger="hover focus" data-bs-title="" data-bs-content=""><span class="material-symbols-outlined" style="font-size: 18px !important;">info</span></a></h5>
  99.                                     <div class="mb-3" id="statOccupationBox_{{loop.index}}" style="position: relative;"></div>
  100.                                 </div>
  101.                                 
  102.                             </div>
  103.                             <script type="text/javascript">
  104.                                 async function init(){
  105.                                     var statDataAll = {{statData[loop.index - 1]|json_encode()|raw}};
  106.                                     // use stats data and print graphic
  107.                                     let useStat = statDataAll.useStatData;
  108.                                     let useStatData = await analyticOrganizeData(useStat);
  109.                                     let useStatTotalData = await analyticOrganizeTotalData(useStat);
  110.                                     barplotDoubleDouble100('statUseBox_{{loop.index}}',useStatData[0],useStatTotalData[1],useStatData[2], 'analytic_box_stat_{{loop.index}}',useStatTotalData[0]);
  111.                                     // year stats data and print graphic
  112.                                     var yearStat = statDataAll.yearStatData;
  113.                                     var yearStatData = await analyticOrganizeData(yearStat);
  114.                                     var yearStatTotalData = await analyticOrganizeTotalData(yearStat);
  115.                                     barplotDoubleDouble100('statYearBox_{{loop.index}}',yearStatData[0],yearStatTotalData[1],yearStatData[2], 'analytic_box_stat_{{loop.index}}',yearStatTotalData[0]);
  116.                                     // area stats data and print graphic
  117.                                     var areaStat = statDataAll.areaStatData;
  118.                                     var areaStatData = await analyticOrganizeData(areaStat);
  119.                                     var areaStatTotalData = await analyticOrganizeTotalData(areaStat);
  120.                                     barplotDoubleDouble100('statAreaBox_{{loop.index}}',areaStatData[0],areaStatTotalData[1],areaStatData[2], 'analytic_box_stat_{{loop.index}}',areaStatTotalData[0]);
  121.                                     // occupation stats data and print graphic
  122.                                     var occupationStat = statDataAll.occupationStatData;
  123.                                     var occupationStatData = await analyticOrganizeData(occupationStat);
  124.                                     var occupationStatTotalData = await analyticOrganizeTotalData(occupationStat);
  125.                                     barplotDoubleDouble100('statOccupationBox_{{loop.index}}',occupationStatData[0],occupationStatTotalData[1],occupationStatData[2], 'analytic_box_stat_{{loop.index}}',occupationStatTotalData[0]);
  126.                                     
  127.                                 }
  128.                                 init();
  129.                                 
  130.                             </script>
  131.                             <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide="prev">
  132.                                 <span class="material-symbols-outlined">chevron_left</span>
  133.                                 <span class="visually-hidden">Previous</span>
  134.                             </button>
  135.                             <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleIndicators_{{loop.index}}" data-bs-slide="next">
  136.                                 <span class="material-symbols-outlined">chevron_right</span>
  137.                                 <span class="visually-hidden">Next</span>
  138.                             </button>
  139.                         </div>
  140.                         
  141.                     </div>
  142.                     <div class="col-4 rel_box ps-3 pe-2">
  143.                         <h4 class="mb-3">{% trans %}Indicadores relacionados{% endtrans %}</h4>
  144.                         <div>
  145.                         {#% dump(item.relation) %#}
  146.                         {% set break = false %}
  147.                         {% for rel in item.relation %}
  148.                             
  149.                             {% if break == false %}
  150.                                 {% if loop.index > 3 %}
  151.                                     {% set break = true %}
  152.                                 {% endif %}
  153.                                 {% if app.request.locale == "ca" %}
  154.                                     {% set title = rel.name_ca %}
  155.                                     {% set description = rel.info_ca %}
  156.                                 {% elseif app.request.locale == "en" %}
  157.                                     {% set title = rel.name_en %}
  158.                                     {% set description = rel.info_en %}
  159.                                 {% else %}
  160.                                     {% set title = rel.name %}
  161.                                     {% set description = rel.info %}
  162.                                 {% endif %}
  163.                                 <p class="mb-2">{{ title }} <a tabindex="0" role="button" title="Indicador relacionado" data-bs-toggle="ind_rel_{{loop.index}}" data-bs-trigger="hover focus" data-bs-title="{{title|capitalize}}" data-bs-content="{{description}}"><span class="material-symbols-outlined" style="font-size: 18px !important;">info</span></a></p>
  164.                                 <script>
  165.                                     $('[data-bs-toggle="ind_rel_{{loop.index}}"]').mouseover(function(){
  166.                                         $('[data-bs-toggle="ind_rel_{{loop.index}}"]').popover();
  167.                                     })
  168.                                 </script>
  169.                                 
  170.                                 <div class="statsline mb-4 d-inline-block w-100">
  171.                                     {% set color = [] %}
  172.                                     {% for rank in kpi_rank %}
  173.                                         
  174.                                         {% if rank.kpi_id == rel.kpi %}
  175.                                             {% set color = color|merge([rank.bgcolor]) %}
  176.                                         {% endif %}
  177.                                     {% endfor %}
  178.                                     {% set counter = color|length %}
  179.                                     {% set partsize = 100/counter %}
  180.                                     {% set stylestring = '' %}
  181.                                     <div class="bk_line">
  182.                                     {% for colorpart in color %}
  183.                                         {% if loop.last %}
  184.                                         {% set dato = 99.9-(partsize*(counter - 1)) %}
  185.                                             <div class="analytic_color_bar" style="width:{{dato}}%; background-color: {{colorpart}};"></div>
  186.                                         {% else %}
  187.                                             <div class="analytic_color_bar" style="width:{{partsize|number_format(2, '.')}}%; background-color: {{colorpart}};"></div>        
  188.                                         {% endif %}
  189.         
  190.                                     {% endfor %}
  191.                                     
  192.                                     </div>
  193.                                     
  194.                                     <span class="statsline_item statsline_1" style="left: {{rel.theme_per}}%;margin-left: -6px;"><i class="fa-solid triangle" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-custom-class="custom-tooltip" data-bs-title="{{rel.theme_per}}%"></i></span>
  195.                                     
  196.                                     
  197.                                 </div>
  198.                                 <div class="statsline_range d-flex justify-content-between d-none">
  199.                                     <span>{{rel.min_value}}</span>
  200.                                     <span>{{rel.max_value}}</span>
  201.                                 </div>
  202.                             {% endif %}
  203.                             
  204.                         {% endfor %}
  205.                         
  206.                         </div>
  207.                     </div>
  208.                 </div>
  209.                 
  210.                 
  211.             </div>
  212.         </div>
  213.         {% endfor %}
  214.         
  215.     </div>
  216. </div>
  217. <script src="{{ asset('bundles/fosjsrouting/js/router.min.js') }}"></script>
  218. <script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script>
  219. <script type="text/javascript">
  220.     const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
  221.     const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl));
  222.     const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
  223.     const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
  224.     var Routes = Routing; // loaded from router.min.js
  225.     // because ES5 doesn't support require syntax,
  226.     // we use jquery getJSON function in order to set
  227.     // routing data to our Routing object
  228.     $.getJSON("{{ asset('build/js/fos_js_routes.json') }}", function (routes) {
  229.         Routes.setRoutingData(routes);
  230.     });
  231.     var rPlatform = map;
  232.     let explore_baseUrl = '{{ base_url }}';
  233.     let explore_mun = '{{ mun }}';
  234.     let allgeodataUrl = explore_baseUrl + "/get-allgeodata?mun=" + explore_mun ;
  235.     $(function() {
  236.         rPlatform.setMun(explore_mun);
  237.         rPlatform.setBaseUrl(explore_baseUrl);
  238.     });
  239.     function loadUrl(a){
  240.         let url = explore_baseUrl + "/explora/" + explore_mun + "/" + a;
  241.         window.location.href = url;
  242.     }
  243.     function loadUrlBack(){
  244.         let url = explore_baseUrl + "/explora";
  245.         window.location.href = url;
  246.     }
  247.     function analytic_collapse(a){
  248.         $('#analytic_box_' + a + ' .graphic_box').toggleClass('d-none');
  249.         $('#analytic_box_' + a + ' .rel_box').toggleClass('d-none');
  250.         var dato = $('#analytic_box_' + a).hasClass('col-12');
  251.         if(dato == true){
  252.             $('#analytic_box_' + a).removeClass('col-12');
  253.             $('#analytic_box_' + a).addClass('col-4');
  254.             $('#analytic_collapse_btn_' + a + ' span.material-symbols-outlined').text('arrow_forward');
  255.             $('#analytic_box_' + a + ' .boxed_text').removeClass('normal');
  256.         }else{
  257.             $('#analytic_box_' + a).removeClass('col-4');
  258.             $('#analytic_box_' + a).addClass('col-12');
  259.             $('#analytic_collapse_btn_' + a + ' span.material-symbols-outlined').text('arrow_back');
  260.             $('#analytic_box_' + a + ' .boxed_text').addClass('normal');
  261.         }
  262.     }
  263.     $('[data-bs-toggle="popover_use"]').mouseover(function(){
  264.         $('[data-bs-toggle="popover_use"]').popover();
  265.     });
  266.     $('[data-bs-toggle="popover_cons"]').mouseover(function(){
  267.         $('[data-bs-toggle="popover_cons"]').popover();
  268.     });
  269.     $('[data-bs-toggle="popover_area"]').mouseover(function(){
  270.         $('[data-bs-toggle="popover_use"]').popover();
  271.     });
  272.     $('[data-bs-toggle="popover_por"]').mouseover(function(){
  273.         $('[data-bs-toggle="popover_use"]').popover();
  274.     });
  275. </script>
  276. {% endblock %}