BIS: Suche und Detail

Fehler bei der Verarbeitung der Vorlage.
The string doesn't match the expected date/time/date-time format. The string to parse was: "2025-09-30T16:15:26". The expected format was: "yyyy-MM-dd'T'HH:mm:ss.SSS".
The nested reason given follows:
Unparseable date: "2025-09-30T16:15:26"

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${value?datetime("yyyy-MM-dd'T'HH:mm:...  [in template "33496#33531#379164" in macro "formatDateTime" at line 560, column 3]
	- Reached through: @formatDateTime mitarbeiter.letzteAen...  [in template "33496#33531#379164" at line 550, column 47]
----
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"] 
9/> 
10 
11<@liferay_theme["defineObjects"]/> 
12<@portlet["defineObjects"]/> 
13 
14<#assign 
15    plid = themeDisplay.getPlid() 
16    createAccountURL = portletURLFactory.create(renderRequest,"com_liferay_login_web_portlet_LoginPortlet", plid,"RENDER_PHASE") 
17    mitarbeiterShow = "vr-bis-detail-mitarbeiter-show" 
18    einrichtungShow = "vr-bis-detail-einrichtung-show" 
19    dienstleistungShow = "vr-bis-detail-dienstleistung-show" 
20/> 
21 
22<#assign 
23    serviceWithLoginIcon = '<svg style="vertical-align: text-bottom;" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" class="bi bi-lock" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8 0a4 4 0 0 1 4 4v2.05a2.5 2.5 0 0 1 2 2.45v5a2.5 2.5 0 0 1-2.5 2.5h-7A2.5 2.5 0 0 1 2 13.5v-5a2.5 2.5 0 0 1 2-2.45V4a4 4 0 0 1 4-4M4.5 7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7zM8 1a3 3 0 0 0-3 3v2h6V4a3 3 0 0 0-3-3"/></svg>' 
24    serviceWithLoginText = 'Diese Dienstleistung erfordert eine Anmeldung über die BundID.' 
25    serviceWithEIDText = 'Diese Dienstleistung erfordert eine Anmeldung mit dem Elektronischen Personalausweis über die BundID.' 
26    serviceWithCostIcon = '<svg style="vertical-align: text-bottom;" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="15" height="15" fill="currentColor" class="bi bi-credit-card" viewBox="0 0 16 16"><path d="M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2zm2-1a1 1 0 0 0-1 1v1h14V4a1 1 0 0 0-1-1zm13 4H1v5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1z"/><path d="M2 10a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1z"/></svg>' 
27    serviceWithCostText = 'Diese Dienstleistung kann Kostenpflichtig sein.' 
28/> 
29 
30${createAccountURL.setParameter("mvcRenderCommandName", "/login/create_account")} 
31${createAccountURL.setParameter("p_p_state", "maximized")} 
32${createAccountURL.setParameter("p_p_mode", "view")} 
33 
34 
35 
36<@addSearch '19'/> 
37<#-- Einrichtung --> 
38<#if vr?has_content> 
39    <#assign 
40        bis2017 = vr.bis2017 
41        utils = vr.utils2017 
42        ansicht = utils.ansicht 
43        suchergebnisDienstleistung = vr.bis2017.suchergebnisDienstleistung 
44        suchergebnisEinrichtung = vr.bis2017.suchergebnisEinrichtung 
45        suchergebnisMitarbeiter = vr.bis2017.suchergebnisMitarbeiter 
46    /> 
47    <#if bis2017.ausgewaehlteEinrichtung??> 
48        <#assign 
49        einrichtung = bis2017.ausgewaehlteEinrichtung 
50        /> 
51    <div class="row"> 
52        <div class="col-12"> 
53 
54            <h1> 
55                <i class="icon-home"></i>&nbsp;${getFullFacilityName3(einrichtung,'facility-name-header-list')} 
56                    <#if einrichtung.kurzbezeichnung?has_content> 
57                        ${einrichtung.kurzbezeichnung} 
58                    </#if> 
59            </h1> 
60            <ul class="breadcrumb pt-0"> 
61                <#list einrichtung.breadcrumb as i> 
62                    <li> 
63                        <a href="${utils.createRenderUrl(renderResponse, 
64                            einrichtungShow, i.id)}">${i.name}</a> 
65                    </li> 
66                </#list> 
67            </ul> 
68 
69            <#if einrichtung.typ?has_content> 
70                <div>${einrichtung.typ}</div> 
71            </#if> 
72            <#if einrichtung.aktuelles?has_content> 
73                <div>${einrichtung.aktuelles}</div> 
74            </#if> 
75            <#if einrichtung.beschreibung?has_content> 
76                <div>${einrichtung.beschreibung}</div> 
77            </#if> 
78        </div> 
79    </div> 
80 
81    <div class="row"> 
82        <div class="col-md-8"> 
83            <#if einrichtung.anschrift?has_content> 
84                <div class="anschrit mb-4"> 
85                    <h2 class="mt-3">Anschrift</h2> 
86                    <p> 
87                        <strong>${einrichtung.anschrift.name}</strong> <br/> 
88                        ${einrichtung.anschrift.strasse} ${einrichtung.anschrift.hausnummer} <br/> 
89                        ${einrichtung.anschrift.postleitzahl} ${einrichtung.anschrift.ort} 
90                    </p> 
91                </div> 
92            </#if> 
93            <h2 class="mt-3">Kontakt</h2> 
94            <p> 
95              <#if einrichtung.telefonnummer?has_content> 
96                    Tel.: ${einrichtung.telefonnummer} <br/> 
97              </#if> 
98              <#if einrichtung.faxnummer?has_content> 
99                    Fax.: ${einrichtung.faxnummer} <br/> 
100              </#if> 
101              <#if einrichtung.email?has_content> 
102                    E-Mail: <a href="mailto:${einrichtung.email}">${einrichtung.email}</a> <br/> 
103              </#if> 
104            </p> 
105            <#if einrichtung.internetadressen?has_content> 
106              <ul class="list-unstyled"> 
107                <#list einrichtung.internetadressen as link> 
108                  <#if link.neuesFenster> 
109                    <li><a href="${link.uri}" title="${link.beschreibung}" target="_blank">${link.titel}</a></li> 
110                  <#else> 
111                    <li><a href="${link.uri}" title="${link.beschreibung}">${link.titel}</a></li> 
112                  </#if> 
113                </#list> 
114              </ul> 
115            </#if> 
116 
117            <#if einrichtung.anschrift?has_content> 
118              <#if einrichtung.anschrift.geokodierung?has_content && einrichtung.anschrift.geokodierung.latitude?has_content && einrichtung.anschrift.geokodierung.longitude?has_content> 
119                    <h2 class="mt-3">Standort</h2> 
120                    <p> 
121                        <a class="btn btn-secondary" 
122                           href="https://www.openstreetmap.org/?mlat=${einrichtung.anschrift.geokodierung.latitude}&mlon=${einrichtung.anschrift.geokodierung.longitude}&zoom=15" 
123                           target="_blank"> 
124                            <i class="icon icon-map-marker"></i>&nbsp;Karte anzeigen 
125                        </a> 
126                    </p> 
127              </#if> 
128 
129              <#if einrichtung.anschrift.verkehrsanbindung?has_content> 
130                    <h2 class="mt-3">Verkehrsanbindung</h2> 
131                    <div>${einrichtung.anschrift.verkehrsanbindung}</div> 
132              </#if> 
133 
134              <#if einrichtung.anschrift.anfahrtUrl?has_content> 
135                    <ul class="list-unstyled"> 
136                      <#list einrichtung.anschrift.anfahrtUrl as url> 
137                            <li><a href="${url.uri}" title="${url.beschreibung}">${url.titel}</a></li> 
138                      </#list> 
139                    </ul> 
140              </#if> 
141            </#if> 
142 
143            <@addOpeninghours einrichtung,getLabelName(einrichtung,'adt.label.einrichtung.oeffnungszeiten','Servicezeiten')/> 
144            <#if einrichtung.dienstleistungList?has_content> 
145                <h2 class="mt-3">Dienstleistungen der Einrichtung</h2> 
146                <ul class="list-unstyled"> 
147                  <#list einrichtung.dienstleistungList as dienstleistung> 
148                        <li> 
149                            <a href="${utils.createRenderUrl(renderResponse, 
150                                dienstleistungShow, dienstleistung.id)}">${dienstleistung.name}</a> 
151                        </li> 
152 
153                  </#list> 
154                </ul> 
155            </#if> 
156 
157            <#if einrichtung.alleDienstleistungList?has_content> 
158                <h2 class="mt-3">Alle Zuständigkeiten</h2> 
159                <ul class="list-unstyled"> 
160                  <#list einrichtung.alleDienstleistungList as dienstleistung> 
161                        <li> 
162                            <a href="${utils.createRenderUrl(renderResponse, 
163                                dienstleistungShow, dienstleistung.id)}">${dienstleistung.name}</a> 
164                        </li> 
165                  </#list> 
166                </ul> 
167            </#if> 
168 
169            <#if einrichtung.uebereinrichtung?has_content> 
170                <h2 class="mt-3">Diese Einrichtung gehört zu</h2> 
171                <p><a href="${utils.createRenderUrl(renderResponse, 
172                    einrichtungShow, einrichtung.uebereinrichtung.id)}">${einrichtung.uebereinrichtung.name}</a></p> 
173            </#if> 
174 
175            <#if einrichtung.untereinrichtungList?has_content> 
176                <h2 class="mt-3">Zu dieser Einrichtung gehören</h2> 
177                <ul class="list-unstyled"> 
178                  <#list einrichtung.untereinrichtungList as child> 
179                        <li> 
180                            <a href="${utils.createRenderUrl(renderResponse, 
181                                einrichtungShow, child.id)}">${child.name}</a> 
182                        </li> 
183                  </#list> 
184                </ul> 
185            </#if> 
186 
187            </div> 
188        <div class="col-md-4"> 
189            <#if einrichtung.mitarbeiterList?has_content> 
190              <div class="card border-secondary"> 
191                <div class="card-header"> 
192                    <h2>Kontaktpersonen</h2> 
193                </div> 
194                <div class="card-body text-secondary"> 
195                    <ul class="list-unstyled"> 
196                      <#list einrichtung.mitarbeiterList as mitarbeiter> 
197                                <li class="mb-2"> 
198                                    <a href="${utils.createRenderUrl(renderResponse, 
199                                    mitarbeiterShow, mitarbeiter.id)}"> 
200                                        ${mitarbeiter.volleAnsprache()} 
201                                    </a><br/> 
202                                    <#if mitarbeiter.position?has_content> 
203                                        <span>${mitarbeiter.position}</span><br/> 
204                                    </#if> 
205                                    <#if mitarbeiter.telefonnummer?has_content> 
206                                        Tel.: ${mitarbeiter.telefonnummer} <br/> 
207                                    </#if> 
208                                    <#if mitarbeiter.faxnummer?has_content> 
209                                        Fax.: ${mitarbeiter.faxnummer} <br/> 
210                                    </#if> 
211                                    <#if mitarbeiter.mobil?has_content> 
212                                        Mobil.: ${mitarbeiter.mobil} <br/> 
213                                    </#if> 
214                                    <#if mitarbeiter.email?has_content> 
215                                        E-Mail: <a href="mailto:${mitarbeiter.email}">${mitarbeiter.email}</a> <br/> 
216                                    </#if> 
217                                </li> 
218                      </#list> 
219                    </ul> 
220                </div> 
221            </div> 
222          </#if> 
223            <p class="small">Letzte Änderung: <@formatDateTime einrichtung.letzteAenderung /> Uhr</p> 
224        </div> 
225    </#if> 
226 
227    <#-- Dienstleistung --> 
228 
229    <#if bis2017.ausgewaehlteDienstleistung??> 
230      <#assign 
231        dienstleistung = bis2017.ausgewaehlteDienstleistung 
232        textmodul = dienstleistung.textmodul 
233      /> 
234      <#assign online = dienstleistung.formulare?has_content || dienstleistung.kontaktformularUrl?has_content || textmodul.formulare.weiterfuehrenderLink?has_content> 
235 
236      <div class="service-detail"> 
237 
238          <div class="row"> 
239              <div class="col-12 mb-3"> 
240                  <h1><i class="icon-tag"></i>&nbsp;${dienstleistung.name}</h1> 
241              </div> 
242          </div> 
243 
244          <div class="row"> 
245 
246              <div class="col-md-8"> 
247                <#if textmodul.kurztext.inhalt?has_content> 
248                    <div class="lead"> 
249                        <@renderTextmodul textmodul.kurztext, "" /> 
250                    </div> 
251                </#if> 
252                <@renderTextmodul textmodul.volltext, "" /> 
253 
254                <@renderTextmodul textmodul.rechtsgrundlagen, "Rechtsgrundlage" /> 
255 
256                <@renderTextmodul textmodul.voraussetzungen, "Vorraussetzungen" /> 
257 
258                <@renderTextmodul textmodul.erforderlicheUnterlagen, "Unterlagen" /> 
259 
260                <@renderTextmodul textmodul.fristen, "Fristen" /> 
261 
262                  <#if dienstleistung.kostenmodul.beschreibung?has_content || dienstleistung.kostenmodul.kosten?has_content> 
263                      <div class="kostenmodul"> 
264                          <h2 class="mt-3">Kosten</h2> 
265                          <#if dienstleistung.kostenmodul.kosten?has_content> 
266                              <ul class="list-unstyled"> 
267                                  <#list dienstleistung.kostenmodul.kosten as kosten> 
268                                      <li> 
269                                          ${kosten.name} 
270                                          <#if !kosten.von?has_content && !kosten.bis?has_content> 
271                                              <td>(kostenfrei)</td> 
272                                          <#elseif kosten.von?has_content && kosten.bis?has_content> 
273                                              <td>(zwischen ${utils.formatCurrency(kosten.von)} 
274                                                  und ${utils.formatCurrency(kosten.bis)} EUR) 
275                                              </td> 
276                                          <#else> 
277                                              <td>(${utils.formatCurrency(kosten.von)} EUR)</td> 
278                                          </#if> 
279                                          <#if kosten.beschreibung?has_content> 
280                                              <td> ${kosten.beschreibung}</td> 
281                                          </#if> 
282                                      </li> 
283                                  </#list> 
284                              </ul> 
285                          </#if> 
286 
287                          <div>${dienstleistung.kostenmodul.beschreibung}</div> 
288                          <@hyperlinks dienstleistung.kostenmodul.weiterfuehrenderLink /> 
289                      </div> 
290                  </#if> 
291 
292            <#if dienstleistung.zahlungsweisen?has_content> 
293              <h2 class="mt-3">Zahlungsweisen</h2> 
294              <ul class="list-unstyled"> 
295                <#list dienstleistung.zahlungsweisen as zahlungsweise> 
296                  <li>${zahlungsweise.name}</li> 
297                </#list> 
298              </ul> 
299            </#if> 
300                  <@renderTextmodul textmodul.bearbeitungsdauer "Bearbeitungsdauer" /> 
301 
302                  <@renderTextmodul textmodul.hinweiseBesonderheiten "Hinweise und Besonderheiten" /> 
303 
304                  <@renderTextmodul textmodul.weiterfuehrendeInformationen "Weitere Informationen" /> 
305 
306                  <@renderTextmodul textmodul.verfahrensablauf "Verfahrensablauf" /> 
307 
308                  <@renderTextmodul textmodul.rechtsbehelf "Rechtsbefehl" /> 
309 
310                  <@renderTextmodul textmodul.zusatzAnWenWenden "An wen wenden" /> 
311 
312                  <@renderTextmodul textmodul.zusatzUrheber "Urheber" /> 
313 
314                  <@addOnlineServicesLeft dienstleistung, renderRequest, 'btn btn-primary btn-large  mb-2 text-left'/> 
315            </div> 
316            <div class="col-md-4"> 
317                <@addOnlineServicesRight dienstleistung, renderRequest, 'btn btn-primary btn-large w-100 mb-2 text-left'/> 
318 
319                  <#if dienstleistung.verwandteDienstleistungen?has_content> 
320                    <div class="card border-secondary"> 
321                        <div class="card-header"> 
322                            <h2>Verwandte Dienstleistungen</h2> 
323                        </div> 
324                        <div class="card-body text-secondary"> 
325                            <ul class="list-unstyled"> 
326                              <#list dienstleistung.verwandteDienstleistungen as dl> 
327                                    <li><a href="${utils.createRenderUrl(renderResponse, 
328                                        dienstleistungShow, dl.id)}">${dl.name}</a></li> 
329                              </#list> 
330                            </ul> 
331                        </div> 
332                    </div> 
333                  </#if> 
334 
335                  <#if dienstleistung.dokumentList?has_content> 
336                    <div class="card border-secondary"> 
337                        <div class="card-header"> 
338                            <h2>Downloads</h2> 
339                        </div> 
340                        <div class="card-body text-secondary"> 
341                            <ul class="list-unstyled"> 
342                              <#list dienstleistung.dokumentList as dokument> 
343                                <li> 
344                                    <#assign url = renderResponse.createResourceURL()> 
345                                  ${url.setResourceID("vr-bis-detail-document-download")} 
346                                    ${url.setParameter("id", "${dokument.id}")} 
347 
348                                  <a href="${url}" title="Download ${dokument.name}" target="_blank" download> 
349                                      ${dokument.name}</a> 
350 
351                                </li> 
352                              </#list> 
353                            </ul> 
354                        </div> 
355                    </div> 
356                  </#if> 
357 
358                  <#if dienstleistung.einrichtungList?has_content> 
359                    <div class="card border-secondary"> 
360                        <div class="card-header"> 
361                          <#if dienstleistung.einrichtungList?size gt 1> 
362                                <h2>Zuständige Einrichtungen</h2> 
363                          <#else> 
364                                <h2>Zuständige Einrichtung</h2> 
365                          </#if> 
366                        </div> 
367                        <#assign i = 0> 
368                          <div class="card-body text-secondary"> 
369                            <p class="card-text"> 
370                              <#list dienstleistung.einrichtungList as einrichtung> 
371                                <#if i lt 1> 
372                                  <b><a href="${utils.createRenderUrl(renderResponse, 
373                                      einrichtungShow, einrichtung.id)}">${getFullFacilityName3(einrichtung,'facility-name-list')}</a></b> 
374                                  <br/> 
375                                  <#if einrichtung.anschrift?has_content> 
376                                            ${einrichtung.anschrift.name}<br/> 
377                                            ${einrichtung.anschrift.strasse} ${einrichtung.anschrift.hausnummer}<br/> 
378                                            ${einrichtung.anschrift.postleitzahl} ${einrichtung.anschrift.ort}<br/> 
379                                  </#if> 
380                                        E-Mail: <a href="mailto:${einrichtung.email}">${einrichtung.email}</a> <br/> 
381 
382                                <#else> 
383                                  <br/><a href="${utils.createRenderUrl(renderResponse, 
384                                  einrichtungShow, einrichtung.id)}">${getFullFacilityName3(einrichtung,'facility-name-list')}</a> 
385                                </#if> 
386                              <#assign i = i + 1> 
387                            </#list> 
388                            </p> 
389                        </div> 
390                    </div> 
391                  </#if> 
392 
393                  <#if dienstleistung.mitarbeiterList?has_content> 
394                    <div class="card border-secondary"> 
395                        <div class="card-header"> 
396                            <h2>Zuständige Kontaktpersonen</h2> 
397                        </div> 
398                        <div class="card-body text-secondary"> 
399                          <#list dienstleistung.mitarbeiterList as mitarbeiter> 
400                                <div class="mb-2"> 
401                                    <a href="${utils.createRenderUrl(renderResponse, 
402                                        mitarbeiterShow, mitarbeiter.id)}"> 
403                                        ${mitarbeiter.volleAnsprache()} 
404                                    </a><br/> 
405                                    <#if mitarbeiter.position?has_content> 
406                                        <span>${mitarbeiter.position}</span><br/> 
407                                    </#if> 
408                                  <#if mitarbeiter.telefonnummer?has_content> 
409                                        Tel.: ${mitarbeiter.telefonnummer} <br/> 
410                                  </#if> 
411                                  <#if mitarbeiter.faxnummer?has_content> 
412                                      Fax.: ${mitarbeiter.faxnummer} <br/> 
413                                  </#if> 
414                                  <#if mitarbeiter.mobil?has_content> 
415                                        Mobil.: ${mitarbeiter.mobil} <br/> 
416                                  </#if> 
417                                  <#if mitarbeiter.email?has_content> 
418                                        E-Mail: <a href="mailto:${mitarbeiter.email}">${mitarbeiter.email}</a> <br/> 
419                                  </#if> 
420                                </div> 
421                          </#list> 
422                        </div> 
423                    </div> 
424                </#if> 
425                <#if 
426                existsAndHasContent(textmodul.volltext.weiterfuehrenderLink!'') || 
427                existsAndHasContent(textmodul.kurztext.weiterfuehrenderLink!'') || 
428                existsAndHasContent(textmodul.rechtsgrundlagen.weiterfuehrenderLink!'') || 
429                existsAndHasContent(textmodul.erforderlicheUnterlagen.weiterfuehrenderLink!'') || 
430                existsAndHasContent(textmodul.voraussetzungen.weiterfuehrenderLink!'') || 
431                existsAndHasContent(textmodul.verfahrensablauf.weiterfuehrenderLink!'') || 
432                existsAndHasContent(textmodul.weiterfuehrendeInformationen.weiterfuehrenderLink!'') || 
433                existsAndHasContent(textmodul.hinweiseBesonderheiten.weiterfuehrenderLink!'') || 
434                existsAndHasContent(textmodul.rechtsbehelf.weiterfuehrenderLink!'') || 
435                existsAndHasContent(textmodul.bearbeitungsdauer.weiterfuehrenderLink!'') || 
436                existsAndHasContent(textmodul.fristen.weiterfuehrenderLink!'')> 
437                <div class="card border-secondary" id="weiterfuehrendeLinks"> 
438                    <div class="card-header"> 
439                        <h2>Weiterführende Informationen</h2> 
440                    </div> 
441                    <div class="card-body text-secondary"> 
442                            <ul class="list-unstyled pl-0"> 
443                                ${linklooper(textmodul.volltext)} 
444                                ${linklooper(textmodul.kurztext)} 
445                                ${linklooper(textmodul.rechtsgrundlagen)} 
446                                ${linklooper(textmodul.erforderlicheUnterlagen)} 
447                                ${linklooper(textmodul.voraussetzungen)} 
448                                ${linklooper(textmodul.verfahrensablauf)} 
449                                ${linklooper(textmodul.weiterfuehrendeInformationen)} 
450                                ${linklooper(textmodul.hinweiseBesonderheiten)} 
451                                ${linklooper(textmodul.rechtsbehelf)} 
452                                ${linklooper(textmodul.bearbeitungsdauer)} 
453                                ${linklooper(textmodul.fristen)} 
454                            </ul> 
455                        </div> 
456                    </div> 
457                </#if> 
458 
459                <p class="small float-right">Letzte Änderung: <@formatDateTime dienstleistung.letzteAenderung /> Uhr</p> 
460            </div> 
461        </div> 
462    </div> 
463    </#if> 
464 
465    <#-- Mitarbeiter --> 
466    <#if bis2017.ausgewaehlterMitarbeiter??> 
467        <#assign 
468            mitarbeiter = bis2017.ausgewaehlterMitarbeiter 
469        /> 
470 
471    <div class="row employee-detail"> 
472        <div class="col-12"> 
473            <h2><i class="icon-user"></i>&nbsp;${mitarbeiter.volleAnsprache()}</h2> 
474        </div> 
475        <div class="col-md-4 order-md-2 order-sm-1"> 
476          <#if mitarbeiter.bildAnzeigenExtern> 
477            <#if mitarbeiter.portrait?has_content> 
478                      <img class="img-thumbnail" src="${mitarbeiter.portrait}" alt="Portrait des Mitarbeiters"/> 
479            </#if> 
480          </#if> 
481        </div> 
482        <div class="col-md-8 order-md-1 order-sm-2"> 
483          <#if mitarbeiter.position?has_content> 
484                <p>${mitarbeiter.position}</p> 
485          </#if> 
486            <#if mitarbeiter.beschreibung?has_content> 
487                <div>${mitarbeiter.beschreibung}</div> 
488            </#if> 
489 
490            <#if mitarbeiter.beschreibungIntern?has_content> 
491                <div>${mitarbeiter.beschreibungIntern}</div> 
492            </#if> 
493 
494            <#if mitarbeiter.amtFachbereich?has_content> 
495                <h2 class="mt-3">Amt/Fachbereich</h2> 
496                <div> 
497                    <a href="${utils.createRenderUrl(renderResponse, 
498                        einrichtungShow, mitarbeiter.amtFachbereich.id)}">${mitarbeiter.amtFachbereich.name}</a> 
499                </div> 
500            </#if> 
501            <#if mitarbeiter.einrichtungList?has_content> 
502                <h2 class="mt-3">Adresse</h2> 
503                <#list mitarbeiter.einrichtungList as einrichtung> 
504                  <#if einrichtung?is_first> 
505                        <p> 
506                            <#if einrichtung.anschrift?has_content> 
507                                <strong> 
508                                    <a href="${utils.createRenderUrl(renderResponse,einrichtungShow, einrichtung.id)}"> 
509                                        ${einrichtung.name} 
510                                    </a> 
511                                </strong> <br/> 
512                                ${einrichtung.anschrift.strasse} ${einrichtung.anschrift.hausnummer} <br/> 
513                                ${einrichtung.anschrift.postleitzahl} ${einrichtung.anschrift.ort} <br/> 
514                            <#else> 
515                                <strong><a href="${utils.createRenderUrl(renderResponse, 
516                                    einrichtungShow, einrichtung.id)}">${getFullFacilityName3(einrichtung,'facility-name-list')}</a></strong> <br/> 
517                            </#if> 
518                            <#if mitarbeiter.raum?has_content> 
519                                Raumnummer: ${mitarbeiter.raum} 
520                            </#if> 
521                          </p> 
522                  </#if> 
523                </#list> 
524            </#if> 
525            <p> 
526                <#if mitarbeiter.telefonnummer?has_content> 
527                    Tel: ${mitarbeiter.telefonnummer} <br/> 
528                </#if> 
529                <#if mitarbeiter.faxnummer?has_content> 
530                    Fax: ${mitarbeiter.faxnummer} <br/> 
531                </#if> 
532                <#if mitarbeiter.mobil?has_content> 
533                    Mobil: ${mitarbeiter.mobil} <br/> 
534                </#if> 
535                <#if mitarbeiter.email?has_content> 
536                    E-Mail: ${mitarbeiter.email} <br/> 
537                </#if> 
538            </p> 
539 
540            <@addOpeninghours mitarbeiter,getLabelName(mitarbeiter,'adt.label.mitarbeiter.oeffnungszeiten','Servicezeiten')/> 
541            <#if mitarbeiter.dienstleistungList?has_content> 
542                <h2>Dienstleistungen</h2> 
543                <ul class="list-unstyled"> 
544                  <#list mitarbeiter.dienstleistungList as dienstleistung> 
545                        <li><a href="${utils.createRenderUrl(renderResponse, 
546                            dienstleistungShow, dienstleistung.id)}">${dienstleistung.name}</a></li> 
547                  </#list> 
548                </ul> 
549            </#if> 
550            <p class="small">Letzte Änderung: <@formatDateTime mitarbeiter.letzteAenderung /> Uhr</p> 
551        </div> 
552    </div> 
553    </#if> 
554</#if> 
555 
556 
557<#-- Macros --> 
558 
559<#macro formatDateTime value> 
560  ${value?datetime("yyyy-MM-dd'T'HH:mm:ss.SSS")?string("dd.MM.yyyy HH:mm")} 
561</#macro> 
562 
563<#macro renderTextmodul modul name=""> 
564  <#if modul.inhalt?has_content> 
565    <#if name?has_content> 
566      <h2 class="mt-3">${name}</h2> 
567    </#if> 
568    <div>${modul.inhalt}</div> 
569      <@hyperlinks modul.weiterfuehrenderLink /> 
570  </#if> 
571</#macro> 
572 
573<#macro hyperlinks list> 
574  <#if list?has_content> 
575    <h4>Weiterführende Informationen</h4> 
576    <ul class="list-unstyled"> 
577      <#list list as link> 
578        <li> 
579          <#if link.neuesFenster> 
580            <a href="${link.uri}" title="${link.beschreibung}" target="_blank"><i class="icon-share-alt"></i>&nbsp; ${link.titel}</a> 
581          <#else> 
582            <a href="${link.uri}" title="${link.beschreibung}"><i class="icon-share-alt"></i>&nbsp; ${link.titel}</a> 
583          </#if> 
584        </li> 
585      </#list> 
586    </ul> 
587  </#if> 
588</#macro> 
589 
590 
591<#macro addOpeninghours base_variable label> 
592    <#local 
593    id = 'openinghours' 
594    headline = label 
595    body = '' 
596    serviceZeitenEmpty = true 
597    /> 
598    <#if base_variable.servicezeitenStrukturiert?? && base_variable.servicezeitenStrukturiert.tage??> 
599        <#list base_variable.servicezeitenStrukturiert.tage?values as value> 
600            <#list value.paare?values as paare> 
601                <#if paare?? && paare?has_content && paare != '-'> 
602                    <#local serviceZeitenEmpty = false /> 
603                    <#break> 
604                </#if> 
605            </#list> 
606            <#if serviceZeitenEmpty == false> 
607                <#break> 
608            </#if> 
609        </#list> 
610    </#if> 
611    <#if serviceZeitenEmpty == false> 
612        <#local body = body + '<h2>${headline}</h2><table id="serviceTimeTable" class=""><thead class=""><tr>'/> 
613        <#local body = body + '<th style="width: calc(20%)" class="">Tag</th>'/> 
614        <#local body = body + '<th style="width: calc(80% / 2)" class="">Zeitraum 1</th>'/> 
615        <#local body = body + '<th style="width: calc(80% / 2)" class="">Zeitraum 2</th>'/> 
616        <#local body = body + '</tr></thead><tbody>'/> 
617 
618        <#local tagKeys = base_variable.servicezeitenStrukturiert.tage?keys> 
619        <#local tagNames = base_variable.servicezeitenStrukturiert.tage?values> 
620 
621        <#list tagKeys as tagName> 
622            <#local index = tagKeys?seq_index_of(tagName)> 
623            <#local tagZeiten = tagNames[index]> 
624            <#local emptyTag = true /> 
625            <#list tagZeiten.paare?values as tagZeitenPaar> 
626                <#if tagZeitenPaar?? && tagZeitenPaar?has_content && tagZeitenPaar != '-' > 
627                    <#local emptyTag = false /> 
628                    <#break> 
629                </#if> 
630            </#list> 
631            <#if emptyTag> 
632            <#else> 
633                <#if tagName??> 
634                    <#local 
635                    tagNameFormated = tagName?substring(0, 1)?upper_case 
636                    tagNameFormated = tagNameFormated + tagName?substring(1)?lower_case 
637                    /> 
638                    <#local body = body + '<tr><td>${tagNameFormated}</td>'/> 
639                    <#local ersterEintraginSpalte = true /> 
640                    <#local keys =  tagZeiten.paare?keys> 
641                    <#local values = tagZeiten.paare?values> 
642 
643                    <#list keys as key> 
644                        <#local index = keys?seq_index_of(key)> 
645                        <#local value = values[index]> 
646                        <#if key == "VORMITTAGS"> 
647                            <#if value.getVon()?? && value.getVon()?has_content && value.getBis()?? && value.getBis()?has_content> 
648                                <#local body = body + '<td class="">${value.getVon()} bis ${value.getBis()} Uhr</td>'/> 
649                            <#else> 
650                                <#local body = body + '<td class=""></td>'/> 
651                            </#if> 
652                        </#if> 
653                        <#if key == "NACHMITTAGS"> 
654                            <#if value.getVon()?? && value.getVon()?has_content && value.getBis()?? && value.getBis()?has_content> 
655                                <#local body = body + '<td class="">${value.getVon()} bis ${value.getBis()} Uhr</td> '/> 
656                            <#else> 
657                                <#local body = body + '<td class=""></td>'/> 
658                            </#if> 
659                        </#if> 
660                    </#list> 
661                    <#local body = body + '</tr>'/> 
662                </#if> 
663            </#if> 
664        </#list> 
665        <#local body = body + '</tbody>'/> 
666        <#local body = body + '</table>'/> 
667    </#if> 
668    <#if base_variable.servicezeitenFreitext?has_content> 
669        <#local body = body + '<p class="servicezeitenFreitext">${base_variable.servicezeitenFreitext}</p>'/> 
670    </#if> 
671    ${body} 
672</#macro> 
673 
674<#function getLabelName(base_variable,pathName,default)> 
675    <#if base_variable.labels?? && base_variable.labels.getOrDefault??> 
676        <#if base_variable.labels.getOrDefault(pathName, default) != ""> 
677            <#return base_variable.labels.getOrDefault(pathName, default)/> 
678        </#if> 
679    <#else> 
680        <#return default /> 
681    </#if> 
682</#function> 
683 
684 
685 
686<#macro addSearch portletNumber> 
687    <#local searchShowHeadline = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-Headline"))/> 
688    <div id="listBoxSearch" class="detail-search"> 
689    <div class="row"> 
690        <div class="vr-details-left search-area searchbar searchLeft col-12 col-lg-12 col-xl-12" id="suchseite"> 
691 
692                <div class="searchbar-inner js-suggestion-anchor"> 
693                    <div class="combobox-wrapper" id="searchBox"> 
694                        <h1 id="searchInputHeader" class="<#if !searchShowHeadline>sr-only</#if>"><label id="searchBoxLabel" for="searchInput" class="">Suche</label></h1> 
695                        <form id="searchform" method="post"> 
696                            <div 
697                                    role="combobox" 
698                                    aria-expanded="false" 
699                                    aria-owns="searchResultList" 
700                                    aria-haspopup="listbox" 
701                                    id="searchCombobox" 
702
703                                <input 
704                                        name="query" 
705                                        type="text" 
706                                        aria-controls="searchResultList" 
707                                        id="searchInput" 
708                                        placeholder="Suche" 
709                                        aria-autocomplete="list" 
710                                        autocomplete="off" 
711                                        class="w-100" 
712                                        aria-busy="false" 
713
714                                <div id="searchInProgress" class="" style="display: none"> 
715                                    <div class="lds-spinner" style=""><div></div><div></div><div></div></div> 
716                                </div> 
717                            </div> 
718                        </form> 
719                        <div id="searchResultContent"> 
720                            <div 
721                                    class="row mx-0" 
722                                    role="listbox" 
723                                    id="searchResultList" 
724                                    aria-label="Suchergebnisse" 
725                                    aria-hidden="true" 
726                                    tabindex="-1" 
727
728                                <#if vr??> 
729                                    <#assign 
730                                    bis2017 = vr.bis2017 
731                                    utils = vr.utils2017 
732                                    suchergebnisDienstleistung = bis2017.suchergebnisDienstleistung 
733                                    suchergebnisEinrichtung = bis2017.suchergebnisEinrichtung 
734                                    suchergebnisMitarbeiter = bis2017.suchergebnisMitarbeiter 
735                                    /> 
736                                    <#if !suchergebnisDienstleistung?? && !suchergebnisEinrichtung?? && !suchergebnisMitarbeiter?? && (!dienstleistung) && (!mitarbeiter) && (!einrichtung)> 
737                                        <ul role="group" class="resultList" aria-labelledby="non" id="nothing"> 
738                                            <li tabindex="0" role="option" class="resultOption" > 
739                                                <span id="non">Es gab keine Treffer.</span> 
740                                            </li> 
741                                        </ul> 
742                                    <#else> 
743                                        <@searchResult13 type='dl' suchergebnisse=suchergebnisDienstleistung/> 
744                                        <@searchResult13 type='mb' suchergebnisse=suchergebnisMitarbeiter /> 
745                                        <@searchResult13 type='er' suchergebnisse=suchergebnisEinrichtung /> 
746                                    </#if> 
747                                </#if> 
748                            </div> 
749                        </div> 
750                    </div> 
751                </div> 
752        </div> 
753    </div> 
754 
755    <script> 
756 
757 
758        const portlet = $('#p_p_id_${portletNumber}_WAR_vrportlet_'); 
759        const searchSection = $('#p_p_id_${portletNumber}_WAR_vrportlet_'); 
760        const search_input = $("#form-element-query"); 
761        const combobox2 = $('#searchCombobox'); 
762        const searchSection2 = $('#searchBox'); 
763        const dropdownList = $("#searchResultList"); 
764        const searchInput = $("#searchInput"); 
765        const searchButton = $("#searchInputButton"); 
766        const resultLinks = '#searchResultList .resultOption'; 
767 
768        const arrow_keys_handler = function (e) { 
769            switch (e.keyCode) { 
770                case 37: 
771                case 39: 
772                case 38: 
773                case 40: 
774                case 13: 
775                    e.preventDefault(); 
776                    break; 
777                default: 
778                    break; 
779
780        }; 
781 
782        $(document).ready(function(){ 
783            addListener(); 
784            const combobox = searchSection.find('.portlet-body'); 
785            const portletBodyOldSearchRow = combobox.find(".row:first") 
786            portletBodyOldSearchRow.attr('aria-hidden', "true"); 
787            portletBodyOldSearchRow.hide(); 
788            searchInput.val(search_input.val()); 
789 
790            searchInput.on("keyup paste", function() { 
791                addFromFakeInputToInput(); 
792            }); 
793 
794            $(document).on('keypress keyup',function(event){ 
795                if(clickHomeInSearchBox(event) || clickEndInSearchBox(event)){ 
796                    event.preventDefault(); 
797                    return false; 
798
799            }) 
800            //key interaction input & button 
801            searchInput.on('keydown', function (event) { 
802                if (event.key === "Escape") { 
803                    searchInput.val(""); 
804                    closeDropdown(); 
805
806                if(clickHomeInSearchBox(event)){ 
807                    event.preventDefault(); 
808                    $(resultLinks)[0].focus() 
809                    return false; 
810
811                if(clickEndInSearchBox(event)){ 
812                    event.preventDefault(); 
813                    $(resultLinks)[$(resultLinks).length -1].focus() 
814                    return false; 
815
816                if (event.key === "Enter"){ 
817                    event.preventDefault(); 
818                    if (!isDropdownHidden()){ 
819                        console.log('enter2') 
820                        $(resultLinks)[0].focus() 
821
822                    return false; 
823
824            }); 
825            searchInput.on('keyup', function (event) { 
826                if (event.key === "ArrowDown" || event.key === "ArrowUp" || event.key === "Enter" ) { 
827                    event.preventDefault(); 
828                    if (isDropdownHidden() && searchInput.val().length > 1) { 
829                        setAriaBusy(true); 
830                        ajax( 
831                            $(".search-form input").val(), 
832                            function (data) { 
833                                dropdownList.empty(); 
834                                dropdownList.append($(data).find("#nothing")); 
835                                dropdownList.append($(data).find("#mainCategoryDL")); 
836                                dropdownList.append($(data).find("#mainCategoryMB")); 
837                                dropdownList.append($(data).find("#mainCategoryER")); 
838                                portlet.find('#searchCombobox').attr('aria-expanded', 'true'); 
839                                portlet.find('#searchResultList').attr('aria-hidden', 'false'); 
840                                setAriaBusy(false); 
841                            }, 
842                            function(){ 
843                                if(event.key === "Enter"){ 
844                                    event.key = "ArrowDown" 
845
846                                dropdownListNavigation(event); 
847
848
849
850
851            }); 
852 
853            //key interaction list box 
854            dropdownList.on('keydown',function(event) { 
855                if(dropdownList.find($(':focus')).length === 1){ 
856                    if (event.key === "Tab") { 
857                        closeDropdown(); 
858
859                    if (event.key === "Escape") { 
860                        closeDropdown(); 
861                        searchInput.focus(); 
862
863                    if(clickHomeInSearchBox(event)){ 
864                        event.preventDefault(); 
865                        $(resultLinks)[0].focus() 
866                        return false; 
867
868                    if(clickEndInSearchBox(event)){ 
869                        event.preventDefault(); 
870                        $(resultLinks)[$(resultLinks).length -1].focus() 
871                        return false; 
872
873
874            }); 
875 
876            $(document).on('keydown',function(event){ 
877                let nextFocusItemID = getNextFocusElementId() 
878                if(event.key === "Tab"){ 
879                    if( searchSection2.find($(':focus')).length === 1 && searchButton[0].id !== nextFocusItemID) { 
880                        if(searchInput[0].id !== nextFocusItemID){ 
881                            //closeDropdown(); 
882
883
884
885                if(event.key === "Enter"){ 
886                    console.log('enter1') 
887                    if(dropdownList.find($(':focus')).length === 1) { 
888                        event.preventDefault(); 
889                        if (!isDropdownHidden()) { 
890                            if (($(':focus').children()[0] !== undefined)) { 
891                                $(':focus').children()[0].click(); 
892
893
894
895
896            }) 
897            $(document).on('keydown',function(event){ 
898                dropdownListNavigation(event); 
899            }); 
900        }); 
901 
902        function dropdownListNavigation(event) { 
903            if(searchSection2.find($(':focus')).length === 1){ 
904                if(!isDropdownHidden() && resultListHasContent()){ 
905                    window.addEventListener("keydown", arrow_keys_handler, false); 
906                    let resultItemCount = $(resultLinks).length; 
907                    let currentFocus = $('#searchResultContent').find($(':focus')); 
908                    let focusId = $(':focus')[0].id; 
909                    let index = getDropdownResultIndex(focusId); 
910                    switch(event.key) { 
911                        case 'ArrowUp': 
912                            dropdownListArrowUp(currentFocus,resultItemCount, index, focusId) 
913                            break; 
914                        case 'ArrowDown': 
915                            dropdownListArrowDown(currentFocus,resultItemCount, index, focusId) 
916                            break; 
917
918
919            }else{ 
920                window.removeEventListener("keydown", arrow_keys_handler, false); 
921
922            return true; 
923
924        function dropdownListArrowUp(currentFocus, resultItemCount, index, focusId){ 
925            if(currentFocus.length === 0 || index === 0) { 
926                let link = '#' + $(resultLinks)[resultItemCount - 1].id; 
927                if ($(link).length > 0) { 
928                    $(link).focus(); 
929                } else { 
930                    $(resultLinks)[resultItemCount - 1].focus(); 
931
932            }else{ 
933                let link = '#' + $(resultLinks)[index-1].id ; 
934                if ($(link).length > 0) { 
935                    $(link).focus(); 
936                } else { 
937                    $(resultLinks)[index-1].focus(); 
938
939
940            searchInput.attr('aria-activedescendant',focusId); 
941
942        function dropdownListArrowDown(currentFocus, resultItemCount, index, focusId){ 
943            if(currentFocus.length === 0 || $(resultLinks)[index+1] === undefined){ 
944                let link = '#' + $(resultLinks)[0].id; 
945                if ($(link).length > 0) { 
946                    $(link).focus(); 
947                } else { 
948                    $(resultLinks)[0].focus(); 
949
950            }else{ 
951                let link = '#' + $(resultLinks)[index+1].id; 
952                if ($(link).length > 0) { 
953                    $(link).focus(); 
954                } else { 
955                    $(resultLinks)[index+1].focus(); 
956
957
958            searchInput.attr('aria-activedescendant',focusId); 
959
960        let typingTimer; 
961        let doneTypingInterval = 500; 
962        function addListener() { 
963            searchInput.on("keydown", function (event) { 
964                clearTimeout(typingTimer); 
965            }); 
966            searchInput.on("keyup", function (event) { 
967                closeDropdown(); 
968                clearTimeout(typingTimer); 
969                typingTimer = setTimeout(()=>{ 
970                    postSearchQuery(event, function(){}) 
971                }, doneTypingInterval); 
972            }); 
973
974        function getNextFocusElementId(){ 
975            let nextFocusItem = $(':focus').next(); 
976            let nextFocusItemID = undefined 
977            if(nextFocusItem[0] !== undefined && nextFocusItem[0] !== ""){ 
978                nextFocusItemID = nextFocusItem[0].id 
979
980            return nextFocusItemID 
981
982        function clickHomeInSearchBox(event) { 
983            return event.keyCode === 36 && focusInSearchBox() && resultListHasContent(); 
984
985        function clickEndInSearchBox(event) { 
986            return event.keyCode === 35 && focusInSearchBox() && resultListHasContent(); 
987
988        function focusInSearchBox() { 
989            return searchSection2.find($(':focus')).length === 1; 
990
991        function resultListHasContent() { 
992            return $(resultLinks).length > 0 
993
994        function isDropdownHidden(){ 
995            return dropdownList.attr('aria-hidden') === "true"; 
996
997        function closeDropdown() { 
998            dropdownList.empty(); 
999            dropdownList.attr('aria-hidden', 'true'); 
1000            combobox2.attr('aria-expanded', 'false'); 
1001
1002        function openDropdown() { 
1003            dropdownList.attr('aria-hidden', 'false'); 
1004
1005        function getDropdownResultIndex(id) { 
1006            let returningValue = undefined; 
1007            $(resultLinks).each(function (index, item) { 
1008                if (item.id === id) { 
1009                    returningValue = index; 
1010                    return false; 
1011
1012            }); 
1013            return returningValue; 
1014
1015        function addFromFakeInputToInput() { 
1016            let value = searchInput.val(); 
1017            search_input.val(value); 
1018            if (value.length < 1) { 
1019                searchInput.attr('aria-activedescendant', ''); 
1020                closeDropdown() 
1021            } else { 
1022
1023
1024        function setAriaBusy(boolean){ 
1025            searchInput.attr('aria-busy', boolean); 
1026            portlet.find('#searchInput').attr('aria-busy', boolean); 
1027            $('#searchInProgress').css('display',boolean?'block':'none') 
1028
1029        function ajax(queryString, successFunction,completeFunction) { 
1030            jQuery.ajax({ 
1031                url: url2, 
1032                data: { 
1033                    query:queryString 
1034                }, 
1035                type: 'POST', 
1036                success: successFunction 
1037 
1038            }).done(completeFunction) 
1039
1040        function postSearchQuery(e, complete) { 
1041            if (![37, 39, 9, 13, 27,38,40,35,36,13].includes(e.keyCode)) { 
1042                if (searchInput.val().length > 1) { 
1043                    setAriaBusy(true); 
1044                    ajax( 
1045                        $(".search-form input").val(), 
1046                        function (data) { 
1047                            dropdownList.empty(); 
1048                            dropdownList.append($(data).find("#nothing")); 
1049                            dropdownList.append($(data).find("#mainCategoryDL")); 
1050                            dropdownList.append($(data).find("#mainCategoryMB")); 
1051                            dropdownList.append($(data).find("#mainCategoryER")); 
1052 
1053                            portlet.find('#searchCombobox').attr('aria-expanded', 'true'); 
1054                            portlet.find('#searchResultList').attr('aria-hidden', 'false'); 
1055                            setAriaBusy(false); 
1056                        }, 
1057                        complete 
1058
1059
1060
1061 
1062
1063    </script> 
1064</#macro> 
1065 
1066<#macro searchResult13 type suchergebnisse> 
1067    <#local 
1068        searchSynonyme = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-DL-Synonyme")) 
1069        searchShowFacility = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-ER")) 
1070        searchFacilityAddress = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-ER-Address")) 
1071        searchShowEmployee = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-MB")) 
1072        searchEmployeeAddress = getterUtil.getBoolean(themeDisplay.getThemeSetting("Search-Show-MB-Address")) 
1073    /> 
1074    <#if type?lower_case == "er"> 
1075        <#assign resultName = "Einrichtungen" /> 
1076    <#elseif type?lower_case == "mb"> 
1077        <#assign resultName = "Mitarbeitende" /> 
1078    <#elseif type?lower_case == "dl"> 
1079        <#assign resultName = "Dienstleistungen" /> 
1080    </#if> 
1081    <#if (type?lower_case == "dl") || 
1082        (type?lower_case == "er" && searchShowFacility) || 
1083        (type?lower_case == "mb" && searchShowEmployee) 
1084
1085    <ul role="group" class="col-12 col-sm-12 col-md-12 col-lg-4  resultList" aria-labelledby="${type}0"  id="mainCategory${type?upper_case}"> 
1086        <li class="" role="presentation" id="${type}0"> 
1087            <#assign hits = suchergebnisse?size /> 
1088            <#if suchergebnisse?size < hits > 
1089                <span aria-hidden="true">${resultName} (${hits})</span> 
1090                <span class="sr-only">${resultName}. Es werden ${suchergebnisse?size} von ${hits} Ergebnissen in der Liste angezeigt. Bitte schränken Sie die Suche weiter ein.</span> 
1091            <#else> 
1092                <span>${resultName} (${hits})</span> 
1093            </#if> 
1094        </li> 
1095        <#if suchergebnisse?size gt 0 > 
1096            <#list suchergebnisse as suchergebnis> 
1097                <#assign 
1098                    details = "" 
1099                /> 
1100                <li tabindex="0" role="option" class="result-cell resultOption" id="${type}${suchergebnis.id}"> 
1101                    <#if type == "ER" || type == "er"> 
1102                        <#assign resultUrl = utils.getEinrichtungUrl(suchergebnis.id) /> 
1103                        <#assign resultTitle = "${getFullFacilityName3(suchergebnis,'facilityName-search')}" /> 
1104                        <#if searchFacilityAddress> 
1105                            <#if suchergebnis.anschrift?has_content> 
1106                                <#assign details = '<span class="details">${suchergebnis.anschrift.anschriftEinzeilig()}</span>'/> 
1107                            </#if> 
1108                        </#if> 
1109                    <#elseif type == "MB" || type == "mb"> 
1110                        <#assign resultUrl = utils.getMitarbeiterUrl(suchergebnis.id) /> 
1111                        <#assign resultTitle = suchergebnis.name /> 
1112                        <#if searchEmployeeAddress> 
1113                            <#assign details = '<span class="details">'/> 
1114                            <#if suchergebnis.telefonnummer?has_content> 
1115                                <#assign details += 'Tel: ${suchergebnis.telefonnummer}'/> 
1116                            </#if> 
1117                            <#if suchergebnis.mobil?has_content> 
1118                                <#assign details += 'Mobil: ${suchergebnis.mobil}'/> 
1119                            </#if> 
1120                            <#if suchergebnis.einrichtung?has_content> 
1121                                <#assign details += 'Einrichtungen: ${suchergebnis.einrichtung}'/> 
1122                            </#if> 
1123                            <#if suchergebnis.beschreibung?has_content> 
1124                                <#assign details += '${suchergebnis.beschreibung}'/> 
1125                            </#if> 
1126                            <#if suchergebnis.beschreibungIntern?has_content> 
1127                                <#assign details += '${suchergebnis.beschreibungIntern}'/> 
1128                            </#if> 
1129                            <#assign details += '</span>'/> 
1130                        </#if> 
1131                    <#elseif type == "DL" || type == "dl"> 
1132                        <#assign resultUrl = utils.getDienstleistungUrl(suchergebnis.id) /> 
1133                        <#assign resultTitle = suchergebnis.name/> 
1134                        <#if searchSynonyme> 
1135                            <#assign details = '<span class="details"><span class="synonyme">${suchergebnis.synonyme}</span></span>'/> 
1136                        </#if> 
1137                    </#if> 
1138                    <a id="${resultName?lower_case}${suchergebnis.id}" href="${resultUrl}" class="cBlue underline">${resultTitle}</a> 
1139                    ${details} 
1140                </li> 
1141            </#list> 
1142            ${restrictSearch5(suchergebnisse?size, hits)} 
1143        <#else> 
1144            <li tabindex="0" role="option" class="result-cell resultOption" id="${type}1">Es gab keine Treffer in dieser Kategorie.</li> 
1145        </#if> 
1146    </ul> 
1147    </#if> 
1148</#macro> 
1149 
1150<#function restrictSearch5  size  hits > 
1151    <#if size < hits> 
1152        <#return "<li><p class='small'><strong>Es werden ${size} von $hits Ergebnissen angezeigt.<br>Bitte Suche weiter einschränken.</strong></p></li>" /> 
1153    </#if> 
1154    <#return ''/> 
1155</#function> 
1156 
1157<#function getFullFacilityName3 einrichtung spanClass > 
1158    <#assign 
1159    counter = 1 
1160    einrichtungsname = '' 
1161    /> 
1162    <#list einrichtung.breadcrumb as i> 
1163        <#if i.showAlways> 
1164            <#assign 
1165            einrichtungsname = einrichtungsname + ' <span class="facility-name-level-' + counter + ' ' + spanClass + '">' + i.name + '</span>' 
1166            counter = counter+1 
1167            /> 
1168        </#if> 
1169    </#list> 
1170    <#if einrichtungsname == ''> 
1171        <#assign einrichtungsname = '<span class="facility-name-level-1 '+spanClass+'">'+einrichtung.name+'</span>' /> 
1172    </#if> 
1173    <#return einrichtungsname /> 
1174</#function> 
1175 
1176 
1177 
1178 
1179 
1180 
1181<#macro addOnlineServices dienstleistung, renderRequest, linkClass=''> 
1182    <#if existsAndSizeGTZero(dienstleistung.extensions) || 
1183    existsAndSizeGTZero(dienstleistung.formulare) || 
1184    (dienstleistung.kontaktformularUrl?? && dienstleistung.kontaktformularUrl?has_content) || 
1185    existsAndSizeGTZero(dienstleistung.textmodul.formulare.weiterfuehrenderLink)> 
1186       <ul class="list-unstyled p-0 m-0"> 
1187           <@addOnlineServiceExtension dienstleistung, renderRequest linkClass/> 
1188           <@addOnlineServiceFS dienstleistung, renderRequest linkClass/> 
1189           <@addOnlineServiceContact dienstleistung, renderRequest linkClass/> 
1190           <@addOnlineLinks dienstleistung, renderRequest linkClass/> 
1191       </ul> 
1192  </#if> 
1193</#macro> 
1194 
1195<#macro addOnlineServicesLeft dienstleistung, renderRequest, linkClass=''> 
1196    <#if existsAndSizeGTZero(dienstleistung.extensions) || 
1197    existsAndSizeGTZero(dienstleistung.formulare) || 
1198    (dienstleistung.kontaktformularUrl?? && dienstleistung.kontaktformularUrl?has_content) || 
1199    existsAndSizeGTZero(dienstleistung.textmodul.formulare.weiterfuehrenderLink)> 
1200        <div class="jumbotron mb-5 mt-3"> 
1201            <h2 class="mb-4">Dienstleistung jetzt online nutzen!</h2> 
1202            <@addOnlineServices dienstleistung, renderRequest, linkClass/> 
1203        </div> 
1204    </#if> 
1205</#macro> 
1206 
1207<#macro addOnlineServicesRight dienstleistung, renderRequest, linkClass=''> 
1208    <#if existsAndSizeGTZero(dienstleistung.extensions) || 
1209    existsAndSizeGTZero(dienstleistung.formulare) || 
1210    (dienstleistung.kontaktformularUrl?? && dienstleistung.kontaktformularUrl?has_content) || 
1211    existsAndSizeGTZero(dienstleistung.textmodul.formulare.weiterfuehrenderLink)> 
1212        <div class="card border-secondary"> 
1213            <div class="card-header"> 
1214                <h2>Onlinedienstleistung</h2> 
1215            </div> 
1216            <div class="card-body text-secondary"> 
1217                <ul class="list-unstyled p-0 m-0"> 
1218                    <@addOnlineServices dienstleistung, renderRequest, linkClass/> 
1219                </ul> 
1220            </div> 
1221        </div> 
1222    </#if> 
1223</#macro> 
1224 
1225<#macro addOnlineServiceExtension dienstleistung, renderRequest, linkClass=''> 
1226    <#if dienstleistung.extensions?has_content> 
1227        <#local 
1228        userAuthLevel = utils.getAuthLevel(renderRequest) 
1229        counter = 0 
1230        /> 
1231        <#list dienstleistung.extensions as formular> 
1232            <li> 
1233                <#if userAuthLevel gte formular.minAuthLevel > 
1234                    <#if userAuthLevel gte formular.minAuthLevel > 
1235                        <#local 
1236                        name = formular.titel 
1237                        title = '' 
1238                        /> 
1239                        <#if formular.paymentSupported> 
1240                            <#local 
1241                            name = serviceWithCostIcon +' '+ name 
1242                            title = serviceWithCostText +' '+  title 
1243                            /> 
1244                        </#if> 
1245                        ${addLink(formular.uri,name,title,true,linkClass)} 
1246                    <#else> 
1247                        <#if formular.minAuthLevel gt 2> 
1248                            <#local 
1249                                name = getEIDIcon(counter,15,15) + ' ' + formular.titel 
1250                                title = serviceWithEIDText 
1251                            /> 
1252                            <#if formular.paymentSupported> 
1253                                <#local 
1254                                name = serviceWithCostIcon +' '+ name 
1255                                title = serviceWithCostText +' '+  title 
1256                                /> 
1257                            </#if> 
1258                            ${addLink(createLoginURL(themeDisplay.getURLCurrent()),name,title,true,linkClass)} 
1259                        <#else> 
1260                            <#local 
1261                            name = serviceWithLoginIcon + ' ' + formular.titel 
1262                            title = serviceWithLoginText 
1263                            /> 
1264                            <#if formular.paymentSupported> 
1265                                <#local 
1266                                name = serviceWithCostIcon +' '+ name 
1267                                title = serviceWithCostText +' '+  title 
1268                                /> 
1269                            </#if> 
1270                            ${addLink(createLoginURL(themeDisplay.getURLCurrent()),title,serviceWithLoginText,true,linkClass)} 
1271                        </#if> 
1272                    </#if> 
1273                </#if> 
1274            </li> 
1275            <#local counter += 1/> 
1276        </#list> 
1277    </#if> 
1278</#macro> 
1279 
1280<#macro addOnlineServiceFS dienstleistung, renderRequest, linkClass=''> 
1281    <#if dienstleistung.formulare?has_content> 
1282        <li> 
1283            <#list dienstleistung.formulare as formular> 
1284                <#if !utils.angemeldet && !dienstleistung.nutzbarAlsGast> 
1285                    <#local 
1286                    href ="${createLoginURL(formular.uri)}" 
1287                    title = serviceWithLoginText 
1288                    name ="${serviceWithLoginIcon} ${formular.titel}" 
1289                    /> 
1290                <#else> 
1291                    <#local 
1292                    href = "${formular.uri}" 
1293                    title = '' 
1294                    name = "${formular.titel}" 
1295                    /> 
1296                </#if> 
1297                ${addLink(href,name,title,true,linkClass)} 
1298            </#list> 
1299        </li> 
1300    </#if> 
1301</#macro> 
1302 
1303<#macro addOnlineServiceContact dienstleistung, renderRequest, linkClass=''> 
1304    <#if dienstleistung.kontaktformularUrl?has_content> 
1305        <li> 
1306            <#if !utils.angemeldet && !dienstleistung.nutzbarAlsGast> 
1307                <#local 
1308                href ="${createLoginURL(dienstleistung.kontaktformularUrl)}" 
1309                title = serviceWithLoginText 
1310                name ="${serviceWithLoginIcon} Zum Kontaktformular" 
1311                /> 
1312 
1313            <#else> 
1314                <#local 
1315                href ="${dienstleistung.kontaktformularUrl}" 
1316                title = '' 
1317                name ="Zum Kontaktformular" 
1318                /> 
1319            </#if> 
1320            ${addLink(href,name,title,true,linkClass)} 
1321        </li> 
1322    </#if> 
1323</#macro> 
1324 
1325<#macro addOnlineLinks dienstleistung, renderRequest, linkClass=''> 
1326    <#if dienstleistung.textmodul.formulare.weiterfuehrenderLink?has_content> 
1327        <#list dienstleistung.textmodul.formulare.weiterfuehrenderLink as formular> 
1328            <li> 
1329                <#if !utils.angemeldet && !dienstleistung.nutzbarAlsGast> 
1330                    <#local 
1331                    href ="${createLoginURL(themeDisplay.getURLCurrent())}" 
1332                    title = serviceWithLoginText 
1333                    name ="${serviceWithLoginIcon} ${formular.titel}" 
1334                    /> 
1335                <#else> 
1336                    <#local 
1337                    href ="${formular.uri}" 
1338                    title = '' 
1339                    name ="${formular.titel}" 
1340                    /> 
1341                </#if> 
1342                ${addLink(href,name,title,formular.neuesFenster,linkClass)} 
1343            </li> 
1344        </#list> 
1345    </#if> 
1346</#macro> 
1347 
1348<#function addLink uri, inlineTitle, title, target, class = ''> 
1349    <#return '<a class="${class}" href="${uri}" title="${title}" target="${target?then("_blank", "_self")}">${inlineTitle}</a>'/> 
1350</#function> 
1351 
1352<#function createLoginURL destination> 
1353    <#local 
1354    login_url1_WithHtml = '/login?p_p_id=com_liferay_login_web_portlet_LoginPortlet&p_p_lifecycle=0&_com_liferay_login_web_portlet_LoginPortlet_redirect=' 
1355    login_url2_WithHtml = '" rel="nofollow" data-redirect="true"' 
1356    /> 
1357    <#return login_url1_WithHtml+destination+login_url2_WithHtml/> 
1358</#function> 
1359 
1360<#macro createLoginURL2 destination> 
1361    ${createLoginURL(destination)} 
1362</#macro> 
1363 
1364<#function existsAndSizeGTZero element> 
1365    <#if element?? && element?size gt 0> 
1366        <#return true /> 
1367    <#else> 
1368        <#return false /> 
1369    </#if> 
1370</#function> 
1371 
1372<#function existsAndHasContent element> 
1373    <#if element?? && element?has_content> 
1374        <#return true /> 
1375    <#else> 
1376        <#return false /> 
1377    </#if> 
1378</#function> 
1379 
1380<#function getEIDIcon id width=15 height=15> 
1381    <#local icon ='<svg style="vertical-align: text-bottom;" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"'/> 
1382    <#local icon +='     version="1.0" width="${width}" height="${height}" viewBox="-1.10212497 -1.10212497 38.94174894 38.94299994"'/> 
1383    <#local icon +='     id="${id}-svg2696">'/> 
1384    <#local icon +='    <defs id="${id}-defs2698">'/> 
1385    <#local icon +='        <linearGradient x1="0" y1="0" x2="1" y2="0" id="${id}-linearGradient2559" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,21.289352,21.289352,0,33.587295,364.15855)" spreadMethod="pad">'/> 
1386    <#local icon +='            <stop id="${id}-stop2561" style="stop-color:#ffffff;stop-opacity:1" offset="0"/>'/> 
1387    <#local icon +='            <stop id="${id}-stop2563" style="stop-color:#ffffff;stop-opacity:1" offset="0.78019702"/>'/> 
1388    <#local icon +='            <stop id="${id}-stop2565" style="stop-color:#ffffff;stop-opacity:1" offset="0.78019702"/>'/> 
1389    <#local icon +='            <stop id="${id}-stop2567" style="stop-color:#ffffff;stop-opacity:1" offset="1"/>'/> 
1390    <#local icon +='        </linearGradient>'/> 
1391    <#local icon +='        <linearGradient x1="0" y1="0" x2="1" y2="0" id="${id}-linearGradient2688" xlink:href="#${id}-linearGradient2559"'/> 
1392    <#local icon +='                        gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,-26.61169,26.61169,0,5.06287,31.67544)" spreadMethod="pad"/>'/> 
1393    <#local icon +='        <linearGradient x1="0" y1="0" x2="1" y2="0" id="${id}-linearGradient2583" gradientUnits="userSpaceOnUse"'/> 
1394    <#local icon +='                        gradientTransform="matrix(0,-21.289352,21.289352,0,45.222916,385.44789)" spreadMethod="pad">'/> 
1395    <#local icon +='            <stop id="${id}-stop2585" style="stop-color:#ffffff;stop-opacity:1" offset="0"/>'/> 
1396    <#local icon +='            <stop id="${id}-stop2587" style="stop-color:#ffffff;stop-opacity:1" offset="1"/>'/> 
1397    <#local icon +='        </linearGradient>'/> 
1398    <#local icon +='        <linearGradient x1="0" y1="0" x2="1" y2="0" id="${id}-linearGradient2683" xlink:href="#${id}-linearGradient2583"'/> 
1399    <#local icon +='                        gradientUnits="userSpaceOnUse" gradientTransform="matrix(0,26.61169,26.61169,0,19.60739,5.06376)" spreadMethod="pad"/>'/> 
1400    <#local icon +='    </defs>'/> 
1401    <#local icon +='    <path d="M 5.0625,18.36987 C 5.0625,25.32362 10.36125,30.97612 17.13,31.67487 L 17.13,31.67487 L 17.13,26.93612 C 12.98,26.27237 9.8025,22.70487 9.8025,18.36987 L 9.8025,18.36987 C 9.8025,14.03362 12.98,10.46612 17.13,9.80237 L 17.13,9.80237 L 17.13,5.06487 C 10.36125,5.76237 5.0625,11.41612 5.0625,18.36987" id="path2569" style="fill:url(#${id}-linearGradient2688);stroke:none"/>'/> 
1402    <#local icon +='    <path d="M 19.6075,9.80237 C 23.75625,10.46612 26.93625,14.03362 26.93625,18.36987 L 26.93625,18.36987 C 26.93625,22.70487 23.75625,26.27237 19.6075,26.93612 L 19.6075,26.93612 L 19.6075,31.67487 C 26.37625,30.97612 31.675,25.32362 31.675,18.36987 L 31.675,18.36987 C 31.675,11.41612 26.37625,5.76237 19.6075,5.06487 L 19.6075,5.06487 L 19.6075,9.80237 z" id="path2589" style="fill:url(#${id}-linearGradient2683);stroke:none"/>'/> 
1403    <#local icon +='    <path d="M 36.7375,31.52125 L 36.7375,5.2175 C 36.7375,5.2175 36.7375,0 31.52,0 L 5.2175,0 C 5.2175,0 0,0 0,5.2175 L 0,31.52125 C 0,31.52125 0,36.738749 5.2175,36.738749 L 31.52,36.738749 C 31.52,36.738749 36.7375,36.738749 36.7375,31.52125 M 35.645,31.2975 C 35.645,35.644999 31.2975,35.644999 31.2975,35.644999 L 5.44,35.644999 C 1.0925,35.644999 1.0925,31.2975 1.0925,31.2975 L 1.0925,5.44125 C 1.0925,1.09375 5.44,1.09375 5.44,1.09375 L 31.2975,1.09375 C 35.645,1.09375 35.645,5.44125 35.645,5.44125 L 35.645,31.2975 z" id="path2601" style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"/>'/> 
1404    <#local icon +='</svg>'/> 
1405    <#return icon/> 
1406</#function> 
1407 
1408 
1409<#function linklooper linkList> 
1410    <#local 
1411    value = "" 
1412    class = "" 
1413    target = "" 
1414    /> 
1415    <#if linkList??> 
1416        <#list linkList.weiterfuehrenderLink as link> 
1417            <#local 
1418            targetValue = link.neuesFenster?string('_blank','_self') 
1419            value = value + "<li><a href='${link.uri}' title='${link.titel}' class='${class}' target='${targetValue}' >${link.titel}</a></li>"/> 
1420        </#list> 
1421    </#if> 
1422    <#return value> 
1423</#function>