Dankzij onze Beste Prijsgarantie ben je altijd zeker van de laagste prijs op een nieuwe ATAG cv-ketel. Meer weten? Neem contact met ons op.
Error executing template "Designs/Atag/eCom7/CartV2/Step/AW_CustomerInformation.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_4a5eb08edf984ca0b9f0b57b26e665ab.Execute() in D:\inetpub\wwwroot\www.warmgarant.nl\Files\Templates\Designs\Atag\eCom7\CartV2\Step\AW_CustomerInformation.cshtml:line 12
   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 Warmgarant.Shop.Repository.Helpers 2 @using Warmgarant.Shop.Models.Constants 3 @using Warmgarant.Shop.Models.Enumerations 4 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 5 @{ 6 var areaId = Dynamicweb.Frontend.PageView.Current().AreaID; 7 var currentOrder = OrderHelper.GetCurrentOrder("", areaId); 8 9 var orderTypeValue = GetString("OrderType.Clean"); 10 if (string.IsNullOrWhiteSpace(orderTypeValue)) 11 { 12 orderTypeValue = (string)currentOrder.OrderFieldValues.GetOrderFieldValue(StringConstants.OrderFields.OrderType).Value; 13 } 14 var orderType = OrderType.Unknown; 15 Enum.TryParse(orderTypeValue, out orderType); 16 17 // tramline 18 string currentStation = "YourInfo"; 19 string[] activeStations = new string[] { "YourChoice", "YourInfo" }; 20 string[] tramStations = new string[] { "YourChoice", "YourInfo", "InstallationDate", "Payment", "Confirmation" }; 21 22 var assemblePageId = ""; 23 if (orderType.Equals(OrderType.Rent)) 24 { 25 assemblePageId = AreaHelper.GetAreaItemStringValueBySystemName(StringConstants.WebsiteConfiguration.RentalsAssemblePageId); 26 } 27 else 28 { 29 assemblePageId = AreaHelper.GetAreaItemStringValueBySystemName(StringConstants.WebsiteConfiguration.SalesAssemblePageId); 30 } 31 } 32 <section class="content content--no-bottom-margin tramline background--tint-1"> 33 <div class="content__container tramline__wrapper"> 34 @NavigationHelper.GetBreadCrumb() 35 @using Warmgarant.Shop.Repository.Helpers 36 @using Warmgarant.Shop.Models.Constants 37 @using Warmgarant.Shop.Models.Enumerations 38 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 39 @functions { 40 public string GetStation(string station, int currentStep, Dynamicweb.Ecommerce.Orders.Order currentOrder) 41 { 42 var previousStep = currentStep - 1; 43 var nextStep = currentStep + 1; 44 45 var orderTypeValue = GetString("OrderType.Clean"); 46 47 if (string.IsNullOrWhiteSpace(orderTypeValue)) 48 { 49 orderTypeValue = (string)currentOrder.OrderFieldValues.GetOrderFieldValue(StringConstants.OrderFields.OrderType).Value; 50 } 51 var orderType = OrderType.Unknown; 52 Enum.TryParse(orderTypeValue, out orderType); 53 54 var orderStateName = GetString("Ecom:Order:Orderstate.Name"); 55 56 switch (station) 57 { 58 case "YourChoice": 59 var returnPageId = ""; 60 if (orderType.Equals(OrderType.Rent)) 61 { 62 returnPageId = AreaHelper.GetAreaItemStringValueBySystemName(StringConstants.WebsiteConfiguration.RentalsAssemblePageId); 63 } 64 else 65 { 66 returnPageId = AreaHelper.GetAreaItemStringValueBySystemName(StringConstants.WebsiteConfiguration.SalesAssemblePageId); 67 } 68 if (!string.IsNullOrEmpty(returnPageId) && !Equals(returnPageId, Dynamicweb.Frontend.PageView.Current().Page.ID.ToString()) && !Equals(orderStateName, "Completed")) 69 { 70 return $"<a href=\"/Default.aspx?ID={returnPageId}\">{Translate($"Tramline_{station}", station)}</a>"; 71 } 72 else 73 { 74 return Translate($"Tramline_{station}", station); 75 } 76 case "YourInfo": 77 if (currentStep > 0 && currentStep < 3) 78 { 79 return $"<a href=\"/Default.aspx?ID={Dynamicweb.Frontend.PageView.Current().Page.ID}&CartV2.GotoStep0=true\">{Translate($"Tramline_{station}", station)}</a>"; 80 } 81 else 82 { 83 return Translate($"Tramline_{station}", station); 84 } 85 case "YourQuote": 86 returnPageId = Dynamicweb.Content.Services.Pages.GetPageByNavigationTag(Dynamicweb.Frontend.PageView.Current().AreaID, StringConstants.Navigation.SalesforceQuoteCart)?.ID.ToString() ?? ""; 87 if (!string.IsNullOrEmpty(returnPageId) && !Equals(orderStateName, "Completed")) 88 { 89 return $"<a href=\"/Default.aspx?ID={returnPageId}\">{Translate($"Tramline_{station}", station)}</a>"; 90 } 91 else 92 { 93 return $"{Translate($"Tramline_{station}", station)}"; 94 } 95 case "InstallationDate": 96 if (currentStep == 2) 97 { 98 return $"<a href=\"/Default.aspx?ID={Dynamicweb.Frontend.PageView.Current().Page.ID}&CartV2.GotoStep1=true\">{Translate($"Tramline_{station}", station)}</a>"; 99 } 100 else 101 { 102 return Translate($"Tramline_{station}", station); 103 } 104 case "Payment": 105 return Translate($"Tramline_{station}", station); 106 } 107 108 109 return Translate($"Tramline_{station}", station); 110 } 111 } 112 113 <div class="tramline__items"> 114 115 @{ 116 var currentStep = 0; 117 var currentStepName = GetString("CartV2.CurrentStepButtonName"); 118 if (!string.IsNullOrEmpty(currentStepName)) 119 { 120 int.TryParse(currentStepName.Substring(currentStepName.Length - 1), out currentStep); 121 } 122 } 123 124 @foreach (var station in tramStations) 125 { 126 <div class="tramline__items__item@(activeStations.Contains(station) ? " active" : "")@(currentStation.Equals(station) ? " current" : "")" id="tramline_@station.ToLower()"> 127 <div class="tramline__items__item__text"> 128 @GetStation(station, currentStep, currentOrder) 129 </div> 130 <div class="tramline__items__item__line"> 131 <hr /> 132 <div class="tramline__items__item__line__circle circle"></div> 133 </div> 134 </div> 135 } 136 </div> 137 </div> 138 </section> 139 140 <section class="content cart cart--customer-information content--no-bottom-margin background--tint-3-light"> 141 <div class="content__container cart__wrapper"> 142 143 @if (currentOrder == null) 144 { 145 146 <h1 class="h2">@Translate("Cart_Title_CustomerInformation", "Je gegevens")</h1> 147 <p>@Translate("CartTimeOutNotification", "The order has timed out.")</p> 148 } 149 else 150 { 151 var billingHouseNumber = GetString("Ecom:Order.Customer.HouseNumber"); 152 var billingZip = GetString("Ecom:Order.Customer.Zip"); 153 var billingStreet = GetString("Ecom:Order.Customer.Address"); 154 var billingCity = GetString("Ecom:Order.Customer.City"); 155 156 var showBillingAddress = ( 157 !string.IsNullOrWhiteSpace(billingHouseNumber) || 158 !string.IsNullOrWhiteSpace(billingZip) || 159 !string.IsNullOrWhiteSpace(billingStreet) || 160 !string.IsNullOrWhiteSpace(billingCity)); 161 162 <div id="contentrow"> 163 <div class="cart__content"> 164 <h1 class="h2">@Translate("Cart_Title_CustomerInformation", "Je gegevens")</h1> 165 <form name="ordersubmit" id="ordersubmit" method="post" autocomplete="off" class="cart__content__form"> 166 167 @*INSTALLATIE GEGEVENS*@ 168 <div id="installation-address-container" class="cart__content__form__block"> 169 170 @{ 171 var installationHouseNumber = GetString("Ecom:Order.Delivery.HouseNumber"); 172 var installationZip = GetString("Ecom:Order.Delivery.Zip"); 173 var installationStreet = GetString("Ecom:Order.Delivery.Address"); 174 var installationCity = GetString("Ecom:Order.Delivery.City"); 175 } 176 177 <h6 class="h7">@Translate("Cart_Subtitle_InstallationAddress", "Installatieadres")</h6> 178 179 <div class="input-wrapper"> 180 <input name="EcomOrderDeliveryZip" 181 id="EcomOrderDeliveryZip" 182 value="@installationZip" 183 type="text" 184 required="required" 185 placeholder="@Translate("CartInstallationAddressZip", "Zip").JsEncode()" 186 maxlength="7" 187 autocomplete="nope" /> 188 189 <input name="EcomOrderDeliveryHouseNumber" 190 id="EcomOrderDeliveryHouseNumber" 191 value="@installationHouseNumber" 192 type="text" 193 required="required" 194 placeholder="@Translate("CartInstallationAddressHouseNumber", "Housenumber + addition").JsEncode()" 195 maxlength="15" 196 autocomplete="nope" /> 197 </div> 198 199 <div class="input-wrapper"> 200 <input name="EcomOrderDeliveryAddress" 201 id="EcomOrderDeliveryAddress" 202 value="@installationStreet" 203 type="text" 204 required="required" 205 placeholder="@Translate("CartInstallationAddressStreet", "Street").JsEncode()" 206 maxlength="50" 207 autocomplete="nope" /> 208 </div> 209 210 <div class="input-wrapper"> 211 <input name="EcomOrderDeliveryCity" 212 id="EcomOrderDeliveryCity" 213 value="@installationCity" 214 type="text" 215 required="required" 216 placeholder="@Translate("CartInstallationAddressCity", "City").JsEncode()" 217 maxlength="50" 218 autocomplete="nope" /> 219 </div> 220 </div> 221 222 223 @*JE GEGEVENS*@ 224 <div id="customer-info-container" class="cart__content__form__block"> 225 226 <input type="hidden" name="GoogleAnalyticsClientId" id="GoogleAnalyticsClientId" value="" /> 227 228 @{ 229 var customerFirstName = GetString("Ecom:Order.Customer.FirstName"); 230 var customerSurName = GetString("Ecom:Order.Customer.Surname"); 231 var customerPhone = GetString("Ecom:Order.Customer.Phone"); 232 var customerDateOfBirth = GetString("CustomerDateOfBirth.Clean"); 233 var customerEmail = GetString("Ecom:Order.Customer.Email"); 234 var customerComment = GetString("Ecom:Order.Customer.Comment"); 235 } 236 237 <h6 class="h7">@Translate("Cart_Subtitle_YourInfo", "Je gegevens")</h6> 238 239 <div class="input-wrapper"> 240 <input name="EcomOrderCustomerFirstName" 241 id="EcomOrderCustomerFirstName" 242 value="@customerFirstName" 243 type="text" 244 required="required" 245 placeholder="@Translate("CartCustomerFirstName", "First name").JsEncode()" 246 maxlength="50" 247 autocomplete="nope" /> 248 249 <input name="EcomOrderCustomerSurname" 250 id="EcomOrderCustomerSurname" 251 value="@customerSurName" 252 type="text" 253 required="required" 254 placeholder="@Translate("CartCustomerSurname", "Surname").JsEncode()" 255 maxlength="50" 256 autocomplete="nope" /> 257 </div> 258 259 <div class="input-wrapper"> 260 <input name="EcomOrderCustomerPhone" 261 id="EcomOrderCustomerPhone" 262 value="@customerPhone" 263 type="tel" 264 required="required" 265 placeholder="@Translate("CartCustomerPhone1", "Phone/Mobile 1").JsEncode()" 266 maxlength="13" 267 autocomplete="nope" /> 268 269 @if (orderType.Equals(OrderType.Rent)) 270 { 271 var birthDateInfo = Translate("BirthDateInformation", "Text ..."); 272 <input name="CustomerDateOfBirth" 273 class="datepicker" 274 id="CustomerDateOfBirth" 275 value="@customerDateOfBirth" 276 required="required" 277 placeholder="@Translate("CartCustomerDateOfBirth", "Date of birth").JsEncode()" 278 type="text" /> 279 } 280 </div> 281 282 <div class="input-wrapper"> 283 <input name="EcomOrderCustomerEmail" 284 id="EcomOrderCustomerEmail" 285 value="@customerEmail" 286 type="email" 287 required="required" 288 placeholder="@Translate("CartCustomerEmail", "Email").JsEncode()" 289 maxlength="255" 290 autocomplete="nope" /> 291 </div> 292 293 <div class="input-wrapper"> 294 <textarea id="EcomOrderCustomerComment" 295 name="EcomOrderCustomerComment" 296 placeholder="@Translate("CommentPlaceholder", "Comments").JsEncode()">@customerComment</textarea> 297 </div> 298 299 <div class="input-wrapper" id="billing-address-selector-container"> 300 <label class="checkbox@(showBillingAddress ? " checked" : "")"> 301 <input type="checkbox" name="other-billing-address" id="other-billing-address" @(showBillingAddress ? " checked=checked" : "")> 302 @Translate("CartCustomerInformationOtherBillingAddress", "Other billing address") 303 </label> 304 </div> 305 306 </div> 307 308 @*ANDER FACTUURADRES*@ 309 <div id="billing-address-container" class="cart__content__form__block@(!showBillingAddress ? " hide" : "")"> 310 311 <div class="input-wrapper"> 312 313 <input name="EcomOrderCustomerZip" 314 id="EcomOrderCustomerZip" 315 value="@billingZip" 316 type="text" 317 placeholder="@Translate("CartBillingAddressZip", "Zip").JsEncode()" 318 maxlength="7" /> 319 320 <input name="EcomOrderCustomerHouseNumber" 321 id="EcomOrderCustomerHouseNumber" 322 value="@billingHouseNumber" 323 type="text" 324 placeholder="@Translate("CartBillingAddressHouseNumber", "Housenumber + addition").JsEncode()" 325 maxlength="15" /> 326 </div> 327 328 <div class="input-wrapper"> 329 <input name="EcomOrderCustomerAddress" 330 id="EcomOrderCustomerAddress" 331 value="@billingStreet" 332 type="text" 333 placeholder="@Translate("CartBillingAddressStreet", "Street").JsEncode()" 334 maxlength="50" /> 335 </div> 336 337 <div class="input-wrapper"> 338 <input name="EcomOrderCustomerCity" 339 id="EcomOrderCustomerCity" 340 value="@billingCity" type="text" 341 placeholder="@Translate("CartBillingAddressCity", "City").JsEncode()" 342 maxlength="50" /> 343 </div> 344 345 </div> 346 347 348 <div class="cart__content__form__cart-navigation"> 349 @if (!string.IsNullOrWhiteSpace(assemblePageId)) 350 { 351 <a href="/Default.aspx?ID=@assemblePageId" class="button button--outline">@Translate("Cart_Button_Back", "Vorige")</a> 352 } 353 <button type="submit" name="@GetString("CartV2.NextStepButtonName")" id="NextStepButtonHidden" class="button hidden" /> 354 <button type="button" name="NextStepButton" id="NextStepButton" class="button">@Translate("Cart_Button_ToInstallationDate", "Kies installatiedatum")</button> 355 </div> 356 357 </form> 358 </div> 359 <div class="cart__aside"> 360 <div id="receipt" class="receipt"> 361 <div class="preloader-wrapper small active"> 362 <div class="spinner-layer spinner-layer--sea"> 363 <div class="circle-clipper left"> 364 <div class="circle"></div> 365 </div> 366 <div class="gap-patch"> 367 <div class="circle"></div> 368 </div> 369 <div class="circle-clipper right"> 370 <div class="circle"></div> 371 </div> 372 </div> 373 </div> 374 </div> 375 </div> 376 </div> 377 378 379 @SnippetStart("JavaScriptBottom") 380 <script> 381 var CheckOut = { 382 reloadReceipt: function () { 383 Cart.ReloadReceipt('@GetGlobalValue("Global:Area.LongLang")', "", @Dynamicweb.Frontend.PageView.Current().AreaID, Cart.InitializeInterest); 384 }, 385 removeURLParameter: function (url, parameter) { 386 var urlparts = url.split('?'); 387 if (urlparts.length >= 2) { 388 389 var prefix = encodeURIComponent(parameter) + '='; 390 var pars = urlparts[1].split(/[&;]/g); 391 392 //reverse iteration as may be destructive 393 for (var i = pars.length; i-- > 0;) { 394 //idiom for string.startsWith 395 if (pars[i].lastIndexOf(prefix, 0) !== -1) { 396 pars.splice(i, 1); 397 } 398 } 399 400 return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : ''); 401 } 402 return url; 403 }, 404 removeStepFromQueryString: function () { 405 var uri = window.location.href.toString(); 406 if (uri.indexOf("?") > 0) { 407 for (let i = 0; i < 4; i++) { 408 uri = CheckOut.removeURLParameter(uri, 'CartV2.GotoStep' + i); 409 } 410 window.history.replaceState({}, document.title, uri); 411 } 412 }, 413 validateInputs: function (containerId) { 414 415 // validate required items 416 var containerIsValid = true; 417 418 $("input", containerId).not(':input[type=file]').each(function () { 419 var input = $(this); 420 var inputType = input.attr("type").toLowerCase(); 421 var isRequired = input.prop("required"); 422 var value = input.val().trim(); 423 input.val(value); 424 switch (inputType) { 425 case "text": 426 if (isRequired && value == "") { 427 containerIsValid = false; 428 input.addClass("error"); 429 } else { 430 input.removeClass("error"); 431 } 432 break; 433 case "tel": 434 if (isRequired && value == "") { 435 containerIsValid = false; 436 input.addClass("error"); 437 } else if (value != "" && !Cart.ValidateTelephone(value)) { 438 containerIsValid = false; 439 input.addClass("error"); 440 } else { 441 input.removeClass("error"); 442 } 443 break; 444 case "email": 445 if (isRequired && value == "") { 446 containerIsValid = false; 447 input.addClass("error"); 448 } else if (value != "" && !Cart.ValidateEmail(value)) { 449 containerIsValid = false; 450 input.addClass("error"); 451 } else { 452 input.removeClass("error"); 453 } 454 break; 455 case "textarea": 456 if (isRequired && value == "") { 457 containerIsValid = false; 458 input.addClass("error"); 459 } else { 460 input.removeClass("error"); 461 } 462 break; 463 case "checkbox": 464 if (isRequired && !input.is(":checked")) { 465 containerIsValid = false; 466 input.addClass("error"); 467 } else { 468 input.removeClass("error"); 469 } 470 break; 471 default: 472 break; 473 } 474 }); 475 476 $("select", containerId).each(function () { 477 var select = $(this); 478 var isRequired = select.prop("required"); 479 var value = select.val().trim(); 480 if (isRequired && value == "") { 481 containerIsValid = false; 482 } 483 }); 484 485 return containerIsValid; 486 } 487 } 488 </script> 489 <script> 490 491 PersonalData = { 492 HandleBillingAddressChange: function (event) { 493 var checkbox = $(event.target.firstElementChild); // clicked checkbox 494 var checked = checkbox.is(":checked"); // clicked checkbox is checked 495 var billingAddressContainer = $("#billing-address-container"); 496 497 if (checked) { 498 billingAddressContainer.removeClass("hide"); // show billing fields 499 } else { 500 billingAddressContainer.addClass("hide"); // hide billing fields 501 $("#EcomOrderCustomerHouseNumber").val(""); // clear billing fields 502 $("#EcomOrderCustomerZip").val(""); 503 $("#EcomOrderCustomerAddress").val(""); 504 $("#EcomOrderCustomerCity").val(""); 505 } 506 }, 507 Initialize: function () { 508 509 // Remove tramline parameter from querystring 510 CheckOut.removeStepFromQueryString(); 511 512 // Only numbers in telephone fields 513 $("input[type=tel]", "#customer-info-container").numeric(); 514 515 // Initialize show billing address selector 516 $("label.checkbox", "#billing-address-selector-container").innovadisCheckbox({ 517 onAfterChange: PersonalData.HandleBillingAddressChange 518 }); 519 520 // Fix for hiding of datepicker in Chrome73 521 $('.datepicker').on('mousedown',function(event){ 522 event.preventDefault(); 523 }); 524 525 // Initialize birth date selector --- seems to work like shit !!! 526 var maxDate = new Date(); 527 var minYear = parseInt(maxDate.getFullYear() - 115); 528 var minDate = new Date(minYear, 1, 1); 529 if ($(".datepicker")[0]) { 530 $('.datepicker').pickadate({ 531 monthsFull: [ 532 '@Translate("DatePicker_January", "January").JsEncode()', 533 '@Translate("DatePicker_February", "February").JsEncode()', 534 '@Translate("DatePicker_March", "March").JsEncode()', 535 '@Translate("DatePicker_April", "April").JsEncode()', 536 '@Translate("DatePicker_May", "May").JsEncode()', 537 '@Translate("DatePicker_June", "June").JsEncode()', 538 '@Translate("DatePicker_July", "July").JsEncode()', 539 '@Translate("DatePicker_August", "August").JsEncode()', 540 '@Translate("DatePicker_September", "September").JsEncode()', 541 '@Translate("DatePicker_October", "October").JsEncode()', 542 '@Translate("DatePicker_November", "November").JsEncode()', 543 '@Translate("DatePicker_December", "December").JsEncode()'], 544 weekdaysFull: [ 545 '@Translate("DatePicker_Sunday", "Sunday").JsEncode()', 546 '@Translate("DatePicker_Monday", "Monday").JsEncode()', 547 '@Translate("DatePicker_Tuesday", "Tuesday").JsEncode()', 548 '@Translate("DatePicker_Wednesday", "Wednesday").JsEncode()', 549 '@Translate("DatePicker_Thursday", "Thursday").JsEncode()', 550 '@Translate("DatePicker_Friday", "Friday").JsEncode()', 551 '@Translate("DatePicker_Saturday", "Saturday").JsEncode()'], 552 showMonthsShort: false, 553 showWeekdaysFull: true, 554 selectMonths: true, 555 selectYears: 115, 556 today: '@Translate("DatePicker_Today", "Today")', 557 clear: '@Translate("DatePicker_Clear", "Clear")', 558 close: '@Translate("DatePicker_OK", "OK")', 559 format: 'dd-mm-yyyy', 560 closeOnSelect: true, 561 closeOnClear: true, 562 min: minDate, 563 max: maxDate 564 }); 565 } 566 567 var gaClientId = SEO.getClientId(); 568 if (gaClientId === "") { 569 gaClientId = "none"; 570 } 571 $("#GoogleAnalyticsClientId").val(gaClientId); 572 573 // Validate personal data after input change and on page load 574 PersonalData.Validation(); 575 $("input[required=required]", "#customer-info-container") 576 .off("change") 577 .on("change", function () { 578 PersonalData.Validation(); 579 }); 580 581 // Validate personal data after select change 582 $("select[required=required]", "#customer-info-container") 583 .off("change") 584 .on("change", function () { 585 PersonalData.Validation(); 586 }); 587 588 // prefill installation address info 589 $("#EcomOrderDeliveryZip").off("change").on("change", function () { 590 PersonalData.PrefillAddress($("#EcomOrderDeliveryZip"), $("#EcomOrderDeliveryHouseNumber"), $("#EcomOrderDeliveryAddress"), $("#EcomOrderDeliveryCity")); 591 }); 592 $("#EcomOrderDeliveryHouseNumber").off("change").on("change", function () { 593 $(this).removeClass("error"); 594 var houseNumber = $(this).val(); 595 if (houseNumber !== "") { 596 if (!FormHelper.hasNumber(houseNumber)) { 597 $(this).addClass("error"); 598 alert("@Translate("HouseNumberError", "Must contain at least one number")"); 599 } else { 600 PersonalData.PrefillAddress($("#EcomOrderDeliveryZip"), $("#EcomOrderDeliveryHouseNumber"), $("#EcomOrderDeliveryAddress"), $("#EcomOrderDeliveryCity")); 601 } 602 } 603 }); 604 605 // prefill billing address info 606 $("#EcomOrderCustomerZip").off("change").on("change", function () { 607 PersonalData.PrefillAddress($("#EcomOrderCustomerZip"), $("#EcomOrderCustomerHouseNumber"), $("#EcomOrderCustomerAddress"), $("#EcomOrderCustomerCity")); 608 }); 609 $("#EcomOrderCustomerHouseNumber").off("change").on("change", function () { 610 $(this).removeClass("error"); 611 var houseNumber = $(this).val(); 612 if (houseNumber !== "") { 613 if (!FormHelper.hasNumber($(this).val())) { 614 $(this).addClass("error"); 615 alert("@Translate("HouseNumberError", "Must contain at least one number")"); 616 } else { 617 PersonalData.PrefillAddress($("#EcomOrderCustomerZip"), $("#EcomOrderCustomerHouseNumber"), $("#EcomOrderCustomerAddress"), $("#EcomOrderCustomerCity")); 618 } 619 } 620 }); 621 622 // Go to installation date 623 $("#NextStepButton") 624 .off("click") 625 .on("click", function () { 626 627 // save installation address via ajax and update receipt 628 PersonalData.SaveInstallationAddress(); 629 630 $("#NextStepButtonHidden").click(); 631 }); 632 633 // Validate form 634 PersonalData.Validation(); 635 }, 636 PrefillAddress: function ($zipInput, $houseNumberInput, $streetInput, $cityInput) { 637 try { 638 639 // validate input 640 if ($zipInput == null || $houseNumberInput == null || $streetInput == null || $cityInput == null) { 641 console.error("personalDatePrefillAddress error: not all required input fields are filled") 642 return; 643 } 644 645 // get input values 646 var street = $streetInput.val(); 647 var zip = $zipInput.val(); 648 var housenumber = $houseNumberInput.val(); 649 var city = $cityInput.val(); 650 651 // validate input 652 if (zip === "" || housenumber === "") { 653 return; 654 } 655 656 // remove spaces from zip 657 var zip = zip.replace(/\s+/g, '').toUpperCase(); 658 659 // only valid Dutch zips 660 if (zip.length !== 6) { 661 return; 662 } 663 664 // get address and prefill 665 var apiUrl = "/serviceapi/form/getaddress/" + zip + "/" + housenumber; 666 $.ajax(apiUrl).done(function (response) { 667 if (response != null) { 668 $streetInput.val(response.Item1); 669 $cityInput.val(response.Item2); 670 PersonalData.Validation(); 671 } 672 }); 673 674 } 675 catch (err) { 676 console.error("personalDatePrefillAddress, get address Failed: " + err.message); 677 } 678 679 }, 680 SaveInstallationAddress: function () { 681 var installationStreet = $("#EcomOrderDeliveryAddress").val(); 682 var installationHouseNumber = $("#EcomOrderDeliveryHouseNumber").val(); 683 var installationZip = $("#EcomOrderDeliveryZip").val(); 684 var installationCity = $("#EcomOrderDeliveryCity").val(); 685 var areaId = @Dynamicweb.Frontend.PageView.Current().AreaID; 686 Cart.AddInstallationAddress(installationStreet, installationHouseNumber, installationZip, installationCity, areaId); 687 }, 688 Validation: function () { 689 690 // validate personalData 691 var personalDataIsValid = CheckOut.validateInputs("#customer-info-container"); 692 693 // handle validation result 694 var nextButton = $("#NextStepButton"); 695 if (personalDataIsValid) { 696 nextButton.removeClass("disabled"); 697 } else { 698 nextButton.addClass("disabled"); 699 } 700 701 // return validation result 702 return personalDataIsValid; 703 }, 704 } 705 706 $(function () { 707 708 // Load receipt 709 CheckOut.reloadReceipt(); 710 711 // Inital page load 712 PersonalData.Initialize(); 713 714 }); 715 716 </script> 717 @SnippetEnd("JavaScriptBottom") 718 } 719 </div> 720 </section>