Overtræksvest
Nr. 1902
kr. 0,00 (kr. 0,00 ekskl. moms)
Fluorescerende overtræksvest med elastik og lukning i siderne.
Fluorescerende overtræksvest med elastik og lukning i siderne.
Error executing template "Designs/identity_v2/ecom/product/partials/identity-part-specifications-v2.cshtml" System.NullReferenceException: Object reference not set to an instance of an object. at Co3.ID.Dw.Services.ProductService.GetVariantSizeOption(IdentityProduct product, String variantId) at CompiledRazorTemplates.Dynamic.RazorEngine_04d160cc20f44ddf99712e3fd7b6fb92.<Execute>b__1_1(KeyValuePair`2 vo) in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Application\Files\Templates\Designs\identity_v2\ecom\product\partials\identity-part-specifications-v2.cshtml:line 167 at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count) at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext() at Co3.Espresso.Base.Extensions.IEnumerableExtension.<WithIndex>d__0`1.MoveNext() at CompiledRazorTemplates.Dynamic.RazorEngine_04d160cc20f44ddf99712e3fd7b6fb92.Execute() in D:\dynamicweb.net\Solutions\id.espresso4.dk-e5\Application\Files\Templates\Designs\identity_v2\ecom\product\partials\identity-part-specifications-v2.cshtml:line 165 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<IdentityProduct> 2 @using Co3.Espresso.Base.Extensions 3 @using Co3.Espresso.Base.Models 4 @using Co3.Espresso.Website.Models 5 @using Co3.Espresso.Website.Models.FrontEnd 6 @using Co3.Espresso.Website.Models.FrontEnd.Ecommerce 7 @using Co3.Espresso.Website.Models.FrontEnd.Settings 8 @using Co3.Espresso.Website.Services 9 @using Co3.ID.Dw.Helpers 10 @using Co3.ID.Dw.Models.Frontend.Ecommerce 11 @using Dynamicweb.Ecommerce.Products 12 @using Dynamicweb.Ecommerce.Products.Categories 13 @using Dynamicweb.Frontend 14 @using IdService = Co3.ID.Dw.Services; 15 16 @{ 17 var shopContext = SiteContext.CurrentSiteContext(); 18 19 Dictionary<string, string> CareSymbolsTranslated = new Dictionary<string, string>(); 20 Dictionary<string, string> CareSymbolsWashingTranslated = new Dictionary<string, string>(); 21 Category category = Dynamicweb.Ecommerce.Services.ProductCategories.GetCategoryById("CareSymbols", PageView.Current().Area.EcomLanguageId); 22 Product _dynamicwebProduct = Product.GetProductById(Model.Id, Model.VariantId, false); 23 24 string bleaching = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "Bleaching"); 25 string drying = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "Drying"); 26 string hangDrying = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "HangDrying"); 27 string ironing = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "Ironing"); 28 string professionalCare = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "ProfessionalCare"); 29 string washing = _dynamicwebProduct.GetCategoryValue<string>("CareSymbols", "Washing"); 30 31 if (category != null) 32 { 33 foreach (Field field in category.Fields) 34 { 35 36 if (field.Id == "Washing") 37 { 38 39 foreach (FieldOption washingOption in field.FieldOptions) 40 { 41 if (washingOption.Value == washing) 42 { 43 CareSymbolsWashingTranslated[washingOption.Value] = washingOption.Name; 44 } 45 46 } 47 } 48 else 49 { 50 foreach (FieldOption option in field.FieldOptions) 51 { 52 53 if (CareSymbolsTranslated.ContainsKey(field.Id) == false) 54 { 55 if (field.Id == "Bleaching" && string.Equals(option.Value, bleaching, 56 StringComparison.OrdinalIgnoreCase) ) 57 { 58 CareSymbolsTranslated[field.Id] = option.Name; 59 } 60 if (field.Id == "Drying" && string.Equals(option.Value, drying, 61 StringComparison.OrdinalIgnoreCase) ) 62 { 63 CareSymbolsTranslated[field.Id] = option.Name; 64 } 65 if (field.Id == "HangDrying" && string.Equals(option.Value, hangDrying, 66 StringComparison.OrdinalIgnoreCase) ) 67 { 68 CareSymbolsTranslated[field.Id] = option.Name; 69 } 70 if (field.Id == "Ironing" && string.Equals(option.Value, ironing, 71 StringComparison.OrdinalIgnoreCase) ) 72 { 73 CareSymbolsTranslated[field.Id] = option.Name; 74 } 75 if (field.Id == "ProfessionalCare" && string.Equals(option.Value, professionalCare, 76 StringComparison.OrdinalIgnoreCase) ) 77 { 78 79 CareSymbolsTranslated[field.Id] = option.Name; 80 } 81 82 } 83 84 85 } 86 } 87 88 89 } 90 } 91 } 92 93 94 <div class="container-fluid"> 95 @if (shopContext == ShopType.B2C && Model.HighlightedFeatures.Any()) 96 { 97 <div class="row pb-4"> 98 <div class="col-12"> 99 <ul class="identity-spec-unordered-list mt-2 d-none d-md-flex"> 100 @foreach (string highligtedFeature in Model.HighlightedFeatures) 101 { 102 <li>@highligtedFeature</li> 103 } 104 </ul> 105 </div> 106 </div> 107 } 108 <div class="accordion identity-spec-accordion border-top w-100"> 109 @if (Model.ProductIcons.ContainsKey("Certificate") && Model.ProductIcons["Certificate"] != null && Model.ProductIcons["Certificate"].Any()) 110 { 111 <div class="border-bottom"> 112 <a class="h4 d-block py-2 mb-0 spec-toggle collapsed" data-toggle="collapse" data-target="#collapseCertificates"> 113 @Translate("Certificates", "Certificates") 114 </a> 115 <div id="collapseCertificates" class="collapse identity-spec-collapse identity-spec-collapse-Certificates"> 116 <div class="mb-2 small"> 117 @foreach (KeyValuePair<string, IdentityProductIcon> certificate in Model.ProductIcons["Certificate"]) 118 { 119 <div class="row mb-1"> 120 <div class="col-4"> 121 <div class="identity-spec-icon-container spec-certificate"> 122 <img class="identity-spec-icon" src="@certificate.Value.Icon"/> 123 </div> 124 </div> 125 <div class="col-8 align-self-center"> 126 <strong class="d-block">@certificate.Value.Header</strong> 127 @certificate.Value.Text 128 </div> 129 </div> 130 } 131 132 133 </div> 134 </div> 135 </div> 136 } 137 <div class="border-bottom"> 138 <a class="h4 d-block py-2 mb-0 spec-toggle collapsed" data-toggle="collapse" data-target="#collapseFunctionsMaterials"> 139 @Translate("Composition and Materials", "Composition & Materials") 140 </a> 141 <div id="collapseFunctionsMaterials" class="collapse identity-spec-collapse identity-spec-collapse-FunctionsMaterials"> 142 <div class="mb-2 small"> 143 <div class="row mb-1"> 144 <div class="col-4"> 145 <strong> 146 @Translate("Composition - header", "Composition") 147 </strong> 148 </div> 149 <div class="col-8"> 150 @Model.Composition 151 </div> 152 </div> 153 <div class="row mb-1"> 154 <div class="col-4"> 155 <strong> 156 @Translate("Size", "Size") 157 </strong> 158 </div> 159 <div class="col-8"> 160 @{ 161 IEnumerable<KeyValuePair<string, EspressoProduct>> variantOptionsByColor = Model.VariantCombinations.Where(vc => vc.Key.Split('.')[0] == Model.VariantId.Split('.')[0]); 162 163 164 } 165 @foreach (ElementWithIndex<KeyValuePair<string, EspressoProduct>> option in variantOptionsByColor.OrderBy(vo => 166 { 167 KeyValuePair<string, EspressoVariantOption> variantSizeObj = IdService.ProductService.Instance.GetVariantSizeOption(Model, vo.Key); 168 return variantSizeObj.Value?.SortOrder; 169 }).WithIndex()) 170 { 171 KeyValuePair<string, EspressoVariantOption> variantSizeObj = Co3.ID.Dw.Services.ProductService.Instance.GetVariantSizeOption(Model, option.Element.Key); 172 if (variantSizeObj.Value != null) 173 { 174 IdentityProduct idProduct = (IdentityProduct)option.Element.Value; 175 <span class="js-identity-spec-size" data-value="@option.Element"> 176 @if (option.Index > 0) 177 { 178 <span>, </span> 179 } 180 @idProduct.SizeVariantText 181 </span> 182 } 183 184 } 185 </div> 186 </div> 187 @foreach (AEspressoDisplayField field in Model.FieldDisplayGroups.ByName["Compositions"].Fields ) 188 { 189 if (string.IsNullOrEmpty(field.RenderedHtmlValue) == false) 190 { 191 <div class="row mb-1"> 192 <div class="col-4"> 193 <strong> 194 @field.Label 195 </strong> 196 </div> 197 <div class="col-8"> 198 @field.RenderedHtmlValue 199 </div> 200 </div> 201 } 202 } 203 @if (Model.ProductIcons.ContainsKey("Breathable") && Model.ProductIcons["Breathable"] != null && Model.ProductIcons["Breathable"].Any()) 204 { 205 foreach (KeyValuePair<string, IdentityProductIcon> field in Model.ProductIcons["Breathable"]) 206 { 207 <div class="row mb-1"> 208 <div class="col-4"> 209 <div class="identity-spec-icon-container spec-certificate"> 210 <img class="identity-spec-icon" src="@field.Value.Icon"/> 211 </div> 212 </div> 213 <div class="col-8 align-self-center"> 214 <strong class="d-block">@field.Value.Header</strong> 215 @field.Value.Text 216 </div> 217 </div> 218 } 219 } 220 @if (Model.ProductIcons.ContainsKey("Waterproof") && Model.ProductIcons["Waterproof"] != null && Model.ProductIcons["Waterproof"].Any()) 221 { 222 foreach (KeyValuePair<string, IdentityProductIcon> field in Model.ProductIcons["Waterproof"]) 223 { 224 <div class="row mb-1"> 225 <div class="col-4"> 226 <div class="identity-spec-icon-container spec-certificate"> 227 <img class="identity-spec-icon" src="@field.Value.Icon"/> 228 </div> 229 </div> 230 <div class="col-8 align-self-center"> 231 <strong class="d-block">@field.Value.Header</strong> 232 @field.Value.Text 233 </div> 234 </div> 235 } 236 } 237 @if (Model.ProductIcons.ContainsKey("Other") && Model.ProductIcons["Other"] != null && Model.ProductIcons["Other"].Any()) 238 { 239 foreach (KeyValuePair<string, IdentityProductIcon> field in Model.ProductIcons["Other"]) 240 { 241 <div class="row mb-1"> 242 <div class="col-4"> 243 <div class="identity-spec-icon-container spec-certificate"> 244 <img class="identity-spec-icon" src="@field.Value.Icon"/> 245 </div> 246 </div> 247 <div class="col-8 align-self-center"> 248 <strong class="d-block">@field.Value.Header</strong> 249 @field.Value.Text 250 </div> 251 </div> 252 } 253 } 254 @if (Model.ProductIcons.ContainsKey("Collar") && Model.ProductIcons["Collar"] != null && Model.ProductIcons["Collar"].Any()) 255 { 256 foreach (KeyValuePair<string, IdentityProductIcon> field in Model.ProductIcons["Collar"]) 257 { 258 <div class="row mb-1"> 259 <div class="col-4"> 260 <div class="identity-spec-icon-container spec-certificate"> 261 <img class="identity-spec-icon" src="@field.Value.Icon"/> 262 </div> 263 </div> 264 <div class="col-8 align-self-center"> 265 <strong class="d-block">@field.Value.Header</strong> 266 @field.Value.Text 267 </div> 268 </div> 269 } 270 } 271 </div> 272 </div> 273 </div> 274 <script>console.log(@JsonService.Instance.ToJson(Model.FieldDisplayGroups));</script> 275 @if (Model.FieldDisplayGroups.ByName["Care_Symbols"].Fields.Any()) 276 { 277 <div class="border-bottom"> 278 <a class="h4 d-block py-2 mb-0 spec-toggle collapsed" data-toggle="collapse" data-target="#collapseCare_Symbols"> 279 @Translate("Washing", "Washing") 280 </a> 281 <div id="collapseCare_Symbols" class="collapse identity-spec-collapse identity-spec-collapse-Care_Symbols mb-1"> 282 <div class="mb-2 small"> 283 <div class="row"> 284 @foreach (AEspressoDisplayField field in Model.FieldDisplayGroups.ByName["Care_Symbols"].Fields) 285 { 286 string icon = string.Format("files/images/products/WashIcon/{0}.svg", field.RenderedHtmlValue.Replace(",", string.Empty)); 287 <div class="col-6 col-md-4"> 288 <div class="row mb-1"> 289 <div class="col-3 col-md-2"> 290 <div class="identity-spec-icon-container"> 291 <img class="identity-spec-icon" src="@icon"/> 292 </div> 293 </div> 294 <div class="col-9 col-md-10 align-self-center"> 295 @if (field.Id == "ProductCategory|CareSymbols|Bleaching") 296 { 297 if(CareSymbolsTranslated.ContainsKey("Bleaching")){ 298 @CareSymbolsTranslated["Bleaching"] 299 } 300 } 301 @if (field.Id == "ProductCategory|CareSymbols|Drying") 302 { 303 if (CareSymbolsTranslated.ContainsKey("Drying")) 304 { 305 @CareSymbolsTranslated["Drying"] 306 } 307 } 308 @if (field.Id == "ProductCategory|CareSymbols|Ironing") 309 { 310 if (CareSymbolsTranslated.ContainsKey("Ironing")) 311 { 312 @CareSymbolsTranslated["Ironing"] 313 } 314 } 315 @if (field.Id == "ProductCategory|CareSymbols|ProfessionalCare") 316 { 317 if (CareSymbolsTranslated.ContainsKey("ProfessionalCare")) 318 { 319 @CareSymbolsTranslated["ProfessionalCare"] 320 } 321 } 322 @if (field.Id == "ProductCategory|CareSymbols|Washing") 323 { 324 if (CareSymbolsWashingTranslated.ContainsKey(field.RenderedHtmlValue.Trim())) 325 { 326 @CareSymbolsWashingTranslated[field.RenderedHtmlValue.Trim()] 327 } 328 329 } 330 @if (field.Id == "ProductCategory|CareSymbols|HangDrying") 331 { 332 if (CareSymbolsTranslated.ContainsKey("HangDrying")) 333 { 334 @CareSymbolsTranslated["HangDrying"] 335 } 336 } 337 </div> 338 </div> 339 </div> 340 } 341 </div> 342 </div> 343 </div> 344 </div> 345 } 346 347 @if (Model.RecommendedTransferTypes.Any()) 348 { 349 <div class="border-bottom"> 350 <a class="h4 d-block py-2 mb-0 spec-toggle collapsed" data-toggle="collapse" data-target="#collapseTransfer_types"> 351 @Translate("ecom - Recommended Transfer Types - Header", "Anbefalet transfer type") 352 </a> 353 <div id="collapseTransfer_types" class="collapse identity-spec-collapse identity-spec-collapse-Transfer_types mb-1"> 354 <div class="mb-2 small"> 355 @foreach (FieldOption transferType in Model.RecommendedTransferTypes) 356 { 357 <div class="row mb-1"> 358 <div class="col-4"> 359 <i class="material-icons mr-1">check</i> @transferType.Name 360 </div> 361 </div> 362 } 363 </div> 364 </div> 365 </div> 366 } 367 368 </div> 369 </div>