Error executing template "Designs/Designa/UserManagement/ViewProfile/designaStoreDetail.cshtml" System.InvalidOperationException: Sequence contains no elements at System.Linq.Enumerable.First[TSource](IEnumerable`1 source) at CompiledRazorTemplates.Dynamic.RazorEngine_072445025006433e904ffbcfc948931f.Execute() in E:\WEB\designa2021.stagingsite.dk\Files\Templates\Designs\Designa\UserManagement\ViewProfile\designaStoreDetail.cshtml:line 134 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 Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Designa.Website.CustomModules 3 @using Designa.Website.Services 4 @using Designa.Website.Services.Models 5 @using Dynamicweb.Rendering 6 @using Dynamicweb.Security.UserManagement 7 @using Designa.Website.CustomModules 8 @using Dynamicweb.Content 9 @using Dynamicweb 10 11 @{ 12 string storeId = GetString("UserManagement:User.ID"); 13 string storeName = GetString("UserManagement:User.UserName"); 14 string storeDescription = GetString("UserManagement:User.Item.Description"); 15 string storeAddress = GetString("UserManagement:User.Address"); 16 string storeAddressNr = GetString("UserManagement:User.HouseNumber"); 17 string storeZip = GetString("UserManagement:User.DefaultAddress.Zip"); 18 string storeCity = GetString("UserManagement:User.DefaultAddress.City"); 19 string storeEmail = GetString("UserManagement:User.Email"); 20 string storePhone = GetString("UserManagement:User.DefaultAddress.Phone"); 21 string storeImage = GetString("UserManagement:User.Image"); 22 23 List<string> storeImageSplit = new List<string>(storeImage.Split(new string[] { "src=" }, StringSplitOptions.None)); 24 List<string> storeImageSplit2 = new List<string>(storeImageSplit[1].Split(new string[] { "\"" }, StringSplitOptions.None)); 25 string storeImageURL = storeImageSplit2[1]; 26 27 string title = GetString("UserManagement:User.Item.EmployeesTitle"); 28 string description = GetString("UserManagement:User.Item.EmployeesDescription"); 29 string background = GetString("Item.Background.Value"); 30 31 //Social 32 bool storeFacebookHidden = GetBoolean("UserManagement:User.Item.IsFacebookVisible"); 33 bool storeInstagramHidden = GetBoolean("UserManagement:User.Item.IsInstagramVisible"); 34 bool storeLinkedInHidden = GetBoolean("UserManagement:User.Item.IsLinkedInVisible"); 35 bool storePinterestHidden = GetBoolean("UserManagement:User.Item.IsPinterestVisible"); 36 37 string storeFacebookLink = GetString("UserManagement:User.Item.FacebookLink"); 38 string storeInstagramLink = GetString("UserManagement:User.Item.InstagramLink.Value"); 39 string storeLinkedInLink = GetString("UserManagement:User.Item.LinkedInLink.Value"); 40 string storePinterestLink = GetString("UserManagement:User.Item.PinterestLink.Value"); 41 42 string someFacebookLink = !string.IsNullOrEmpty(storeFacebookLink) ? storeFacebookLink : Pageview.AreaSettings.GetString("Facebook"); 43 string someInstagramLink = !string.IsNullOrEmpty(storeInstagramLink) ? storeInstagramLink : Pageview.AreaSettings.GetString("Instagram"); 44 string someLinkedInLink = !string.IsNullOrEmpty(storeLinkedInLink) ? storeLinkedInLink : Pageview.AreaSettings.GetString("LinkedIn"); 45 string somePinterestLink = !string.IsNullOrEmpty(storePinterestLink) ? storePinterestLink : Pageview.AreaSettings.GetString("Pinterest"); 46 47 string someShopName = !string.IsNullOrEmpty(storeFacebookLink) || !string.IsNullOrEmpty(storeInstagramLink) || !string.IsNullOrEmpty(storeLinkedInLink) || !string.IsNullOrEmpty(storePinterestLink) ? storeName : "Designa"; 48 49 string backToStoreList = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag("storeFinder")); 50 var userType = User.GetUsers().FindUserByID(Int32.Parse(storeId)).UserAndGroupTypeSystemName; 51 var storeType = userType + "StoreFinder"; 52 var isB2BStore = false; 53 54 if (userType.Contains(Constants.StoreGroupErhvervscenter) || userType.Contains(Constants.StoreGroupErhvervsafdeling)) 55 { 56 backToStoreList = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(GetPageIdByNavigationTag(storeType)); 57 isB2BStore = true; 58 } 59 60 string bookLink = Dynamicweb.Frontend.SearchEngineFriendlyURLs.GetFriendlyUrl(Pageview.AreaSettings.GetString("BookMeetingButtonLink")) + "?storeBookingIdQuery=" + storeId; 61 62 var storeService = new StoreService(); 63 var openingHours = storeService.GetStoreOpeningHours(storeId); 64 65 string deviceType = Pageview.Device.ToString(); 66 string employeeColums = "col-sm-4"; // standard 3 columns "Desktop" 67 if (deviceType == "Mobile") 68 { 69 employeeColums = "col-sm-12"; 70 } 71 else if (deviceType == "Tablet") 72 { 73 employeeColums = "col-sm-6"; 74 } 75 76 var openingHoursCounter = 1; 77 78 var currentLanguage = Pageview.Area.CultureInfo.Name; 79 } 80 81 <section class="store-detail"> 82 <div class="container"> 83 <div class="row"> 84 <div class="col-xs-12"> 85 <a href="@backToStoreList" class="store-detail__back"> 86 <span class="circle-icon circle-icon--green circle-icon--left"> 87 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 88 <use xlink:href="/dist/icons/icons.svg#arrow-right"></use> 89 </svg> 90 </span>@Translate("BackToStores", "Tilbage til oversigt") 91 </a> 92 </div> 93 </div> 94 <div class="row"> 95 <div class="col-xs-12 col-sm-7 col-md-6"> 96 <h2 class="h2 h-no-margin">@storeName</h2> 97 <ul class="store-detail__anchor-links"> 98 <li class="store-detail__anchor-link-item"> 99 <a href="#app" class="store-detail__anchor-link"> 100 <span class="circle-icon circle-icon--small"> 101 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 102 <use xlink:href="/dist/icons/icons.svg#arrow-right"></use> 103 </svg> 104 </span> 105 @Translate("FindStore", "Find") @storeName 106 </a> 107 </li> 108 <li class="store-detail__anchor-link-item"> 109 <a href="#opening-hours" class="store-detail__anchor-link"> 110 <span class="circle-icon circle-icon--small"> 111 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 112 <use xlink:href="/dist/icons/icons.svg#arrow-right"></use> 113 </svg> 114 </span> 115 @Translate("OpeningHours", "Åbningstider") 116 </a> 117 </li> 118 </ul> 119 <div class="store-detail__text"> 120 <div class="rte"> 121 @storeDescription 122 </div> 123 @if (!string.IsNullOrEmpty(storeId) && !isB2BStore) 124 { 125 <a href="@bookLink" property="url" class="button button--ghost-black button--default-width"> 126 @Translate("General.BookMeeting", "Book møde") 127 </a> 128 } 129 </div> 130 </div> 131 <div class="col-xs-12 col-sm-5 col-md-5 col-lg-5 col-md-offset-0 store-detail__col2"> 132 @{ 133 var getChildPages = Services.Pages.GetPagesByParentID(Pageview.ID); 134 var getFirstPageId = @getChildPages.First().ID; 135 136 var paragraphService = new ParagraphService(); 137 var getParagraphs = paragraphService.GetParagraphsByPageId(getFirstPageId); 138 var getFirstParagraph = getParagraphs.First().ID; 139 } 140 @RenderParagraphContent(getFirstParagraph) 141 142 <h6 class="h6 h-no-margin" id="address">@storeName</h6> 143 <div class="store-detail__address"> 144 @storeAddress @storeAddressNr<br> 145 @storeZip @storeCity<br> 146 </div> 147 <div class="store-detail__contact-links"> 148 <a title="Telefonnummer" href="tel:@storePhone.ToString().Replace(" ", "")" id="store-detail__contact-link--phone" class="store-detail__contact-link store-detail__contact-link--phone"> 149 <span class="circle-icon circle-icon--green"> 150 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 151 <use xlink:href="/dist/icons/icons.svg#phone"></use> 152 </svg> 153 </span>@storePhone 154 </a> 155 <a title="E-mail" href="mailto:@storeEmail" class="store-detail__contact-link store-detail__contact-link--email"> 156 <span class="circle-icon circle-icon--green"> 157 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 158 <use xlink:href="/dist/icons/icons.svg#mail"></use> 159 </svg> 160 </span>@storeEmail 161 </a> 162 </div> 163 @if (openingHours.Any()) 164 { 165 <h6 class="h6" id="opening-hours">@Translate("OpeningHours", "Åbningstider")</h6> 166 <dl class="store-detail__opening-hours-list"> 167 @foreach (var day in openingHours) 168 { 169 170 var openingHour = day.Split(new[] { ':' }, 2); 171 var openingHourDay = openingHour[0]; 172 var openingHourHours = openingHour[1]; 173 174 <dt class="store-detail__opening-hours-date"> 175 <span aria-hidden="true" class="store-detail__opening-hours-day">@openingHourDay</span> 176 </dt> 177 <dd class="store-detail__opening-hours-time">@openingHourHours</dd> 178 179 } 180 </dl> 181 } 182 <h6 class="h6">@Translate("socialFollow", "Følg") @someShopName</h6> 183 <div class="store-detail__some-links"> 184 <ul class="some-link-list"> 185 186 @if (!String.IsNullOrWhiteSpace(someFacebookLink) && !isB2BStore && !storeFacebookHidden) 187 { 188 <li class="some-link-list__item"> 189 <a title="@someShopName @Translate("StoreDetail.OnFacebook", "på Facebook")" href="@someFacebookLink" target="_blank" class="some-link-list__link some-link-list__link--facebook"> 190 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 191 <use xlink:href="/dist/icons/icons.svg#some-facebook"></use> 192 </svg> 193 </a> 194 </li> 195 } 196 197 @if (!String.IsNullOrWhiteSpace(someInstagramLink) && !isB2BStore && !storeInstagramHidden) 198 { 199 <li class="some-link-list__item"> 200 <a title="@someShopName @Translate("StoreDetail.OnInstagram", "på Instagram")" href="@someInstagramLink" target="_blank" class="some-link-list__link some-link-list__link--instagram"> 201 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 202 <use xlink:href="/dist/icons/icons.svg#some-instagram"></use> 203 </svg> 204 </a> 205 </li> 206 } 207 208 @if (!String.IsNullOrWhiteSpace(somePinterestLink) && !isB2BStore && !storePinterestHidden) 209 { 210 <li class="some-link-list__item"> 211 <a title="@someShopName @Translate("StoreDetail.OnPinterest", "på Pinterest")" href="@somePinterestLink" target="_blank" class="some-link-list__link some-link-list__link--pinterest"> 212 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 213 <use xlink:href="/dist/icons/icons.svg#some-pinterest"></use> 214 </svg> 215 </a> 216 </li> 217 } 218 219 @if (!String.IsNullOrWhiteSpace(someLinkedInLink) && !storeLinkedInHidden) 220 { 221 <li class="some-link-list__item"> 222 <a title="@someShopName @Translate("StoreDetail.OnLinkedIn", "på LinkedIn")" href="@someLinkedInLink" target="_blank" class="some-link-list__link some-link-list__link--linkedin"> 223 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 224 <use xlink:href="/dist/icons/icons.svg#some-linkedin"></use> 225 </svg> 226 </a> 227 </li> 228 } 229 230 231 </ul> 232 233 </div> 234 @if (currentLanguage.ToLower() == "da-dk") 235 { 236 <div class="store-detail__trustpilot"> 237 <!-- TrustBox widget - Mini --> 238 <div class="trustpilot-widget" data-locale="da-DK" data-template-id="53aa8807dec7e10d38f59f32" data-businessunit-id="46907adc0000640005001122" data-style-height="120px" data-style-width="240px" data-theme="light" data-text-color="#2e2e2e"> 239 <a href="https://dk.trustpilot.com/review/www.designa.dk" target="_blank" rel="noopener">Trustpilot</a> 240 </div> 241 <!-- End TrustBox widget --> 242 </div> 243 } 244 </div> 245 </div> 246 </div> 247 <div class="container"> 248 <div class="row"> 249 <div class="col-12"> 250 <p></p> 251 </div> 252 </div> 253 </div> 254 <div class="container"> 255 <div class="row"> 256 257 @if (!string.IsNullOrEmpty(title)) 258 { 259 <div class="col-xs-12"> 260 <h2 class="row col-xs-12 col-md-6"> 261 @title 262 </h2> 263 </div> 264 <div class="col-xs-12"> 265 <div class="row col-xs-12 col-md-6"> 266 @if (!string.IsNullOrEmpty(description)) 267 { 268 @description 269 } 270 </div> 271 </div> 272 } 273 274 275 @if (deviceType == "Mobile") 276 { 277 <div class="col-xs-12 @employeeColums coworker-list__column"> 278 @RenderColumn(0, 1) 279 </div> 280 } 281 @if (deviceType == "Tablet") 282 { 283 <div class="col-xs-12 @employeeColums coworker-list__column"> 284 @RenderColumn(0, 2) 285 </div> 286 <div class="col-xs-12 @employeeColums coworker-list__column"> 287 @RenderColumn(1, 2) 288 </div> 289 } 290 @if (deviceType == "Desktop") 291 { 292 <div class="col-xs-12 @employeeColums coworker-list__column"> 293 @RenderColumn(0, 3) 294 </div> 295 <div class="col-xs-12 @employeeColums coworker-list__column"> 296 @RenderColumn(1, 3) 297 </div> 298 <div class="col-xs-12 @employeeColums coworker-list__column"> 299 @RenderColumn(2, 3) 300 </div> 301 } 302 </div> 303 </div> 304 305 @helper RenderColumn(int columnNumber, int columnCount) 306 { 307 int index = 0; 308 foreach (LoopItem employee in GetLoop("UserManagement:User.Item.Employees")) 309 { 310 foreach (LoopItem user in employee.GetLoop("UserManagement:User.Item.Employees.Employee")) 311 { 312 313 if (index % columnCount == columnNumber) 314 { 315 // Item values 316 var role = !string.IsNullOrEmpty(employee.GetString("UserManagement:User.Item.Employees.Role")) ? employee.GetString("UserManagement:User.Item.Employees.Role") : user.GetString("UserManagement:User.JobTitle"); 317 var contactEmail = !string.IsNullOrEmpty(employee.GetString("UserManagement:User.Item.Employees.ContactEmail")) ? employee.GetString("UserManagement:User.Item.Employees.ContactEmail") : user.GetString("UserManagement:User.Email"); 318 var about = employee.GetString("UserManagement:User.Item.Employees.About"); 319 320 // User values 321 var name = user.GetString("UserManagement:User.Name"); 322 var firstName = user.GetString("UserManagement:User.FirstName"); 323 var middleName = user.GetString("UserManagement:User.MiddelName"); 324 var lastName = user.GetString("UserManagement:User.LastName"); 325 var phone = user.GetString("UserManagement:User.Phone"); 326 var image = user.GetString("UserManagement:User.Image.Clean"); 327 328 <div class="coworker-list__item"> 329 <div class="coworker-list__image"> 330 <img class="employees__image" src="@image" /> 331 </div> 332 <div class="coworker-list__header"> 333 <div class="employees__name"> 334 @if (!string.IsNullOrEmpty(name)) 335 { 336 @name 337 } 338 else 339 { 340 @firstName 341 @middleName 342 @lastName 343 } 344 </div> 345 <div class="employees__role"> 346 @if (!string.IsNullOrEmpty(role)) 347 { 348 @role 349 } 350 </div> 351 </div> 352 <ul class="coworker-list__contactinfo-list"> 353 @if (!string.IsNullOrEmpty(phone)) 354 { 355 <li class="coworker-list__contactinfo-item"> 356 <a class="store-detail__contact-link store-detail__contact-link--phone" href="tel:@phone.ToString().Replace(" ", "")"> 357 <span class="circle-icon circle-icon--green"> 358 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 359 <use xlink:href="/dist/icons/icons.svg#phone"></use> 360 </svg> 361 </span> 362 @phone 363 </a> 364 </li> 365 } 366 @if (!string.IsNullOrEmpty(contactEmail)) 367 { 368 <li class="coworker-list__contactinfo-item"> 369 <a class="store-detail__contact-link store-detail__contact-link--email" href="mailto:@contactEmail"> 370 <span class="circle-icon circle-icon--green"> 371 <svg class="svg-icon some-link-list__svg" aria-hidden="true"> 372 <use xlink:href="/dist/icons/icons.svg#mail"></use> 373 </svg> 374 </span> 375 @contactEmail 376 </a> 377 </li> 378 } 379 </ul> 380 @if (!string.IsNullOrEmpty(about)) 381 { 382 <div class="coworker-list__about"> 383 <ul class="faq__list faq__list--coworker js-faq"> 384 <li class="faq__item" :class="{'faq__item--active':currentActive === 1}"> 385 <button class="faq__question" v-on:click="faqToggle(1)"> 386 @Translate("Coworker - More about", "Mere om") @firstName 387 <span v-cloak v-if="currentActive === 1" class="circle-icon circle-icon--minus faq__icon"></span> 388 <span v-else class="circle-icon faq__icon"> 389 <svg class="svg-icon faq__svg" aria-hidden="true"> 390 <use xlink:href="/dist/icons/icons.svg#plus"></use> 391 </svg> 392 </span> 393 </button> 394 <transition mode="out-in" name="faq-fade" 395 v-on:before-enter="beforeEnterFaq" 396 v-on:enter="enterFaq"> 397 <div class="faq__answer" v-cloak v-show="currentActive === 1"> 398 <div class="faq__answer-inner rte"> 399 @about 400 </div> 401 </div> 402 </transition> 403 </li> 404 </ul> 405 </div> 406 } 407 </div> 408 } 409 index++; 410 } 411 } 412 } 413 </section> 414 <script type="application/ld+json"> 415 { 416 "@@context": "https://schema.org", 417 "@@type": "Store", 418 "name": "@storeName", 419 "image": "@storeImageURL", 420 "address": { 421 "@@type": "PostalAddress", 422 "addressLocality": "@storeCity", 423 "postalCode": "@storeZip", 424 "streetAddress": "@storeAddress @storeAddressNr" 425 }, 426 "email": "@storeEmail", 427 "telephone": "@storePhone", 428 "openingHoursSpecification": [ 429 @foreach (var day in openingHours) 430 { 431 var openingHour = day.Split(':'); 432 var openingHourDay = openingHour[0]; 433 var openingHourHours = openingHour[1]; 434 var openHours = new string[] {}; 435 var open = ""; 436 var closing = ""; 437 438 if (openingHourHours.Contains('–')) 439 { 440 openHours = openingHourHours.Split('–'); 441 open = openHours[0].Replace('.', ':'); 442 closing = openHours[1].Replace('.', ':'); 443 } 444 else 445 { 446 open = openingHourHours; 447 closing = openingHourHours; 448 } 449 if(openingHoursCounter>1) { 450 <text>,</text> 451 } 452 <text> 453 { 454 "@@type": "OpeningHoursSpecification", 455 "closes": "@closing", 456 "dayOfWeek": "@openingHourDay", 457 "opens": "@open" 458 } 459 </text> 460 461 openingHoursCounter++; 462 } 463 ] 464 } 465 </script> 466