OBS! Den version af Internet Explorer, du benytter, er forældet. Vi anbefaler, du gør brug af en nyere browser, så du får den fulde oplevelse, når du besøger Rybners.dk

Kommende kurser
 

Error executing template "/Designs/rybners/Paragraph/rybners-course-overview.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_69595012eaec43359eac9d825f3d60c6.<>c.<Execute>b__1_2(Page c) in C:\inetpub\wwwroot\rybners_2022.espresso4.dk\Files\Templates\Designs\rybners\Paragraph\rybners-course-overview.cshtml:line 41
at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()
at System.Linq.Enumerable.<TakeIterator>d__25`1.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at CompiledRazorTemplates.Dynamic.RazorEngine_69595012eaec43359eac9d825f3d60c6.Execute() in C:\inetpub\wwwroot\rybners_2022.espresso4.dk\Files\Templates\Designs\rybners\Paragraph\rybners-course-overview.cshtml:line 39
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 @using Co3.Espresso.Website.Services 2 @using Co3.Rybners.Website.Services 3 @using Dynamicweb.Content 4 @using Dynamicweb.Frontend 5 @using Page = Dynamicweb.Content.Page 6 @using PageService = Dynamicweb.Content.PageService 7 8 <div class="container-fluid"> 9 <div class="row"> 10 <div class="col-12"> 11 12 @{ 13 PageService ps = new PageService(); 14 PageCollection courseItemCollection = ps.GetPagesForItems( new[] { "CourseItem" } ); 15 16 object courseItemCategories = PageView.Current().Item[ "KursusKategorier" ]; 17 string[] courseCategories = courseItemCategories.ToString().ToLower().Trim().Replace( " ", "" ).Split( ',' ); 18 19 Dictionary< string, Page > matchingCourseCollection = new Dictionary< string, Page >(); 20 IEnumerable< Page > pagesWithCategory = courseItemCollection.Where( hc => courseCategories.Contains( hc.Item[ "KategoriNavn" ]?.ToString().ToLower().Trim().Replace( " ", "" ) ) ); 21 bool showAllCourses = false; 22 23 if (PageView.Current().Page.Item["ShowAllCourses"] != null ) 24 { 25 showAllCourses = (bool) PageView.Current().Page.Item["ShowAllCourses"]; 26 } 27 28 if ( showAllCourses == true ) 29 { 30 pagesWithCategory = courseItemCollection.Where( p => p.Area.ID == PageView.Current().Area.ID ); 31 } 32 33 List<Page> pagesWithCategoryWithoutHold = new List<Page>(); 34 Dictionary<string, string> coursesNotMeetingRequirements = new Dictionary<string, string>(); 35 36 37 foreach ( Page page in pagesWithCategory ) 38 { 39 Page teamPage = RybnersItemService.Instance.GetTeamsForCourse( page.ID ).OrderByDescending( c => 40 { 41 string courseDeadlineStr = c.Item["HoldTilmeldingsfrist"]?.ToString(); 42 DateTime courseDeadlineDate = new DateTime(); 43 DateTime.TryParse( courseDeadlineStr, out courseDeadlineDate ); 44 return courseDeadlineDate; 45 }).Take(1).FirstOrDefault(); 46 47 if ( teamPage != null ) 48 { 49 string holdId = teamPage.Item["HoldAktiId"].ToString(); 50 if (!matchingCourseCollection.ContainsKey( holdId )) 51 { 52 matchingCourseCollection.Add( holdId, teamPage ); 53 } 54 } 55 else 56 { 57 pagesWithCategoryWithoutHold.Add(page); 58 } 59 } 60 } 61 62 63 @if ( matchingCourseCollection.Any() ) 64 { 65 66 <ul class="rybners-course-overview"> 67 @foreach ( KeyValuePair< string, Page > firstTeamInCourse in matchingCourseCollection.OrderBy( c => (DateTime)c.Value.Item[ "HoldStartDato" ]) ) 68 { 69 string holdId = firstTeamInCourse.Value.Item[ "HoldAktiId" ]?.ToString(); 70 71 72 73 var teams = RybnersItemService.Instance.GetTeamsForCourse( firstTeamInCourse.Value.Parent.ID ); 74 var teamsSorted = teams.Where( t => ( DateTime ) t.Item[ "HoldStartDato" ] > DateTime.Now ); 75 var severalTeams = teamsSorted.Count() > 1; 76 77 var fagByCourseItemList = RybnersItemService.Instance.GetSchoolSubjectsForCourse( firstTeamInCourse.Value.Parent.ID ); 78 79 80 81 if ( firstTeamInCourse.Value != null && firstTeamInCourse.Value.Item != null && holdId != null ) 82 { 83 string courseName = firstTeamInCourse.Value.Item[ "HoldAktivitetsnavn" ]?.ToString(); 84 string courseType = firstTeamInCourse.Value.Parent.Item[ "AktivitetOfflineVisning" ]?.ToString(); 85 86 string courseStartStr = firstTeamInCourse.Value.Item[ "HoldStartDato" ]?.ToString(); 87 DateTime courseStartDate = new DateTime(); 88 DateTime.TryParse( courseStartStr, out courseStartDate ); 89 90 string courseEndStr = firstTeamInCourse.Value.Item[ "HoldSlutDato" ]?.ToString(); 91 DateTime courseEndDate = new DateTime(); 92 DateTime.TryParse( courseEndStr, out courseEndDate ); 93 94 string courseDeadlineStr = firstTeamInCourse.Value.Item[ "HoldTilmeldingsfrist" ]?.ToString(); 95 DateTime courseDeadlineDate = new DateTime(); 96 DateTime.TryParse( courseDeadlineStr, out courseDeadlineDate ); 97 98 var fagItem = fagByCourseItemList.FirstOrDefault(); 99100 string courseDuration = null; 101 if ( fagItem != null ) 102 { 103 courseDuration = fagItem[ "SkoleFagVarighed" ].ToString(); 104 } 105 double courseDurationDouble; 106 double.TryParse( courseDuration, out courseDurationDouble ); 107 string courseUrl = string.Format( "Default.aspx?ID={0}", firstTeamInCourse.Value.Parent.ID ); 108109 courseUrl = SearchEngineFriendlyURLs.GetFriendlyUrl( courseUrl ); 110111 bool hasDeadlineInFurture = (courseDeadlineDate.Date) >= DateTime.Now.Date; 112113 bool isOpenCourseOrGuaranteed = hasDeadlineInFurture && ( (bool) firstTeamInCourse.Value.Item["HoldErGarantikursus"] == true || (string) firstTeamInCourse.Value.Item["HoldType"] == "av") ; 114115 bool isFull = (string)firstTeamInCourse.Value.Item["HoldStatus"] == "Optaget"; 116117118 bool isAllFull = true; 119120 foreach ( var d in teamsSorted ) 121 { 122 if ( (string)d.Item["HoldStatus"] != "Optaget" ) 123 { 124 isAllFull = false; 125 } 126 } 127128 if ( isAllFull ) 129 { 130 if ( !coursesNotMeetingRequirements.ContainsKey( courseName ) ) 131 { 132 coursesNotMeetingRequirements.Add( courseName, courseUrl ); 133 } 134 continue; 135 } 136137138139140 if ((courseDeadlineDate.Date) >= DateTime.Now.Date && teamsSorted.Any( t => ((int) t.Item["HoldLedigePladser"]) > 0 ) || isOpenCourseOrGuaranteed == true ) 141 { 142 <li class="align-self-center d-flex rybners-course-list w-100"> 143 <div class="course-name"> 144 <a href="@courseUrl"> 145 @if ( showAllCourses ) 146 { 147 <h5 class="mb-0 text-muted"> 148 @firstTeamInCourse.Value.Parent.Item["KategoriNavn"] 149 </h5> 150 <h3 class="mt-0">@courseName</h3> 151 } 152 else 153 { 154 <h3>@courseName</h3> 155 } 156157 </a> 158 </div> 159160 @if ( fagByCourseItemList.Count() > 1 ) 161 { 162 <div class="course-date small">Flere fag tilknyttet</div> 163 } 164 else 165 { 166 <div class="course-date small"> 167 <table class="table"> 168 @foreach (Page teamPage in teamsSorted.OrderBy( t => (DateTime)t.Item[ "HoldStartDato" ] )) 169 { 170 DateTime startDato = ( DateTime ) teamPage.Item[ "HoldStartDato" ]; 171 DateTime slutDato = ( DateTime ) teamPage.Item[ "HoldSlutDato" ]; 172 double freeSpots; 173 double.TryParse( teamPage.Item["HoldLedigePladser"]?.ToString(), out freeSpots ); 174 <tr> 175 <td class="px-0"> 176 @startDato.ToString("dd. MMM yyyy")- @slutDato.ToString("dd. MMM yyyy") 177 </td> 178 <td class=" px-0 text-right"> 179 <span class="badge p-1 badge-pill badge-secondary"> 180 @if ( freeSpots > 0) 181 { 182 <span>@freeSpots ledige pladser</span> 183 } 184 else 185 { 186 <span>Kontakt os</span> 187 } 188189 </span> 190 </td> 191 </tr> 192 } 193 </table> 194 </div> 195196 } 197 <div class="course-signup text-right"> 198 <a class="btn btn-sm " href="@courseUrl">@Translate( "Rybners Course module - Signup DA - Button", "Se mere og tilmeld" )</a> 199 <br /> 200 </div> 201 <div class="course-type text-left"> 202203 @if ( courseType == "amu" ) 204 { 205 <p class="mb-0 mr-2 float-left"><i class="material-icons">done</i> AMU-kursus</p> 206 } 207 else if ( courseType == "idv") 208 { 209 <p class="mb-0 mr-2 float-left"><i class="material-icons">done</i> IDV-kursus</p> 210 } 211 else 212 { 213 <p class="mb-0">@courseType</p> 214 } 215216 </div> 217 <div class="course-deadline text-right"> 218 @if ( fagByCourseItemList.Count() == 1 && (courseDeadlineDate.Date) >= DateTime.Now.Date ) 219 { 220 <small>@Translate( "Rybners Course module - Deadline DA - Text", "Tilmeldingsfrist:" )<br />@courseDeadlineDate.ToString( "dd. MMM yyyy" )</small> 221 } 222 </div> 223 </li> 224 } 225 else 226 { 227 @* Collect pages that don't meet requirements *@ 228 @* Course deadline in future - has free spots *@ 229 if ( !coursesNotMeetingRequirements.ContainsKey( courseName ) ) 230 { 231 coursesNotMeetingRequirements.Add( courseName, courseUrl ); 232 } 233 } 234 } 235236237 } 238 </ul> 239 } 240 else 241 { 242 <p>Der er pt. ingen hold oprettet - @Translate( "Rybners Course module - Inactive contact DA - Text", "Kontakt skolen" )</p> 243 } 244245 <h2>Vi tilbyder også kurser indenfor:</h2> 246247 <ul class="rybners-course-overview"> 248249250 @if ( matchingCourseCollection.Any() ) 251 { 252 foreach ( KeyValuePair<string, Page> coursePage in matchingCourseCollection ) 253 { 254255 string holdId = coursePage.Value.Item["HoldAktiId"]?.ToString(); 256 var fagByCourseItemList = RybnersItemService.Instance.GetSchoolSubjectsForCourse( coursePage.Value.Parent.ID ); 257 var teams = RybnersItemService.Instance.GetTeamsForCourse( coursePage.Value.Parent.ID ); 258 if ( coursePage.Value != null && coursePage.Value.Item != null && holdId != null ) 259 { 260 string courseName = coursePage.Value.Item["HoldAktivitetsnavn"]?.ToString(); 261 string courseType = coursePage.Value.Parent.Item["AktivitetOfflineVisning"]?.ToString(); 262263 string courseStartStr = coursePage.Value.Item["HoldStartDato"]?.ToString(); 264 DateTime courseStartDate = new DateTime(); 265 DateTime.TryParse( courseStartStr, out courseStartDate ); 266267 string courseEndStr = coursePage.Value.Item["HoldSlutDato"]?.ToString(); 268 DateTime courseEndDate = new DateTime(); 269 DateTime.TryParse( courseEndStr, out courseEndDate ); 270271 string courseDeadlineStr = coursePage.Value.Item["HoldTilmeldingsfrist"]?.ToString(); 272 DateTime courseDeadlineDate = new DateTime(); 273 DateTime.TryParse( courseDeadlineStr, out courseDeadlineDate ); 274275276 string courseUrl = string.Format( "Default.aspx?ID={0}", coursePage.Value.Parent.ID ); 277278 courseUrl = SearchEngineFriendlyURLs.GetFriendlyUrl( courseUrl ); 279280281 bool hasAnyFreeTeams = teams.Any( t => (DateTime) t.Item["HoldTilmeldingsfrist"] > DateTime.Now ); 282 bool hasAnyFreeSpots = teams.Any(t => (int)t.Item["HoldLedigePladser"] > 0); 283 bool isFull = (string)coursePage.Value.Item["HoldStatus"] == "Optaget"; 284285 bool isAllFull = true; 286287 foreach ( var d in teams ) 288 { 289 if ( (string)d.Item["HoldStatus"] != "Optaget" ) 290 { 291 isAllFull = false; 292 } 293 } 294295 if ( isAllFull ) 296 { 297 continue; 298 } 299300301 bool isOpenCourseOrGuaranteed = teams.Any(t => (bool)t.Item["HoldErGarantikursus"] == true || (string)t.Item["HoldType"] == "av" ) && hasAnyFreeTeams; 302303 if ( isAllFull == true || isOpenCourseOrGuaranteed == false && (hasAnyFreeTeams == false || hasAnyFreeSpots == false) ) 304 { 305 @* Collect pages that don't meet requirements *@ 306 @* Is full - is not guaranteed and has no free spots *@ 307 if ( !coursesNotMeetingRequirements.ContainsKey( courseName ) ) 308 { 309 coursesNotMeetingRequirements.Add( courseName, courseUrl ); 310 } 311 } 312 } 313 } 314 } 315316317318 @* Collect pages without any teams *@ 319 @foreach ( Page fagsideWithoutHold in pagesWithCategoryWithoutHold ) 320 { 321 bool showFag = bool.Parse(fagsideWithoutHold.Item["AktivitetVisesOffline"]?.ToString() ?? bool.FalseString); 322 bool activeFag = bool.Parse(fagsideWithoutHold.Item["AktivitetVisible"]?.ToString() ?? bool.FalseString); 323324 if ( activeFag == true && showFag == true ) 325 { 326 string courseName = fagsideWithoutHold.Item["AktivitetNavn"]?.ToString(); 327 string courseUrl = string.Format( "Default.aspx?ID={0}", fagsideWithoutHold.ID ); 328 courseUrl = SearchEngineFriendlyURLs.GetFriendlyUrl( courseUrl ); 329 if ( !coursesNotMeetingRequirements.ContainsKey( courseName ) ) 330 { 331 coursesNotMeetingRequirements.Add( courseName, courseUrl ); 332 } 333 } 334 } 335336 @* Render a list of courses in aloso offering *@ 337 @foreach ( KeyValuePair<string, string> coursesNotMeetingRequirementsItem in coursesNotMeetingRequirements.OrderBy( a => a.Key ) ) 338 { 339 <li class="align-self-center d-flex rybners-course-list rybners-course-list-others w-100"> 340 <div class="course-name small"> 341 <h3 class="small"> 342 <a href="@coursesNotMeetingRequirementsItem.Value"> 343 @coursesNotMeetingRequirementsItem.Key 344 </a> 345 </h3> 346 </div> 347348 <div class="text-right">@Translate( "Rybners Course module - Inactive contact DA - Text", "Kontakt skolen" )</div> 349 </li> 350 } 351 </ul> 352 </div> 353 </div> 354 </div> 355
keyboard_arrow_up