Error executing template "/Designs/Swift/Paragraph/Mennt_DealerList.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
at CompiledRazorTemplates.Dynamic.RazorEngine_025947f439244893ad157330e67c55d6.Execute() in D:\dynamicweb.net\Solutions\Mennt\tysse.cloud.dynamicweb-cms.com\files\Templates\Designs\Swift\Paragraph\Mennt_DealerList.cshtml:line 22
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 Mennt.Tysse.Custom.Helpers
2
3 @{
4 var productId = Dynamicweb.Context.Current.Request.QueryString.Get("ProductID");
5 var productName = Dynamicweb.Context.Current.Request.QueryString.Get("ProductName");
6 var productImage = Dynamicweb.Context.Current.Request.QueryString.Get("ProductImage");
7 var addToCart = Dynamicweb.Context.Current.Request.QueryString.Get("AddToCart");
8 var dealersByArea = DealerHelper.GetDealersByArea(productId);
9
10 string iconPath = "/Files/Icons/";
11 int dealerStock = DealerHelper.GetDealerStock(productId);
12 Mennt.Tysse.Custom.Models.Dealer selectedDealer = DealerHelper.SelectedDealer();
13
14 var test = Dynamicweb.Ecommerce.Products.Product.GetProductById(productId);
15
16 var groupID = test != null ? test.GetDefaultGroupByShopId("SHOP1") : null;
17 var parent = groupID != null ? groupID.PrimaryParentGroupId : "";
18
19 var groups = "";
20 var spareParts = "false";
21 if(productId != "0") {
22 foreach (var x in test.Groups)
23 {
24 groups = x.Name;
25 }
26
27 if (groups.Contains("Reservedeler"))
28 {
29 spareParts = "true";
30 }
31 }
32
33 var i = 0;
34 }
35
36 <div class="d-flex justify-content-end p-3">
37 <div class="d-flex align-items-center">
38 <span class="pe-2" style="margin-left: auto;">@Translate("Lukk")</span>
39 <div class="close-dealer-modal">
40 <span class="my-auto" data-bs-dismiss="modal" aria-label="Close" style="cursor: pointer;">
41 @ReadFile(iconPath + "kryss.svg")
42 </span>
43 </div>
44 </div>
45 </div>
46 <h5 class="modal-title display-2 text-center py-3">@Translate("Velg forhandler")</h5>
47
48 @* Søkefelt *@
49 <div class="d-flex align-items-center w-100">
50 <div class="search-dealer w-100 p-3 w-100 mx-auto" style="max-width: 500px">
51 <button id="searchTermDealerButton" type="button" onclick="searchDealers('@productId', '@productName', '@productImage')">
52 <i class="fa fa-search findStock" id="searchIcon" style="color:black;"></i>
53 </button>
54 <input type="text" class="form-control regular-bread-text" name="searchTermDealer" id="searchTermDealer" placeholder="Søk nærmeste by eller poststed" value="" onkeypress="(event.key === 'Enter') ? searchDealers('@productId', '@productName', '@productImage') : undefined;">
55 </div>
56 </div>
57 @* Location *@
58 <div class="m-3 d-flex justify-content-center">
59 <button onclick="searchByCurrentLocation('@productId', '@productName', '@productImage')" class="btn btn-primary w-100 p-2 d-flex align-items-center justify-content-center" style="max-width:250px;" id="getLocation">
60 <span class="findStock"> Finn din nærmeste butikk </span>
61 <span class="ps-1 d-flex align-self-center"> @ReadFile(iconPath + "finnforhandlerHvit.svg")</span>
62 </button>
63 </div>
64
65 @if(productId != "0" && spareParts != "true"){
66 <div id="onlyInStock" class="d-flex justify-content-center justify-content-md-end me-0 me-md-4">
67 <label for="hideDealers" class="me-1">@Translate("Vis kun de på lager")</label>
68 <input type="checkbox" id="hideDealers" onclick="hideDealers()">
69 </div>
70 }
71 else
72 {
73 <!-- QUICK FIX -->
74 <div id="onlyInStock" class="d-none">
75 <label for="hideDealers">@Translate("Vis kun de på lager")</label>
76 <input type="checkbox" id="hideDealers" onclick="hideDealers()">
77 </div>
78 }
79
80 <div class="modal-body p-3 p-lg-3 h-100">
81 <span id="productMessage" class="d-block"></span>
82 <span id="productGroup" class="d-none">@spareParts</span>
83 <div>
84 <div class="text-start" id="searchResultDealer"></div>
85 </div>
86
87 <div class="accordion" id="accordionExample">
88 @foreach (var area in dealersByArea)
89 {
90 <div class="mb-3 areaStock">
91 <h2 class="accordion-header" id="headingOne_@i">
92 <button class="accordion-button collapsed bg-light border-0 rounded-3 " type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne_@i" aria-expanded="true" aria-controls="collapseOne_@i">
93 <div style="font-weight: 500!important;" data-area-name="@area.Name">@area.Name <span class="amountStock ms-2 regular-bold-text text-success"></span></div>
94 </button>
95 </h2>
96
97 @foreach (var dealer in area.Dealers)
98 {
99
100 var subSegment = @String.Join(",", dealer.SubSegments);
101 var boatDealer = subSegment.Equals("BÅT");
102
103 <div id="collapseOne_@i" class="accordion-collapse collapse dealerElement" aria-labelledby="headingOne_@i" data-bs-parent="#accordionExample" data-dealerid="@dealer.Number">
104
105 <input type="hidden" class="dealerId" value="@dealer.Id" />
106 @if (!boatDealer)
107 {
108 <div class="py-3">
109 <div class="border rounded p-3 @((selectedDealer != null && dealer.Name == selectedDealer.Name) ? "border-red" : "")">
110 <div class="regular-bold-text text-start" style="font-weight: 600!important;">@dealer.Name</div>
111 <div class="regular-bread-text text-start">@dealer.Address, @dealer.Zip @dealer.City</div>
112 <div class="regular-bread-text text-start"> <span class="icon-2 pe-2">@ReadFile(iconPath + "phone.svg")</span><span>@dealer.Phone</span></div>
113
114 <div class="d-grid d-md-flex flex-row justify-content-md-between flex-wrap flex-md-nowrap align-items-center">
115 <div class="pt-3 d-flex h-md-50 align-items-center flex-wrap">
116 @if (subSegment.Contains("TOTAL"))
117 {
118 <div class="d-flex align-items-center mb-3 pe-1">
119 <div class="me-1 dealerLine" id="color1" style="height: 15px; border-radius: 40px;"></div>
120 <div class="py-1">
121 <h5 class="mb-0">@Translate("Dealer.Details.Total.Title", "Total forhandler av")</h5>
122 </div>
123 </div>
124
125 }
126 @if (subSegment.Contains("XTREME"))
127 {
128 <div class="d-flex align-items-center mb-3 pe-1" style="height: 15px; border-radius: 40px;">
129 <div class="me-1 dealerLine" id="color2"></div>
130 <div class="py-1">
131 <h5 class="mb-0">@Translate("Dealer.Details.Xtreme.Title", "Xtreme forhandler")</h5>
132 </div>
133 </div>
134 }
135 @if (subSegment.Contains("BÅT"))
136 {
137 <div class="d-flex align-items-center mb-3 pe-1" style="height: 15px; border-radius: 40px;">
138 <div class="me-1 dealerLine" id="color3"></div>
139 <div class="py-1">
140 <h5 class="mb-0">@Translate("Dealer.Details.Boat.Title", "Båt-forhandler av")</h5>
141 </div>
142 </div>
143 }
144
145 </div>
146
147 <button type="button" class="@(selectedDealer != null && dealer.Name == selectedDealer.Name ? "btn-secondary" : "btn-primary btn-dark") choseButton h-md-50" productId="@productId" user="@dealer.Name" userId="@dealer.Id" userPhone="@dealer.Phone" dealerNumber="@dealer.Number" addToCart="@addToCart" @(selectedDealer != null && dealer.Name == selectedDealer.Name ? "disabled" : "")>
148 @((selectedDealer != null && dealer.Name == selectedDealer.Name) ? "Valgt" : "Velg")
149 </button>
150 </div>
151
152 @*<div data-dealerid="@dealer.Id" class="unsureStock modalUnsureStock d-block align-items-center">
153 <span class="icon-2" style="color: #D79C04;"> @ReadFile(iconPath + "download.svg")</span>
154 <span class="ms-2 regular-bold-text stockText">@Translate("Henter lagerstatus")</span>
155 </div>*@
156
157
158
159
160 <div class="d-flex justify-content-start flex-column" style="text-align: left;">
161 @if (spareParts == "true") {
162 <div class="">
163 <span class="icon-2" style="color: #D79C04;"> @ReadFile(iconPath + "alert-circle.svg")</span>
164 <span class="ms-2 regular-bold-text">@Translate("Usikker lagerstatus")</span>
165 <div class="fs-8 w-100 w-md-50">Hvis varen ikke er på lager vil den sendes til forhandleren fra nettlageret vårt. Frakt kan tilkomme. Kontakt forhandler for leveringstid.</div>
166 </div>
167 }
168 else
169 {
170 if(productId != "0" && dealer.Stock > 0){
171 <div data-dealerid="@dealer.Id" class="inStock align-items-center">
172 <span class="icon-2" style="color: green;"> @ReadFile(iconPath + "check-circle.svg")</span>
173 <span class="ms-2 regular-bold-text">@Translate("På lager")</span>
174 </div>
175 }
176 if(productId != "0" && dealer.Stock <= 0){
177 <div data-dealerid="@dealer.Id" class="notInStock align-items-center">
178 <span class="icon-2" style="color: grey;"> @ReadFile(iconPath + "alert-circle.svg")</span>
179 <span class="ms-2 regular-bold-text">@Translate("Ikke på lager")</span>
180 </div>
181 <div class="small-text">@Translate("Kontakt oss for leveringstid")</div>
182 }
183 }
184
185 </div>
186
187
188
189
190
191
192 </div>
193 </div>
194 }
195 </div>
196 }
197 </div>
198 i++;
199 }
200 </div>
201 </div>
202
203 <style>
204 .border-red {
205 border: 1px solid rgb(152, 15, 15) !important;
206 }
207
208 .btn-selected {
209 background-color: red;
210 }
211 </style>
212
213