
City & outdoor environment
Dalgas is an international company with broad expertise in the green sector. With headquarters in Denmark, there are services exclusively offered within Danish borders. Therefore, here you will find an overview of the services we offer in Denmark within urban and outdoor environments.

Green maintenance
We help nature along with professional maintenance and service of companies' green areas. With digital management tools as a natural part of our work, we ensure professional task management – whether grass needs cutting, paving needs cleaning, or areas need converting to nature management.
We also offer an all-in-one solution, where we take a holistic approach to the project.

Property services
Dalgas maintains your property's green areas and pavements – while also helping to keep track of tasks in your outdoor areas.
A nationwide network of service centres and suppliers is your guarantee for prompt service without compromising on quality.
Landscaper
With 50 years of experience in both small and large landscaping tasks, we have a solid team of professional landscapers at Dalgas. We handle planning and establishment for both new constructions and renovations for companies, on municipal areas, or at institutions.
We ensure a thorough process with a digital quality assurance system, where we tailor the solution to the company regardless of the task.

Winter services
Get delivery security, high quality, and emergency readiness 24/7 throughout Denmark when Dalgas moves out for winter services.
We clear snow and salt outdoor areas for companies so that everyone can move safely on paths, entrances, car parks, and other outdoor areas – without fall injuries.

