Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> vr  [in template "20523#20561#332719" at line 10, column 6]

----
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: vr = vr  [in template "20523#20561#332719" at line 10, column 1]
----
1<#assign 
2aui = PortletJspTagLibs["/META-INF/liferay-aui.tld"] 
3liferay_portlet = PortletJspTagLibs["/META-INF/liferay-portlet-ext.tld"] 
4liferay_security = PortletJspTagLibs["/META-INF/liferay-security.tld"] 
5liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] 
6liferay_ui = PortletJspTagLibs["/META-INF/liferay-ui.tld"] 
7liferay_util = PortletJspTagLibs["/META-INF/liferay-util.tld"] 
8portlet = PortletJspTagLibs["/META-INF/liferay-portlet.tld"] 
9getterUtil = getterUtil 
10vr = vr 
11 
12/> 
13 
14<@liferay_theme["defineObjects"]/> 
15<@portlet["defineObjects"]/> 
16 
17<#-- Variablen setzen --> 
18<#if vr?has_content> 
19    <#assign 
20    bis2017 = vr.bis2017 
21    utils = vr.utils2017 
22    ansicht = utils.ansicht 
23    login_url=  getterUtil.getString(themeDisplay.getThemeSetting("header-link-login")) 
24    suchergebnisDienstleistung = bis2017.suchergebnisDienstleistung 
25    suchergebnisEinrichtung = bis2017.suchergebnisEinrichtung 
26    suchergebnisMitarbeiter = bis2017.suchergebnisMitarbeiter 
27    themeDisplay = themeDisplay 
28    renderRequest = renderRequest 
29    renderResponse = renderResponse 
30    plid = themeDisplay.getPlid() 
31    createAccountURL = portletURLFactory.create(renderRequest,"com_liferay_login_web_portlet_LoginPortlet", plid, "RENDER_PHASE") 
32 
33    mitarbeiterShow = "vr-bis-detail-mitarbeiter-show" 
34    einrichtungShow = "vr-bis-detail-einrichtung-show" 
35    dienstleistungShow = "vr-bis-detail-dienstleistung-show" 
36    /> 
37 
38    ${createAccountURL.setParameter("mvcRenderCommandName", "/login/create_account")} 
39    ${createAccountURL.setParameter("p_p_state", "maximized")} 
40    ${createAccountURL.setParameter("p_p_mode", "view")} 
41 
42 
43    <#assign vsmGebietID = ''> 
44    <#assign eidDescriptionUrl = getterUtil.getString(themeDisplay.getThemeSetting("eid-description-url"))> 
45    <#assign current_url_WithHtml = themeDisplay.getPortalURL()> 
46    <#assign current_uri_WithHtml = themeDisplay.getURLCurrent()> 
47    <#assign currentURL = current_url_WithHtml + current_uri_WithHtml> 
48 
49<#-- Ansicht für Suchergebnisse "bisview-suchergebnis" --> 
50    <#assign searchPortlet = 'p_p_id_19_WAR_vrportlet_'> 
51    <#assign searchPortletNumber = '18'> 
52 
53    <#assign searchBase = 'searchbox'> 
54    <#assign searchInputComboBox = 'sucheInputFieldBorder'> 
55    <#assign searchForm = 'searchForm'> 
56    <#assign searchInput = 'sucheInputField'> 
57    <#assign searchResultBox = 'searchBoxResult'> 
58    <#assign searchResultDLGroup = 'mainCategoryDL'> 
59    <#assign searchResultMBGroup = 'mainCategoryMB'> 
60    <#assign searchResultERGroup = 'mainCategoryER'> 
61 
62    <script> 
63        $(document).ready(function () { 
64            $('.search-wrapper').append($("#${searchBase}")) 
65            $('.searchToRemove').remove() 
66        }) 
67    </script> 
68 
69 
70 
71    <div class="searchToRemove" style="display: none"> 
72        <div id="${searchBase}" class="row"> 
73            <div class="row"> 
74                <div class="col-12 col-sm-12 col-md-12 pt-1"> 
75                    <form id="${searchForm}"> 
76                        <label class="sr-only" for="${searchInput}">Suche</label> 
77                        <div 
78                                class="input-group" 
79                                id="${searchInputComboBox}" 
80                                role="combobox" 
81                                aria-expanded="false" 
82                                aria-owns="${searchResultBox}" 
83                                aria-haspopup="listbox" 
84                                aria-autocomplete="none" 
85
86                            <div class="input-group-prepend " aria-hidden="true"> 
87                                <div class="input-group-text rounded-0" id="sucheInputFieldLabel"><label for="${searchInput}">Suche</label></div> 
88                            </div> 
89                            <input 
90                                    id="${searchInput}" 
91                                    name="searchQuery" 
92                                    type="text" 
93                                    class="form-control rounded-0" 
94                                    autocomplete="off" 
95                                    aria-autocomplete="none" 
96                                    placeholder="Ihr Suchbegriff ..." 
97                                    aria-controls="${searchResultBox}" 
98
99                        </div> 
100                    </form> 
101                    <div id="${searchResultBox}" 
102                         style="display: none;" 
103                         class="card" 
104                         role="listbox" 
105                         aria-label="Suchergebnisse" 
106
107                        <#if vr??> 
108                            <@searchResultGroup groupName='Dienstleistungen'/> 
109                            <@searchResultGroup groupName='Einrichtungen'/> 
110                            <@searchResultGroup groupName='Mitarbeitende'/> 
111                        </#if> 
112                    </div> 
113                </div> 
114            </div> 
115        </div> 
116    </div> 
117 
118    <script> 
119        const searchPortlet = $('#${searchPortlet}'); 
120        const searchPortletInput = $('#form-element-query'); 
121 
122        const searchBase = $('#${searchBase}'); 
123        const searchInputComboBox = $('#${searchInputComboBox}'); 
124        const searchForm =  $('#${searchForm}'); 
125        const searchInput = $('#${searchInput}'); 
126        const searchResult = $('#${searchResultBox}'); 
127        const searchResultDLGroup = $('#${searchResultDLGroup}'); 
128        const searchResultMBGroup = $('#${searchResultMBGroup}'); 
129        const searchResultERGroup = $('#${searchResultERGroup}'); 
130        const resultLinks = '#${searchResultBox} .resultOption'; 
131        const doneTypingInterval = 500; 
132        let typingTimer; 
133 
134        const arrow_keys_handler = function (e) { 
135            switch (e.keyCode) { 
136                case 37: //Arrow 
137                case 39: //Arrow 
138                case 38: //Arrow 
139                case 40: //Arrow 
140                    e.preventDefault(); 
141                    break; // Space 
142                default: 
143                    break; // do not block other keys 
144
145        }; 
146        $(document).ready(function() { 
147            addListener(); 
148            $(document).on('keydown',function(event){ 
149                dropdownListNavigation(event); 
150                let nextFocusItemID = getNextFocusElementId() 
151                if(event.key === "Tab"){ 
152                    if( searchBase.find($(':focus')).length === 1) { 
153                        if(searchInput[0].id !== nextFocusItemID){ 
154                            //closeDropdown(); 
155
156
157
158                if(event.key === "Enter"){ 
159                    if(searchResult.find($(':focus')).length === 1) { 
160                        event.preventDefault(); 
161                        if(($(':focus').children()[0] !== undefined)){ 
162                            $(':focus').children()[0].click(); 
163
164
165
166 
167            }); 
168        }); 
169 
170        $(document).on('keypress keyup',function(event){ 
171            if(clickHomeInSearchBox(event) || clickEndInSearchBox(event)){ 
172                event.preventDefault(); 
173                return false; 
174
175        }) 
176 
177        searchInput.on("keyup paste", function() { 
178            $('#form-element-query').val(searchInput.val()); 
179            if (searchInput.val().length < 1) { 
180                closeDropdown(); 
181
182        }); 
183 
184        searchInput.on('keydown', function (event) { 
185 
186            if (event.key === "Escape") { 
187                searchInput.val(""); 
188                $('[aria-selected="true"]').removeAttr('aria-selected') 
189                closeDropdown(); 
190
191            if (clickHomeInSearchBox(event)){ 
192                event.preventDefault(); 
193                $(resultLinks)[0].focus() 
194                $('[aria-selected="true"]').removeAttr('aria-selected') 
195                $(resultLinks)[0].attr('aria-selected','true') 
196                return false; 
197
198            if (clickEndInSearchBox(event)){ 
199                event.preventDefault(); 
200                $(resultLinks)[$(resultLinks).length -1].focus() 
201                $('[aria-selected="true"]').removeAttr('aria-selected') 
202                $(resultLinks)[$(resultLinks).length -1].attr('aria-selected','true') 
203                return false; 
204
205            if (event.key === "Enter"){ 
206                event.preventDefault(); 
207                $(resultLinks)[0].focus() 
208                $('[aria-selected="true"]').removeAttr('aria-selected') 
209                $(resultLinks)[0].attr('aria-selected','true') 
210 
211                return false; 
212
213        }); 
214 
215        searchResult.on('keydown',function(event) { 
216            if(searchResult.find($(':focus')).length === 1){ 
217                if (event.key === "Tab") { 
218                    closeDropdown(); 
219
220                if (event.key === "Escape") { 
221                    closeDropdown(); 
222                    $('[aria-selected="true"]').removeAttr('aria-selected') 
223                    searchInput.focus(); 
224
225                if(clickHomeInSearchBox(event)){ 
226                    event.preventDefault(); 
227 
228                    $(resultLinks)[0].focus(); 
229                    $('[aria-selected="true"]').removeAttr('aria-selected') 
230                    $(resultLinks)[0].attr('aria-selected','true') 
231                    return false; 
232
233                if(clickEndInSearchBox(event)){ 
234                    event.preventDefault(); 
235                    $('[aria-selected="true"]').removeAttr('aria-selected') 
236                    $(resultLinks)[$(resultLinks).length -1].focus() 
237                    $(resultLinks)[$(resultLinks).length -1].attr('aria-selected','true') 
238                    return false; 
239
240
241        }); 
242 
243        searchInput.on('keyup', function (event) { 
244            if(event.key === "Enter"){ 
245                event.preventDefault(); 
246                event.key = "ArrowDown" 
247
248            if (event.key === "ArrowDown" || event.key === "ArrowUp" ) { 
249                if (isDropdownHidden() && searchInput.val().length > 1) { 
250                    ajax( 
251                        $(".search-form input").val(), 
252                        function (data) { 
253                            searchResult.empty(); 
254                            searchResult.append($(data).find("#nothing")); 
255                            searchResult.append($(data).find("#mainCategoryDL")); 
256                            searchResult.append($(data).find("#mainCategoryMB")); 
257                            searchResult.append($(data).find("#mainCategoryER")); 
258                            //portlet.find('#searchCombobox').attr('aria-expanded', 'true'); 
259                            //portlet.find('#searchResultList').attr('aria-hidden', 'false'); 
260                        }, 
261                        function(){ 
262                            dropdownListNavigation(event); 
263
264
265
266
267        }); 
268 
269        function getNextFocusElementId(){ 
270            let nextFocusItem = $(':focus').next(); 
271            let nextFocusItemID = undefined 
272            if(nextFocusItem[0] !== undefined && nextFocusItem[0] !== ""){ 
273                nextFocusItemID = nextFocusItem[0].id 
274
275            return nextFocusItemID 
276
277 
278        function dropdownListNavigation(event) { 
279            if(searchBase.find($(':focus')).length === 1){ 
280                if(!isDropdownHidden() && resultListHasContent()){ 
281                    window.addEventListener("keydown", arrow_keys_handler, false); 
282                    let resultItemCount = $(resultLinks).length; 
283                    let currentFocus = searchResult.find($(':focus')); 
284                    let focusId = $(':focus')[0].id; 
285                    let index = getDropdownResultIndex(focusId); 
286                    switch(event.key) { 
287                        case 'ArrowUp': 
288                            dropdownListArrowUp(currentFocus,resultItemCount, index, focusId) 
289                            break; 
290                        case 'ArrowDown': 
291                            dropdownListArrowDown(currentFocus,resultItemCount, index, focusId) 
292                            break; 
293
294
295            }else{ 
296                window.removeEventListener("keydown", arrow_keys_handler, false); 
297
298            return true; 
299
300 
301        function openDropdown() { 
302            searchResult.css('display', 'block'); 
303            searchResult.attr('aria-expanded', 'true'); 
304            searchInputComboBox.attr('aria-expanded', 'true'); 
305
306 
307        function closeDropdown(){ 
308            searchResult.css('display', 'none'); 
309            searchResult.empty(); 
310            searchResult.attr('aria-expanded', 'false'); 
311            searchInputComboBox.attr('aria-expanded', 'false'); 
312            searchInput.attr('aria-activedescendant', ''); 
313            $('[aria-selected="true"]').removeAttr('aria-selected') 
314
315 
316        function isDropdownHidden(){ 
317            return searchInputComboBox.attr('aria-hidden') === "true"; 
318
319 
320        function getDropdownResultIndex(id) { 
321            let returningValue = undefined; 
322            $(resultLinks).each(function (index, item) { 
323                if (item.id === id) { 
324                    returningValue = index; 
325                    return false; 
326
327            }); 
328            return returningValue; 
329
330 
331        function dropdownListArrowUp(currentFocus, resultItemCount, index, focusId){ 
332            $('[aria-selected="true"]').removeAttr('aria-selected') 
333            if(currentFocus.length === 0 || index === 0) { 
334                let link = '#' + $(resultLinks)[resultItemCount - 1].id; 
335                if ($(link).length > 0) { 
336                    $(link).focus(); 
337                    $(link).attr('aria-selected','true') 
338                } else { 
339                    $(resultLinks)[resultItemCount - 1].focus(); 
340                    $(resultLinks)[resultItemCount - 1].attr('aria-selected','true') 
341
342            }else{ 
343                let link = '#' + $(resultLinks)[index-1].id ; 
344                if ($(link).length > 0) { 
345                    $(link).focus(); 
346                    $(link).attr('aria-selected','true') 
347                } else { 
348                    $(resultLinks)[index-1].focus(); 
349                    $(resultLinks)[index-1].attr('aria-selected','true') 
350
351
352            searchInput.attr('aria-activedescendant',focusId); 
353
354        function dropdownListArrowDown(currentFocus, resultItemCount, index, focusId){ 
355            $('[aria-selected="true"]').removeAttr('aria-selected') 
356            if(currentFocus.length === 0 || $(resultLinks)[index+1] === undefined){ 
357                let link = '#' + $(resultLinks)[0].id; 
358                if ($(link).length > 0) { 
359                    $(link).focus(); 
360                    $(link).attr('aria-selected','true') 
361                } else { 
362                    $(resultLinks)[0].focus(); 
363                    $(resultLinks)[0].attr('aria-selected','true') 
364
365            }else{ 
366                let link = '#' + $(resultLinks)[index+1].id; 
367                if ($(link).length > 0) { 
368                    $(link).focus(); 
369                    $(link).attr('aria-selected','true') 
370                } else { 
371                    $(resultLinks)[index+1].focus(); 
372                    $(resultLinks)[index+1].attr('aria-selected','true') 
373
374
375            searchInput.attr('aria-activedescendant',focusId); 
376
377        function addListener() { 
378            searchInput.on("keydown", function (event) { 
379                clearTimeout(typingTimer); 
380            }); 
381            searchInput.on("keyup", function (event) { 
382                clearTimeout(typingTimer); 
383                typingTimer = setTimeout(()=>{ 
384                    postSearchQuery(event, function(){}) 
385                }, doneTypingInterval); 
386            }); 
387
388 
389        function focusInSearchBox() { 
390            return searchBase.find($(':focus')).length === 1; 
391
392 
393        function clickHomeInSearchBox(event) { 
394            return event.keyCode === 36 && focusInSearchBox() && resultListHasContent(); 
395
396 
397        function clickEndInSearchBox(event) { 
398            return event.keyCode === 35 && focusInSearchBox() && resultListHasContent(); 
399
400 
401        function resultListHasContent() { 
402            return $(resultLinks).length > 0 
403
404 
405        function ajax(queryString, successFunction,completeFunction) { 
406 
407            let authToken = Liferay.authToken; 
408            let url3 = "/?p_p_id=${searchPortletNumber}_WAR_vrportlet&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_${searchPortletNumber}_WAR_vrportlet_action=vr-bis-detail-search-submit&p_auth="+authToken 
409            jQuery.ajax({ 
410                url: url2, 
411                data: {query:queryString}, 
412                type: 'POST', 
413                success: successFunction 
414            }).done(completeFunction) 
415
416 
417        function postSearchQuery(e, complete) { 
418            if (![37, 39, 9, 13, 27,38,40,35,36,13].includes(e.keyCode)) { 
419                if (searchInput.val().length > 1) { 
420                    ajax( 
421                        searchInput.val(), 
422                        function (data) { 
423                            searchResult.empty(); 
424                            searchResult.append($(data).find("#${searchResultDLGroup}")); 
425                            searchResult.append($(data).find("#${searchResultERGroup}")); 
426                            searchResult.append($(data).find("#${searchResultMBGroup}")); 
427                            openDropdown(); 
428                        }, 
429                        complete 
430
431
432
433
434 
435    </script> 
436 
437 
438<#------------------------------Einrichtung-----------------------------------> 
439 
440 
441    <#if bis2017.ausgewaehlteEinrichtung??> 
442        <#assign einrichtung = bis2017.ausgewaehlteEinrichtung> 
443        <div id="facilityDetail" class="facility-detail mb-3"> 
444            <div class="row"> <!-- Zwei Spalten --> 
445                <div id="detailsLeft" class="col-md-8 pl"> <!-- Linke Spalte --> 
446                    <div id="infoCard" class="card-base card"> 
447                        <div class="card-header"> 
448                            <h2> 
449                        <span class="sideHeadline" id="seitentitel"> 
450                            ${getFullFacilityName(einrichtung, 'siteTitle')} 
451                        </span> 
452                                <#if einrichtung.typ??> 
453                                    <br/><span style="font-size: small;">${einrichtung.typ}</span> 
454                                </#if> 
455                            </h2> 
456                        </div> 
457                        <div class="card-body"> 
458                            <#if existsAndHasContent(einrichtung.aktuelles!'')> 
459                                <div class=" mb-2 alert alert-info"> 
460                                    <h3 class="">Aktuelles</h3> 
461                                    ${einrichtung.aktuelles} 
462                                </div> 
463                            </#if> 
464 
465                            <#if existsAndHasContent(einrichtung.kurzbezeichnung!'')> 
466                                <h3 class="sr-only">Kurzbezeichnung</h3> 
467                                ${einrichtung.kurzbezeichnung} 
468                            </#if> 
469 
470                            <#if existsAndHasContent(einrichtung.beschreibung!'')> 
471                                <div class="w-100 mb-2"> 
472                                    <h3 class="sr-only">Beschreibung</h3> 
473                                    ${einrichtung.beschreibung} 
474                                </div> 
475                            </#if> 
476 
477                            <#if existsAndHasContent(einrichtung.anschrift)> 
478                                <@createCard 'Anschrift', 'facilityAddress'> 
479                                    <ul class="list-unstyled pl-0" style="list-style: none!important; padding-left: 0 !Important"> 
480                                        <li class=" mb-2" style="font-weight: 700;"> 
481                                            ${getFullFacilityName(einrichtung, 'facility-address-list')} 
482                                        </li> 
483                                        <#if einrichtung.anschrift.strasse?? ||  einrichtung.anschrift.hausnummer?? > 
484                                            <li> 
485                                                <#if einrichtung.anschrift.strasse??>${einrichtung.anschrift.strasse}</#if> 
486                                                <#if einrichtung.anschrift.hausnummer??>${einrichtung.anschrift.hausnummer}</#if> 
487                                            </li> 
488                                        </#if> 
489                                        <#if einrichtung.anschrift.postleitzahl?? || einrichtung.anschrift.ort??> 
490                                            <li> 
491                                                <#if einrichtung.anschrift.postleitzahl??>${einrichtung.anschrift.postleitzahl}</#if> 
492                                                <#if einrichtung.anschrift.ort??>${einrichtung.anschrift.ort}</#if> 
493                                            </li> 
494                                        </#if> 
495                                        <#if einrichtung.anschrift.postfach??> 
496                                            <li class="mt-2"> 
497                                                <p class="m-0"> 
498                                                    <span class="strong">Postfach: </span><br/>${einrichtung.anschrift.getPostfach()} 
499                                                </p> 
500                                            </li> 
501                                        </#if> 
502                                        <#if einrichtung.anschrift.zusatz??> 
503                                            <li class="mt-2"> 
504                                                <p class="m-0"> 
505                                                    <span class="strong">Adresszusatz: </span><br/>${einrichtung.anschrift.getZusatz()} 
506                                                </p> 
507                                            </li> 
508                                        </#if> 
509                                    </ul> 
510                                </@createCard> 
511                            </#if> 
512 
513                            <#if einrichtung.anschrift.verkehrsanbindung?? || einrichtung.anschrift.anfahrtUrl??> 
514                                <@createCollapse 'Verkehrsanbindung','collapseTransportlinks'> 
515                                    <#if einrichtung.anschrift.verkehrsanbindung??> 
516                                        ${einrichtung.anschrift.verkehrsanbindung} 
517                                    </#if> 
518                                    <#if einrichtung.anschrift.anfahrtUrl??> 
519                                        <#list einrichtung.anschrift.anfahrtUrl as url> 
520                                            <a href="${url.uri}" title="${url.titel}">${url.titel}</a> 
521                                        </#list> 
522                                    </#if> 
523                                </@createCollapse> 
524                            </#if> 
525 
526                            <#if existsAndHasContent(einrichtung.barrierefreieErreichbarkeit)> 
527                                <@createCollapse 'Barrierefreie Erreichbarkeit','collapseBarrierFreeAccessibility'> 
528                                    ${einrichtung.barrierefreieErreichbarkeit} 
529                                </@createCollapse> 
530                            </#if> 
531 
532 
533                            <@addOpeninghours einrichtung 'Servicezeiten'/> 
534 
535                            <#if existsAndHasContent(einrichtung.dienstleistungList)> 
536                                <@createCollapse 'Dienstleistungen der Einrichtung','collapseFacilityServiceList'> 
537                                    <ul> 
538                                        <#list einrichtung.dienstleistungList as dienstleistung> 
539                                            <li> 
540                                                <a href="${utils.createRenderUrl(renderResponse, dienstleistungShow, dienstleistung.id)}">${dienstleistung.name}</a> 
541                                            </li> 
542                                        </#list> 
543                                    </ul> 
544                                </@createCollapse> 
545                            </#if> 
546 
547                        </div> 
548                    </div> 
549                </div> 
550                <div id="detailsRight" class="col-md-4" style="overflow: visible"> <!-- Rechte Spalte --> 
551                    <div class="sticky-top"> 
552 
553                        <#if 
554                            existsAndHasContent(einrichtung.telefonnummer!'') || 
555                            existsAndHasContent(einrichtung.faxnummer!'') || 
556                            existsAndHasContent(einrichtung.email!'') 
557
558                            <@createCard 'Kontakt', 'facilityContact'> 
559                                <@createContact einrichtung/> 
560                            </@createCard> 
561                        </#if> 
562 
563                        <#if existsAndHasContent(einrichtung.uebereinrichtung!)> 
564                            <@createCard 'Diese Einrichtung gehört zu', 'uebereinrichtung'> 
565                                <a href="${utils.createRenderUrl(renderResponse, einrichtungShow, einrichtung.uebereinrichtung.id)}">${getFullFacilityName(einrichtung.uebereinrichtung, 'uebereinrichtung')}</a> 
566                            </@createCard> 
567                        </#if> 
568 
569                        <#if existsAndHasContent(einrichtung.untereinrichtungList!)> 
570                            <@createCard 'Zu dieser Einrichtung gehören', 'untereinrichtung'> 
571                                <ul style="padding-left:1.25rem;"> 
572                                    <#list einrichtung.untereinrichtungList as child> 
573                                        <li> 
574                                            <a href="${utils.createRenderUrl(renderResponse, einrichtungShow, child.id)}">${child.name}</a> 
575                                        </li> 
576                                    </#list> 
577                                </ul> 
578                            </@createCard> 
579                        </#if> 
580 
581                        <#if existsAndHasContent(einrichtung.mitarbeiterList!)> 
582                            <@createCard 'Zuständige Kontaktperson', 'ZustaendigeKontaktperson'> 
583                                <ul class="list-unstyled p-0"> 
584                                    <#assign firstLoop = true> 
585                                    <#list einrichtung.mitarbeiterList as mitarbeiter> 
586                                        <li> 
587                                            <#if firstLoop> 
588                                                <#assign firstLoop = false> 
589                                            <#else> 
590                                                <hr class="mb-2" aria-hidden="true"> 
591                                            </#if> 
592                                            <p class="sr-only m-0">Beschreibung der zuständigen Kontaktperson ${mitarbeiter.volleAnsprache()}</p> 
593                                            <@createContact mitarbeiter > 
594                                                <dt class="mb-0 sr-only">Voller Name:</dt> 
595                                                <dd class="mb-0 "><h4 class="h5"><a href="${utils.createRenderUrl(renderResponse, mitarbeiterShow, mitarbeiter.id)}">${mitarbeiter.volleAnsprache()}</a></h4></dd> 
596                                                <#if existsAndHasContent(mitarbeiter.position!'')> 
597                                                    <dt class="mb-0">Position:</dt> 
598                                                    <dd class="mb-0">${mitarbeiter.position}</dd> 
599                                                </#if> 
600                                            </@createContact> 
601                                        </li> 
602                                    </#list> 
603                                </ul> 
604                            </@createCard> 
605                        </#if> 
606 
607                        <#if existsAndSizeGTZero(einrichtung.internetadressen)> 
608                            <@createCard header='Internetadressen' id='Internetadressen'> 
609                                <ul class="list-unstyled" style="padding-top:0 !important;padding-bottom:0 !important;"> 
610                                    <#list einrichtung.internetadressen as link> 
611                                        <li> 
612                                            <a href="${link.uri}" 
613                                               target="${link.neuesFenster?string('_blank','_self')}" 
614
615                                                ${link.titel} 
616                                            </a> 
617                                        </li> 
618                                    </#list> 
619                                </ul> 
620                            </@createCard> 
621                        </#if> 
622                    </div> 
623                </div> 
624            </div> 
625        </div> 
626    </#if> 
627 
628<#-------------------Dienstleistungen--------------------------------------------------------------------------> 
629 
630 
631    <#if bis2017.ausgewaehlteDienstleistung??> 
632        <#assign 
633            dienstleistung = bis2017.ausgewaehlteDienstleistung 
634            textmodul = dienstleistung.textmodul 
635
636 
637        <div id="serviceDetail" class="service-detail mb-3"> 
638            <div class="row"> <!-- Zwei Spalten --> 
639                <div id="detailsLeft" class="col-md-8 pl"> <!-- Linke Spalte --> 
640                    <div id="infoCard" class="card-base card"> 
641                        <div class="card-header"> 
642                            <h2>${dienstleistung.name}</h2> 
643                            <#if dienstleistung.tags??> 
644                                <ul class="p-0" aria-label="Dienstleistungslabel:" style="list-style: none;display: inline-flex;"> 
645                                    <#list dienstleistung.tags as t> 
646                                        <li> 
647                                            <span class="badge badge-secondary my-2">${t.name}</span> 
648                                        </li> 
649                                    </#list> 
650                                </ul> 
651                            </#if> 
652                        </div> 
653                        <div class="card-body"> 
654                            <#if textmodul.kurztext.inhalt??> 
655                                <div class="lead"> 
656                                    <h3 class="sr-only">Kurzbeschreibung</h3> 
657                                    ${textmodul.kurztext.inhalt} 
658                                </div> 
659                            </#if> 
660 
661                            <#if textmodul.volltext.inhalt??> 
662                                <div> 
663                                    <h3 class="sr-only">Beschreibung</h3> 
664                                    ${textmodul.volltext.inhalt} 
665                                </div> 
666                            </#if> 
667                            <@collapseMacro "Rechtsgrundlagen" textmodul.rechtsgrundlagen!"" ""/> 
668                            <@collapseMacro "Unterlagen" textmodul.erforderlicheUnterlagen ""/> 
669                            <@collapseMacro "Fristen" textmodul.fristen ""/> 
670                            <@collapseMacro "Bearbeitungsdauer" textmodul.bearbeitungsdauer ""/> 
671                            <@collapseMacro "Weitere Informationen" textmodul.weiterfuehrendeInformationen ""/> 
672                            <@collapseMacro "Hinweise und Besonderheiten" textmodul.hinweiseBesonderheiten ""/> 
673                            <@collapseMacro "Voraussetzungen"  textmodul.voraussetzungen ""/> 
674                            <@collapseMacro "Verfahrensablauf"  textmodul.verfahrensablauf ""/> 
675                            <@collapseMacro "Rechtsbehelf" textmodul.rechtsbehelf ""/> 
676 
677                            <#if existsAndHasContent(dienstleistung.kostenmodul.beschreibung!'') || 
678                            existsAndHasContent(dienstleistung.kostenmodul.kosten!'')> 
679                                <@createCollapse 'Kosten','collapseKosten'> 
680                                    <@kostenliste /> 
681                                </@createCollapse> 
682                            </#if> 
683                            <#if dienstleistung.zahlungsweisen?? && dienstleistung.zahlungsweisen?has_content> 
684                                 <@createCollapse 'Zahlungsweisen','collapseZahlungsweisen'> 
685                                     <ul class="list-unstyled"> 
686                                         <#list dienstleistung.zahlungsweisen as zahlungsweise> 
687                                             <li>${zahlungsweise.name}</li> 
688                                         </#list> 
689                                     </ul> 
690                                 </@createCollapse> 
691                            </#if> 
692                            <#if dienstleistung.verwandteDienstleistungen?? && dienstleistung.verwandteDienstleistungen?has_content> 
693                                <@createCollapse 'Verwandte Dienstleistungen','collapseVerwandteDienstleistungen'> 
694                                    <ul class="pl-4"> 
695                                        <#list dienstleistung.verwandteDienstleistungen as dl> 
696                                            <li><a href="${utils.createRenderUrl(renderResponse, dienstleistungShow, dl.id)}">${dl.name}</a></li> 
697                                        </#list> 
698                                    </ul> 
699                                </@createCollapse> 
700                            </#if> 
701                        </div> 
702                    </div> 
703                </div> 
704                <div id="detailsRight" class="col-md-4" style="overflow: visible"> <!-- Rechte Spalte --> 
705                    <div class="sticky-top"> 
706                        <!-- TODO--> 
707                        <#assign hasTextmodulFormulare = false> 
708                        <#if textmodul.formulare??> 
709                            <#list textmodul.formulare.weiterfuehrenderLink as formular> 
710                                <#assign hasTextmodulFormulare = true> 
711                            </#list> 
712                        </#if> 
713 
714                        <#if existsAndSizeGTZero(dienstleistung.extensions) || 
715                            existsAndSizeGTZero(dienstleistung.formulare) || 
716                            (dienstleistung.kontaktformularUrl?? && dienstleistung.kontaktformularUrl?has_content) || 
717                            existsAndSizeGTZero(dienstleistung.textmodul.formulare.weiterfuehrenderLink)> 
718                            <#assign hasUsableOptions = false> 
719                            <#assign needsLogin = false> 
720                            <#assign needsEIDLogin = false> 
721                            <div id="onlineServices" class="card-base card"> 
722                                <div class="card-header"> 
723                                    <h3>Onlinedienstleistung</h3> 
724                                </div> 
725                                <div class="card-body"> 
726                                    <ul id="onlineServicesListe"> 
727                                        <#if existsAndHasContent(dienstleistung.extensions!'')> 
728                                            <!--extension --> 
729                                            <#assign userAuthLevel = utils.getAuthLevel(renderRequest)> 
730 
731                                            <#list dienstleistung.extensions as formular> 
732                                                <#if userAuthLevel gte formular.minAuthLevel> 
733                                                    <!--hasUsableOptions --> 
734                                                    <#assign hasUsableOptions = true> 
735                                                <#else> 
736                                                    <#if formular.minAuthLevel lt 2> 
737                                                        <!--needsLogin --> 
738                                                        <#assign needsLogin = true> 
739                                                    <#else> 
740                                                        <!--needsEIDLogin --> 
741                                                        <#assign needsEIDLogin = true> 
742                                                    </#if> 
743                                                </#if> 
744                                            </#list> 
745                                        </#if> 
746                                        <#if existsAndHasContent(dienstleistung.formulare!'')> 
747                                            <!--fs --> 
748                                            <#if dienstleistung.nutzbarAlsGast || (userIsLoggedIn() && !dienstleistung.nutzbarAlsGast)> 
749                                                <!--hasUsableOptions --> 
750                                                <#assign hasUsableOptions = true> 
751                                            <#else> 
752                                                <!--needsLogin --> 
753                                                <#assign needsLogin = true> 
754                                            </#if> 
755                                        </#if> 
756                                        <#if existsAndHasContent(dienstleistung.kontaktformularUrl!'')> 
757                                            <!--kontakt --> 
758                                            <#if dienstleistung.nutzbarAlsGast || (userIsLoggedIn() && !dienstleistung.nutzbarAlsGast)> 
759                                                <!--hasUsableOptions --> 
760                                                <#assign hasUsableOptions = true> 
761                                            <#else> 
762                                                <!--needsLogin --> 
763                                                <#assign needsLogin = true> 
764                                            </#if> 
765                                        </#if> 
766                                        <#if existsAndHasContent(textmodul.formulare!'')> 
767                                            <#list textmodul.formulare.weiterfuehrenderLink as formular> 
768                                                <!--link --> 
769                                                <!--hasUsableOptions --> 
770                                                <#assign hasUsableOptions = true> 
771                                            </#list> 
772                                        </#if> 
773                                        <#if hasUsableOptions> 
774                                            <li class="onlineServicesKategorie" aria-label="<#if !userIsLoggedIn()>Ohne Anmeldung im Portal<#else>Aktuell</#if> nutzbare Dienstleistungen"> 
775                                                <h4 class="sr-only">${userIsLoggedIn()?string('Mit aktueller Anmeldung im Portal nutzbar','Ohne Anmeldung im Portal nutzbar')}</h4> 
776                                                <ul class="onlineServicesKategorieListe"> 
777                                                    <!-- extensions --> 
778                                                    <#if existsAndHasContent(dienstleistung.extensions!'')> 
779                                                        <#assign userAuthLevel = utils.getAuthLevel(renderRequest) /> 
780                                                        <#list dienstleistung.extensions as formular> 
781                                                            <#if userAuthLevel gte formular.minAuthLevel> 
782                                                                <#assign hatGastOptionen = true /> 
783                                                                <li><a href="${formular.uri}" class="btn btn-primary">${formular.titel}</a></li> 
784                                                            </#if> 
785                                                        </#list> 
786                                                    </#if> 
787                                                    <!-- formulare --> 
788                                                    <#if dienstleistung.nutzbarAlsGast || (userIsLoggedIn() && !dienstleistung.nutzbarAlsGast)> 
789                                                        <#if existsAndHasContent(dienstleistung.formulare!'')> 
790                                                            <#list dienstleistung.formulare as formular> 
791                                                                <li><a href="${formular.uri}" class="btn btn-primary">${formular.titel}</a></li> 
792                                                            </#list> 
793                                                        </#if> 
794                                                    </#if> 
795                                                    <!-- textmodul --> 
796                                                    <#if existsAndHasContent(dienstleistung.textmodul.formulare!'')> 
797                                                        <#list dienstleistung.textmodul.formulare.weiterfuehrenderLink as formular> 
798                                                            <li><a href="${formular.uri}" class="btn btn-primary">${formular.titel}</a></li> 
799                                                        </#list> 
800                                                    </#if> 
801                                                    <!-- kontaktformularUrl --> 
802                                                    <#if dienstleistung.nutzbarAlsGast || (userIsLoggedIn() && !dienstleistung.nutzbarAlsGast)> 
803                                                        <#if existsAndHasContent(dienstleistung.kontaktformularUrl!'')> 
804                                                            <li><a href="${dienstleistung.kontaktformularUrl}" class="btn btn-primary">Zum Kontaktformular</a></li> 
805                                                        </#if> 
806                                                    </#if> 
807                                                </ul> 
808                                            </li> 
809                                        </#if> 
810                                        <#if needsLogin> 
811                                            <li class="onlineServicesKategorie" aria-label="Mit Anmeldung imPortal nutzbare Dienstleistungen"> 
812                                                <#if hasUsableOptions> <hr> </#if> 
813                                                <h4 class="">Mit Anmeldung im Portal nutzbar</h4> 
814                                                <ul class="onlineServicesKategorieListe"> 
815                                                    <#if existsAndHasContent(dienstleistung.extensions!'')> 
816                                                        <#assign userAuthLevel = utils.getAuthLevel(renderRequest) /> 
817                                                        <#list dienstleistung.extensions as formular> 
818                                                            <#if userAuthLevel lt formular.minAuthLevel> 
819                                                                <#if formular.minAuthLevel == 1> 
820                                                                    <li><a ${createLoginURL(formular.uri)} class="btn btn-primary">${formular.titel}</a></li> 
821                                                                </#if> 
822                                                            </#if> 
823                                                        </#list> 
824                                                    </#if> 
825                                                    <#if !userIsLoggedIn() && !dienstleistung.nutzbarAlsGast> 
826                                                        <#if existsAndHasContent(dienstleistung.formulare!'')> 
827                                                            <#list dienstleistung.formulare as formular> 
828                                                                <li><a ${createLoginURL(formular.uri)} class="btn btn-primary">${formular.titel}</a></li> 
829                                                            </#list> 
830                                                        </#if> 
831                                                    </#if> 
832                                                    <#if !userIsLoggedIn() && !dienstleistung.nutzbarAlsGast> 
833                                                        <#if existsAndHasContent(dienstleistung.kontaktformularUrl!'')> 
834                                                            <li><a ${createLoginURL(dienstleistung.kontaktformularUrl)} class="btn btn-primary">Zum Kontaktformular</a></li> 
835                                                        </#if> 
836                                                    </#if> 
837                                                </ul> 
838                                            </li> 
839                                        </#if> 
840                                        <#if needsEIDLogin> 
841                                            <#if hasUsableOptions || needsLogin> <hr> </#if> 
842                                            <li class="onlineServicesKategorie" aria-label="Mit eID-Anmeldung im Portal nutzbare Dienstleistungen"> 
843                                                <h4 class="">Mit eID im Portal nutzbar</h4> 
844                                                <ul class="onlineServicesKategorieListe"> 
845                                                    <#if existsAndHasContent(dienstleistung.extensions!'')> 
846                                                        <#assign userAuthLevel = utils.getAuthLevel(renderRequest) /> 
847                                                        <#list dienstleistung.extensions as formular> 
848                                                            <#if userAuthLevel lt formular.minAuthLevel> 
849                                                                <#if formular.minAuthLevel gt 1> 
850                                                                    <li><a href="${eidDescriptionUrl}?dlname=${dienstleistung.name}&dlurl=${themeDisplay.getURLCurrent()}" class="btn btn-primary">${formular.titel}</a></li> 
851                                                                </#if> 
852                                                            </#if> 
853                                                        </#list> 
854                                                    </#if> 
855                                                </ul> 
856                                            </li> 
857                                        </#if> 
858                                    </ul> 
859                                </div> 
860                            </div> 
861                        </#if> 
862                        <#if existsAndHasContent(dienstleistung.dokumentList!)> 
863                            <@createCard 'Downloads','downloads'> 
864                                <ul class="list-unstyled"> 
865                                    <#list dienstleistung.dokumentList as dokument> 
866                                        <li> 
867                                            <#assign url = renderResponse.createResourceURL() /> 
868                                            ${url.setResourceID("vr-bis-detail-document-download")} 
869                                            ${url.setParameter("id", "${dokument.id}")} 
870                                            <a class="btn btn-primary" 
871                                               href="${url}" 
872                                               aria-label="Download: ${dokument.name}" 
873                                               title="Download: ${dokument.name}" 
874                                               target="_blank" download> 
875                                                <i class="bi bi-file-earmark"></i>${dokument.name} 
876                                            </a> 
877                                        </li> 
878                                    </#list> 
879                                </ul> 
880                            </@createCard> 
881                        </#if> 
882                        <#if existsAndSizeGTZero(dienstleistung.einrichtungList)> 
883                            <@createCard (dienstleistung.einrichtungList?size gt 1)?string('Zuständige Einrichtungen','Zuständige Einrichtung'),'zustaendigeEinrichtungen'> 
884                                <#list dienstleistung.einrichtungList> 
885                                    <ul class="list-unstyled pl-0"> 
886                                        <#items as einrichtung> 
887                                            <li> 
888                                                <dl class="el--contact__list mb-0"> 
889                                                    <dt class="mb-0 sr-only">Name der Einrichtung</dt> 
890                                                    <dd class="mb-0 "><h4 class="h5"><a href="${utils.createRenderUrl(renderResponse, einrichtungShow, einrichtung.id)}">${getFullFacilityName(einrichtung, 'dl-facility-address')}</a></h4></dd> 
891                                                    <#if existsAndHasContent(einrichtung.anschrift!'')> 
892                                                        <dt class="mb-0 sr-only">Anschrift der Einrichtung</dt> 
893                                                        <dd class="mb-0  mb-2"> 
894                                                            <@createAddress einrichtung/> 
895                                                        </dd> 
896                                                    </#if> 
897                                                    <@createContact einrichtung,false/> 
898                                                </dl> 
899                                                <#sep><@getSeperator/></#sep> 
900                                            </li> 
901                                        </#items> 
902                                    </ul> 
903                                </#list> 
904                            </@createCard> 
905                        </#if> 
906                        <#if existsAndHasContent(dienstleistung.mitarbeiterList!)> 
907                            <@createCard (dienstleistung.mitarbeiterList?size gt 1)?string('Zuständige Kontaktperson','Zuständige Kontaktpersonen'),'zustaendigeEinrichtungen'> 
908                                <#list dienstleistung.mitarbeiterList > 
909                                    <ul class="list-unstyled"> 
910                                        <#items as mitarbeiter> 
911                                            <li> 
912                                                <p class="sr-only m-0">Beschreibung der zuständigen Kontaktperson${mitarbeiter.volleAnsprache()}</p> 
913                                                <dl class="el--contact__list"> 
914                                                    <dt class="mb-0 sr-only">Voller Name:</dt> 
915                                                    <dd class="mb-0"> 
916                                                        <h4 class="h5"> 
917                                                            <a href="${utils.createRenderUrl(renderResponse, mitarbeiterShow, mitarbeiter.id)}"> 
918                                                                ${mitarbeiter.volleAnsprache()} 
919                                                            </a> 
920                                                        </h4> 
921                                                    </dd> 
922                                                    <#if existsAndHasContent(mitarbeiter.position!'')> 
923                                                        <dt class="mb-0">Position:</dt> 
924                                                        <dd class="mb-0">${mitarbeiter.position}</dd> 
925                                                    </#if> 
926                                                    <@createContact mitarbeiter, false/> 
927                                                </dl> 
928                                                <#sep><@getSeperator/></#sep> 
929                                            </li> 
930                                        </#items> 
931                                    </ul> 
932                                </#list> 
933                            </@createCard> 
934                        </#if> 
935                        <#if 
936                        existsAndHasContent(textmodul.volltext.weiterfuehrenderLink!'') || 
937                        existsAndHasContent(textmodul.kurztext.weiterfuehrenderLink!'') || 
938                        existsAndHasContent(textmodul.rechtsgrundlagen.weiterfuehrenderLink!'') || 
939                        existsAndHasContent(textmodul.erforderlicheUnterlagen.weiterfuehrenderLink!'') || 
940                        existsAndHasContent(textmodul.voraussetzungen.weiterfuehrenderLink!'') || 
941                        existsAndHasContent(textmodul.verfahrensablauf.weiterfuehrenderLink!'') || 
942                        existsAndHasContent(textmodul.weiterfuehrendeInformationen.weiterfuehrenderLink!'') || 
943                        existsAndHasContent(textmodul.hinweiseBesonderheiten.weiterfuehrenderLink!'') || 
944                        existsAndHasContent(textmodul.rechtsbehelf.weiterfuehrenderLink!'') || 
945                        existsAndHasContent(textmodul.bearbeitungsdauer.weiterfuehrenderLink!'') || 
946                        existsAndHasContent(textmodul.fristen.weiterfuehrenderLink!'')> 
947                            <@createCard 'Weiterführende Links','weiterfuehrendeLinks'> 
948                                <ul class=""> 
949                                    ${linklooper(dienstleistung.textmodul.volltext)} 
950                                    ${linklooper(dienstleistung.textmodul.kurztext)} 
951                                    ${linklooper(dienstleistung.textmodul.rechtsgrundlagen)} 
952                                    ${linklooper(dienstleistung.textmodul.erforderlicheUnterlagen)} 
953                                    ${linklooper(dienstleistung.textmodul.voraussetzungen)} 
954                                    ${linklooper(dienstleistung.textmodul.verfahrensablauf)} 
955                                    ${linklooper(dienstleistung.textmodul.weiterfuehrendeInformationen)} 
956                                    ${linklooper(dienstleistung.textmodul.hinweiseBesonderheiten)} 
957                                    ${linklooper(dienstleistung.textmodul.rechtsbehelf)} 
958                                    ${linklooper(dienstleistung.textmodul.bearbeitungsdauer)} 
959                                    ${linklooper(dienstleistung.textmodul.fristen)} 
960                                </ul> 
961                            </@createCard> 
962                        </#if> 
963                    </div> 
964                </div> 
965            </div> 
966        </div> 
967    </#if> 
968 
969<#---------------Mitarbeiter---------------------------------------------------------> 
970 
971    <#if bis2017.ausgewaehlterMitarbeiter??> 
972        <#assign 
973        mitarbeiter = bis2017.ausgewaehlterMitarbeiter 
974        /> 
975        <div id="employeeDetail" class="employee-detail mb-3"> 
976            <div class="row"> 
977                <div id="detailsLeft" class="col-md-8 pl"> 
978                    <div id="infoCard" class="card-base card"> 
979                        <div class="card-header"> 
980                            <h2>${mitarbeiter.getName()} 
981                                <#if mitarbeiter.position??> 
982                                    <br/><span style="font-size: small;">${mitarbeiter.position}</span> 
983                                </#if> 
984                            </h2> 
985                        </div> 
986 
987                        <div class="card-body"> 
988                            <#if mitarbeiter.beschreibung??> 
989                                <div class="w-100"> 
990                                    <h3 class="sr-only">Beschreibung</h3> 
991                                    ${mitarbeiter.beschreibung} 
992                                </div> 
993                            </#if> 
994                            <#if mitarbeiter.beschreibungIntern??> 
995                                <div class="w-100"> 
996                                    <h3 class="sr-only">Beschreibung Intern</h3> 
997                                    ${mitarbeiter.beschreibungIntern} 
998                                </div> 
999                            </#if> 
1000                            <@addOpeninghours mitarbeiter 'Servicezeiten'/> 
1001 
1002                            <#if existsAndSizeGTZero(mitarbeiter.dienstleistungList)> 
1003                                <@createCard 'Dienstleistungen','employeeServiceList'> 
1004                                   <#list mitarbeiter.dienstleistungList> 
1005                                       <ul> 
1006                                       <#items as dienstleistung> 
1007                                           <li> 
1008                                               <a href="${utils.createRenderUrl(renderResponse, dienstleistungShow, dienstleistung.id)}">${dienstleistung.name}</a> 
1009                                           </li> 
1010                                       </#items> 
1011                                       </ul> 
1012                                   </#list> 
1013                                </@createCard> 
1014                            </#if> 
1015                        </div> 
1016                    </div> 
1017                </div> 
1018                <div id="detailsRight" class="col-md-4" style="overflow: visible"> 
1019                    <div class="sticky-top"> 
1020                        <#if existsAndHasContent(mitarbeiter.telefonnummer!'') || existsAndHasContent(mitarbeiter.mobil!'') || existsAndHasContent(mitarbeiter.faxnummer!'') || existsAndHasContent(mitarbeiter.email!'')> 
1021                              <@createCard 'Kontakt','employeeContact'> 
1022                                  <@createContact mitarbeiter/> 
1023                              </@createCard> 
1024                        </#if> 
1025                        <#if existsAndHasContent(mitarbeiter.portrait!)> 
1026                            <@createCard 'Mitarbeitenden Portrait','employeePortrait'> 
1027                                <img src="${mitarbeiter.portrait}" alt="Mitarbeitenden Portrait"/> 
1028                            </@createCard> 
1029                        </#if> 
1030                        <#if existsAndHasContent(mitarbeiter.einrichtungList!)> 
1031                             <@createCard (mitarbeiter.einrichtungList?size gt 1)?string('Zuständige Einrichtungen','Zuständige Einrichtung'),'employeeAmt'> 
1032                                 <#list mitarbeiter.einrichtungList> 
1033                                     <ul> 
1034                                         <#items  as einrichtung> 
1035                                             <li> 
1036                                                 <a href="${utils.createRenderUrl(renderResponse, einrichtungShow, einrichtung.id)}">${getFullFacilityName(einrichtung, 'employee-facility-list')}</a> 
1037                                                 <#sep><@getSeperator/></#sep> 
1038                                             </li> 
1039                                         </#items> 
1040                                     </ul> 
1041                                 </#list> 
1042                             </@createCard> 
1043                        </#if> 
1044                        <#if existsAndHasContent(mitarbeiter.einrichtungList!'')> 
1045                            <#assign einrichtung = mitarbeiter.einrichtungList[0]> 
1046                            <#if einrichtung.anschrift??> 
1047                                <@createCard 'Anschrift','employeeAnschrift'> 
1048                                    <@createAddress einrichtung> 
1049                                        <dt class="mb-0 sr-only">Name der Einrichtung:</dt> 
1050                                        <dd class="mb-0 ">${getFullFacilityName(einrichtung,'facility-address-list')}</dd> 
1051                                        <#if mitarbeiter.raum?? && mitarbeiter.raum?has_content> 
1052                                            <dt class="mb-0 Raum:">Name der Einrichtung:</dt> 
1053                                            <dd class="mb-0 ">${mitarbeiter.raum}</dd> 
1054                                        </#if> 
1055                                    </@createAddress> 
1056                                </@createCard> 
1057                            </#if> 
1058                        </#if> 
1059                    </div> 
1060                </div> 
1061            </div> 
1062        </div> 
1063    </#if> 
1064</#if> 
1065 
1066<#function getFullFacilityName einrichtung spanClass> 
1067    <#assign 
1068    getFullFacilityNameCounter = 1 
1069    einrichtungsname = '' 
1070    /> 
1071    <#if einrichtung.breadcrumb??> 
1072        <#list einrichtung.breadcrumb as i> 
1073            <#if i.showAlways && i.name != einrichtung.name> 
1074                <#assign 
1075                einrichtungsname = einrichtungsname+' <span class="facility-name-level-'+getFullFacilityNameCounter+' '+spanClass+'">'+i.name+' </span>' 
1076                getFullFacilityNameCounter = getFullFacilityNameCounter+1 
1077                /> 
1078            </#if> 
1079        </#list> 
1080    </#if> 
1081    <#if einrichtungsname == ''> 
1082        <#assign einrichtungsname = '<span class="facility-name-level-1 '+spanClass+'">'+einrichtung.name+'</span>' /> 
1083    <#else> 
1084        <#assign einrichtungsname =   einrichtungsname+'<span class="facility-name-level-'+getFullFacilityNameCounter+' '+spanClass+'">'+einrichtung.name+' </span>' /> 
1085    </#if> 
1086    <#return einrichtungsname /> 
1087</#function> 
1088 
1089<#macro kostenliste> 
1090    <#if existsAndHasContent(dienstleistung.kostenmodul.beschreibung!) ||  existsAndHasContent(dienstleistung.kostenmodul.kosten!)> 
1091        <#if existsAndHasContent(dienstleistung.kostenmodul.kosten!)> 
1092            <#assign showDescription = false /> 
1093            <#list dienstleistung.kostenmodul.kosten as kosten> 
1094                <#if existsAndHasContent(kosten.beschreibung!)> 
1095                    <#assign showDescription = true /> 
1096                </#if> 
1097            </#list> 
1098            <table class="w-100"> 
1099                <thead> 
1100                <tr> 
1101                    <th <#if showDescription> style="width:40%" <#else> style="width:80%" </#if> 
1102                            class="pl-0 pr-2 py-2">Name 
1103                    </th> 
1104                    <th class="p-2 d-none">Typ</th> 
1105                    <th <#if showDescription> style="width:15%" <#else> style="width:20%" </#if> 
1106                            class="p-2">Kosten</th> 
1107                    <#if showDescription> 
1108                        <th class="p-2" style="width:45%">Beschreibung</th> 
1109                    </#if> 
1110                </tr> 
1111                </thead> 
1112                <tbody> 
1113                <#list dienstleistung.kostenmodul.kosten as kosten> 
1114                    <tr> 
1115                        <td class="pl-0 pr-2 py-2">${kosten.name}</td> 
1116                        <td class="p-2 d-none"> 
1117                            <#if kosten.typ?? && kosten.typ?length gt 0> 
1118                                <#assign kostenTypeName = kosten.typ+'' /> 
1119                                ${kostenTypeName?substring(0, 1)?upper_case}${kostenTypeName?substring(1)?lower_case} 
1120                            <#else> 
1121                                <span class="sr-only">Keine Angabe</span> 
1122                            </#if> 
1123                        </td> 
1124                        <td class="p-2"> 
1125                            <#if kosten.isKostenfrei()> 
1126                                kostenfrei 
1127                            <#elseif kosten.isKostenVariabel()> 
1128                                zwischen ${utils.formatCurrency(kosten.von)} und ${utils.formatCurrency(kosten.bis)} EUR 
1129                            <#else> 
1130                                ${utils.formatCurrency(kosten.von)} EUR 
1131                            </#if> 
1132                        </td> 
1133                        <#if showDescription> 
1134                            <td class="p-2"> <#if kosten.beschreibung??> ${kosten.beschreibung} </#if></td> 
1135                        </#if> 
1136                    </tr> 
1137                </#list> 
1138                </tbody> 
1139            </table> 
1140        </#if> 
1141        ${dienstleistung.kostenmodul.beschreibung} 
1142    </#if> 
1143</#macro> 
1144 
1145<#macro collapseMacro title modul links> 
1146    <#if modul.inhalt?? && modul.inhalt?has_content> 
1147        <#assign collapseId = title?replace(" ", "")?replace('&','')?replace('§','') /> 
1148        <@createCollapse title,"collapse${collapseId}"> 
1149            ${modul.inhalt} 
1150        </@createCollapse> 
1151    </#if> 
1152</#macro> 
1153 
1154<#function getLabelName dienstleistung pathName default > 
1155<#-- <#if dienstleistung.labels?? && dienstleistung.labels?has_content> 
1156     ${dienstleistung.labels?size} 
1157     <#if dienstleistung.labels.getOrDefault(pathName, default)?? && dienstleistung.labels.getOrDefault(pathName, default)?has_content> 
1158         <#return dienstleistung.labels.getOrDefault(pathName, default) /> 
1159     </#if> 
1160 <#else>--> 
1161    <#return default> 
1162<#-- </#if>--> 
1163</#function> 
1164 
1165<#function linklooper linkList> 
1166    <#assign 
1167    value = "" 
1168    class = "" 
1169    target = "" 
1170    /> 
1171    <#if linkList??> 
1172        <#list linkList.weiterfuehrenderLink as link> 
1173            <#assign 
1174            value = value + "<li><a href='${link.uri}' title='${link.titel}' class='${class}' target='${link.neuesFenster?string('_blank','_self')}'>${link.titel}</a></li>"/> 
1175        </#list> 
1176    </#if> 
1177    <#return value> 
1178</#function> 
1179 
1180<#function createLoginURL destination> 
1181    <#assign 
1182    login_url1_WithHtml = 'href="'+ login_url +'?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=0&_com_liferay_login_web_portlet_LoginPortlet_redirect=' 
1183    login_url2_WithHtml = '" rel="nofollow" data-redirect="true"' 
1184    login_url_WithHtml = login_url1_WithHtml + destination + login_url2_WithHtml 
1185    /> 
1186    <#return login_url_WithHtml /> 
1187</#function> 
1188 
1189 
1190<#macro portletSearch> 
1191    <script> 
1192        $(document).ready( function() { 
1193            const trigger = $('.search-detail'); 
1194 
1195            $('html').click(function() { 
1196                console.log("hide") 
1197            }); 
1198 
1199            $(trigger).click(function(event){ 
1200                console.log("EGAL!") 
1201                event.stopPropagation(); 
1202            }); 
1203        }); 
1204    </script> 
1205 
1206    <script> 
1207        $(document).ready(function () { 
1208            $(".search-placeholder").append(jQuery(".search-area").parent().parent()); 
1209            $(".search-placeholder").append(jQuery("#wait")); 
1210            $(".search-placeholder").append(jQuery("#resp").parent()); 
1211        }); 
1212 
1213        $('#co').submit(function (evt) { 
1214            evt.preventDefault(); 
1215        }); 
1216    </script> 
1217    <div id="search-dropdown" <#if !bis2017.ausgewaehlteDienstleistung?? || !bis2017.ausgewaehlteEinrichtung?? || !bis2017.ausgewaehlterMitarbeiter??> style="display: none !important" </#if>> 
1218        <div id="resp"> 
1219            <#if vr??> 
1220                <script> 
1221                    $(".search-placeholder").addClass("search-with-results"); 
1222                    $("#form-element-query").keyup(function () { 
1223 
1224                        if (!this.value) { 
1225                            $(".search-placeholder.search").removeClass("search-with-results"); 
1226
1227 
1228                    }); 
1229                </script> 
1230                <div class="row mt-3"> 
1231                    <div class="col-12"> 
1232                        <div class="search-detail"> 
1233                            <#if bis2017.ausgewaehlteDienstleistung?? && bis2017.ausgewaehlteEinrichtung?? && bis2017.ausgewaehlterMitarbeiter?? && (!dienstleistung) && (!mitarbeiter) && (!einrichtung)> 
1234                                <p>Es gab keine Treffer zu Ihrer Suchanfrage.</p> 
1235                            <#else> 
1236                                <div class="row"> 
1237 
1238                                    <#if suchergebnisDienstleistung??> 
1239                                        <div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-4"> 
1240                                            <h2>Dienstleistungen (${suchergebnisDienstleistung?size}</h2> 
1241                                            <ol> 
1242                                                <#list suchergebnisDienstleistung as i> 
1243                                                    <li class="mb-2"> 
1244                                                        <a href="${utils.getDienstleistungUrl(i.id)}" class="el--search__form__assist__kat__list__item">${i.name}</a> 
1245                                                    </li> 
1246                                                </#list> 
1247                                            </ol> 
1248                                        </div> 
1249                                    </#if> 
1250 
1251                                    <#if suchergebnisEinrichtung??> 
1252                                        <div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-4"> 
1253                                            <h2>Einrichtungen (${suchergebnisEinrichtung?size})</h2> 
1254                                            <ol> 
1255                                                <#list suchergebnisEinrichtung as i> 
1256                                                    <li class="mb-2"> 
1257                                                        <a href="${utils.getEinrichtungUrl(i.id)}" class="el--search__form__assist__kat__list__item">${i.name}</a> 
1258                                                    </li> 
1259                                                </#list> 
1260                                            </ol> 
1261                                        </div> 
1262                                    </#if> 
1263 
1264                                    <#if suchergebnisMitarbeiter??> 
1265                                        <div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-4"> 
1266                                            <h2>Ansprechpartner (${suchergebnisMitarbeiter?size})</h2> 
1267                                            <ol> 
1268                                                <#list suchergebnisMitarbeiter as i> 
1269                                                    <li class="mb-2"> 
1270                                                        <a href="${utils.getMitarbeiterUrl(i.id)}" class="el--search__form__assist__kat__list__item">${i.volleAnsprache()}</a> 
1271                                                    </li> 
1272                                                </#list> 
1273                                            </ol> 
1274                                        </div> 
1275                                    </#if> 
1276                                </div> 
1277                            </#if> 
1278                        </div> 
1279                    </div> 
1280                </div> 
1281            </#if> 
1282        </div> 
1283    </div> 
1284    <div class="search-styling"> 
1285        <div class="card p-4"> 
1286            <div class="search-placeholder search"> 
1287                <h1>Suche</h1> 
1288            </div> 
1289        </div> 
1290    </div> 
1291</#macro> 
1292 
1293<#function createPersoIcon class> 
1294    <#return '<i aria-label="Icon-Elektronischer Personalausweis" class="'+class+'"><img aria-hidden="true"  style="background: white;border-radius: 0.2rem;width: auto;height: 16px;display: inline;vertical-align: baseline;" class="persoIcon '+class+'" src ="/o/bot-theme/images/perso.svg" alt=""/></i>' /> 
1295</#function> 
1296 
1297<#macro externContentLoader headline content contentUrl privacyTitle privacyUrl showButtonText hideButtonText> 
1298    <div class="externContentLoader" aria-hidden="true"> 
1299        <div class="row"> 
1300            <div class="col-12 contentCol"> 
1301                <div class="extern-hide"> 
1302                    ${headline} 
1303                    ${content} 
1304                </div> 
1305                <div class="extern-show d-none"  data-content="${contentUrl}"></div> 
1306            </div> 
1307            <div class="col-6 mt-2"> 
1308                <button class="btn btn-primary load-extern"> 
1309                    ${showButtonText} 
1310                </button> 
1311                <button class="btn btn-primary remove-extern d-none"> 
1312                    ${hideButtonText} 
1313                </button> 
1314            </div> 
1315            <div class="col-6 mt-3 privacyUrl"> 
1316                <a href="${privacyUrl}"> 
1317                    ${privacyTitle} 
1318                </a> 
1319            </div> 
1320        </div> 
1321    </div> 
1322 
1323    <script> 
1324        $(document).ready(function(){ 
1325 
1326            function loadExtern(element,url){ 
1327                $(element).append('<iframe style="height: 100%" src=' + url +' width="100%"></iframe>'); 
1328
1329 
1330            function removeExtern(element){ 
1331                $(element).remove(); 
1332
1333 
1334            function showContent(contentElement,buttonElement){ 
1335                contentElement.removeClass("d-none"); 
1336                buttonElement.removeClass("d-none"); 
1337                contentElement.addClass("d-block"); 
1338                buttonElement.addClass("d-block"); 
1339
1340            function hideContent(contentElement,buttonElement){ 
1341                contentElement.removeClass("d-block"); 
1342                buttonElement.removeClass("d-block"); 
1343                contentElement.addClass("d-none"); 
1344                buttonElement.addClass("d-none"); 
1345
1346            function findClosest(element,toFindElement){ 
1347                return $(element).find(toFindElement); 
1348
1349 
1350            function getParent(element){ 
1351                return $(element).closest(".externContentLoader"); 
1352
1353 
1354            $(".load-extern").on("click",function(){ 
1355                let parent = getParent(this); 
1356                let externShow = findClosest(parent,".extern-show"); 
1357                let externHide = findClosest(parent,".extern-hide"); 
1358                let externShowBtn = $(this); 
1359                let externHideBtn = findClosest(parent,".remove-extern"); 
1360 
1361 
1362                showContent(externShow,externHideBtn); 
1363                hideContent(externHide,externShowBtn); 
1364                loadExtern(externShow,$(externShow).attr("data-content")) 
1365            }) 
1366 
1367            $(".remove-extern").on("click",function(){ 
1368                let parent = getParent(this); 
1369                let externShow = findClosest(parent,".extern-show"); 
1370                let externHide = findClosest(parent,".extern-hide"); 
1371                let externShowBtn = findClosest(parent,".load-extern"); 
1372                let externHideBtn = $(this); 
1373 
1374                hideContent(externShow,externHideBtn); 
1375                showContent(externHide,externShowBtn); 
1376                removeExtern(externShow.children()); 
1377            }) 
1378        }) 
1379    </script> 
1380</#macro> 
1381 
1382<#macro searchResultGroup groupName> 
1383    <#assign searchResult = ''> 
1384    <#assign baseID = ''> 
1385    <#assign idPrefix = ''> 
1386 
1387    <#if groupName == 'Dienstleistungen'> 
1388        <#assign searchResult = suchergebnisDienstleistung> 
1389        <#assign baseID = 'mainCategoryDL'> 
1390        <#assign idPrefix = 'dl'> 
1391    </#if> 
1392    <#if groupName == 'Einrichtungen'> 
1393        <#assign searchResult = suchergebnisEinrichtung> 
1394        <#assign baseID = 'mainCategoryER'> 
1395        <#assign idPrefix = 'er'> 
1396    </#if> 
1397    <#if groupName == 'Mitarbeitende'> 
1398        <#assign searchResult = suchergebnisMitarbeiter> 
1399        <#assign baseID = 'mainCategoryMB'> 
1400        <#assign idPrefix = 'mb'> 
1401    </#if> 
1402 
1403    <ul role="group" aria-describedby="${idPrefix}0" id="${baseID}"> 
1404        <li role="presentation" id="${idPrefix}0">${groupName} (<#if searchResult?has_content>${searchResult?size}<#else>0</#if>)</li> 
1405        <#assign hits = searchResult?size /> 
1406        <#if searchResult?has_content> 
1407            <#if searchResult?size gt 0> 
1408                <#list searchResult as item> 
1409                    <#assign showSynonyme = false> 
1410                    <#if groupName == 'Dienstleistungen'> 
1411                        <#assign url = utils.getDienstleistungUrl(item.id)> 
1412                    </#if> 
1413                    <#if groupName == 'Einrichtungen'> 
1414                        <#assign url = utils.getEinrichtungUrl(item.id)> 
1415                    </#if> 
1416                    <#if groupName == 'Mitarbeitende'> 
1417                        <#assign url = utils.getMitarbeiterUrl(item.id)> 
1418                    </#if> 
1419                    <li tabindex="0" role="option" class="result-cell resultOption" id="${idPrefix}${item.id}"> 
1420                        <a id="${idPrefix}Item${item.id}" href="${url}" class="searchListResultItem">${item.name}</a> 
1421                    </li> 
1422                </#list> 
1423            <#else> 
1424                <li tabindex="0" role="option" class="result-cell resultOption" id="${idPrefix}1"> 
1425                    <span class="ml-0">Es gab keine Treffer in dieser Kategorie.</span> 
1426                </li> 
1427            </#if> 
1428        <#else> 
1429            <li tabindex="0" role="option" class="result-cell resultOption" id="${idPrefix}1"> 
1430                <span class="ml-0">Es gab keine Treffer in dieser Kategorie.</span> 
1431            </li> 
1432        </#if> 
1433    </ul> 
1434</#macro> 
1435 
1436 
1437<#function existsAndSizeGTZero element> 
1438    <#return element?? && element?size gt 0 /> 
1439</#function> 
1440 
1441<#function existsAndHasContent element> 
1442    <#return element?? && element?has_content /> 
1443</#function> 
1444 
1445<#macro addOpeninghours base_variable label> 
1446    <#local 
1447    id = 'openinghours' 
1448    headline = label 
1449    body = '' 
1450    serviceZeitenEmpty = true 
1451    /> 
1452    <#if base_variable.servicezeitenStrukturiert?? && base_variable.servicezeitenStrukturiert.tage??> 
1453        <#list base_variable.servicezeitenStrukturiert.tage?values as value> 
1454            <#list value.paare?values as paare> 
1455                <#if paare?? && paare?has_content && paare != '-'> 
1456                    <#local serviceZeitenEmpty = false /> 
1457                    <#break> 
1458                </#if> 
1459            </#list> 
1460            <#if serviceZeitenEmpty == false> 
1461                <#break> 
1462            </#if> 
1463        </#list> 
1464    </#if> 
1465    <#if serviceZeitenEmpty == false> 
1466        <#local body = body + '<table id="serviceTimeTable" class="w-100 mb-4"><thead class=""><tr>'/> 
1467        <#local body = body + '<th style="width: calc(20%)" class="p-2">Wochentag</th>'/> 
1468        <#local body = body + '<th style="width: calc(80% / 2)" class="p-2">Zeitraum 1</th>'/> 
1469        <#local body = body + '<th style="width: calc(80% / 2)" class="p-2">Zeitraum 2</th>'/> 
1470        <#local body = body + '</tr></thead><tbody>'/> 
1471 
1472        <#local tagKeys = base_variable.servicezeitenStrukturiert.tage?keys> 
1473        <#local tagNames = base_variable.servicezeitenStrukturiert.tage?values> 
1474 
1475        <#list tagKeys as tagName> 
1476            <#local index = tagKeys?seq_index_of(tagName)> 
1477            <#local tagZeiten = tagNames[index]> 
1478            <#local emptyTag = true /> 
1479            <#list tagZeiten.paare?values as tagZeitenPaar> 
1480                <#if tagZeitenPaar?? && tagZeitenPaar?has_content && tagZeitenPaar != '-' > 
1481                    <#local emptyTag = false /> 
1482                    <#break> 
1483                </#if> 
1484            </#list> 
1485            <#if emptyTag> 
1486            <#else> 
1487                <#if tagName??> 
1488                    <#local 
1489                    tagNameFormated = tagName[0]?upper_case 
1490                    tagNameFormated = tagNameFormated + tagName[1]?lower_case 
1491                    /> 
1492                    <#local body = body + '<tr><td class="p-2">${tagNameFormated}</td>'/> 
1493                    <#local ersterEintraginSpalte = true /> 
1494                    <#local keys =  tagZeiten.paare?keys> 
1495                    <#local values = tagZeiten.paare?values> 
1496 
1497                    <#list keys as key> 
1498                        <#local index = keys?seq_index_of(key)> 
1499                        <#local value = values[index]> 
1500                        <#if key == "VORMITTAGS"> 
1501                            <#if value.getVon()?? && value.getVon()?has_content && value.getBis()?? && value.getBis()?has_content> 
1502                                <#local body = body + '<td class="p-2">${value.getVon()} bis ${value.getBis()} Uhr</td>'/> 
1503                            <#else> 
1504                                <#local body = body + '<td class="p-2"></td>'/> 
1505                            </#if> 
1506                        </#if> 
1507                        <#if key == "NACHMITTAGS"> 
1508                            <#if value.getVon()?? && value.getVon()?has_content && value.getBis()?? && value.getBis()?has_content> 
1509                                <#local body = body + '<td class="p-2">${value.getVon()} bis ${value.getBis()} Uhr</td> '/> 
1510                            <#else> 
1511                                <#local body = body + '<td class="p-2"></td>'/> 
1512                            </#if> 
1513                        </#if> 
1514                    </#list> 
1515                    <#local body = body + '</tr>'/> 
1516                </#if> 
1517            </#if> 
1518        </#list> 
1519        <#local body = body + '</tbody>'/> 
1520        <#local body = body + '</table>'/> 
1521    </#if> 
1522    <#if base_variable.servicezeitenFreitext?has_content> 
1523        <#local body = body + '<p class="servicezeitenFreitext">${base_variable.servicezeitenFreitext}</p>'/> 
1524    </#if> 
1525    <#if body != ''> 
1526        <@createCollapse 'Servicezeiten', 'collapseFacilityOpeningHours'> 
1527            ${body} 
1528        </@createCollapse> 
1529    </#if> 
1530</#macro> 
1531 
1532<#macro createCollapse header id> 
1533        <div class="card-base card"> 
1534            <div class="card-header"> 
1535                <a class="collapsed card-link" data-toggle="collapse" href="#${id}"> 
1536                    <h3><i class="bi bi-chevron-right"></i>${header}</h3> 
1537                </a> 
1538            </div> 
1539            <div id="${id}" class="collapse"> 
1540                <div class="card-body"> 
1541                    <#nested/> 
1542                </div> 
1543            </div> 
1544        </div> 
1545</#macro> 
1546 
1547<#macro createCard header id> 
1548    <div id="${id}" class="base-card card"> 
1549        <div class="card-header"> 
1550            <h3>${header}</h3> 
1551        </div> 
1552        <div class="card-body"> 
1553            <#nested/> 
1554        </div> 
1555    </div> 
1556</#macro> 
1557 
1558<#macro createContact baseVariable withDLWrapper=true> 
1559    <#if withDLWrapper> 
1560        <dl class="el--contact__list list-unstyled pl-0 mb-0"> 
1561    </#if> 
1562    <#nested/> 
1563    <#if existsAndHasContent(baseVariable.telefonnummer!'')> 
1564        <dt class="mb-0">Telefon:</dt> 
1565        <dd class="mb-0"><a href="${createPhoneHref(baseVariable)}">${baseVariable.telefonnummer}</a></dd> 
1566    </#if> 
1567    <#if existsAndHasContent(baseVariable.mobil!'')> 
1568        <dt class="mb-0">Mobil:</dt> 
1569        <dd class="mb-0"><a href="${createPhoneHref(baseVariable)}">${baseVariable.mobil}</a></dd> 
1570    </#if> 
1571    <#if existsAndHasContent(baseVariable.faxnummer!'')> 
1572        <dt class="mb-0">Fax:</dt> 
1573        <dd class="mb-0"><a href="${createFaxHref(baseVariable)}">${baseVariable.faxnummer}</a></dd> 
1574    </#if> 
1575    <#if existsAndHasContent(baseVariable.email!'')> 
1576        <dt class="mb-0">E-Mail:</dt> 
1577        <dd class="mb-0"><a href="${createMailHref(baseVariable)}">${baseVariable.email}</a></dd> 
1578    </#if> 
1579    <#if withDLWrapper> 
1580        </dl > 
1581    </#if> 
1582</#macro> 
1583 
1584<#macro createAddress baseVariable withDLWrapper=true> 
1585    <#if withDLWrapper> 
1586        <dl class="el--contact__list mb-0"> 
1587    </#if> 
1588    <#nested/> 
1589    <#if existsAndHasContent(baseVariable.anschrift.strasse!'') && existsAndHasContent(baseVariable.anschrift.hausnummer!'') > 
1590        <dt class="mb-0 sr-only">Strasse und Hausnummer</dt> 
1591        <dd class="mb-0 ">${baseVariable.anschrift.strasse} ${baseVariable.anschrift.hausnummer}</dd> 
1592    </#if> 
1593 
1594    <#if existsAndHasContent(baseVariable.anschrift.postleitzahl!'') && existsAndHasContent(baseVariable.anschrift.ort!'')> 
1595        <dt class="mb-0 sr-only">PLZ und Ort</dt> 
1596        <dd class="mb-0 ">${baseVariable.anschrift.postleitzahl} ${baseVariable.anschrift.ort}</dd> 
1597    </#if> 
1598 
1599    <#if existsAndHasContent(baseVariable.anschrift.postfach!'') > 
1600        <dt class="mb-0">Postfach:</dt> 
1601        <dd class="mb-0 "><span aria-label="Postfach PLZ und Ort:">${baseVariable.anschrift.postfachPostleitzahl} ${baseVariable.anschrift.postfachOrt}</span></dd> 
1602    </#if> 
1603 
1604    <#if existsAndHasContent(baseVariable.anschrift.zusatz!'') > 
1605        <dt class="mb-0">Adresszusatz:</dt> 
1606        <dd class="mb-0 ">${baseVariable.anschrift.zusatz} </dd> 
1607    </#if> 
1608 
1609    <#if withDLWrapper> 
1610        </dl> 
1611    </#if> 
1612</#macro> 
1613 
1614<#macro getSeperator> 
1615    ${getSeperatorFunc()} 
1616</#macro> 
1617 
1618<#function getSeperatorFunc> 
1619    <#return '<hr class="mb-2" aria-hidden="true">'/> 
1620</#function> 
1621 
1622<#function createPhoneHref baseObject > 
1623    <#return createNumberHref(baseObject.telefonnummer,'tel') /> 
1624</#function> 
1625 
1626<#function createFaxHref baseObject > 
1627    <#return createNumberHref(baseObject.faxnummer,'fax') /> 
1628</#function> 
1629 
1630<#function createMailHref baseObject > 
1631    <#return 'mailto:'+baseObject.email /> 
1632</#function> 
1633 
1634<#function createMobilHref baseObject > 
1635    <#return createNumberHref(baseObject.mobil,'tel' ) /> 
1636</#function> 
1637 
1638<#function createNumberHref baseObject prefix> 
1639    <#local 
1640    phonenumber = baseObject?replace('-','')?replace(' ','')?replace('+49','') 
1641    /> 
1642    <#if phonenumber?index_of('0') == 0> 
1643        <#local 
1644        index = phonenumber?index_of('0') 
1645        index = index + 1 
1646        combinatedPhonenumber = prefix + ":+49" + phonenumber?substring(index) 
1647        /> 
1648    <#else> 
1649        <#local 
1650        combinatedPhonenumber = prefix + ":+49" + phonenumber 
1651        /> 
1652    </#if> 
1653    <#return combinatedPhonenumber /> 
1654</#function> 
1655 
1656<#function userIsLoggedIn> 
1657    <#return utils.angemeldet?? && utils.angemeldet> 
1658</#function>