Warum in Wälder investieren?
Waldinvestitionen sind eine sichere Investition mit geringem Risiko und langfristiger Perspektive. Wir tätigen Waldinvestitionen in Estland, Lettland, Litauen, Deutschland und Dänemark für private Investoren, Familienbüros oder institutionelle Investoren. Als Investor haben Sie die volle Kontrolle über Ihre Waldinvestitionen und können von unseren 150 Jahren Erfahrung in der Forstwirtschaft profitieren.
Ihre FAQ zu Waldinvestitionen
Als Teil Ihrer Anlagestrategie empfehlen wir das Land, das am besten für Ihre Investition geeignet ist. Wir basieren dies unter anderem auf Ihren Wünschen, kurz- und langfristigen Zielen und den lokalen Gegebenheiten.
Normalerweise gründen wir ein Unternehmen in dem Staat, in dem Sie investieren möchten. Das Unternehmen erwirbt dann die Waldgrundstücke in dem von Ihnen festgelegten Umfang.
Möchten Sie ein aktiver Waldbesitzer sein und an der täglichen Verwaltung Ihres Waldbesitzes teilnehmen? Oder möchten Sie die Verwaltung lieber Dalgas überlassen? Wir verwalten den Forstbetrieb sowie das Unternehmen und sogar das Bankkonto – alles hängt von unserer Vereinbarung ab. Sie entscheiden – wir sind flexibel.
Die erwartete Rendite beträgt 5-6 %, wenn Sie über Dalgas investieren. Die Rendite ist ungehebeltes Nettoergebnis nach allen Kosten.
Für Dänemark und Deutschland sollten Sie eine niedrigere Rendite erwarten als in Estland, Lettland und Litauen. Es hängt jedoch von der einzelnen Investition ab.
Unsere Kunden haben unterschiedliche Renditen erzielt, aber keiner hat in unseren 25 Jahren Geschichte Verluste erlitten.
- Mehr als 2/3 unserer Investoren haben über 10 % IRR erzielt
- Etwa 1/5 haben 6-8 % IRR erzielt
- Unter 1/10 haben 2-4 % IRR erzielt
Alle von uns verwalteten Wälder sind nach PEFC oder FSC® zertifiziert – zwei weltweit anerkannte Forstzertifizierungssysteme.
Dies garantiert, dass das gesamte geerntete Holz nachhaltig produziert wird und dass wir bei unserer Forstwirtschaft:
- gefährdete Naturräume schützen
- weniger Kubikmeter Holz ernten als jährlich nachwächst
- Totholz für Insekten und Pilze hinterlassen
- neue Generationen nach der Ernte reifer Bäume sichern
Investitionen in die baltische Forstwirtschaft gelten als ebenso sicher wie in jedem anderen europäischen Land. Estland, Lettland und Litauen sind Mitglieder der NATO, der EU und der Eurozone. Daher hat Ihre Investition hier die gleichen Vorteile wie im übrigen Europa.
Die baltischen Länder sind bekannt für ihre offenen, modernen Volkswirtschaften mit überdurchschnittlichem Wachstum und hohen Transparenzratings. Gleichzeitig sind die Eigentumsrechte sicher und gut dokumentiert, mit vollständig digitalisierten Systemen. Außerdem haben Sie niedrige Transaktionskosten beim Handel mit Immobilien.
In Estland, Lettland und Litauen sind die Jagdrechte nicht an den Besitz der Wälder gebunden. Dies bedeutet, dass Sie die Jagdrechte an den Waldgrundstücken nicht erwerben, wenn Sie über Dalgas investieren.
Die erwartete Rendite von 5-6 % IRR hängt daher nicht von der Jagd ab, sondern wird ausschließlich durch die Forstwirtschaft und den Anstieg des Immobilienwerts erzielt.
Anders verhält es sich in Deutschland und Dänemark, wo die Jagdrechte normalerweise mit dem Besitz des Waldes verbunden sind. Daher können Sie (mit einigen Vorbehalten) in den Wäldern jagen, wenn Sie in Deutschland oder Dänemark investieren.
Dalgas bietet Investitionen mit geringem Risiko. Investitionen in Immobilien, Landwirtschaft und Forstwirtschaft wurden stets als sichere Investitionen mit geringem Risiko anerkannt. Waldinvestitionen über Dalgas sind keine Ausnahme. Historisch haben wir eine stabile Entwicklung der Holzpreise und der Werte von Waldgrundstücken gesehen.
Risiken wie Waldbrände oder schwere Insektenbefälle sind relativ gering, da die semi-natürlichen Mischwälder im Ostseeraum eine hohe Widerstandsfähigkeit zeigen. Darüber hinaus ist Ihre Investition typischerweise geografisch auf mehrere Grundstücke verteilt, was das Risiko weiter vermindert.
Ein relativ niedriger Waldpreis. Dies ist der größte Vorteil, da der Preis hier erheblich niedriger ist als beispielsweise in den nordischen Ländern. Waldgrundstücke in Estland, Lettland und Litauen werden nach ihrem kommerziellen Potenzial zur Holzerzeugung bewertet. Das bedeutet, dass Freizeitinteressen oder Jagdinteressen den Preis nicht in die Höhe treiben, wie es in anderen Teilen Europas vorkommen kann.
Darüber hinaus gilt die baltische Holzindustrie als eine der modernsten und effizientesten der Welt und ist gut in den internationalen Holzmarkt integriert. Daher ist der Absatz von Rohholz aus Ihren Waldgrundstücken gesichert.
In Estland, Lettland und Litauen werden Wälder nach dem Wert des aktuellen Holzbestands und den Wachstumsbedingungen bewertet. Die Preise werden kaum durch Freizeitinteressen oder Jagdwerte beeinflusst.
Geografische Aspekte wie die Nähe zur Industrie oder zum Hafen beeinflussen jedoch den Preis. Kontaktieren Sie uns, um aktuelle Preise für verschiedene Grundstücke zu erfahren.
Fichte, Kiefer, Birke, Erle und Aspe sind die am häufigsten angebauten Arten in der baltischen Forstwirtschaft.
Produkte wie Furnier, Bauholz, Brennholz, Papier und Biomasse werden aus diesen Arten hergestellt. Wir erwarten, dass die Nachfrage in den kommenden Jahren steigen wird. Daher erwarten wir, dass der Wert des Waldes in Zukunft sicher ist.
Wir haben in den letzten zehn Jahren einen stabilen Anstieg der Holzpreise gesehen – in den letzten Jahren sind die Preise allgemein gestiegen.
Die Gesellschaft stellt auf eine biobasierte Wirtschaft um, und es wird notwendig sein, fossile Brennstoffprodukte durch biobasierte Produkte zu ersetzen. Daher erwarten wir in Zukunft eine vorteilhafte Preisentwicklung für Holzprodukte.
Die Rendite Ihrer Investition wird durch das Wachstum der Bäume und den Anstieg des Immobilienwerts generiert.
Das Wachstum der Bäume ist sowohl stabil als auch vorhersehbar. Daher können Sie jedes Jahr eine Menge Holz ernten, ohne den Wald zu leeren. Die meisten Holzprodukte werden an die lokale Industrie verkauft, wo sie zu raffinierten Holzprodukten wie Sparren, Furnier, Verpackungsprodukten und Papier verarbeitet werden.
Jedes Jahr bewerten wir den Wert Ihres Grundstücks, wobei das allgemeine Wirtschaftswachstum eine stabile Wertsteigerung der Immobilien sichert. Der Wert Ihres Waldes kann jedoch auch durch eine erhöhte Nachfrage nach Wald oder Holz und Kapitalzuwachs aus jüngeren Kulturen steigen.
Sie müssen eine bestimmte Menge an Wald besitzen, bevor es rentabel ist, zu verwalten und zu handeln. Bei Dalgas haben wir die Eintrittsgrenze auf 1.000.000 Euro festgelegt, um dies zu gewährleisten. Wenn Sie einen kleineren Betrag investieren möchten, können wir Sie an Partner verweisen, die eine Investition in Wälder anbieten, die von Dalgas verwaltet werden.
Ihre Investition bei Dalgas besteht aus Waldgrundstücken, die Sie jederzeit wieder verkaufen können. Es gibt keine Bindungsfrist, was bei ähnlichen langfristigen Investitionen üblich ist.
Sie müssen einen Käufer für Ihren Waldbesitz auf dem offenen Immobilienmarkt finden. Glücklicherweise gibt es in Estland, Lettland und Litauen einen sehr aktiven Waldmarkt, auf dem sowohl Privatpersonen, Investmentgesellschaften als auch Holzindustrien aktiv sind. Sie sollten daher in der Lage sein, Ihren Wald innerhalb einer angemessenen Zeit wieder zu verkaufen, wenn Sie sich entscheiden, sich aus Ihrer Investition zurückzuziehen. Durch das große Netzwerk von Dalgas ist es auch möglich, die Wälder schnell oder diskret zu verkaufen, wenn dies bevorzugt wird.
Investition in Wald mit dokumentiertem Nettowachstum
Wenn man in Wald investiert, kann das Nettowachstum durch die CO2-Bindung im ESG-Bericht (Umwelt, Soziales und Unternehmensführung) des Unternehmens erfasst und dokumentiert werden. Dies ist sinnvoll, wenn die positiven Auswirkungen des Waldes zu den anderen Emissionen des Unternehmens erheblich* sind und konkrete Maßnahmen** ergriffen wurden, um die eigenen fossilen Emissionen des Unternehmens erheblich zu reduzieren (d.h. der Hierarchie der Schadensminderung folgen).
*) Der Investor muss präzisieren, was mit "erheblicher Wirkung" im Verhältnis zu den anderen Emissionen des Unternehmens gemeint ist. Die Wirkung muss quantifizierbar und überprüfbar sein.
**) Es muss verständlich dargelegt werden, welche konkreten Maßnahmen der Investor ergriffen hat, um seine fossilen Emissionen zu reduzieren und wie diese Maßnahmen der Hierarchie der Schadensminderung (Mitigation Hierarchy) folgen.
Error executing template "/Designs/Swift/Grid/Page/RowTemplates/Dalgas_Contact.cshtml" System.Exception: Custom field 'AccessUser_JobTitleTranslatedDE' was not found. at Dalgas.Custom.Extensions.UserViewModelExtensions.GetCustomFieldValue[T](UserViewModel user, String fieldSystemName) in D:\a\1\s\Custom\Extensions\UserViewModelExtensions.cs:line 34 at Dalgas.Custom.Extensions.UserViewModelExtensions.GetJobTitleTranslatedDE(UserViewModel user) in D:\a\1\s\Custom\Extensions\UserViewModelExtensions.cs:line 299 at Dalgas.Custom.Extensions.UserViewModelExtensions.GetJobTitle(UserViewModel user) in D:\a\1\s\Custom\Extensions\UserViewModelExtensions.cs:line 330 at CompiledRazorTemplates.Dynamic.RazorEngine_85bed49a4d934d72937f7241466c2141.Execute() in E:\Solutions\dalgas\Files\Templates\Designs\Swift\Grid\Page\RowTemplates\Dalgas_Contact.cshtml:line 498 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 212 class="col-12 @(showAlternativeLayout ? "flex-column flex-lg-row mb-5" : "col-lg-4 flex-column") d-flex justify-content-between"> 213 <div 214 class="js-content-container content-container col-12 @(showAlternativeLayout ? "col-lg-5" : string.Empty)"> 215 216 <span> 217 @string.Join("", headings.Select(h => h.ToString())) 218 </span> 219 220 @if (!string.IsNullOrEmpty(lead)) 221 { 222 <p class="lead">@lead</p> 223 } 224 225 @text 226 227 </div> 228 <div 229 class="js-content-container content-container @(showAlternativeLayout ? "col-lg-5 d-inline-flex justify-content-lg-end align-items-end" : string.Empty)"> 230 <div 231 class="d-flex flex-wrap gap-3 @(showAlternativeLayout ? "mb-4" : "mb-4 mb-lg-0")"> 232 @foreach (ButtonViewModel button in buttons) 233 { 234 @button 235 } 236 </div> 237 </div> 238 </div> 239 240 <div class="col"> 241 <div 242 class="position-relative g-4 js-card-person-container js-dalgas-queryresult-container" 243 id="@($"query-result-{Model.Id}")"> 244 245 @if (allowAllQueryItems) 246 { 247 totaleCount = queryResult.TotalCount; 248 } 249 250 <form method="post" action="@Pageview.SearchFriendlyUrl" 251 data-response-target-element="content" tabindex="-1" aria-hidden="false" 252 class="d-flex js-dalgas-facets-form dalgas-facets-form" 253 data-total-count="@totaleCount" data-page-size="@numberOfPersons"> 254 <input type="hidden" name="LayoutTemplate" 255 value="Designs/Swift/Swift_PageClean.cshtml"/> 256 <input type="hidden" name="PageNum" value="@pageNum"/> 257 @if (showFacets) 258 { 259 foreach (FacetGroup facetGroup in queryResult.FacetGroups) 260 { 261 foreach (Facet facet in facetGroup.Facets) 262 { 263 string showClass = " show"; 264 string ariaExpanded = "true"; 265 string facetGroupId = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", string.Empty); 266 267 268 if (facet.Options.Any()) 269 { 270 int selectedFacetsInGroup = 0; 271 272 foreach (FacetOption option in facet.Options) 273 { 274 if (option.Selected) 275 { 276 selectedFacetsInGroup++; 277 } 278 } 279 280 string label = selectedFacetsInGroup > 0 ? Translate(facet.Name) + "<span style=\"padding: 0.3em 0.6em\" class=\"badge ms-2\">" + selectedFacetsInGroup + "</span>" : Translate(facet.Name); 281 282 <div class="dropdown js-facets-selector"> 283 <button class="btn dropdown-toggle" type="button" 284 id="FacetGroup_@facetGroupId" 285 data-bs-toggle="dropdown" aria-expanded="false"> 286 @label 287 </button> 288 <div data-lenis-prevent class="dropdown-menu p-3" 289 aria-labelledby="FacetGroup_@facetGroupId" 290 style="min-width: 280px"> 291 @foreach (FacetOption facetOption in facet.Options.OrderBy(fo => fo.Label)) 292 { 293 string facetLabel = HtmlEncoder.HtmlEncode(facetOption.Label); 294 string disabled = facetOption.Count <= 0 ? "disabled" : string.Empty; 295 string selected = facetOption.Selected ? "checked" : string.Empty; 296 string facetValue = Uri.UnescapeDataString(facetOption.Value); 297 string optionValue = $"[{facetValue}]"; 298 299 facetLabel = facetLabel.ToLower() == "true" ? facetLabel = Translate("Yes") : facetLabel; 300 facetLabel = facetLabel.ToLower() == "false" ? facetLabel = Translate("No") : facetLabel; 301 302 <label class="form-check mt-1" @disabled> 303 <input type="checkbox" 304 onclick="custom.QueryResult.update(event)" 305 class="form-check-input" 306 name="@facet.QueryParameter" 307 value="@optionValue" 308 data-filter-value="@facetLabel" 309 @selected> 310 <span 311 class="form-check-label d-flex align-items-center"> 312 <span class="flex-fill">@facetLabel </span> 313 <small 314 class="opacity-85">@facetOption.Count</small> 315 </span> 316 </label> 317 318 if (facetOption.Selected) 319 { 320 FacetOption selectFacetOption = facetOption; 321 selectFacetOption.Name = facet.QueryParameter; 322 selectedFacetOptions.Add(selectFacetOption); 323 } 324 } 325 </div> 326 </div> 327 } 328 } 329 } 330 331 if (!string.IsNullOrEmpty(searchTerm)) 332 { 333 selectedFacetOptions.Add(new FacetOption() 334 { 335 Count = 1, 336 Label = searchTerm, 337 Name = "q", 338 Selected = true, 339 Value = searchTerm 340 }); 341 } 342 } 343 344 @if (showSearch) 345 { 346 <div class="type-ahead-dropdown"> 347 <div class="position-relative suggest-form"> 348 <span 349 class="position-absolute top-0 end-0 icon-3 px-3 d-flex align-items-center h-100 search-icon"> 350 @ReadFile(iconPath + "search.svg") 351 </span> 352 353 <input id="searchField_@Model.Id" 354 class="form-control custom-header-searchbar js-custom-facets-search-field pe-5 ps-3 js-" 355 type="search" 356 placeholder="@Translate("Enter postcode or name of person")" 357 autocomplete="off" 358 maxlength="255" 359 name="q" 360 minlength="3" 361 value="@searchTerm" 362 data-original="@searchTerm"> 363 364 <button type="button" 365 onclick="custom.QueryResult.clearSearchField(event)" 366 class="btn h-100 icon-2 reset-search" 367 aria-label="@Translate("Clear search")" 368 style="opacity: 0; position: absolute; top: 0; right: 0; visibility: hidden;"> 369 @ReadFile(iconPath + "x.svg") 370 </button> 371 </div> 372 </div> 373 <input type="submit" onclick="custom.QueryResult.update(event)" 374 class="btn btn-primary col-md-2" 375 value="@Translate("Search", "Search")"> 376 } 377 </form> 378 379 @if (showFacets && selectedFacetOptions.Any()) 380 { 381 <div 382 class="mt-3 d-flex gap-3 mb-4 js-dalgas-queryresult-selectedfacets-container dalgas-queryresult-selectedfacets-container"> 383 @foreach (FacetOption facetOption in selectedFacetOptions) 384 { 385 string facetValue = Uri.UnescapeDataString(facetOption.Value); 386 string optionValue = $"[{facetValue}]"; 387 <input class="visually-hidden" 388 id="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)" 389 name="@facetOption.Name" 390 onclick="custom.QueryResult.deselectFacetOption(event)" 391 type="checkbox" value="@optionValue" title="@facetOption.Label" 392 checked> 393 <label class="badge theme border border-dark" 394 for="Selected_@(Model.Id)_@facetOption.Value.Replace("#", string.Empty)"> 395 <span class="text-nowrap">@(facetOption.Label)</span> 396 <span class="icon-2 ms-2"> 397 @ReadFile(iconPath + "x.svg") 398 </span> 399 </label> 400 } 401 402 @if (selectedFacetOptions.Count >= 3) 403 { 404 <input class="visually-hidden" id="ClearAll" name="ClearAll" 405 onclick="custom.QueryResult.clearAll(event)" type="checkbox" 406 value="" title="" checked> 407 <label class="badge text-nowrap dalgas-btn-clear-all" for="ClearAll"> 408 <span class="text-nowrap">@Translate("Clear all")</span> 409 <span class="icon-2 ms-2"> 410 @ReadFile(iconPath + "x.svg") 411 </span> 412 </label> 413 } 414 </div> 415 } 416 417 @if (showFacets && selectedFacetOptions.Any() == false && string.IsNullOrEmpty(searchTerm)) 418 { 419 enableShowZeroResultMsg = false; 420 userIds = new List<string>(); 421 } 422 423 @if (showFacets && enableShowZeroResultMsg && userIds.Any() == false) 424 { 425 <div class="mt-4">@Translate("Your search returned no results...")</div> 426 } 427 428 429 @if (showPersons && userIds.Any() || showPersons && hasContactPersonListItems) 430 { 431 <div 432 class="row @(showAlternativeLayout ? "g-4" : "mt-3") js-dalgas-queryresult-itemlist dalgas-queryresult-itemlist"> 433 434 @foreach (string userId in userIds) 435 { 436 if (!int.TryParse(userId, out int intUserId)) 437 { 438 continue; 439 } 440 441 //UserViewModel result = new UserViewModel(); 442 443 User result = User.GetUserByID(intUserId); 444 445 if (result == null) 446 { 447 continue; 448 } 449 450 UserViewModel resultViewModel = result.ToViewModel(); 451 452 <div 453 class="col-12 js-col-card-person col-lg @(showAlternativeLayout ? "col-lg-4" : "")"> 454 455 @{ 456 FileViewModel imageFile = ViewModelFactory.CreateFieldFileValueView(result.Image); 457 } 458 459 <div class="theme theme-light h-100"> 460 <div class="p-img-container d-flex"> 461 <figure 462 class="ratio ratio-1x1 @(!string.IsNullOrEmpty(result.Image) ? "has-image" : string.Empty)"> 463 @RenderPartial("Components/Image.cshtml", imageFile ?? new FileViewModel()) 464 </figure> 465 <figure class="ratio ratio-1x1"> 466 <span 467 class="fifth-element @fifthElementTheme opacity-50"> 468 @ReadFile(fifthElementIconPath + "canopy.svg") 469 </span> 470 </figure> 471 </div> 472 <div class="p-txt-container p-4 pt-5"> 473 <h4>@resultViewModel.Name</h4> 474 475 @if (cardInformationLayout == "title-and-description") 476 { 477 string linkedIn = resultViewModel.GetCustomFieldValue<string>("AccessUser_LinkedIn"); 478 479 <div class="small d-flex flex-column mb-3 opacity-75"> 480 <span>@resultViewModel.GetJobTitle()</span> 481 482 @if (!string.IsNullOrEmpty(linkedIn)) 483 { 484 <a href="@linkedIn" class="mt-1" 485 target="_blank">LinkedIn</a> 486 } 487 488 @if (!string.IsNullOrEmpty(resultViewModel.GetDescription())) 489 { 490 <span 491 class="mt-3">@resultViewModel.GetDescription()</span> 492 } 493 </div> 494 } 495 else 496 { 497 <div class="small d-flex flex-column mb-3 opacity-75"> 498 <span>@resultViewModel.GetJobTitle()</span> 499 <span>@Translate("Contact Department", "Afdeling"): @resultViewModel.GetDepartment()</span> 500 501 @if (resultViewModel.GetLocations().Any()) 502 { 503 <span> 504 <span>@Translate("Office", "Kontor"): </span> 505 @foreach (Location location in resultViewModel.GetLocations()) 506 { 507 <span>@location.Text</span> 508 } 509 </span> 510 } 511 512 <span>@resultViewModel.GetComment()</span> 513 </div> 514 515 516 if (!string.IsNullOrEmpty(resultViewModel.GetContactEmail())) 517 { 518 <div class="d-flex gap-3 small opacity-75"> 519 <span>E.</span> 520 <a style="font-size: 1em" 521 class="text-decoration-none" 522 href="mailto:@resultViewModel.GetContactEmail()">@resultViewModel.GetContactEmail().ToLower()</a> 523 </div> 524 } 525 526 if (!string.IsNullOrEmpty(resultViewModel.Phone)) 527 { 528 <div class="d-flex gap-3 small opacity-75"> 529 <span>T.</span> 530 <span>@resultViewModel.Phone</span> 531 </div> 532 } 533 } 534 </div> 535 </div> 536 537 </div> 538 } 539 @if (showForm) 540 { 541 <div class="col-12 js-col-card-person col-lg"> 542 543 <div class="h-100 contact-person-card js-contact-person-card"> 544 545 <div class="card-front theme theme-light "> 546 <div class="p-img-container d-none d-lg-flex"> 547 <figure class="ratio ratio-1x1"> 548 @* Empty space *@ 549 </figure> 550 <figure class="ratio ratio-1x1"> 551 <span 552 class="fifth-element @fifthElementTheme opacity-50"> 553 @ReadFile(fifthElementIconPath + "canopy.svg") 554 </span> 555 </figure> 556 </div> 557 <div class="p-txt-container p-4 pt-6"> 558 <h4>@Translate("Get Contacted")</h4> 559 560 <div class="small d-flex flex-column mb-3 opacity-75"> 561 @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.") 562 </div> 563 564 @RenderModel(btnOpenForm) 565 </div> 566 </div> 567 <div class="card-back theme theme-light "> 568 569 @if (formParagraphId != null) 570 { 571 <div 572 class="contact-person-form-container js-contact-person-form-container theme p-4"> 573 574 575 @if (formType == "microsoft") 576 { 577 <div 578 class="js-remove-microsoft-form-styling microsoft-form-container"> 579 <script 580 src="https://cxppusa1formui01cdnsa01-endpoint.azureedge.net/eur/FormLoader/FormLoader.bundle.js" 581 crossorigin="anonymous" defer></script> 582 <div 583 data-cached-form-url="https://assets-eur.mkt.dynamics.com/@formBlockId/digitalassets/forms/@formContainerId" 584 data-form-api-url="https://public-eur.mkt.dynamics.com/api/v1.0/orgs/@formBlockId/landingpageforms" 585 data-form-id="@formContainerId"></div> 586 </div> 587 } 588 else 589 { 590 @RenderParagraphContent(formParagraphId) 591 } 592 593 594 </div> 595 } 596 597 </div> 598 599 </div> 600 </div> 601 } 602 </div> 603 604 if (allowAllQueryItems && totaleCount > numberOfPersons) 605 { 606 <div class="row mt-4"> 607 <div class="col-12 text-center"> 608 <button onclick="custom.QueryResult.getNextPage(event)" 609 class="btn btn-primary">@Translate("Vis flere")</button> 610 </div> 611 </div> 612 } 613 } 614 else 615 { 616 if (showForm) 617 { 618 <div class="col-12 col-lg"> 619 620 @if (formParagraphId != null) 621 { 622 if (formType == "microsoft") 623 { 624 if (Pageview.IsVisualEditorMode) 625 { 626 <div class="container-xl alert alert-danger" role="alert"> 627 <h4>Use the "Microsoft Form" Paragraph instead</h4> 628 <p>Due to technical limitations within Microsoft Form 629 Markup & Styling, we prefer that you use the 630 "Microsoft Form" item instead, when you have no 631 contact persons attatched this Contact 632 Paragraph.</p> 633 <p>We are showing the default form in the frontend.</p> 634 </div> 635 } 636 else 637 { 638 @RenderParagraphContent(formParagraphId) 639 } 640 } 641 else 642 { 643 @RenderParagraphContent(formParagraphId) 644 } 645 } 646 </div> 647 } 648 } 649 </div> 650 </div> 651 </div> 652 </div> 653 </div> 654 </div> 655 </div> 656 </section> 657 } 658 else 659 { 660 if (Pageview.IsVisualEditorMode) 661 { 662 <div class="container-xl alert alert-danger" role="alert"> 663 This <strong>@Model.Item.SystemName</strong> is empty 664 </div> 665 } 666 } 667
Verwandte Dienstleistungen
Wald als Investition
Sichere Investition in Wälder in Estland, Lettland und Litauen, wo Sie eine reibungslose Verwaltung und eine flexible Zusammenarbeit mit unseren erfahrenen Experten erhalten.
Weihnachtsbäume
Qualitätsweihnachtsbäume und Dekorationsgrün aus eigener verantwortungsvoller Produktion sowie von erfahrenen Lieferanten. Gemeinsam schaffen wir den Rahmen für eine schöne Weihnachtszeit.
Forstsamen
Mit Fokus auf die beste Genetik und solide Qualität erhalten Sie Samen zur Produktion von Sträuchern und Bäumen.
Holzhandel
Wir sind die Verbindung zwischen Waldbesitzer und Industrie, sodass Sie die Vermarktung von Rohholz oder stabile Lieferungen von hoher Qualität sicherstellen können. Sowohl lokal als auch international.Fotovermessung von Rundholz
Einfache und schnelle Vermessung Ihres Rundholzes mit unserer benutzerfreundlichen Ausrüstung und einer professionellen App für Ihr Gerät. Eine durchdachte digitale Lösung.Waldbewirtschaftung
Wir bieten umfangreiche, zeitgemäße und authentische Beratung, vorausschauende Planung sowie Budgetierung von Maßnahmen zur Pflege und Gestaltung von Wäldern.Artikel und Inspiration
Whitepaper - Aufforstungsmöglichkeiten in den baltischen Staaten
Erwägen Sie, Ihr Anlageportfolio mit Forstwirtschaft in den baltischen Staaten zu diversifizieren, aber Ihnen fehlt das tiefgehende Wissen über die lokalen Vorschriften? Wir können Ihnen einen Überblick verschaffen.
Whitepaper - 10 Mythen über Waldinvestitionen
Entdecken Sie, was wahr und falsch über Waldinvestitionen ist.Fotooptische Vermessung von Holzpoltern ist nun Bestandteil der Rahmenvereinbarung für den Rohholzhandel in Deutschland (RVR)
Der deutsche Forstwirtschaftsrat und der deutsche Holzwirtschaftsrat haben die fotooptische Vermessung mit geeichten Systemen wie unserem LogStackPro in die Rahmenvereinbarung für den Rohholzhandel in Deutschland aufgenommen.
Wir schaffen Wert für Ihre Branche
Dalgas löst alle Arten von grünen Aufgaben in verschiedenen Branchen und Sektoren über verschiedene Dienstleistungen hinweg. Wir haben die Erfahrung, den Maschinenpark und die Referenzen, die Ihnen die bestmögliche Lösung garantieren.