Error executing template "Designs/rybners/_parsed/Rybners_course.parsed.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_8d803a74e96e4442bfd1bd779c326a19.Execute() in C:\inetpub\wwwroot\rybners_2022.espresso4.dk\Files\Templates\Designs\rybners\_parsed\Rybners_course.parsed.cshtml:line 264
at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase
2 @using System.IO
3 @using System.Web
4 @using System.Globalization
5 @using Dynamicweb.Frontend
6 @using Dynamicweb.Ecommerce.Common
7 @using Dynamicweb.Security.UserManagement
8 9 @{
10 bool isUserAuthenticated = User.IsExtranetUserLoggedIn();
11 12 string globalAreaLang = PageView.Current().Area.CultureInfo.TwoLetterISOLanguageName;
13 CultureInfo currencyCulture = new CultureInfo( Context.Currency.CultureInfo );
14 string currencySeparatorDecimal = currencyCulture.NumberFormat.NumberDecimalSeparator;
15 string currencySeparatorInteger = currencyCulture.NumberFormat.NumberGroupSeparator;
16 string openGraphUrl = PageView.Current().SearchFriendlyUrl;
17 string openGraphImage = HttpContext.Current.Request.Url.Scheme + "://" + HttpContext.Current.Request.Url.Host + Espresso.OpenGraphImage;
18 19 bool cookieConsentAcceptedStatistics = false;
20 var cookieConsent = HttpContext.Current.Request.Cookies["CookieConsent"];
21 if ( cookieConsent != null )
22 {
23 string cookieConsentValue = cookieConsent.Value;
24 cookieConsentAcceptedStatistics = cookieConsentValue != null && cookieConsentValue.Contains( "statistics:true" );
25 }
26 bool loadGoogleTagManager = !string.IsNullOrEmpty( Espresso.Area.GoogleTagManagerID ) && cookieConsentAcceptedStatistics &&
27 !(Espresso.Area.Item.GoogleTagManagerDisableIfPerformanceTestIsDetected == "True" && HttpContext.Current.Request.UserAgent.ToLower().Contains( "lighthouse" ));
28 29 string rybnersSchoolBodyClass = string.Empty;
30 31 // Set a color based on the area of subdomains
32 var areaId = GetInteger( "DwAreaID" );
33 var rescueCenterAreaId = 24;
34 var courseCenterAreaId = 25;
35 36 if (areaId == courseCenterAreaId) {
37 rybnersSchoolBodyClass = "rybners-kursuscenter";
38 } else if (areaId == rescueCenterAreaId) {
39 rybnersSchoolBodyClass = "rybners-rescuecenter";
40 }
41 42 bool isStandalone = false;
43 if (areaId == courseCenterAreaId || areaId == rescueCenterAreaId)
44 {
45 isStandalone = true;
46 }
47 48 bool isArea45 = GetInteger("DwAreaID") == 45;
49 string domain = "";
50 if ( isArea45 )
51 {
52 domain = "fagenesfest";
53 }
54 55 // Skoler
56 if ( isStandalone == false )
57 {
58 if ( GetString( "Item.Area.TekniskSkole.Value" ) == GetString( "DwPageID_2" ) )
59 {
60 rybnersSchoolBodyClass = "rybners-tekniskskole";
61 }
62 if ( GetString( "Item.Area.Handelsskole.Value" ) == GetString( "DwPageID_2" ) )
63 {
64 rybnersSchoolBodyClass = "rybners-handelsskole";
65 }
66 if ( GetString( "Item.Area.EUX.Value" ) == GetString( "DwPageID_2" ) )
67 {
68 rybnersSchoolBodyClass = "rybners-eux";
69 }
70 if ( GetString( "Item.Area.Kursuscenter.Value" ) == GetString( "DwPageID_2" ) )
71 {
72 rybnersSchoolBodyClass = "rybners-kursuscenter";
73 }
74 if ( GetString( "Item.Area.HHXHandelsgymnasium.Value" ) == GetString( "DwPageID_2" ) )
75 {
76 rybnersSchoolBodyClass = "rybners-hhxhandelsgymnasium";
77 }
78 if ( GetString( "Item.Area.STXAlmentGymnasium.Value" ) == GetString( "DwPageID_2" ) )
79 {
80 rybnersSchoolBodyClass = "rybners-stxalmentgymnasium";
81 }
82 if ( GetString( "Item.Area.HTXTekniskGymnasium.Value" ) == GetString( "DwPageID_2" ) )
83 {
84 rybnersSchoolBodyClass = "rybners-htxtekniskgymnasium wat";
85 }
86 if ( GetString( "Item.Area.HF.Value" ) == GetString( "DwPageID_2" ) )
87 {
88 rybnersSchoolBodyClass = "rybners-hf";
89 }
90 }
91 }
92 93 94 <!DOCTYPE html>
95 <html lang="@globalAreaLang" data-separator-integer="@currencySeparatorInteger" data-separator-decimal="@currencySeparatorDecimal">
96 <head>
97 @GetValue( "CopyRightNotice" )
98 <meta charset="utf-8">
99 <meta content="width=device-width, initial-scale=1, shrink-to-fit=no, minimal-ui" name="viewport">
100 <meta content="ie=edge" http-equiv="x-ua-compatible">
101 <title>@GetValue("Title")</title>
102 @Espresso.CriticalCSS
103 @RenderSnippet( "webfonts" )
104 <link href="/Files/Templates/Designs/rybners/_assets/_dist/css/default.css?v=0.036" media="@Espresso.StylesheetAttributeMedia" rel="@Espresso.StylesheetAttributeRel" as="style">
105 @Espresso.CriticalJS
106 <link href="https://cdnjs.cloudflare.com" rel="preconnect">
107 <link href="https://www.googletagmanager.com" rel="preconnect">
108 <link href="https://www.google-analytics.com" rel="preconnect">
109 <link href="https://connect.facebook.net" rel="preconnect">
110 <link rel="shortcut icon" type="image/x-icon" href="@Espresso.Area.Item.Favicon">
111 <meta name="description" content="@Espresso.DynamicwebPage.Description">
112 @GetValue( "MetaTags" )
113 @if ( Espresso.IsStagingUrl )
114 {
115 <meta content="noindex,nofollow" name="robots">
116 }
117 <meta property="og:url" content="@openGraphUrl">
118 <meta property="og:title" content="@Espresso.OpenGraphTitle">
119 <meta property="og:description" content="@Espresso.OpenGraphDescription">
120 <meta property="og:image" content="@openGraphImage">
121 <meta property="og:type" content="website">
122 @if ( string.IsNullOrEmpty( Espresso.Area.Item.GoogleSiteVerification ) == false )
123 {
124 <meta name="google-site-verification" content="@Espresso.Area.Item.GoogleSiteVerification">
125 }
126127 <!-- Google Consent Mode -->
128 <script data-cookieconsent="statistics">
129 window.dataLayer = window.dataLayer || [];
130 function gtag() {
131 dataLayer.push(arguments)
132 }
133 gtag("consent", "default", {
134 ad_storage: "denied",
135 analytics_storage: "denied",
136 });
137 gtag("set", "url_passthrough", true);
138 </script>
139 <!-- End Google Consent Mode-->
140141 @if ( loadGoogleTagManager )
142 {
143 <!-- Google Tag Manager -->
144 <script data-cookieconsent="statistics">
145 (function(w, d, s, l, i) {
146 w[l] = w[l] || [];
147 w[l].push({
148 'gtm.start':
149 new Date().getTime(),
150 event: 'gtm.js'
151 });
152 var f = d.getElementsByTagName(s)[0],
153 j = d.createElement(s),
154 dl = l != 'dataLayer' ? '&l=' + l : '';
155 j.async = true;
156 j.src =
157 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
158 f.parentNode.insertBefore(j, f);
159 })(window, document, 'script', 'dataLayer', '@Espresso.Area.GoogleTagManagerID');
160 </script>
161 <!-- End Google Tag Manager -->
162 }
163164 <script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="693e4c71-0568-41d0-acd5-14478229a22a" data-culture="@globalAreaLang" data-blockingmode="auto" type="text/javascript"></script>
165 </head>
166167 <body class="@Espresso.Item.CustomClasses @rybnersSchoolBodyClass @domain" data-is-user-authenticated="@isUserAuthenticated.ToString().ToLower()" data-design="@Espresso.Area.DesignsFolderName">
168 @if ( loadGoogleTagManager )
169 {
170 <!-- Google Tag Manager (noscript) -->
171 <noscript>
172 <iframe src="https://www.googletagmanager.com/ns.html?id=@Espresso.Area.GoogleTagManagerID" height="0" width="0" style="display: none; visibility: hidden"></iframe>
173 </noscript>
174 <!-- End Google Tag Manager (noscript) -->
175 }
176177 @using Co3.Espresso.Base.Extensions
178 @using Co3.Espresso.Website.Services
179 @using Co3.Rybners.Website.Services
180 @using Dynamicweb.Content
181 @using Dynamicweb.Content.Items
182 @using Dynamicweb.Extensibility
183 @using Dynamicweb.Frontend
184 @using RazorEngine.Templating
185 @using ItemService = Co3.Espresso.Website.Services.ItemService
186 @using Page = Dynamicweb.Content.Page
187 @using PageService = Dynamicweb.Content.PageService
188 @using ParagraphService = Dynamicweb.Content.ParagraphService
189 @inherits Co3.Espresso.Website.TemplateBases.Pages.PageBase
190191 @{
192 Espresso.Canvas.Classes.AddClasses( "js-e-canvas is-loading" );
193 if ( Espresso.Item.CanvasFullscreen == "True" )
194 {
195 Espresso.Canvas.Classes.AddClasses( "is-fullscreen" );
196 }
197198 PageService ps = new PageService();
199 ParagraphService paragraphService = new ParagraphService();
200201 Page holdPage = ps.GetPage( GetInteger( "Global.PageId" ) );
202 var teams = RybnersItemService.Instance.GetTeamsForCourse( holdPage.ID ).Where( c =>
203 {
204 string HoldTilmeldingsfrist = c.Item["HoldTilmeldingsfrist"]?.ToString();
205 DateTime courseDeadlineDate = new DateTime();
206 DateTime.TryParse( HoldTilmeldingsfrist, out courseDeadlineDate );
207 return courseDeadlineDate.Date >= DateTime.Now.Date;
208 } ).ToList();
209 var teamsInFuture = teams.Where( t => (DateTime) t.Item["HoldStartDato"] > DateTime.Now ).ToList();
210 var severalTeams = teams.Where( t => (int) t.Item["HoldLedigePladser"] > 1 && (DateTime) t.Item["HoldStartDato"] > DateTime.Now ).ToList();
211 bool anyFreeSeats = teams.Any( t => (int) t.Item["HoldLedigePladser"] > 0 && (DateTime) t.Item["HoldTilmeldingsfrist"] > DateTime.Now );
212213 Page defaultTeam = teams.FirstOrDefault();
214215 var defaultTeamContactPerson = defaultTeam?.Item["HoldKontaktperson"]?.ToString();
216 var defaultTeamContactNumber = defaultTeam?.Item["HoldKontaktTelefon"]?.ToString();
217 var defaultTeamQuickNumber = defaultTeam?.Item["HoldKvikNr"]?.ToString();
218219 var teamType = defaultTeam?.Item["HoldType"]?.ToString();
220221 bool anyTeams = teams.Any();
222223 IEnumerable< Paragraph > courseMainCategoriesCollection = paragraphService.GetParagraphsByItemTypes( new[] {"CourseMainCaategori"} );
224 Paragraph courseMainCategoryDefaults = new Paragraph();
225226 foreach ( Paragraph mainCatParagraph in courseMainCategoriesCollection )
227 {
228 string[] cats = mainCatParagraph.Item[ "KategoriNavn" ]?.ToString().Split( ',' );
229230 foreach ( string cat in cats )
231 {
232 if ( cat.ToLower().Trim().Replace( " ", "" ) == holdPage.Item[ "KategoriNavn" ]?.ToString().ToLower().Trim().Replace( " ", "" ) )
233 {
234 courseMainCategoryDefaults = mainCatParagraph;
235 break;
236 }
237238 }
239 }
240241 var fagPages = RybnersItemService.Instance.GetSchoolSubjectsForCourse( holdPage.ID ).ToList();
242243 string courseStartStr = defaultTeam?.Item[ "HoldStartDato" ]?.ToString();
244 DateTime courseMainStartDate = new DateTime();
245 DateTime.TryParse( courseStartStr, out courseMainStartDate );
246247 string courseEndStr = defaultTeam?.Item[ "HoldSlutDato" ]?.ToString();
248 DateTime courseMainEndDate = new DateTime();
249 DateTime.TryParse( courseEndStr, out courseMainEndDate );
250251 string courseDeadlineStr = defaultTeam?.Item[ "HoldTilmeldingsfrist" ]?.ToString();
252 DateTime courseMainDeadlineDate = new DateTime();
253 DateTime.TryParse( courseDeadlineStr, out courseMainDeadlineDate );
254255 string coursePlace = defaultTeam?.Item[ "HoldAfholdssted" ]?.ToString().Replace( ",", "<br>" );
256257258 string courseImage = string.Empty;
259 string courseDesc = string.Empty;
260 string courseContacts = string.Empty;
261262 if ( courseMainCategoryDefaults != null )
263 {
264 courseImage = courseMainCategoryDefaults.Item[ "CourseMainCategoryImage" ]?.ToString();
265 courseDesc = courseMainCategoryDefaults.Item[ "CourseMainCategoryDescription" ]?.ToString();
266 }
267268 courseContacts = holdPage.Item[ "TilknyttedeKontaktpersoner" ]?.ToString();
269270 string ManualImage = holdPage.Item["Billede"]?.ToString();
271 string ManualDesc = holdPage.Item[ "YderligereTekst" ]?.ToString();
272273 if ( string.IsNullOrEmpty( ManualImage ) == false )
274 {
275 courseImage = ManualImage;
276 }
277 if ( string.IsNullOrEmpty( ManualDesc ) == false )
278 {
279 courseDesc = ManualDesc;
280 }
281 string teamEmail = defaultTeam?.Item[ "HoldEmail" ]?.ToString();
282 string signupRedirect = "https://www.voksenuddannelse.dk/soeg/uddannelser/filtrering?searchString=" + defaultTeam?.Item[ "HoldKvikNr" ];
283 string antalPladser = "";
284285 }
286287288289 <div class="e-loading-overlay e-page-loading-overlay is-loading js-e-page-loading-overlay">
290 @RenderingService.Instance.PartialView( "_partials/loading-spinner.cshtml" )
291 </div>
292293 @RenderingService.Instance.PartialView( "_partials/webfonts.cshtml", Espresso )
294 <a class="rybners-home-link" href="/"></a>
295 <div class="@Espresso.Canvas.Classes">
296 @RenderingService.Instance.PartialView( "_partials/header.cshtml", Espresso )
297 @RenderingService.Instance.PartialView( "usermanagement/viewprofile/espresso-impersonate-user-msg.cshtml", Espresso )
298 @RenderingService.Instance.PartialView( "_partials/nav-local-horizontal.cshtml", Espresso )
299 <main class="e-content js-e-content @Espresso.ContentArea.Classes pt-0" id="dwcontentmain">
300 @RenderingService.Instance.PartialView( "_partials/breadcrumb.cshtml", Espresso )
301 <article class="e-content-article">
302 @RenderingService.Instance.PartialView( "_partials/nav-local-vertical.cshtml", Espresso )
303304 <section class="e-section e-theme-quaternary js-e-section mb-3 p pb-0 p-section pt-0 px-0" id="19717">
305 <div class="container-fluid fixed-gutters overflow-hidden px-0">
306 <div class="no-gutters row">
307 <div class="col-12 col-lg-12 col-md-12 mx-auto">
308 <div class="justify-content-center row">
309 <div class="col-12 col-lg-6 col-md-6 col-sm-12 col-xl-6 p p-columns p-imagetext-tb">
310 <div class="row ">
311 <div class="col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 e-theme- p p-tile p-tile-center-middle p-tile-height-lg p-tile-txt-medium" id="19719">
312 <div class="p-tile-container">
313 <div class="p-txt-container">
314 <div class="container-fluid">
315 <div class="p-txt-wrapper row">
316 <div class="col-xl-9">
317318 <h2 class="mb-1">@holdPage.Item["AktivitetNavn"]</h2>
319 @courseDesc
320321 <div class="row">
322 <div class="col-12 col-md-6 pt-2">
323 @if ( courseMainStartDate.Equals( DateTime.MinValue ) == false )
324 {
325 if (severalTeams.Any() == false && courseMainDeadlineDate > DateTime.Now ) {
326 <h3>Hvornår</h3>
327 <p class="mb-0 small">
328 @courseMainStartDate.ToString( "dd. MMM yyyy" ) - @courseMainEndDate.ToString( "dd. MMM yyyy" )
329 </p>
330 }
331 else
332 {
333 <h3>Hvornår</h3>
334 <p class="mb-0 small">
335 <strong>Se holdlisten</strong>
336 </p>
337 }
338 }
339340341 @if ( courseMainDeadlineDate.Equals( DateTime.MinValue ) == false && courseMainDeadlineDate > DateTime.Now )
342 {
343 <h5 class="pt-2">Tilmeldingsfrist:</h5>
344 <p class="small">@courseMainDeadlineDate.ToString( "dd. MMM yyyy" )</p>
345 }
346 @if ( fagPages.Any() == false )
347 {
348 <h3>@Translate( "Rybners Course module - Inactive contact DA - Text", "Kontakt skolen" )</h3>
349350 }
351352 </div>
353 @if ( string.IsNullOrEmpty( coursePlace ) == false )
354 {
355 <div class="col-12 col-md-6 pt-2">
356 <h3>Hvor</h3>
357 <p class="small">
358 @coursePlace
359 </p>
360 </div>
361 }
362363 <script>
364 var debugData = @JsonService.Instance.ToJson( holdPage.Item )
365 </script>
366367368369 </div>
370 </div>
371 </div>
372 </div>
373 </div>
374 </div>
375 </div>
376 </div>
377 </div>
378379 <div class="col-12 col-lg-6 col-md-6 col-sm-12 col-xl-6 p p-columns p-imagetext-tb">
380 <div class="row ">
381 <div class="col-12 col-lg-3 col-md-3 col-sm-3 col-xl-3 e-theme-education-primary p p-tile p-tile-center-middle p-tile-gradient-disabled p-tile-height-xxs p-tile-txt-small" id="19722">
382 <div class="p-tile-container">
383 <div class="p-txt-container">
384385 </div>
386 </div>
387 </div>
388389 <div class="col-12 col-lg-9 col-md-9 col-sm-9 col-xl-9 e-theme- p p-tile p-tile-center-middle p-tile-gradient-disabled p-tile-height-lg p-tile-img p-tile-txt-small" id="19723">
390 <div class="p-tile-container">
391 <div class="p-img-container">
392 @if ( courseImage != null )
393 {
394 <div class="bg-center-middle p-img" style="background-image: url('/admin/public/getimage.ashx?Image=@courseImage&Width=960&Height=0&Format=jpg&Quality=75&Crop=0');"></div>
395 }
396397 </div>
398 <div class="p-txt-container"></div>
399 </div>
400 </div>
401 </div>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </section>
408409 <section class="e-section e-theme-tertiary js-e-section p pb-0 p-section pt-0 px-0" id="19785">
410 <div class="container-fluid overflow-hidden px-0">
411 <div class="no-gutters no-gutters row">
412 <div class="col-12 col-lg-12 col-md-12 mx-auto">
413414415416 <div class="justify-content-center no-gutters row">
417418419420 <div class="col-12 col-lg-6 col-md-6 col-sm-12 col-xl-6 p p-2 p-columns p-imagetext-tb px-lg-6">
421422 @if ( teamsInFuture.Any() )
423 {
424 <div class="row">
425 <div class="col-12 col-lg-12 col-md-12 is-lg mx-auto">
426 <div class="justify-content-center row">
427 <div class="col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-imagetext p-imagetext-tb">
428 <div class="row">
429 <div class="col-12 p-txt-container">
430 <h3 class="mb-2">Holdliste</h3>
431 </div>
432 </div>
433 <div class="row">
434 <div class="p col-12 p-card-padding-large p-card p-card-top-bottom p-card-border-thin p-card-shadow-none p-card-hover-disabled p-card-txt-small">
435 <div class="card rybners-fag-card e-theme-quaternary border-0">
436 <div class="p-txt-container e-text-fixed-vertical-flow">
437 <div class="card-body ">
438 <table class="table" style="font-size: 1em">
439440 @foreach ( Page teamPage in teamsInFuture.OrderBy( t => (DateTime)t.Item[ "HoldStartDato" ] ) )
441 {
442443 DateTime startDato = (DateTime) teamPage.Item["HoldStartDato"];
444 DateTime slutDato = (DateTime) teamPage.Item["HoldSlutDato"];
445 string kvikNr = (string) teamPage.Item["HoldKvikNr"];
446 double freeSpots;
447 double.TryParse( teamPage.Item["HoldLedigePladser"]?.ToString(), out freeSpots );
448449 <tr>
450 <td class="px-0">
451 @startDato.ToString( "dd. MMM yyyy" )- @slutDato.ToString( "dd. MMM yyyy" )
452 </td>
453 <td class=" px-0 text-right">
454 <span class="badge p-1 badge-pill badge-secondary">
455 @if ( freeSpots > 0 )
456 {
457 <span>@teamPage.Item["HoldLedigePladser"] ledige pladser</span>
458 }
459 else
460 {
461 <span>Kontakt os</span>
462 }
463464 </span>
465 </td>
466 </tr>
467 }
468 </table>
469 </div>
470 </div>
471 </div>
472 </div>
473 </div>
474475 </div>
476 </div>
477 </div>
478 </div>
479 }
480481482 <div class="row ">
483484 @if ( !anyTeams )
485 {
486 <div class="col-12">
487 <h3>Der er pt. ingen aktive hold til dette kursus. </h3>
488 <p>@Translate( "Rybners Course module - Further info contact DA - Text", "Kontakt skolen for yderligere information." )</p>
489 </div>
490 }
491492493 @if ( fagPages != null && fagPages.Any() )
494 {
495 <div aria-expanded="false" class="col-12 collapsed col-lg-12 col-md-12 e-section-collapse-toggle mx-auto order-last text-center" data-target="#e-section-collapse-coursedetails" data-toggle="collapse">
496 <button class="btn btn-primary e-section-collapse-toggle-btn" type="button">
497 <i class="e-section-collapse-toggle-icon material-icons">keyboard_arrow_down</i>
498 </button>
499 <small class="e-section-collapse-toggle-text h4" data-collapse-text="Vis mindre" data-expand-text="Vis mere"></small>
500 </div>
501502 <div class="col-12 collapse col-lg-12 col-md-12 e-section-collapse-content is-lg mx-auto" id="e-section-collapse-coursedetails" style="">
503 <div class="justify-content-center row">
504 <div class="col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-imagetext p-imagetext-tb">
505 <div class="row">
506 <div class="col-12 p-txt-container">
507 <h3 class="mb-2">Fag tilknyttet kurset</h3>
508 </div>
509 </div>
510 @foreach ( Item fag in fagPages )
511 {
512 <div class="row">
513 <div class="p col-12 p-card-padding-large p-card p-card-top-bottom p-card-border-thin p-card-shadow-none p-card-hover-disabled p-card-txt-small">
514 <div class="card rybners-fag-card e-theme-quaternary border-0">
515 <div class="p-txt-container e-text-fixed-vertical-flow">
516 <div class="card-body ">
517 <h3>
518 @fag["SkoleFagNavn"]
519 </h3>
520 <hr>
521 <p class="mb-1"><h5 class="d-inline-flex mb-0">Skolefagkode:</h5> @fag["SkoleFagKode"]
522523 <p class="mb-1"><h5 class="d-inline-flex mb-0">Timer pr dag:</h5> @fag["SkoleFagTimerPrDag"]
524 <p class="mb-1"><h5 class="d-inline-flex mb-0">Deltagerpris:</h5> @fag["SkoleFagDeltagerpris"] kr.
525 <p class="mb-1"><h5 class="d-inline-flex mb-0">Pris for ledige:</h5> @fag["SkoleFagPrisForLedige"] kr.@*(Jobcenteret afholder kursusudgiften, hvis man har ret til 6 ugers jobrettet uddannelse og faget findes på positivlisten)*@
526 <p class="mb-1"><h5 class="d-inline-flex mb-0">Pris udenfor AMU-målgruppe:</h5> @fag["SkoleFagPrisUdenforAmuMaalgruppe"] kr.
527528 <h5 class="mt-2">Målgruppe</h5>
529 <p>
530 @fag["SkoleFagMaalgruppe"]
531 </p>
532 <h5 class="mt-2">Formål</h5>
533 <p>
534 @fag["SkoleFagFormaal"]
535 </p>
536 <h5 class="mt-2">Indhold</h5>
537 <p>
538 @fag["SkoleFagIndhold"]
539 </p>
540541 </div>
542 </div>
543 </div>
544 </div>
545 </div>
546 }
547 </div>
548 </div>
549 </div>
550 }
551 </div>
552553554555 @{
556 bool AktivitetAnvendOverordnetBeskrivelse = holdPage.Item["AktivitetAnvendOverordnetBeskrivelse"].Equals( true );
557 string AktivitetOverordnetBeskrivelse = holdPage.Item["AktivitetOverordnetBeskrivelse"]?.ToString();
558 // Check if AktivitetOverordnetBeskrivelse is not empty
559560 }
561 @if ( teamType == "idv" && !string.IsNullOrEmpty(AktivitetOverordnetBeskrivelse) || AktivitetAnvendOverordnetBeskrivelse && !string.IsNullOrEmpty(AktivitetOverordnetBeskrivelse) )
562 {
563 <div class="row">
564 <div class="col-12 col-lg-12 col-md-12 is-lg mx-auto">
565 <div class="justify-content-center row">
566 <div class="col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-imagetext p-imagetext-tb">
567 <div class="row">
568 <div class="col-12 p-txt-container">
569 <h3 class="mb-2">Beskrivelse</h3>
570 </div>
571 </div>
572 <div class="row">
573 <div class="p col-12 p-card-padding-large p-card p-card-top-bottom p-card-border-thin p-card-shadow-none p-card-hover-disabled p-card-txt-small">
574 <div class="card rybners-fag-card e-theme-quaternary border-0">
575 <div class="p-txt-container e-text-fixed-vertical-flow">
576 <div class="card-body ">
577 <p class="mb-1">@AktivitetOverordnetBeskrivelse</p>
578 </div>
579 </div>
580 </div>
581 </div>
582 </div>
583584 </div>
585 </div>
586 </div>
587 </div>
588 }
589590 </div>
591592 <div class="col-12 col-lg-6 col-md-6 col-sm-12 col-xl-6 e-theme-tertiary p p-columns p-imagetext-tb">
593 <div class="no-gutters row">
594595 @{
596 bool isOpenCourse = false;
597 if ( defaultTeam != null && defaultTeam.Item != null && defaultTeam.Item["HoldErGarantikursus"] != null )
598 {
599 isOpenCourse = (bool) defaultTeam.Item["HoldErGarantikursus"];
600 }
601 }
602603 @if ( (anyFreeSeats || isOpenCourse == true) )
604 {
605606 <script>console.log(@JsonService.Instance.ToJson( holdPage.Item ));</script>
607608 <div class="border-radius-none col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-card p-card-border-none p-card-shadow-none p-card-top-bottom p-card-txt-small">
609 <div class="card e-theme-education-primary">
610 <div class="e-text-fixed-vertical-flow p-txt-container">
611 <div class="card-body text-center">
612 <h3 class="h2">Tilmelding</h3>
613 @if ( teamType == "idv" )
614 {
615 <form class="js-rybners-course-signup-selector" action="@signupRedirect">
616617 @if ( severalTeams.Any() )
618 {
619 <div class="form-group py-1">
620 <select class="form-control rybners-course-form-select js-rybners-teams-select-input">
621622 <option selected="" disabled="">Vælg hold</option>
623624 @foreach ( Page teamPage in teams.OrderBy( t => (DateTime)t.Item[ "HoldStartDato" ] ) )
625 {
626627 DateTime startDato = (DateTime) teamPage.Item["HoldStartDato"];
628 DateTime slutDato = (DateTime) teamPage.Item["HoldSlutDato"];
629630 string kviknr = teamPage.Item["HoldKvikNr"]?.ToString();
631632 string optionValue = "https://voksenuddannelse.dk/soeg/uddannelser/filtrering?searchString=" + kviknr;
633634 bool ledigePladser = (int) teamPage.Item["HoldLedigePladser"] > 0;
635 if ( ledigePladser )
636 {
637 <option value="@optionValue" data-kviknr="@kviknr">
638 @startDato.ToString( "dd. MMM yyyy" )- @slutDato.ToString( "dd. MMM yyyy" )
639 </option>
640641 }
642643 }
644 </select>
645 </div>
646 }
647 <div class="form-group py-1">
648 <select class="form-control rybners-course-form-select js-rybners-course-signup-input">
649 <option>Vælg rolle</option>
650 <option value="1">
651 Betaling via virksomhed (DK)
652 </option>
653 <option value="2">
654 Egenbetaling / IKUF bevilling (DK)
655 </option>
656 <option value="3">
657 Foreigner / Udlænding (English)
658 </option>
659 </select>
660 </div>
661 </form>
662 <div class="js-rybners-course-signup-container rybners-course-signup-container" data-idv1-formpageid="28817" data-idv2-formpageid="28818" data-idv3-formpageid="28819"></div>
663 }
664665 else if ( (string) holdPage.Item["AktivitetOfflineVisning"] == "amu" )
666 {
667 <form class="js-rybners-sign-up-form" action="@signupRedirect">
668 @if ( severalTeams.Any() )
669 {
670 <div class="form-group py-1">
671 <select class="form-control rybners-course-form-select js-rybners-teams-select-input" required="">
672673 <option selected="" disabled="">Vælg hold</option>
674675 @foreach ( Page teamPage in teams.OrderBy( t => (DateTime)t.Item[ "HoldStartDato" ] ) )
676 {
677678 DateTime startDato = (DateTime) teamPage.Item["HoldStartDato"];
679 DateTime slutDato = (DateTime) teamPage.Item["HoldSlutDato"];
680 string kviknr = teamPage.Item["HoldKvikNr"]?.ToString();
681682683 string optionValue = "https://voksenuddannelse.dk/soeg/uddannelser/filtrering?searchString=" + kviknr;
684685 bool ledigePladser = (int) teamPage.Item["HoldLedigePladser"] > 0;
686 if ( ledigePladser )
687 {
688 <option value="@optionValue" data-kviknr="@kviknr">
689 @startDato.ToString( "dd. MMM yyyy" )- @slutDato.ToString( "dd. MMM yyyy" )
690 </option>
691692 }
693694 }
695 </select>
696 </div>
697 }
698699700701702 <div class="form-group py-1">
703 <select class="form-control rybners-course-form-select js-rybners-sign-up-select-input" required="required">
704 <option selected="" disabled="">Vælg rolle</option>
705 <option value="virksomhed">
706 Jeg er i job og tilmelder mig selv eller andre ansatte i min virksomhed
707 </option>
708 <option value="privatperson">
709 Jeg tilmelder mig som privatperson
710 </option>
711712 </select>
713 </div>
714 <button type="submit" class="btn btn-primary">Tilmeld</button>
715 </form>
716717 <div class="mt-4 row text-left">
718 <div class="col-6 small">
719 <p class="pb-0 text-left text-dark font-weight-bold">@Translate("Rybners Course module - Ledige og Jobcentre - Info - Text", "Til ledige og Jobcentre: Kontakt vores kursussekretærer for tilmelding.")</p>
720 </div>
721 <div class="col-6 small">
722 <p class="pb-0 text-right">Kursets kviknummer: <span class="js-rybners-kviknr">@defaultTeamQuickNumber</span></p>
723 </div>
724 </div>
725 }
726 else
727 {
728 <h3 class="py-1">@Translate( "Rybners Course module - Further info contact DA - Text", "Kontakt skolen for yderligere information." )</h3>
729 }
730 </div>
731 </div>
732 </div>
733 </div>
734 }
735 @if ( teamType != "idv" )
736 {
737738 var educationForm = defaultTeam?.Item["HoldUndervisningsform"]?.ToString();
739 var educationTime = defaultTeam?.Item["HoldUndervisningstid"]?.ToString();
740 var prerequisites = defaultTeam?.Item["HoldForudsetninger"]?.ToString();
741 var description = defaultTeam?.Item["HoldBeskrivelse"]?.ToString();
742 <div class="border-radius-none col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-card p-card-border-none p-card-shadow-none p-card-top-bottom p-card-txt-medium">
743 <div class="card e-theme-quaternary">
744 <div class="e-text-fixed-vertical-flow p-txt-container">
745 <div class="card-body">
746 <div class="row">
747 <div class="align-self-center col-12 p-txt-container">
748749 <h3 class="mb-2">Yderligere holdinformation</h3>
750751 <h5 class="d-inline-flex mb-0">Undervisningsform</h5>
752 <p>@educationForm</p>
753 <h5 class="d-inline-flex mb-0">Undervisningstid</h5>
754 <p>@educationTime</p>
755 <h5 class="d-inline-flex mb-0">Forudsætninger</h5>
756 <p>@prerequisites</p>
757 @if ( description != "" )
758 {
759 <h5 class="d-inline-flex mb-0">Beskrivelse</h5>
760 <p>@description</p>
761 }
762763 </div>
764 </div>
765 </div>
766 </div>
767 </div>
768 </div>
769 }
770 @if ( anyTeams && teamType != "idv" )
771 {
772 <div class="border-radius-none col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-card p-card-border-none p-card-shadow-none p-card-top-bottom p-card-txt-medium">
773 <div class="card e-theme-quaternary">
774 <div class="e-text-fixed-vertical-flow p-txt-container">
775 <div class="card-body">
776 <div class="row">
777 <div class="align-self-center col-12 p-txt-container">
778779 <h3>Har du spørgsmål om kurset?</h3>
780 <p>@Translate( "Rybners Course module - Further info contactperson DA - Text", "Kontakt os:" )</p>
781 <br>
782 <p>@defaultTeamContactPerson</p>
783784 <p>tlf. @defaultTeamContactNumber <br>
785 <br>e-mail: <a href="mailto:@teamEmail">@teamEmail</a>
786787 </p>
788789 </div>
790 <div class="col-12 col-lg-4 col-md-6 order-first order-sm-last p-img-container">
791 <div class="row">
792 <p class="col-12">
793 @*<img alt="" class="p-img rounded-circle" src="/admin/public/getimage.ashx?Image=/Files/Images/IMG_2258_1.jpg&Width=1920&Height=1920&Format=jpg&Quality=75&Crop=0">*@
794 </p>
795 </div>
796 </div>
797 </div>
798 </div>
799 </div>
800 </div>
801 </div>
802 }
803 @if ( courseMainCategoryDefaults != null )
804 {
805 string systemName = courseMainCategoryDefaults.Item.SystemName;
806 string itemId = courseMainCategoryDefaults.Item.Id;
807 Item dwItem = Dynamicweb.Services.Items.GetItem( systemName, itemId );
808809 IEnumerable<Item> items = Co3.Rybners.Website.Services.RybnersItemService.Instance.GetItemsFromItemListId( dwItem, "TilknyttedeKontaktpersoner" );
810811 if ( items != null && items.Any() )
812 {
813 <div class="border-radius-none col-12 col-lg-12 col-md-12 col-sm-12 col-xl-12 p p-card p-card-border-none p-card-shadow-none p-card-top-bottom p-card-txt-medium">
814 <div class="card e-theme-quaternary" style="padding: 3.5em 2em !important;">
815 <div class="e-text-fixed-vertical-flow p-txt-container">
816 <div class="card-body">
817 <div class="row">
818 <div class="align-self-center col-12 p-txt-container">
819 @foreach ( Item contactItem in items.Take( 2 ) )
820 {
821 string contactImage = contactItem["Image"].ToString();
822 string contactName = contactItem["ContactName"].ToString();
823 string contactTitle = contactItem["ContactTitle"].ToString();
824 string contactMobile = contactItem["ContactMobile"].ToString();
825 string contactDirect = contactItem["ContactDirect"].ToString();
826 string contactEmail = contactItem["ContactEmail"].ToString();
827828 <div class="p p-imagetext p-imagetext-tb col-12 col-sm-12 col-md-12 col-lg-6 col-xl-6 text-center p-contact" style="float: left;">
829 <div class="p-contact-wrapper">
830 <div class="row">
831 <div class="col-12">
832 <div class="row" itemscope="" itemtype="http://schema.org/Person">
833 <div class="col-12 p-txt-container ">
834 <div class="p-txt-wrapper">
835 <h3 class="p-contact-name" itemprop="name">@contactName</h3>
836 <p class="p-contact-title" itemprop="jobTitle">@contactTitle</p>
837 @if ( contactMobile != "" )
838 {
839 <p class="p-contact-phone" itemprop="telephone"><i class="material-icons">smartphone</i><a href="tel:@contactMobile" class="text-auto">@contactMobile</a></p>
840 }
841 @if ( contactDirect != "" )
842 {
843 <p class="p-contact-phone" itemprop="telephone"><i class="material-icons">phone</i><a href="tel:@contactDirect" class="text-auto">@contactDirect</a></p>
844 }
845 @if ( contactEmail != "" )
846 {
847 <p class="p-contact-email" itemprop="email"><i class="material-icons">mail</i><a href="mailto:@contactEmail" class="text-auto">@contactEmail</a></p>
848 }
849 </div>
850 </div>
851 <div class="p-img-container col-12 order-first mb-3">
852 <div class="row">
853 <p class="col-12 p-img-width-auto mx-auto">
854 <img src="/admin/public/getimage.ashx?Image=@contactImage&Width=960&Height=960&Format=jpg&Quality=0&Crop=0" class="p-img rounded-circle" alt="@contactName" itemprop="image">
855 </p></div>
856 </div>
857 </div>
858 </div>
859 </div>
860 </div>
861 </div>
862 }
863 </div>
864 </div>
865 </div>
866 </div>
867 </div>
868 </div>
869 }
870 }
871872873 <div aria-hidden="true" class="js-rybners-contact-modal fade modal" tabindex="-1">
874 <div class="modal-dialog" role="document">
875 <div class="modal-content">
876877 <div class="modal-body">
878 <button aria-label="Close" class="close" data-dismiss="modal" type="button">
879 <span aria-hidden="true">×</span>
880 </button>
881 <h3>@Translate( "Rybners Course module - Inactive contact DA - Text", "Kontakt skolen" )</h3>
882 <p class="mb-1">Kontaktperson: @defaultTeamContactPerson</p>
883 <p class="mb-1">tlf. @defaultTeamContactNumber
884 <br>e-mail: <a href="mailto:@teamEmail">@teamEmail</a>
885 </p>
886 </div>
887 <div class="modal-footer">
888 <button class="btn btn-primary" data-dismiss="modal" type="button">Luk</button>
889 </div>
890 </div>
891 </div>
892 </div>
893 </div>
894 </div>
895896 </div>
897898 @{
899 IEnumerable< Page > siblings = ServiceLocator.Current.GetPageService().GetPagesByParentID( PageView.Current().Page.Parent.ID ).Where( p => p.ID != PageView.Current().Page.ID && p.Active );
900 IEnumerable< Page > relatedActivity = siblings.Where( s => RybnersItemService.Instance.GetTeamsForCourse( s.ID ).FirstOrDefault()?.Item["HoldAktiId"] == defaultTeam?.Item["HoldAktiId"] );
901 }
902903 @if ( anyTeams && relatedActivity.Any() )
904 {
905906 <div class="col-12">
907 <div class="col-12">
908 <h2 class="mt-2 mb-2">Yderligere hold</h2>
909 <ul class="rybners-course-overview">
910 @foreach ( Page coursePage in relatedActivity.Take(4))
911 {
912 var fagByRelatedCourse = RybnersItemService.Instance.GetSchoolSubjectsForCourse( coursePage.ID );
913 var teamByRelatedCourse = RybnersItemService.Instance.GetTeamsForCourse( coursePage.ID ).FirstOrDefault();
914915 string relatedCourseName = teamByRelatedCourse?.Item[ "HoldAktivitetsnavn" ]?.ToString();
916 string relatedCourseType = coursePage.Item[ "AktivitetOfflineVisning" ]?.ToString();
917918 string relatedCourseStartStr = teamByRelatedCourse?.Item[ "HoldStartDato" ]?.ToString();
919 DateTime relatedCourseStartDate = new DateTime();
920 DateTime.TryParse( relatedCourseStartStr, out relatedCourseStartDate );
921922 string relatedCourseEndStr = teamByRelatedCourse?.Item[ "HoldSlutDato" ]?.ToString();
923 DateTime relatedCourseEndDate = new DateTime();
924 DateTime.TryParse( relatedCourseEndStr, out relatedCourseEndDate );
925926 string relatedCourseDeadlineStr = teamByRelatedCourse?.Item[ "HoldTilmeldingsfrist" ]?.ToString();
927 DateTime relatedCourseDeadlineDate = new DateTime();
928 DateTime.TryParse( relatedCourseDeadlineStr, out relatedCourseDeadlineDate );
929930 string relatedCourseDuration = fagByRelatedCourse.FirstOrDefault()?[ "SkoleFagVarighed" ]?.ToString();
931 string relatedCourseUrl = string.Format( "Default.aspx?ID={0}", coursePage.ID );
932933934935 relatedCourseUrl = SearchEngineFriendlyURLs.GetFriendlyUrl( relatedCourseUrl );
936937 <li class="d-flex rybners-course-list w-100 align-self-center">
938 <div class="course-name">
939 <a href="@relatedCourseUrl">
940 <h3>@relatedCourseName</h3></a></div>
941 <div class="course-type text-center">
942943 @if ( relatedCourseType == "amu" )
944 {
945 <p class="mb-0 font-weight-bold"><i class="material-icons">done</i> AMU-kursus</p>
946 }
947 else if ( relatedCourseType == "idv" ) {
948 <p class="mb-0 font-weight-bold"><i class="material-icons">done</i> IDV-kursus</p>
949 }
950 else
951 {
952 <p class="mb-0">@relatedCourseType</p>
953 }
954 </div>
955 @if ( fagByRelatedCourse.Count() > 1 )
956 {
957 <div class="course-date small">Flere fag tilknyttet</div>
958 }
959 else
960 {
961 if ( relatedCourseDuration == "1" )
962 {
963 <div class="relatedCourse-date small">@relatedCourseStartDate.ToString( "dd. MMM yyyy" )</div>
964 } else if ( relatedCourseDuration == "0" )
965 {
966 <div class="relatedCourse-date small">@relatedCourseStartDate.ToString( "dd. MMM yyyy" )</div>
967 }
968 else
969 {
970 <div class="relatedCourse-date small">@relatedCourseStartDate.ToString( "dd. MMM yyyy" ) - @relatedCourseEndDate.ToString( "dd. MMM yyyy" )</div>
971 }
972 <div class="course-date small">@relatedCourseStartDate.ToString( "dd. MMM yyyy" ) - @relatedCourseEndDate.ToString( "dd. MMM yyyy" )</div>
973 }
974 <div class="course-signup text-right"><a class="btn btn-sm " href="@relatedCourseUrl">@Translate( "Rybners Course module - Signup DA - Button", "Se mere og tilmeld" )</a>
975 @if ( fagByRelatedCourse.Count() > 1 && relatedCourseDeadlineDate > DateTime.Now )
976 {
977 <br>
978 <span class="d-block small text-right"><small>@Translate( "Rybners Course module - Deadline DA - Text", "Tilmeldingsfrist:" ) @relatedCourseDeadlineDate</small></span>
979 }
980 </div>
981 </li>
982 }
983 </ul>
984 </div>
985 </div>
986 }
987 </div>
988 </div>
989 </div>
990 </section>
991992993 @*END COURSE CONTENT*@
994995 @GetValue("DwContent(dwcontentmain)")
996997 </article>
998 </main>
9991000 @RenderingService.Instance.PartialView( "_partials/footer.cshtml", Espresso )
10011002 @if ( !string.IsNullOrEmpty( GetString( "DwContent(dwcontentsocialmedia)" ) ) )
1003 {
1004 <aside id="dwcontentsocialmedia">@GetValue("DwContent(dwcontentsocialmedia)")</aside>
1005 }
10061007 @RenderingService.Instance.PartialView( "ecom7/cartv2/step/espresso-cart-msg.cshtml" )
1008 </div>
10091010 @RenderingService.Instance.PartialView( "_partials/search.cshtml", Espresso )
10111012 @RenderingService.Instance.PartialView( "_partials/back-to-top.cshtml", Espresso )
10131014 @if ( 1 == 2 )
1015 {
1016 @GetValue( "DwCookieWarning" )
1017 }
101810191020 @{
1021 if ( isStandalone == false )
1022 {
1023 if ( GetString( "Item.Area.TekniskSkole.Value" ) == GetString( "DwPageID_2" ) )
1024 {
1025 @RenderParagraphContent( GetInteger( "Item.Area.TekniskSkoleSocialeMedier.Value" ) )
1026 }
1027 if ( GetString( "Item.Area.Handelsskole.Value" ) == GetString( "DwPageID_2" ) )
1028 {
1029 @RenderParagraphContent( GetInteger( "Item.Area.HandelsskoleSocialeMedier.Value" ) )
1030 }
1031 if ( GetString( "Item.Area.EUX.Value" ) == GetString( "DwPageID_2" ) )
1032 {
1033 @RenderParagraphContent( GetInteger( "Item.Area.EUXSocialeMedier.Value" ) )
1034 }
1035 if ( GetString( "Item.Area.Kursuscenter.Value" ) == GetString( "DwPageID_2" ) )
1036 {
1037 @RenderParagraphContent( GetInteger( "Item.Area.KursuscenterSocialeMedier.Value" ) )
1038 }
1039 if ( GetString( "Item.Area.HHXHandelsgymnasium.Value" ) == GetString( "DwPageID_2" ) )
1040 {
1041 @RenderParagraphContent( GetInteger( "Item.Area.HHXHandelsgymnasiumSocialeMedier.Value" ) )
1042 }
1043 if ( GetString( "Item.Area.STXAlmentGymnasium.Value" ) == GetString( "DwPageID_2" ) )
1044 {
1045 @RenderParagraphContent( GetInteger( "Item.Area.STXAlmentGymnasiumSocialeMedier.Value" ) )
1046 }
1047 if ( GetString( "Item.Area.HTXTekniskGymnasium.Value" ) == GetString( "DwPageID_2" ) )
1048 {
1049 @RenderParagraphContent( GetInteger( "Item.Area.HTXTekniskGymnasiumSocialeMedier.Value" ) )
1050 }
1051 if ( GetString( "Item.Area.HF.Value" ) == GetString( "DwPageID_2" ) )
1052 {
1053 @RenderParagraphContent( GetInteger( "Item.Area.HFSocialeMedier.Value" ) )
1054 }
1055 }
1056 }
10571058 <script async="" src="/Files/Templates/Designs/rybners/_assets/_dist/js/default.js?v=1.0.5"></script>
1059 </body>
10601061 @GetValue( "CopyRightNotice" )
1062 </html>