Karriere i Dalgas

I Dalgas arbejder vi med naturen i en international virksomhed med 700+ kolleger. Hos os får du et arbejdsliv i frihed. Hvor du kan bruge din faglighed og vokse i takt med dine ønsker. Friheden til at forme. Naturen til at gro.

Vores arbejdsplads

Måske du drømmer om fede projekter, ledelse og ansvar. Måske savner du godt kollegaskab og et sundt arbejdsmiljø. Uanset hvad, får du dygtige, erfarne kolleger med rødderne solidt plantet i en uhøjtidelig kultur og uformel omgangstone.

Et engageret fællesskab

Gennem personaleforeninger og fælles arrangementer bygger vi en stærk kultur, hvor du bliver en del af et engageret fællesskab.

Med både små og store events i løbet af året er der plads til alle. Events arrangeret lokalt på din arbejdsplads - eller på tværs af hele forretningen. Hos Dalgas er det fællesskabet der gør forskellen.

Tæt på naturen – tæt på dig

Med 700+ medarbejdere og mere end 20 lokationer arbejder vi på tværs af forretningen og på tværs af Europa på syv forskellige markeder. Vi krydser grænser – geografisk og fagligt – fordi vi tror på, at de bedste løsninger opstår i mødet mellem mennesker, perspektiver og erfaringer. Derfor har vi også en lokation tæt på dig. Så du kan skabe balance mellem arbejdsliv og privatliv.

Det grønne arbejde har flere nuancer end sort og hvid

