Lightweight Jacket | padded | women
No. 0753
Error executing template "Designs/identity_v2/ecom/product/partials/prices.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at CompiledRazorTemplates.Dynamic.RazorEngine_a6c290fd7d3848f6af25f98b40b83f52.Execute() in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\ecom\product\partials\prices.cshtml:line 16 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @using Co3.Espresso.Base.Extensions 2 @using Co3.Espresso.Website.Models.FrontEnd.Settings 3 @using Co3.Espresso.Website.Services 4 @using Co3.ID.Dw.Helpers 5 @using Co3.ID.Dw.Models.Frontend.Ecommerce 6 @using Co3.ID.Dw.Models.Frontend.Users 7 @using Dynamicweb.Frontend 8 @using Dynamicweb.Security.UserManagement 9 @inherits Dynamicweb.Rendering.ViewModelTemplate<Co3.ID.Dw.Models.Frontend.Ecommerce.IdentityProduct> 10 11 @{ 12 ShopType shopContext = SiteContext.CurrentSiteContext(); 13 User currentUser = PageView.Current().User; 14 bool isCustomerShop = (PageView.Current().Area.Item["IsCustomerShop"] != null && (bool) PageView.Current().Area.Item["IsCustomerShop"] == true); 15 string discountGroup = currentUser != null ? currentUser.GetCustomFieldValue<string>("DiscountGroup") : string.Empty; 16 bool showPrices = !isCustomerShop || (isCustomerShop && UserContext.Current.CustomerShop.Settings.ShowPrices == true); 17 PriceDetails priceDetails = Model.PriceDetails; 18 19 } 20 21 @if (shopContext == ShopType.B2B && !string.IsNullOrEmpty(discountGroup) && priceDetails != null && Model.ListPrices != null && Model.ListPrices.Any()) 22 { 23 bool isAltPriceGroup = string.Equals(priceDetails.PriceGroup, "GRP A") || string.Equals(priceDetails.PriceGroup, "GRP AB"); 24 25 <div class="mb-2 e-product-price "> 26 27 @if (SiteContext.ShowPrices()) 28 { 29 <span class="h2 text-primary mb-1"> 30 <span class="font-weight-bold js-e-price"> 31 @priceDetails.CurrentPrice.Formatted 32 </span> 33 </span> 34 if ( priceDetails.DiscountPercentage > 0) 35 { 36 <p class="text-muted small id-product-details-list-price mb-0"> 37 <span class="small"> 38 39 @if (!priceDetails.IsBasePriceFromAll && isAltPriceGroup) 40 { 41 @Translate("Product List Price - Text", "Listepris") 42 } 43 else 44 { 45 @Translate("Product Your Price - Text", "Din pris") 46 } 47 <span> 48 <span class="font-weight-bold" style="text-decoration: line-through;">@priceDetails.BasePrice.Formatted</span> 49 <span class="font-weight-bold text-primary"> - @priceDetails.DiscountPercentageFormatted</span> 50 </span> 51 52 </span> 53 </p> 54 } 55 56 if ( !priceDetails.IsBasePriceFromAll && !isAltPriceGroup) 57 { 58 <p class="text-muted small id-product-details-list-price mb-0"> 59 <span class="small"> 60 ( 61 @Translate("Product List Price - Text", "Listepris") 62 <span class="js-e-product-listprice"> 63 @PriceService.Instance.GetPrice(new PriceSettings() 64 { 65 Value = Model.ListPrices.FirstOrDefault()?.Amount 66 }) 67 </span> 68 ) 69 </span> 70 </p> 71 } 72 73 74 } 75 else 76 { 77 <span class="text-muted"> 78 @Translate("Product List Price - Text", "Listepris") 79 <span class="js-e-product-listprice"> 80 @PriceService.Instance.GetPrice(new PriceSettings() 81 { 82 Value = Model.ListPrices.FirstOrDefault()?.Amount 83 }) 84 </span> 85 </span> 86 } 87 </div> 88 } 89 90 91 @if (shopContext == ShopType.B2C) 92 { 93 <div class="d-flex w-100" style="gap:1em;"> 94 <p class="e-product-price mb-1 mt-0 "> 95 <span class="h2 font-weight-bold text-primary mr-1">@Model.Price.Format()</span> 96 <span class="font-family-headings font-weight-semibold small text-muted" style="white-space: nowrap;"> 97 <small>(@Model.PriceWithoutVat.Formatted @Translate("Ecom - Price without VAT - text", "ekskl. moms"))</small> 98 </span> 99 </p> 100 <div class="d-none d-lg-block ml-auto" style="white-space: nowrap;"> 101 @RenderingService.Instance.PartialView("ecom/product/partials/designer-link.cshtml", Model) 102 </div> 103 </div> 104 105 } 106 107 @if (shopContext == ShopType.CustomerShop) 108 { 109 <p class="e-product-price mb-1 mt-0 @(showPrices == false ? "hidden-price" : string.Empty)"> 110 <span class="h2 font-weight-bold text-primary">@Model.Price.Format()</span> 111 <span class="font-family-headings font-weight-semibold small text-muted"> 112 <small>(@Translate("Ecom - Price without VAT - text", "ekskl. moms"))</small> 113 </span> 114 </p> 115 }
Lightweight jacket with down-like Thermolite® padding and inner pockets. Breathable and windproof with elastic edges at collar and sleeves. YKK zipper at the front and in the side ...Show more
Error executing template "Designs/identity_v2/ecom/product/partials/add-to-cart.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 Co3.ID.Dw.Models.Frontend.Ecommerce.IdentityProduct.get_ImagePrimary() at CompiledRazorTemplates.Dynamic.RazorEngine_94480def8a86427a8c6cd159377685e9.<>c__DisplayClass0_0.<VariantOption>b__0(TextWriter __razor_helper_writer) in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\ecom\product\partials\add-to-cart.cshtml:line 217 at CompiledRazorTemplates.Dynamic.RazorEngine_94480def8a86427a8c6cd159377685e9.Execute() in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Files\Templates\Designs\identity_v2\ecom\product\partials\add-to-cart.cshtml:line 136 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 ViewModelTemplate<Co3.ID.Dw.Models.Frontend.Ecommerce.IdentityProduct> 2 @using Co3.Espresso.Base.Extensions 3 @using Co3.Espresso.Website.Models.FrontEnd.Ecommerce 4 @using Co3.Espresso.Website.Models.FrontEnd.Settings 5 @using Co3.ID.Dw.Helpers 6 @using Co3.ID.Dw.Models.Frontend.Ecommerce 7 @using Dynamicweb.Ecommerce.Common 8 @using Dynamicweb.Ecommerce.Variants 9 @using Dynamicweb.Ecommerce.Products 10 @using Dynamicweb.Frontend 11 @using Dynamicweb.Rendering 12 @using Dynamicweb.Security.UserManagement 13 @using ProductService = Co3.ID.Dw.Services.ProductService 14 @using System.Web 15 @using Co3.ID.Dw.Services 16 17 @{ 18 var shopContext = SiteContext.CurrentSiteContext(); 19 string alternativeAction = string.IsNullOrEmpty(PageView.Current().Area.Item["EcommerceAlternativeCallToAction"]?.ToString()) == false ? PageView.Current().Area.Item["EcommerceAlternativeCallToAction"].ToString() : string.Empty; 20 KeyValuePair<string, EspressoProductList> replacementProductGroup = Model.RelatedGroups.FirstOrDefault(rg => string.Equals(rg.Key, "RELGRP13")); 21 EspressoProduct replacementProduct = null; 22 if (replacementProductGroup.Value != null && replacementProductGroup.Value.Products.Any()) 23 { 24 replacementProduct = replacementProductGroup.Value.Products.FirstOrDefault(); 25 Product dwProduct = Dynamicweb.Ecommerce.Services.Products.GetProductById(replacementProduct.Id, replacementProduct.VariantId, Context.LanguageID); 26 if (dwProduct == null || !dwProduct.ShowInProductList || !dwProduct.Active) 27 { 28 replacementProduct = null; 29 } 30 } 31 } 32 33 34 35 <form action="/system/data/cart" class="e-product-form js-e-product-form js-e-product-form-addtocart pb-1" method="post"> 36 <input name="CartCmd" type="hidden" value="Add"> 37 <input name="ProductID" type="hidden" value="@Model.Id"> 38 <input name="VariantID" type="hidden" value="@Model.VariantId"> 39 <input name="Quantity" type="hidden" value="1"> 40 <input name="Redirect" type="hidden" value=""> 41 <input name="Name" type="hidden" value="@Model.Name"> 42 <input name="Number" type="hidden" value="@Model.Number"> 43 <input name="Price" type="hidden" value="@Model.Price.Value.ToJavaScript()"> 44 <input name="CurrencyCode" type="hidden" value="@Model.Price.CurrencyCode"> 45 46 47 @if (Model.VariantGroups.Any()) 48 { 49 <div class=""> 50 @foreach (KeyValuePair<string, EspressoVariantGroup> variantGroup in Model.VariantGroups) 51 { 52 bool isColorGroup = variantGroup.Value.Id == Co3.ID.Data.App.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID; 53 string groupClassNameAppend = isColorGroup ? "color" : "size"; 54 int variantTake = 7; 55 56 57 string variantInputFieldName = string.Format("{0}_{1}", Model.Id, variantGroup.Value.Id); 58 <div class="form-group js-e-product-form-variant-form-group e-product-form-variant-form-group-@groupClassNameAppend js-e-product-form-variant-form-group-@groupClassNameAppend" data-auto-select="true" data-variant-take="@variantTake" @(((shopContext == ShopType.B2B || shopContext == ShopType.CustomerShop || !PageView.Current().IsBasketEnabled()) && groupClassNameAppend == "size") ? "hidden" : string.Empty)> 59 <label class="form-control-label d-flex font-weight-semibold small @(isColorGroup == false ? "d-flex justify-content-between" : string.Empty)"> 60 @Translate(string.Format("eCom - Product Details - variant header - {0}", variantGroup.Value.Name), variantGroup.Value.Name) 61 @if (isColorGroup == true) 62 { 63 <span class="js-identity-selected-color-variant-text">@Model.ColorVariantText</span> 64 65 if (Model.SizeGuidePageId > 0) 66 { 67 if (shopContext == ShopType.B2B || shopContext == ShopType.CustomerShop) 68 { 69 if (Model.SizeGuidePageId > 0 || Model.BrandCode == "PRIVATELAB") 70 { 71 <a class="ml-auto text-muted font-weight-normal link-underline" data-toggle="modal" data-target="#identity-size-guide-modal"> 72 @Translate("eCom - Product Details - size guide -link -text", "Størrelsesguide") 73 </a> 74 } 75 } 76 else 77 { 78 <a class="ml-auto text-muted font-weight-normal link-underline" data-toggle="modal" data-target="#identity-size-guide-modal"> 79 @Translate("eCom - Product Details - size guide -link -text", "Størrelsesguide") 80 </a> 81 } 82 83 } 84 85 } 86 </label> 87 <div class="identity-variant-group d-flex"> 88 @{ 89 int variantCount = variantGroup.Value.Options.Count; 90 bool shouldWrapLast = variantCount > variantTake; 91 int variantIndex = 0; 92 string collapseId = string.Format("collapseExtraVariants_{0}", variantGroup.Value.Name); 93 94 IOrderedEnumerable<KeyValuePair<string, EspressoVariantOption>> variantGroupOptions = variantGroup.Value.Options.OrderBy(o => o.Key); 95 96 if (isColorGroup) 97 { 98 //variantGroupOptions = variantGroup.Value.Options.OrderByDescending(o => o.Value.Id == variantGroup.Value.SelectedOptionId); 99 } 100 else 101 { 102 Dictionary<string, int> variantGroupOptionSortOrder = ProductService.Instance.GetVariantGroupOptionSortOrder(variantGroup.Value.Name); 103 variantGroupOptions = variantGroup.Value.Options.OrderBy(o => o.Value.Id != null && variantGroupOptionSortOrder.ContainsKey(o.Value.Id) ? variantGroupOptionSortOrder[o.Value.Id] : 99); 104 } 105 } 106 107 108 @foreach (KeyValuePair<string, EspressoVariantOption> variantOption in variantGroupOptions) 109 { 110 string variantInputFieldId = string.Format("{0}_{1}", variantInputFieldName, variantOption.Value.Id); 111 bool isSelected = variantOption.Value.Id == variantGroup.Value.SelectedOptionId; 112 string lastVariantIdBeforeWrap = string.Empty; 113 114 115 if (shouldWrapLast && variantIndex == variantTake) 116 { 117 lastVariantIdBeforeWrap = variantOption.Key; 118 119 <label class="custom-control custom-radio identity-variant-select-option js-identity-variant-select-option"> 120 <span class="custom-control-description disabled"> 121 <span class="@(isColorGroup ? "identity-variant-select-option-color" : "identity-variant-select-option-generic") js-identity-extra-variants-toggler" data-toggle="collapse" href="#@collapseId" role="button" aria-expanded="false"> 122 <span class="js-variant-hidden-count" data-default="@(variantCount - variantTake)">+@(variantCount - variantTake)</span> 123 </span> 124 </span> 125 </label> 126 127 @VariantOption(isColorGroup, isSelected, variantInputFieldId, variantInputFieldName, variantOption, true) 128 129 @:</div> 130 @:<div class="collapse js-identity-extra-variants-collapse" id="@collapseId"> 131 @:<div class="identity-variant-group d-flex"> 132 } 133 134 if (variantOption.Key != lastVariantIdBeforeWrap) 135 { 136 @VariantOption(isColorGroup, isSelected, variantInputFieldId, variantInputFieldName, variantOption) 137 } 138 139 if (shouldWrapLast && (variantIndex + 1) == variantCount) 140 { 141 <label class="custom-control custom-radio identity-variant-select-option"> 142 <span class="custom-control-description disabled"> 143 <span class="@(isColorGroup ? "identity-variant-select-option-color" : "identity-variant-select-option-generic")" data-toggle="collapse" href="#@collapseId" role="button" aria-expanded="false"> 144 <span class="variant-close-toggle"></span> 145 </span> 146 </span> 147 </label> 148 @:</div> 149 } 150 variantIndex++; 151 } 152 </div> 153 </div> 154 } 155 156 </div> 157 } 158 @if (PageView.Current().IsBasketEnabled()) 159 { 160 if (shopContext == ShopType.B2C) 161 { 162 if (replacementProduct != null) 163 { 164 <div class="d-flex flex-column mb-2" style="gap:1em;"> 165 <a class="btn btn-replacement btn-lg btn-block position-relative" href="@replacementProduct.Link"> 166 @Translate("eCom Product - Replacement Product - Button", "View upgraded style") 167 </a> 168 </div> 169 } 170 <button class="btn btn-primary btn-lg btn-block position-relative" type="submit"> 171 @Translate("eCom Product - Add To Cart - Button", "Add to cart") 172 </button> 173 174 <div class="d-block d-lg-none mt-2"> 175 @RenderingService.Instance.PartialView("ecom/product/partials/designer-link.cshtml", Model) 176 </div> 177 178 } 179 180 } 181 else 182 { 183 @alternativeAction 184 } 185 186 </form> 187 188 189 @helper VariantOption(bool isColorGroup, bool isSelected, string variantInputFieldId, string variantInputFieldName, KeyValuePair<string, EspressoVariantOption> variantOption, bool boolHide = false) 190 { 191 <label class="custom-control custom-radio identity-variant-select-option @(boolHide == true ? "js-identity-variant-select-option-hidden d-none" : string.Empty)"> 192 <input class="custom-control-input js-e-product-form-variant-group-input required" id="@variantInputFieldId" name="@variantInputFieldName" title="@HttpUtility.HtmlEncode(variantOption.Value.Name.Replace("\"", "'"))" data-name="@HttpUtility.HtmlEncode(variantOption.Value.Name.Replace("\"", "'"))" type="radio" value="@variantOption.Value.Id" @(isSelected ? "checked" : string.Empty)> 193 @* 194 @if (isColorGroup) 195 { 196 197 } 198 else 199 { 200 string variantComboId = string.Format("{0}.{1}", Model.VariantGroups[Co3.ID.Data.App.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID].SelectedOptionId, variantOption.Value.Id); 201 IdentityProduct idProduct = ProductService.Instance.GetVariantByComboId(Model, variantComboId); 202 <input class="custom-control-input js-e-product-form-variant-group-input required" id="@variantInputFieldId" name="@variantInputFieldName" title="@variantOption.Value.Name" data-name="@variantOption.Value.Name" type="radio" value="@variantOption.Value.Id" @(isSelected ? "checked" : string.Empty) @(idProduct.Stock.Quantity> 0 ? string.Empty : "disabled")> 203 }*@ 204 <span class="custom-control-description"> 205 <div class="identity-corner-brackets-container identity-corner-brackets-all border-primary is-corner-thumb p-0"> 206 <div class="identity-corner-brackets-wrapper border-primary"> 207 208 209 210 211 212 @if (isColorGroup) 213 { 214 EspressoVariantGroup sizeVariantGroup = Model.VariantGroups.FirstOrDefault(vg => vg.Key != Co3.ID.Data.App.Constants.PRODUCT_VARIANT_GROUP_COLOR_ID).Value; 215 string variantComboId = string.Format("{0}.{1}", variantOption.Value.Id, sizeVariantGroup.SelectedOptionId); 216 IdentityProduct idProduct = ProductService.Instance.GetVariantByComboId(Model, variantComboId); 217 EspressoProductImageUrl imageUrl = idProduct?.ImagePrimary; 218 219 if (imageUrl != null) 220 { 221 <span class="identity-variant-select-option-color js-variant-color-image" style="background-image: url(@imageUrl.Small);" data-image="@imageUrl.Small" data-name="@variantOption.Value.Name" data-toggle="tooltip" data-placement="top" title="@variantOption.Value.Name"></span> 222 } 223 else 224 { 225 <span class="identity-variant-select-option-generic"> 226 <span>@variantOption.Value.Name</span> 227 </span> 228 } 229 } 230 else 231 { 232 <span class="identity-variant-select-option-generic"> 233 <span class="js-variant-size-text">@variantOption.Value.Name</span> 234 </span> 235 } 236 237 238 </div> 239 </div> 240 </span> 241 </label> 242 } 243
Lightweight jacket with down-like Thermolite® padding and inner pockets. Breathable and windproof with elastic edges at collar and sleeves. YKK zipper at the front and in the side pockets. Prepared for logo placement on chest and back.
New
ID® ESG Rapport 2025/2026
Redegørelse for samfundsansvar, jf. årsregnskabslovens § 99 a". Se her