Contractor and sewer contractor
We must use resources responsibly. Fortunately, together we can make a difference in both Sustainable Urban Drainage Systems (SUDS), earthworks and drainage, and sewerage.
Therefore, we have specialised employees who understand the importance of correct execution. Execution that not only meets a need right now but can also follow the company into the future.
Landscape architect
With our own landscape architects and a nationwide landscaping department, we combine project development with construction. Drawing with a digger. Pencil with a hammer.
In this way, we can, with expertise and experience, steer projects safely to the finish line, whether it is a sensory garden, outdoor school, or cycling playground. We are involved from idea development until the facility is ready for use.
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Contact.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.GetRelatedContactsByUrlAndParameters(String url, List`1 parameters, Int32 pageSize) in D:\a\1\s\Custom\Services\ContentRelationService.cs:line 274 at CompiledRazorTemplates.Dynamic.RazorEngine_ac72350d294e4455ab3c71e258ac016f.Execute() in E:\Solutions\dalgas\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Contact.cshtml:line 179 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<Dynamicweb.Frontend.GridRowViewModel> 2 @using System 3 @using System.Collections.Generic 4 @using System.Linq 5 @using System.Text.RegularExpressions 6 @using Dalgas.Custom.Extensions 7 @using Dalgas.Custom.Models.Content 8 @using Dalgas.Custom.Services 9 @using Dalgas.Custom.ViewModels.UI 10 @using Dynamicweb.Core.Encoders 11 @using Dynamicweb.Core.Json 12 @using Dynamicweb.Ecommerce.ProductCatalog 13 @using Dynamicweb.Frontend 14 @using Dynamicweb.Security.UserManagement 15 16 @using System 17 @using System.Collections.Generic 18 @using System.Linq 19 @using Dalgas.Custom.ViewModels.UI 20 @using Dynamicweb.Content 21 @using Dynamicweb.Ecommerce.ProductCatalog 22 @using Dynamicweb.Frontend 23 @using ParagraphService = Dalgas.Custom.Services.ParagraphService 24 25 @*TODO: Move these functions onto the model *@ 26 27 @functions 28 { 29 30 public string GetSectionClassList(GridRowViewModel model, string overwriteTheme = "") 31 { 32 var returnValues = new List<string> 33 { 34 $"item_{model.Item.SystemName.ToLower()}" 35 }; 36 37 if (Services.Grids.GetGridRowById(model.Id).Sort == 1) 38 { 39 returnValues.Add("dalgas-section-first-on-page"); 40 } 41 42 var sectionBackgroundTheme = model.Item.GetItem("ColorScheme")?.GetString("ColorScheme") ?? string.Empty; 43 44 if (!string.IsNullOrEmpty(overwriteTheme)) 45 { 46 sectionBackgroundTheme = overwriteTheme; 47 } 48 49 // Add theme class if it exists 50 if (!string.IsNullOrWhiteSpace(sectionBackgroundTheme)) 51 { 52 if (sectionBackgroundTheme.Contains("default")) 53 { 54 returnValues.Add("theme theme-light"); 55 } 56 else 57 { 58 returnValues.Add($"theme {sectionBackgroundTheme.Replace(" ", "").Trim().ToLower()}"); 59 } 60 } 61 62 // Determine if top padding should be removed 63 64 string removeTopPadding = model.Item.GetItem("ColorScheme")?.GetString("RemoveTopPadding"); 65 66 returnValues.Add("pb-6"); 67 if (removeTopPadding != "enable") 68 { 69 returnValues.Add("pt-6"); 70 } 71 72 return string.Join(" ", returnValues); 73 } 74 75 } 76 77 78 @{ 79 IEnumerable<HeadingViewModel> headings = ParagraphService.Instance.GetHeadingsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Headings")); 80 string text = Model.Item.GetItem("Paragraph_Text")?.GetString("Text"); 81 string lead = Model.Item.GetItem("Paragraph_Text")?.GetString("Lead"); 82 IEnumerable<ButtonViewModel> buttons = ParagraphService.Instance.GetButtonsByItems(Model.Item?.GetItem("Paragraph_Text")?.GetItems("Buttons")); 83 84 bool hasImage = Model.Item.GetItem("Paragraph_Image")?.GetFile("Image") != null; 85 bool hasText = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Text")); 86 bool hasLead = !string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Text")?.GetString("Lead")); 87 bool hasHeading = headings.Any(); 88 bool hasButton = buttons.Any(); 89 90 var theme = Model.Item.GetItem("ColorScheme")?.GetString("ColorScheme"); 91 var fifthElementTheme = "fifth-element-color-" + Model.Item?.GetItem("ColorScheme")?.GetString("FifthElementColor"); 92 93 var sectionClassList = GetSectionClassList(Model); 94 95 var image = string.Empty; 96 var imageParameters = new Dictionary<string, object>(); 97 98 string layout = string.Empty; 99 Boolean enableFifthElement = false; 100 if (Model?.Item != null) 101 { 102 var paragraphLayout = Model.Item.GetItem("Paragraph_Layout"); 103 104 if (paragraphLayout != null) 105 { 106 layout = paragraphLayout.GetString("Layout"); 107 108 enableFifthElement = !string.IsNullOrEmpty(paragraphLayout.GetString("Layout_FifthElement")); 109 } 110 } 111 112 if (!string.IsNullOrEmpty(Model.Item?.GetItem("Paragraph_Image")?.GetFile("Image")?.Path)) 113 { 114 image = Model.Item.GetItem("Paragraph_Image").GetFile("Image").Path; 115 imageParameters.Add("alt", Model.Item.GetItem("Paragraph_Image")?.GetString("ImageAltText")); 116 int xPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromLeft ?? 50; 117 int yPos = Model.Item.GetItem("Paragraph_Image").GetFile("Image")?.FocalPositionFromTop ?? 50; 118 string cssPosition = $"{xPos}% {yPos}%"; 119 imageParameters.Add("style", "object-position:" + cssPosition); 120 } 121 122 LinkViewModel imageLink = new LinkViewModel(); 123 if (Model.Item?.GetItem("Paragraph_Image")?.GetItem("Link") != null && !string.IsNullOrEmpty(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link").GetString("ButtonLink"))) 124 { 125 imageLink = ParagraphService.Instance.GetLinkByItem(Model?.Item?.GetItem("Paragraph_Image")?.GetItem("Link")); 126 } 127 128 string fifthElementIconPath = "/Files/Templates/Designs/Swift/Assets/Images/DalgasFifthElements/"; 129 } 130 131 132 @{ 133 QueryResult queryResult = new QueryResult(); 134 int numberOfPersons = Convert.ToInt32(Model.Item.GetItem("Paragraph_Layout").GetString("NumberOfPersons")); 135 bool showForm = Model.Item.GetItem("Paragraph_Layout").GetBoolean("ShowForm"); 136 bool showFacets = Model.Item.GetItem("Paragraph_Layout").GetBoolean("ShowFacets"); 137 bool showSearch = Model.Item.GetItem("Paragraph_Layout").GetBoolean("ShowSearch"); 138 139 string cardInformationLayout = Model.Item.GetItem("Paragraph_Layout").GetString("Layout"); 140 141 bool allowAllQueryItems = showFacets || showSearch; 142 int formParagraphId = Pageview.AreaSettings.GetLink("FormGetContacted").PageId; 143 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/"; 144 145 string formType = Model.Item.GetItem("Paragraph_Layout").GetString("FormType"); //Default or Microsoft 146 string formBlockId = Model.Item.GetItem("Paragraph_Layout").GetString("FormId"); // Microsoft form 147 string formContainerId = Model.Item.GetItem("Paragraph_Layout").GetString("ContainerId"); // Microsoft form 148 149 ButtonViewModel btnOpenForm = new ButtonViewModel 150 { 151 Id = "formParagraphId_" + formParagraphId, 152 Text = Translate("Contact me"), 153 Type = ButtonType.Button, 154 DisplayType = ButtonDisplayType.Primary, 155 Classes = new ClassList("js-show-paragraph-form") 156 }; 157 158 IList<UserViewModel> contactPersonListItems = Model.Item?.GetItem("Paragraph_Layout")?.GetUsers("ContactPersonSelector") ?? Enumerable.Empty<UserViewModel>().ToList(); 159 bool hasContactPersonListItems = contactPersonListItems.Any(); 160 List<User> users = new List<User>(); 161 List<string> userIds = new List<string>(); 162 163 if (hasContactPersonListItems) 164 { 165 userIds.AddRange(contactPersonListItems.Select(cp => cp.ID.ToString())); 166 allowAllQueryItems = false; 167 showFacets = false; 168 showSearch = false; 169 } 170 else 171 { 172 if (showFacets) 173 { 174 numberOfPersons = 12; 175 queryResult = ContentRelationService.Instance.GetAllContacts(numberOfPersons); 176 } 177 else 178 { 179 queryResult = ContentRelationService.Instance.GetRelatedContactsByCurrentPage(numberOfPersons); 180 } 181 182 userIds.AddRange(queryResult.Results.Select(qrr => qrr["UserID"]?.ToString())); 183 } 184 185 bool showPersons = Model.Item.GetItem("Paragraph_Layout").GetBoolean("showPersons") && userIds.Any(); 186 int pageNum = int.TryParse(Dynamicweb.Context.Current.Request["PageNum"], out int pageNumResult) ? pageNumResult : 1; 187 string searchTerm = Dynamicweb.Context.Current.Request["q"]; 188 List<FacetOption> selectedFacetOptions = new List<FacetOption>(); 189 int totaleCount = 0; 190 bool enableShowZeroResultMsg = true; 191 192 bool showAlternativeLayout = false; 193 194 if (showFacets && showSearch || showPersons && numberOfPersons >= 2 && userIds.Count >= 2 && showForm || showPersons && numberOfPersons >= 3 && userIds.Count >= 3 && !showForm) 195 { 196 showAlternativeLayout = true; 197 } 198 } 199 200 201 @if (queryResult.FacetGroups.Any() || hasContactPersonListItems || showForm) 202 { 203 <section id="section-@Model.Id" class="@sectionClassList item_@Model.Item.SystemName.ToLower()" data-swift-gridrow> 204 <div class=""> 205 206 <div class="container-xl"> 207 <div class="row justify-content-center"> 208 <div class="col-12"> 209 <div class="row"> 210 211 <div class="col-12 @(showAlternativeLayout ? "flex-column flex-lg-row mb-5" : "col-lg-4 flex-column") d-flex justify-content-between"> 212 <div class="js-content-container content-container col-12 @(showAlternativeLayout ? "col-lg-5" : string.Empty)"> 213 214 <span> 215 @string.Join("", headings.Select(h => h.ToString())) 216 </span> 217 218 @if (!string.IsNullOrEmpty(lead)) 219 { 220 <p class="lead">@lead</p> 221 } 222 223 @text 224 225 </div> 226 <div class="js-content-container content-container @(showAlternativeLayout ? "col-lg-5 d-inline-flex justify-content-lg-end align-items-end" : string.Empty)"> 227 <div class="d-flex flex-wrap gap-3 @(showAlternativeLayout ? "mb-4" : "mb-4 mb-lg-0")"> 228 @foreach (ButtonViewModel button in buttons) 229 { 230 @button 231 } 232 </div> 233 </div> 234 </div> 235 236 <div class="col"> 237 <div class="position-relative g-4 js-card-person-container js-dalgas-queryresult-container" id="@($"query-result-{Model.Id}")"> 238 239 @if (allowAllQueryItems) 240 { 241 totaleCount = queryResult.TotalCount; 242 } 243 244 <form method="post" action="@Pageview.SearchFriendlyUrl" data-response-target-element="content" tabindex="-1" aria-hidden="false" class="d-flex js-dalgas-facets-form dalgas-facets-form" data-total-count="@totaleCount" data-page-size="@numberOfPersons"> 245 <input type="hidden" name="LayoutTemplate" value="Designs/Swift/Swift_PageClean.cshtml"/> 246 <input type="hidden" name="PageNum" value="@pageNum"/> 247 @if (showFacets) 248 { 249 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 250 { 251 foreach (Facet facet in facetGroup.Facets) 252 { 253 string showClass = " show"; 254 string ariaExpanded = "true"; 255 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty); 256 257 258 if (facet.Options.Any()) 259 { 260 int selectedFacetsInGroup = 0; 261 262 foreach (FacetOption option in facet.Options) 263 { 264 if (option.Selected) 265 { 266 selectedFacetsInGroup++; 267 } 268 } 269 270 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 271 272 <div class="dropdown js-facets-selector"> 273 <button class="btn dropdown-toggle" type="button" id="FacetGroup_@facetGroupId" data-bs-toggle="dropdown" aria-expanded="false"> 274 @label 275 </button> 276 <div data-lenis-prevent class="dropdown-menu p-3" aria-labelledby="FacetGroup_@facetGroupId" style="min-width: 280px"> 277 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 278 { 279 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 280 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 281 string selected = facetOption.Selected ? "checked" : string.Empty; 282 string facetValue = Uri.UnescapeDataString(facetOption.Value); 283 string optionValue = $"[{facetValue}]"; 284 285 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 286 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 287 288 <label class="form-check mt-1" @disabled> 289 <input type="checkbox" onclick="custom.QueryResult.update(event)" class="form-check-input" name="@facet.QueryParameter" value="@optionValue" data-filter-value="@facetLabel" @selected> 290 <span class="form-check-label d-flex align-items-center"> 291 <span class="flex-fill">@facetLabel </span> 292 <small class="opacity-85">@facetOption.Count</small> 293 </span> 294 </label> 295 296 if (facetOption.Selected) 297 { 298 FacetOption selectFacetOption = facetOption; 299 selectFacetOption.Name = facet.QueryParameter; 300 selectedFacetOptions.Add(selectFacetOption); 301 } 302 } 303 </div> 304 </div> 305 } 306 } 307 } 308 309 if (!string.IsNullOrEmpty(searchTerm)) 310 { 311 selectedFacetOptions.Add(new FacetOption() 312 { 313 Count = 1, 314 Label = searchTerm, 315 Name = "q", 316 Selected = true, 317 Value = searchTerm 318 }); 319 } 320 } 321 322 @if (showSearch) 323 { 324 <div class="type-ahead-dropdown"> 325 <div class="position-relative suggest-form"> 326 <span class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 327 @ReadFile(iconPath + "search.svg") 328 </span> 329 330 <input id="searchField_@Model.Id" 331 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 332 type="search" 333 placeholder="@Translate("Enter postcode or name of person")" 334 autocomplete="off" 335 maxlength="255" 336 name="q" 337 minlength="3" 338 value="@searchTerm" 339 data-original="@searchTerm"> 340 341 <button type="button" 342 onclick="custom.QueryResult.clearSearchField(event)" 343 class="btn h-100 icon-2 reset-search" 344 aria-label="@Translate("Clear search")" 345 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 346 @ReadFile(iconPath + "x.svg") 347 </button> 348 </div> 349 </div> 350 <input type="submit" onclick="custom.QueryResult.update(event)" class="btn btn-primary col-md-2" value="@Translate("Search", "Search")"> 351 } 352 </form> 353 354 @if (showFacets && selectedFacetOptions.Any()) 355 { 356 <div class="mt-3 d-flex gap-3 mb-4 js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container"> 357 @foreach (FacetOption facetOption in selectedFacetOptions) 358 { 359 string facetValue = Uri.UnescapeDataString(facetOption.Value); 360 string optionValue = $"[{facetValue}]"; 361 <input class="visually-hidden" id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" name="@facetOption.Name" onclick="custom.QueryResult.deselectFacetOption(event)" type="checkbox" value="@optionValue" title="@facetOption.Label" checked> 362 <label class="badge theme border border-dark" for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 363 <span class="text-nowrap">@(facetOption.Label)</span> 364 <span class="icon-2 ms-2"> 365 @ReadFile(iconPath + "x.svg") 366 </span> 367 </label> 368 } 369 370 @if (selectedFacetOptions.Count >= 3) 371 { 372 <input class="visually-hidden" id="ClearAll" name="ClearAll" onclick="custom.QueryResult.clearAll(event)" type="checkbox" value="" title="" checked> 373 <label class="badge text-nowrap dalgas-btn-clear-all" for="ClearAll"> 374 <span class="text-nowrap">@Translate("Clear all")</span> 375 <span class="icon-2 ms-2"> 376 @ReadFile(iconPath + "x.svg") 377 </span> 378 </label> 379 } 380 </div> 381 } 382 383 @if (showFacets && selectedFacetOptions.Any() == false && string.IsNullOrEmpty(searchTerm)) 384 { 385 enableShowZeroResultMsg = false; 386 userIds = new List<string>(); 387 } 388 389 @if (showFacets && enableShowZeroResultMsg && userIds.Any() == false) 390 { 391 <div class="mt-4">@Translate("Your search returned no results...")</div> 392 } 393 394 395 @if (showPersons && userIds.Any() || showPersons && hasContactPersonListItems) 396 { 397 <div class="row @(showAlternativeLayout ? "g-4" : "mt-3") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist"> 398 399 @foreach (string userId in userIds) 400 { 401 if (!int.TryParse(userId, out int intUserId)) 402 { 403 continue; 404 } 405 406 //UserViewModel result = new UserViewModel(); 407 408 User result = User.GetUserByID(intUserId); 409 410 if (result == null) 411 { 412 continue; 413 } 414 415 UserViewModel resultViewModel = result.ToViewModel(); 416 417 <div class="col-12 js-col-card-person col-lg @(showAlternativeLayout ? "col-lg-4" : "")"> 418 419 @{ 420 FileViewModel imageFile = ViewModelFactory.CreateFieldFileValueView(result.Image); 421 } 422 423 <div class="theme theme-light h-100"> 424 <div class="p-img-container d-flex"> 425 <figure class="ratio ratio-1x1 @(!string.IsNullOrEmpty(result.Image) ? "has-image" : string.Empty)"> 426 @RenderPartial("Components/Image.cshtml", imageFile ?? new FileViewModel()) 427 </figure> 428 <figure class="ratio ratio-1x1"> 429 <span class="fifth-element @fifthElementTheme opacity-50"> 430 @ReadFile(fifthElementIconPath + "canopy.svg") 431 </span> 432 </figure> 433 </div> 434 <div class="p-txt-container p-4 pt-5"> 435 <h4>@resultViewModel.Name</h4> 436 437 @if (cardInformationLayout == "title-and-description") 438 { 439 <div class="small d-flex flex-column mb-3 opacity-75"> 440 <span>@resultViewModel.GetJobTitle()</span> 441 @if (!string.IsNullOrEmpty((string) resultViewModel.CustomFields["AccessUser_Description"].Value)) 442 { 443 <span class="mt-3">@resultViewModel.CustomFields["AccessUser_Description"].Value</span> 444 } 445 </div> 446 } 447 else 448 { 449 <div class="small d-flex flex-column mb-3 opacity-75"> 450 <span>@resultViewModel.GetJobTitle()</span> 451 <span>@resultViewModel.GetDepartment()</span> 452 453 @if (resultViewModel.GetLocations().Any()) 454 { 455 foreach (var test in resultViewModel.GetLocations()) 456 { 457 @test.Text 458 } 459 } 460 461 <span>@resultViewModel.GetComment()</span> 462 </div> 463 464 465 if (!string.IsNullOrEmpty(resultViewModel.GetContactEmail())) 466 { 467 <div class="d-flex gap-3 small opacity-75"> 468 <span>E.</span> 469 <a style="font-size: 1em" class="text-decoration-none" href="mailto:@resultViewModel.GetContactEmail()">@resultViewModel.GetContactEmail().ToLower()</a> 470 </div> 471 } 472 if (!string.IsNullOrEmpty(resultViewModel.Phone)) 473 { 474 <div class="d-flex gap-3 small opacity-75"> 475 <span>T.</span> 476 <span>@resultViewModel.Phone</span> 477 </div> 478 } 479 } 480 </div> 481 </div> 482 483 </div> 484 } 485 @if (showForm) 486 { 487 <div class="col-12 js-col-card-person col-lg"> 488 489 <div class="h-100 contact-person-card js-contact-person-card"> 490 491 <div class="card-front theme theme-light "> 492 <div class="p-img-container d-none d-lg-flex"> 493 <figure class="ratio ratio-1x1"> 494 @* Empty space *@ 495 </figure> 496 <figure class="ratio ratio-1x1"> 497 <span class="fifth-element @fifthElementTheme opacity-50"> 498 @ReadFile(fifthElementIconPath + "canopy.svg") 499 </span> 500 </figure> 501 </div> 502 <div class="p-txt-container p-4 pt-6"> 503 <h4>@Translate("Get Contacted")</h4> 504 505 <div class="small d-flex flex-column mb-3 opacity-75"> 506 @Translate("Dalgas - Get Contacted - Card Text", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo.") 507 </div> 508 509 @RenderModel(btnOpenForm) 510 </div> 511 </div> 512 <div class="card-back theme theme-light "> 513 514 @if (formParagraphId != null) 515 { 516 <div class="contact-person-form-container js-contact-person-form-container theme p-4"> 517 518 519 @if (formType == "microsoft") 520 { 521 <div class="js-remove-microsoft-form-styling microsoft-form-container"> 522 <script src="https://cxppusa1formui01cdnsa01-endpoint.azureedge.net/eur/FormLoader/FormLoader.bundle.js" crossorigin="anonymous" defer></script> 523 <div data-cached-form-url="https://assets-eur.mkt.dynamics.com/@formBlockId/digitalassets/forms/@formContainerId" data-form-api-url="https://public-eur.mkt.dynamics.com/api/v1.0/orgs/@formBlockId/landingpageforms" data-form-id="@formContainerId"></div> 524 </div> 525 } 526 else 527 { 528 @RenderParagraphContent(formParagraphId) 529 } 530 531 532 </div> 533 } 534 535 </div> 536 537 </div> 538 </div> 539 } 540 </div> 541 542 if (allowAllQueryItems && totaleCount > numberOfPersons) 543 { 544 <div class="row mt-4"> 545 <div class="col-12 text-center"> 546 <button onclick="custom.QueryResult.getNextPage(event)" class="btn btn-primary">@Translate("Vis flere")</button> 547 </div> 548 </div> 549 } 550 } 551 else 552 { 553 if (showForm) 554 { 555 <div class="col-12 col-lg"> 556 557 @if (formParagraphId != null) 558 { 559 if (formType == "microsoft") 560 { 561 if (Pageview.IsVisualEditorMode) 562 { 563 <div class="container-xl alert alert-danger" role="alert"> 564 <h4>Use the "Microsoft Form" Paragraph instead</h4> 565 <p>Due to technical limitations within Microsoft Form Markup & Styling, we prefer that you use the "Microsoft Form" item instead, when you have no contact persons attatched this Contact Paragraph.</p> 566 <p>We are showing the default form in the frontend.</p> 567 </div> 568 } else { 569 @RenderParagraphContent(formParagraphId) 570 } 571 } 572 else 573 { 574 @RenderParagraphContent(formParagraphId) 575 } 576 } 577 </div> 578 } 579 } 580 </div> 581 </div> 582 </div> 583 </div> 584 </div> 585 </div> 586 </div> 587 </section> 588 } 589 else 590 { 591 if (Pageview.IsVisualEditorMode) 592 { 593 <div class="container-xl alert alert-danger" role="alert"> 594 This <strong>@Model.Item.SystemName</strong> is empty 595 </div> 596 } 597 } 598
How we work with nature-based solutions
End-to-end solutions for your ESG strategy
Our nature-based solutions restore ecosystems and promote sustainability through innovative actions. We develop tailored projects that benefit the environment and contribute to your company’s ESG strategy.
With a complete service – from advice to implementation and monitoring – we ensure that the projects are based on the latest knowledge and best practices. We help realise ambitious ecosystem restoration projects, ensure compliance, and create visible results that strengthen your ESG profile and brand.
How we work with biodiversity
A digital and data-driven approach
At Dalgas, we create habitats where different species can thrive and contribute to a healthy and robust ecosystem. A diverse ecosystem that promotes both nature’s and people’s well-being.
We combine data, scientific knowledge, and practical experience to ensure that your biodiversity project has a positive and lasting impact on nature. Therefore, documentation and monitoring are central elements in our work. And you can use the data in your ESG reporting.

We create value for your industry
Dalgas solves all types of green tasks in a range of different industries and sectors across services. We have the experience, machinery, and references that ensure you the best possible solution.