Vi favner bredt. Men vores arbejde peger i den samme retning. Vi bygger en bæredygtig fremtid – med naturen som partner.  

Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Slider.cshtml"
System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at Dalgas.Custom.Services.ContentRelationService.GetRelatedPagesByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 81
   at Dalgas.Custom.Services.ContentRelationService.GetCaseCustomerStoriesByCurrentPage(Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 631
   at CompiledRazorTemplates.Dynamic.RazorEngine_763d294069f74252964c7daaece1d669.Execute() in D:\solutions\dalgas-production\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Slider.cshtml:line 140
   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.ViewModelTemplate<GridRowViewModel> 2 @using System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Web 6 @using Dalgas.Custom.Models.Content 7 @using Dalgas.Custom.Services 8 @using Dalgas.Custom.ViewModels.UI 9 @using Dynamicweb.Content 10 @using Dynamicweb.Frontend 11 @using Dynamicweb.Ecommerce.ProductCatalog 12 @using Page = Dynamicweb.Content.Page 13 14 @using System 15 @using System.Collections.Generic 16 @using System.Linq 17 @using Dalgas.Custom.ViewModels.UI 18 @using Dynamicweb.Content 19 @using Dynamicweb.Ecommerce.ProductCatalog 20 @using Dynamicweb.Frontend 21 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 22 23 @*TODO: Move these functions onto the model *@ 24 25 @functions 26 { 27 28 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 29 { 30 var returnValues = new List<string> 31 { 32 $"item_{model.Item.SystemName.ToLower()}" 33 }; 34 35 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 36 { 37 returnValues.Add("dalgas-section-first-on-page"); 38 } 39 40 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 41 42 if (!string.IsNullOrEmpty(overwriteTheme)) 43 { 44 sectionBackgroundTheme = overwriteTheme; 45 } 46 47 // Add theme class if it exists 48 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 49 { 50 if (sectionBackgroundTheme.Contains("default")) 51 { 52 returnValues.Add("theme theme-light"); 53 } 54 else 55 { 56 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 57 } 58 } 59 60 // Determine if top padding should be removed 61 62 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 63 64 returnValues.Add("pb-6"); 65 if (removeTopPadding != "enable") 66 { 67 returnValues.Add("pt-6"); 68 } 69 70 return string.Join(" ", returnValues); 71 } 72 73 } 74 75 76 @{ 77 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 78 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 79 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 80 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 81 82 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 83 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 84 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 85 bool hasHeading = headings.Any(); 86 bool hasButton = buttons.Any(); 87 88 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 89 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 90 91 var sectionClassList = GetSectionClassList(Model); 92 93 var image = string.Empty; 94 var imageParameters = new Dictionary<string, object>(); 95 96 string layout = string.Empty; 97 Boolean enableFifthElement = false; 98 if (Model?.Item != null) 99 { 100 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 101 102 if (paragraphLayout != null) 103 { 104 layout = paragraphLayout.GetString("Layout"); 105 106 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 107 } 108 } 109 110 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 111 { 112 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 113 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 114 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 115 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 116 string cssPosition = $"{xPos}% {yPos}%"; 117 imageParameters.Add("style", "object-position:" + cssPosition); 118 } 119 120 LinkViewModel imageLink = new LinkViewModel(); 121 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 122 { 123 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 124 } 125 126 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 127 } 128 129 130 @{ 131 string strTitle = string.Empty; 132 string strSummary = string.Empty; 133 string strImage = string.Empty; 134 string strLink = string.Empty; 135 DateTime strDate = new DateTime(); 136 137 var sliderTheme = Model.Item.GetString("SliderColorScheme"); 138 Page currentPage = PageView.Current().Page; 139 140 var queryResult = ContentRelationService.Instance.GetCaseCustomerStoriesByCurrentPage(); 141 142 var contentType = Model.Item.GetItem("Content")?.GetString("Content"); 143 144 if (contentType == "news") 145 { 146 queryResult = ContentRelationService.Instance.GetNewsByCurrentPage(); 147 } 148 149 object pageParentPageIdValue = null; 150 151 IList<ItemViewModel> sliderItems = Model.Item?.GetItem("Content")?.GetItems("Items") ?? Enumerable.Empty<ItemViewModel>().ToList(); 152 153 // Fetch PageParentPageId from queryResult 154 if (!sliderItems.Any() && queryResult != null && queryResult.Results.Any()) 155 { 156 pageParentPageIdValue = queryResult.Results.FirstOrDefault(dict => dict.ContainsKey("PageParentPageId"))?["PageParentPageId"]; 157 } 158 159 // Fetch PageParentPageId from sliderItems if it wasn't set by queryResult 160 if (pageParentPageIdValue == null && Model.Item != null && sliderItems.Any()) 161 { 162 string linkString = sliderItems?.FirstOrDefault()?.GetString("Link"); 163 164 if (!string.IsNullOrEmpty(linkString) && int.TryParse(linkString, out int sliderItemLink)) 165 { 166 int sliderItemParentPage = Services.Pages.GetPage(sliderItemLink).ParentPageId; 167 pageParentPageIdValue = sliderItemParentPage; 168 } 169 else 170 { 171 // Handle the case where linkString is not a valid integer or is null/empty 172 pageParentPageIdValue = null; // or assign a default value or handle error 173 } 174 } 175 176 ButtonViewModel btnViewModelViewAll = new ButtonViewModel 177 { 178 Id = "pageId_", 179 Url = "/Default.aspx?ID=" + pageParentPageIdValue, 180 Text = Translate("View all"), 181 Type = ButtonType.Link, 182 DisplayType = ButtonDisplayType.Secondary 183 }; 184 } 185 186 @{ 187 bool showImageOnly = true; // Assume showImageOnly is true initially 188 189 List<FileViewModel> imageList = new List<FileViewModel>(); // List to hold images for the modal 190 191 // Check if any title exists 192 var items = sliderItems.Any() ? sliderItems.Cast<object>() : queryResult.Results.Cast<object>(); 193 194 foreach (var item in items) 195 { 196 var resultDictionary = item as Dictionary<string, object>; 197 Page page = null; 198 if (resultDictionary != null && resultDictionary.TryGetValue("PageId", out object pageIdObj)) 199 { 200 if (int.TryParse(pageIdObj.ToString(), out int resultPageId)) 201 { 202 page = Services.Pages.GetPage(resultPageId); 203 } 204 } 205 206 string title = item is ItemViewModel sliderItem 207 ? sliderItem.GetString("Title") 208 : page?.Item["Title"].ToString(); 209 210 if (!string.IsNullOrEmpty(title)) 211 { 212 showImageOnly = false; 213 break; 214 } 215 } 216 217 FileViewModel sliderImage; 218 } 219 220 @if (queryResult.Results.Any() || sliderItems.Count > 0) 221 { 222 <section id="section-@Model.Id" class="@sectionClassList" data-swift-gridrow> 223 <div class="container-xl"> 224 <div class="row justify-content-center"> 225 <div class="col-12 col-lg-10"> 226 <div class="row"> 227 <div class="col-12 col-lg-6 mb-4"> 228 @if (!string.IsNullOrEmpty(Model.Item.GetItem("Content").GetString("Title"))) 229 { 230 <h2 class="mb-0 mb-lg-5">@Model.Item.GetItem("Content").GetString("Title")</h2> 231 } 232 @if (queryResult.Results.Count > 1 || sliderItems.Count > 1) 233 { 234 <div class="d-none d-lg-flex gap-3"> 235 <button type="button" title="@Translate("Previous slide")" class="dalgas-swiper-button-prev" style="z-index:1;"> 236 <span class="visually-hidden">@Translate("Previous slide")</span> 237 </button> 238 <button type="button" title="@Translate("Next slide")" class="dalgas-swiper-button-next" style="z-index:1;"> 239 <span class="visually-hidden">@Translate("Next slide")</span> 240 </button> 241 @if (showImageOnly) 242 { 243 <button type="button" class="btn btn-link no-arrow ms-2" data-bs-toggle="modal" data-bs-target="#imageOnlyModal"> 244 @Translate("View all images", "Se alle billeder") 245 </button> 246 } 247 </div> 248 } 249 </div> 250 <div class="col-12 col-lg-6 mb-4 d-inline-flex justify-content-end align-items-end d-none d-lg-flex"> 251 252 @if (sliderItems.Any() && !showImageOnly && contentType != "manual" || queryResult.Results.Any() && !showImageOnly && contentType != "manual") 253 { 254 @RenderModel(btnViewModelViewAll) 255 } 256 </div> 257 <div class="swiper-container row" data-show-image-only="@showImageOnly.ToString().ToLower()" data-normal-slider="true" data-initialized="false"> 258 <div class="swiper-wrapper"> 259 @{ 260 string slideButtonText = Translate("View the case story"); 261 if (contentType == "news") 262 { 263 slideButtonText = Translate("Read this news", "Læs nyheden"); 264 } else if (contentType == "manual") 265 { 266 slideButtonText = Translate("Read more", "Read more"); 267 } 268 269 ButtonViewModel btnViewResult = new ButtonViewModel 270 { 271 Text = slideButtonText, 272 Type = ButtonType.Link, 273 DisplayType = ButtonDisplayType.Secondary 274 }; 275 276 foreach (var result in items.Select((item, index) => new {Item = item, Index = index + 1})) 277 { 278 strTitle = string.Empty; 279 strSummary = string.Empty; 280 strImage = string.Empty; 281 strLink = string.Empty; 282 283 if (sliderItems.Any()) 284 { 285 var sliderItem = result.Item as ItemViewModel; 286 strTitle = sliderItem.GetString("Title"); 287 strSummary = sliderItem.GetString("Summary"); 288 strImage = sliderItem.GetString("Image"); 289 strLink = sliderItem.GetString("Link"); 290 btnViewResult.Id = "pageId_" + strLink; 291 if (strLink.Contains("https")) 292 { 293 btnViewResult.Url = strLink; 294 } 295 else 296 { 297 btnViewResult.Url = "/Default.aspx?ID=" + strLink; 298 } 299 } 300 else if (queryResult.Results.Any()) 301 { 302 var resultDictionary = result.Item as Dictionary<string, object>; 303 if (resultDictionary != null && resultDictionary.TryGetValue("PageId", out var pageIdObj) && int.TryParse(pageIdObj.ToString(), out int resultPageId)) 304 { 305 Page page = Services.Pages.GetPage(resultPageId); 306 strTitle = page.Item["Title"]?.ToString(); 307 strSummary = page.Item["Summary"]?.ToString(); 308 strImage = page.Item["CoverImage"] == null ? string.Empty : page.Item["CoverImage"]?.ToString(); 309 btnViewResult.Id = "pageId_" + resultPageId; 310 btnViewResult.Url = "/Default.aspx?ID=" + resultPageId; 311 if (page.Item["Date"] != null) 312 { 313 strDate = (DateTime) page.Item["Date"]; 314 } 315 } 316 } 317 318 int jpgIndex = strImage.IndexOf(".jpg", StringComparison.OrdinalIgnoreCase); 319 if (jpgIndex != -1) 320 { 321 strImage = strImage.Substring(0, jpgIndex + 4); 322 } 323 324 sliderImage = ViewModelFactory.CreateFieldFileValueView(strImage); 325 326 imageList.Add(sliderImage); // Add image to the list for the modal 327 328 329 <div class="swiper-slide d-flex flex-column"> 330 <div class="d-flex flex-column flex-column-reverse flex-md-row h-100"> 331 @if (showImageOnly == false) 332 { 333 <div class="col-md-6 theme @sliderTheme p-4 pt-5 p-lg-5 d-flex flex-column justify-content-between h-100"> 334 335 <div class="theme"> 336 @if (Model.Item.GetItem("Content").GetString("Content") == "news") 337 { 338 if (strDate != null) 339 { 340 var date = strDate; 341 var formattedDate = date.ToLongDateString(); 342 343 <div class="badge mb-5"> 344 @formattedDate 345 </div> 346 } 347 } 348 <h3> 349 <a class="text-decoration-none" href="@btnViewResult.Url">@strTitle</a> 350 </h3> 351 <p class="small">@strSummary</p> 352 </div> 353 <div> 354 @RenderModel(btnViewResult) 355 </div> 356 </div> 357 } 358 <div class="@(showImageOnly == false ? "col-md-6" : "col-md-12")"> 359 @if (showImageOnly) 360 { 361 <a href="#" data-bs-toggle="modal" data-bs-target="#imageOnlyModal"> 362 <figure class="ratio ratio-16x9 ratio-lg-4x3 h-100"> 363 @RenderPartial("Components/Image.cshtml", sliderImage ?? new FileViewModel()) 364 </figure> 365 </a> 366 } 367 else 368 { 369 <a href="@btnViewResult.Url"> 370 <figure class="ratio ratio-16x9 ratio-lg-4x3 h-100"> 371 @RenderPartial("Components/Image.cshtml", sliderImage ?? new FileViewModel()) 372 </figure> 373 </a> 374 } 375 </div> 376 </div> 377 <div class="d-flex pagination mt-3"> 378 @result.Index/@items.Count() 379 </div> 380 </div> 381 } 382 } 383 </div> 384 </div> 385 </div> 386 </div> 387 </div> 388 </div> 389 </section> 390 } 391 else 392 { 393 if (Pageview.IsVisualEditorMode) 394 { 395 <div class="container-xl alert alert-danger" role="alert"> 396 This <strong>@Model.Item.SystemName</strong> is empty 397 </div> 398 } 399 } 400 401 @if (showImageOnly) 402 { 403 <div class="modal fade" id="imageOnlyModal" tabindex="-1" aria-labelledby="imageOnlyModalLabel" aria-hidden="true" data-lenis-prevent> 404 <div class="modal-dialog modal-fullscreen"> 405 <div class="modal-content"> 406 <div class="modal-header"> 407 <h4 class="modal-title">@PageView.Current().Item["Title"]</h4> 408 <button type="button" class="btn" data-bs-dismiss="modal" aria-label="Close"> 409 @{ 410 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/dalgas/x.svg"; 411 412 if (!iconPath.ToLower().Contains("none") && iconPath != "") 413 { 414 <span class="icon-3 pe-none"> 415 @ReadFile(iconPath) 416 </span> 417 } 418 } 419 </button> 420 </div> 421 <div class="modal-body"> 422 <div class="masonry-container"> 423 @for (int i = 0; i < imageList.Count; i++) 424 { 425 <figure class="masonry-item"> 426 @RenderPartial("Components/Image.cshtml", imageList[i]) 427 </figure> 428 } 429 </div> 430 </div> 431 </div> 432 </div> 433 </div> 434 } 435

Tilmeld jobagent

Vores jobagent gør det nemt for dig at holde øje med de nyeste ledige stillinger. Tilmeld dig vores jobagent og få de bedste jobmuligheder direkte i din indbakke! 

Praktikanter, elever og lærlinge

Praktikanter

Bliv praktikant hos Dalgas og få styrket dine faglige og praktiske færdigheder. Du får et spændende praktikforløb på tværs af fagområder, hvor vi sætter fokus på naturværdier for mennesker, miljø og klima. Fra talent til ekspert på Den Grønne Gren. 

Elever og lærlinge

Drømmer du om at blive en del af noget større? Og være med til at gøre en forskel for naturen? Som elev eller lærling i Dalgas bliver du en del af et stærkt fællesskab, som arbejder for at beskytte og benytte naturen. Derfor kalder vi vores elever og lærlinge for fremtidens helte. 

No products in cart