Dum

Eina per a la gestió i planificació de la DUM

 Aquesta plataforma és un instrument de consulta i guia per a tots els agents implicats en la distribució urbana de mercaderies (DUM) amb l'objectiu de trobar mesures que minimitzin les externalitats de la DUM. L'eina s'estructura en tres apartats principals: el buscador on es pot filtrar les mesures segons diferents objectius que es volen assolir, les fitxes de cada mesura i el glossari. Al glossari, que es troba a la part inferior d'aquesta pàgina, hi ha un recull de conceptes, acrònims i sigles relacionades amb la distribució urbana de mercaderies i la logística. Les fitxes de cada mesura es divideixen en els següents punts:
  1. Descripció i característiques
  2. Impacte i efectes pels agents implicats
  3. Marc legal
  4. Proposta aritcles per Ordenances Municipals
  5. Proves pilot i exemples pràctics.
 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> quien_eres  [in template "20101#20128#501937" at line 30, column 13]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${quien_eres}  [in template "20101#20128#501937" at line 30, column 11]
----
1<#if (themeDisplay.getLanguageId() == 'es_ES')> 
2    <#assign buscar = 'Buscar'/> 
3    <#assign restaurar = 'Restaurar' /> 
4    <#assign quien_eres ='¿Quién eres?' /> 
5    <#assign selecciona_agente = 'Selecciona el agente implicado en la DUM que realizará o impulsará la medida' /> 
6    <#assign objetivos_medida = 'Objetivos de la medida.' /> 
7    <#assign selecciona_objetivos = 'Selecciona uno o varios objetivos' /> 
8    <#assign campoObligatorio = 'Este campo es obligatorio para la búsqueda.' /> 
9</#if> 
10<#if (themeDisplay.getLanguageId() == 'ca_ES')> 
11    <#assign buscar = 'Cercar'/>   
12    <#assign restaurar = 'Restaurar' /> 
13    <#assign quien_eres = 'Qui ets?' /> 
14    <#assign selecciona_agente = "Selecciona l’agent implicat en la DUM que durà a terme o impulsarà la mesura" /> 
15    <#assign objetivos_medida = 'Objectius de la mesura.' /> 
16    <#assign selecciona_objetivos = 'Seleccionar entre un o varis objectius.' /> 
17    <#assign campoObligatorio = 'Aquest camp és obligatori per a la cerca.' /> 
18</#if> 
19<#if entries?has_content> 
20<#assign nameCategory = "" > 
21 
22<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
23<section class="ficha-dum">  
24<div class="container-filtros-dum"> 
25  <div class="container"> 
26    <form id="buscadorFilters"> 
27      <div class="head"> 
28        <p class="title"> 
29          <img src="/o/atm-dum/images/icons-dum/user.svg" alt="user" /> 
30          ${quien_eres} 
31        </p> 
32        <p class="subtitle">${selecciona_agente}</p> 
33        <div class="select-agente"> 
34          <select name="agente" id="agente" value="243006" > 
35           <option value=""></option> 
36            <#list entries as entry> 
37                <#assign nameCategory = entry.getTitle(themeDisplay.getLocale())> 
38                <#assign categories = entry.getCategories() /> 
39                <#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(entry.groupId, entry.name) /> 
40                <#if (vocabulary.name == "agent")> 
41                    <@displayCategoriesSelectAgente categories=categories /> 
42                </#if> 
43            </#list> 
44          </select> 
45          <span class="error-msg">${campoObligatorio}</span> 
46        </div> 
47      </div> 
48      <div class="content-width"> 
49        <div class="grid-1"> 
50        <#list entries as entry> 
51            <#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(entry.groupId, entry.name) /> 
52            <#--  ${vocabulary}  --> 
53            <#if (vocabulary.name == "àmbit geografic")> 
54            <#--  ${vocabulary}  --> 
55            <#assign categories = entry.getCategories() /> 
56            <#assign nameCategory = entry.getTitle(themeDisplay.getLocale())> 
57            </#if> 
58        </#list> 
59          <p class="subtitle">${nameCategory}</p> 
60          <div class="container-checkbox"> 
61            <@displayCategoriesCheckboxAmbito categories=categories /> 
62          </div> 
63         
64        </div> 
65        <div class="grid-2"> 
66            <p class="subtitle"> 
67            ${objetivos_medida} 
68            <span>${selecciona_objetivos}</span></p> 
69            <#list entries as entry> 
70                <#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(entry.groupId, entry.name) /> 
71                <#if (vocabulary.name == "impacte positiu")> 
72                <#--  <#if (entry.vocabularyId == 279320)>  --> 
73                <#assign categories = entry.getCategories() /> 
74                </#if> 
75            </#list> 
76            <div class="container-checkbox"> 
77             <@displayCategoriesCheckboxImpacto categories=categories /> 
78            </div> 
79           
80        </div> 
81      </div> 
82    </form> 
83     <div class="container-buttons"> 
84         <button id="sendDatos">${buscar}</button> 
85         <button id="restaurar">${restaurar}</button> 
86      </div> 
87  </div> 
88</div> 
89</section> 
90</#if> 
91<#macro displayCategoriesSelectAgente categories>   
92	<#if categories?has_content>  
93    <#list categories as category> 
94    <option  value="${category.categoryId}">${category.getTitle(themeDisplay.getLocale())}</option> 
95    </#list> 
96    </#if> 
97</#macro> 
98<#macro displayCategoriesCheckboxAmbito categories>   
99	<#if categories?has_content>  
100    <#list categories as category> 
101        <#if (category.categoryId != 243001) && (category.categoryId != 243002)> 
102        <div class="box-checkbox"> 
103            <input value="${category.categoryId}" id="${category.name}" type="checkbox" /> 
104            <label for="${category.name}">${category.getTitle(themeDisplay.getLocale())}</label> 
105        </div> 
106        </#if> 
107    </#list> 
108    </#if> 
109</#macro> 
110<#macro displayCategoriesCheckboxImpacto categories>   
111	<#if categories?has_content>  
112    <#list categories as category> 
113        <div class="box-checkbox"> 
114            <#assign vocabulary = assetVocabularyLocalService.fetchGroupVocabulary(entry.groupId, entry.name) /> 
115             <#--  ${category.name}  --> 
116            <input value="${category.categoryId}" id="${category.name}" type="checkbox" /> 
117            <label for="${category.name}">${category.getTitle(themeDisplay.getLocale())}</label> 
118        </div> 
119    </#list> 
120    </#if> 
121</#macro> 
122 
123 
124 
125<script> 
126var oldURL = ""; 
127 
128var currentURL = window.location.href; 
129if (currentURL != oldURL) { 
130    let arrayFilter = []; 
131    var url = window.location.href 
132    let initIndex = window.location.href.indexOf("?"); 
133    if (window.location.href.indexOf("filterCategoryIds=") != -1) { 
134         
135        let firstIndex = url.indexOf('filterCategoryIds='); 
136        let result = url.slice(firstIndex, url.length); 
137        result = result.replace('filterCategoryIds=', ''); 
138        var numIdsUrl =  result.replace('&operationType=AND', '') 
139        arrayNumID = numIdsUrl.split(",") 
140        console.log(arrayNumID) 
141        arrayNumID.forEach(function(val) { 
142            $('#buscadorFilters .head #agente option[value="'+val+'"]').prop('selected' , true) 
143            $('#buscadorFilters input[value="'+val+'"]').prop('checked' , true) 
144        }); 
145         
146
147    else{ 
148        if (localStorage.getItem("arrayFilterSesion") != null) {  
149            var arrayNumSave = localStorage.getItem("arrayFilterSesion").replaceAll('"', '').replaceAll('[', '').replaceAll(']', '').split(','); 
150            console.log(arrayNumSave) 
151            arrayNumSave.forEach(function(val) { 
152                $('#buscadorFilters .head #agente option[value="'+val+'"]').prop('selected' , true) 
153                $('#buscadorFilters input[value="'+val+'"]').prop('checked' , true) 
154            }); 
155
156
157
158arrayFilter = []; 
159  $("#buscadorFilters").change(function () { 
160    arrayFilter = []; 
161    arrayFilter.push($("option:selected").val()); 
162    $("#buscadorFilters input:checked").each(function () { 
163      arrayFilter.push($(this).val()); 
164    }); 
165    //console.log(arrayFilter); 
166    }); 
167    $("#sendDatos").click(function(){ 
168        if($('select#agente').val() != ''){ 
169            if(window.location.href.indexOf("?") != -1){ 
170                window.location = window.location.href.slice(0,window.location.href.indexOf("?")) +'?filterCategoryIds=' +arrayFilter + '&operationType=AND'; 
171                     
172            }else{ 
173                window.location = window.location.href +'?filterCategoryIds=' + arrayFilter + '&operationType=AND'; 
174
175            localStorage.setItem('arrayFilterSesion', JSON.stringify(arrayFilter));     
176        }else{ 
177            $('.error-msg').addClass('active') 
178
179    }) 
180    $('select#agente').change(function () { 
181        if($(this).val() != ''){ 
182            $('.error-msg').removeClass('active') 
183
184        else{ 
185            $('.error-msg').addClass('active') 
186
187    }) 
188 
189    $("#restaurar").click(function(){ 
190        localStorage.clear('arrayFilterSesion') 
191    if(window.location.href.indexOf("?") != -1){ 
192            window.location = window.location = window.location.href.slice(0,window.location.href.indexOf("?")) 
193                 
194        }else{ 
195            window.location = window.location.href 
196
197 
198    }) 
199 
200</script> 
201<style> 
202.grid-1 .container-checkbox{ 
203    display:flex; 
204    flex-direction:column; 
205
206.content-width .grid-1 .box-checkbox { 
207    margin: 5px 0px!important; 
208
209#buscadorFilters .head .select-agente{ 
210    display: flex; 
211    align-items: center; 
212    flex-wrap:wrap; 
213    max-width:100%!important; 
214
215#buscadorFilters .head #agente{ 
216    max-width:500px; 
217
218.error-msg{ 
219    padding-left: 10px; 
220    color: #d30101; 
221    font-size: 16px; 
222    font-weight: 600; 
223    display:none; 
224    background: transparent!important; 
225
226.error-msg.active{ 
227    display:block !important; 
228
229#buscadorFilters .grid-2 .container-checkbox, 
230.container-checkbox{ 
231    min-height:180px; 
232
233 
234</style>