/Files/Images/Machinerypartner/logo.png
+44 020 1234 1234
Error executing template "Designs/Swift-v2/eCom7/CartV2/Step/InformationAnonymous.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_9b7fdf056233468a9f4213c1d42eb80a.ExecuteAsync()
   at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) in /_/src/Application/Providers/Dynamicweb.Rendering.Providers.NetCore/Razor/RazorTemplateRenderingProvider.cs:line 99
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) in E:\A10\_w\2\s\src\Core\Dynamicweb.Core\Rendering\TemplateRenderingService.cs:line 21
   at Dynamicweb.Rendering.Template.RenderRazorTemplate() in E:\A10\_w\2\s\src\Core\Dynamicweb.Core\Rendering\Template.cs:line 749

1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @using Dynamicweb 3 4 <div class="grid gap-0 h-100" id="InformationAnonymous"> 5 <div class="g-col-12 g-col-lg-8 p-3 p-lg-4 pe-xl-5 ps-xl-6 ps-xxl-8 order-last order-lg-first" data-dw-colorscheme="@Pageview.CurrentParagraph?.ColorSchemeId"> 6 <form name="ordersubmit" id="ordersubmit" method="post" autocomplete="off" style="max-width: 65rem; margin-left: auto;"> 7 8 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 9 @using Dynamicweb 10 @using System.IO 11 12 @{ 13 string logoLink = Pageview.CurrentParagraph?.Item["LogoLink"] != null ? Pageview.CurrentParagraph.Item["LogoLink"].ToString() : string.Empty; 14 15 string logoImage = Pageview.CurrentParagraph?.Item["Logo"] != null ? Pageview.CurrentParagraph.Item["Logo"].ToString() : string.Empty; 16 string title = Pageview.CurrentParagraph?.Item["Title"] != null ? Pageview.CurrentParagraph.Item["Title"].ToString() : Pageview.Area.Name; 17 18 string maxWidth = Pageview.CurrentParagraph?.Item["MaxWidth"] != null ? "max-width: " + Pageview.CurrentParagraph.Item["MaxWidth"].ToString() + "px" : string.Empty; 19 maxWidth = maxWidth == "max-width: 0px" ? string.Empty : maxWidth; 20 } 21 22 <div class="mb-4 text-center"> 23 @if (!string.IsNullOrWhiteSpace(logoLink)) 24 { 25 @:<a href="@logoLink" class="text-decoration-none" title="@Translate("Leave checkout")"> 26 } 27 28 @if (logoImage != "") 29 { 30 if (Path.GetExtension(logoImage).ToLower() == ".svg") 31 { 32 <div class="icon-auto" style="@maxWidth"> 33 @ReadFile(logoImage) 34 </div> 35 } 36 else 37 { 38 string imageWidth = Pageview.CurrentParagraph.Item["MaxWidth"] != null ? Pageview.CurrentParagraph.Item["MaxWidth"].ToString() : "400"; 39 string imagePath = "/Admin/Public/GetImage.ashx?width=" + imageWidth + "&image=" + logoImage; 40 41 <picture class="mx-auto d-block"> 42 <img src="@logoImage" alt="@title" style="@maxWidth"> 43 </picture> 44 } 45 } 46 else 47 { 48 <div class="fs-3 p-0">@title</div> 49 } 50 51 @if (!string.IsNullOrWhiteSpace(logoLink)) 52 { 53 @:</a> 54 } 55 </div> 56 57 58 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 59 @using Dynamicweb.Ecommerce.Cart 60 61 <nav aria-label="breadcrumb" class="mb-3 mb-md-4 fs-8" id="StepsBreadcrumbs"> 62 <ol class="breadcrumb" style="--bs-breadcrumb-divider: '>'; --bs-breadcrumb-item-padding-x: 1rem; --bs-breadcrumb-font-size: .875em;"> 63 @foreach (LoopItem step in GetLoop("StepButtons")) 64 { 65 if (step.GetString("Step.Name").ToLower() != "checkout") 66 { 67 if (step.GetBoolean("Step.Current")) 68 { 69 <li class="breadcrumb-item active" aria-current="page">@Translate(step.GetString("Step.Name"))</li> 70 break; 71 } 72 else 73 { 74 <li class="breadcrumb-item">@Translate(step.GetString("Step.Name"))</li> 75 } 76 } 77 } 78 79 @if (GetLoop("StepButtons").Count == 0) 80 { 81 var cartSettings = new ModuleSettings(Pageview.CurrentParagraph.ModuleProperties); 82 83 foreach (CartStepInfo step in cartSettings.Steps) 84 { 85 if (step.IsCheckout) 86 { 87 <li class="breadcrumb-item" aria-current="page">@Translate(step.Name)</li> 88 break; 89 } 90 else 91 { 92 <li class="breadcrumb-item">@Translate(step.Name)</li> 93 } 94 } 95 } 96 </ol> 97 </nav> 98 99 100 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 101 @using Dynamicweb.Ecommerce.Orders 102 103 @if (GetLoop("ValidationErrors").Count() != 0) 104 { 105 <div class="alert alert-warning" role="alert"> 106 <ul class="m-0 list-unstyled"> 107 @foreach (LoopItem item in GetLoop("ValidationErrors")) 108 { 109 <li>@item.GetValue("Ecom:Cart.ValidationError.ErrorMessage")</li> 110 } 111 </ul> 112 </div> 113 } 114 115 116 @* Logic to remove the voucher code error, when going to next step in checkout *@ 117 @{ 118 string voucherCodeForErrorCheck = GetString("Ecom:Order.Customer.VoucherCode"); 119 Order orderForErrorCheck = new OrderService().GetById(GetString("Ecom:Order.ID")); 120 voucherCodeForErrorCheck = orderForErrorCheck.VoucherUseType == VoucherUseCategoryType.None ? string.Empty : voucherCodeForErrorCheck; 121 } 122 123 <input type="hidden" name="EcomOrderVoucherCode" value="@voucherCodeForErrorCheck"> 124 125 126 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 127 128 @{ 129 bool summaryIsPaymentStep = GetLoop("StepButtons").Count == 0; 130 int summaryCurrentStep = !summaryIsPaymentStep ? 1 : 4; 131 int summaryCurrentUserId = Dynamicweb.Core.Converter.ToInt32(GetGlobalValue("Global:Extranet.UserID")); 132 133 bool userHasDefaultAddress = false; 134 bool userAddressSelected = false; 135 136 string userSelectedAddressID = GetString("UserManagement:User.UserAddress.SelectedAddressID"); 137 138 foreach (LoopItem userAddress in GetLoop("UserManagement:User.UserAddresses")) 139 { 140 if (userAddress.GetBoolean("UserManagement:User.UserAddress.Default")) 141 { 142 userHasDefaultAddress = true; 143 } 144 if (userAddress.GetBoolean("UserManagement:User.UserAddress.SelectedForDeliveryFields")) 145 { 146 userAddressSelected = true; 147 } 148 if (!string.IsNullOrEmpty(userAddress.GetString("UserManagement:User.UserAddress.SelectedAddressID"))) 149 { 150 userSelectedAddressID = userAddress.GetString("UserManagement:User.UserAddress.SelectedAddressID"); 151 } 152 } 153 154 foreach (LoopItem step in GetLoop("StepButtons")) 155 { 156 if (step.GetBoolean("Step.Current")) 157 { 158 summaryCurrentStep = step.GetInteger("Step.Number"); 159 } 160 } 161 } 162 163 @if (!string.IsNullOrEmpty(GetString("UserManagement:User.Address")) || 164 !string.IsNullOrEmpty(GetString("Ecom:Order.ShippingMethodID")) || 165 !string.IsNullOrEmpty(GetString("Ecom:Order.PaymentMethodID")) || 166 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name")) || 167 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Company")) || 168 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address")) || 169 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address2")) || 170 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Zip")) || 171 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.City")) || 172 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Email")) || 173 !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Phone")) || 174 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Name")) || 175 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Company")) || 176 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address")) || 177 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address2")) || 178 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Zip")) || 179 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.City")) || 180 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Email")) || 181 !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Phone")) || 182 !string.IsNullOrEmpty(GetString("Ecom:Order.ShippingMethod")) || 183 !string.IsNullOrEmpty(GetString("Ecom:Order.ShippingDate")) || 184 !string.IsNullOrEmpty(GetString("Ecom:Order.PaymentMethod"))) 185 { 186 187 @* User *@ 188 if (summaryCurrentUserId != 0) 189 { 190 <div class="list-group mb-5" style="--bs-list-group-bg: rgba(var(--bs-body-color-rgb), 0.05)"> 191 192 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 193 194 @{ 195 var hideEditBillingAddress = Pageview.CurrentParagraph?.Item["HideEditBillingAddress"] != null ? Convert.ToBoolean(Pageview.CurrentParagraph.Item["HideEditBillingAddress"].ToString()) : false; 196 int currentUserId = Dynamicweb.Core.Converter.ToInt32(GetGlobalValue("Global:Extranet.UserID")); 197 198 List<string> contact = new List<string>(); 199 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Email")) || !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Phone"))) 200 { 201 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Email"))) 202 { 203 contact.Add(GetString("Ecom:Order.Customer.Email")); 204 } 205 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Phone"))) 206 { 207 contact.Add(GetString("Ecom:Order.Customer.Phone")); 208 } 209 } 210 211 string contactString = (string.Join(",", contact.Select(x => x.ToString()).ToArray())).Replace(",", ", "); 212 string userAccountPage = Pageview.CurrentParagraph.Item["UserAccountPageLink"] != null ? Pageview.CurrentParagraph.Item["UserAccountPageLink"].ToString() + "&GoBackToPage=" + Pageview.Page.ID : ""; 213 214 if (!string.IsNullOrEmpty(contactString)) 215 { 216 <div class="list-group-item py-2 fs-7" id="ContactGroup"> 217 <dl class="grid gap-1 gap-sm-3 mb-0"> 218 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Contact")</dt> 219 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@contactString</dd> 220 221 @if (!hideEditBillingAddress) 222 { 223 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 224 @if (currentUserId == 0) 225 { 226 <button type="submit" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" name="CartV2.GotoStep0" id="EditBillingAddressButton"> 227 <span class="text-uppercase">@Translate("Edit")</span> 228 </button> 229 } 230 else 231 { 232 <a href="@userAccountPage" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" id="EditBillingAddressButton"> 233 <span class="text-uppercase">@Translate("Edit")</span> 234 </a> 235 } 236 </dd> 237 } 238 </dl> 239 </div> 240 } 241 242 int billingFieldCount = 0; //Helps us render addresses that contains more than just the auto set country 243 List<string> customerAddressList = new List<string>(); 244 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Company"))) 245 { 246 customerAddressList.Add(GetString("Ecom:Order.Customer.Company")); 247 billingFieldCount++; 248 } 249 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Name"))) 250 { 251 customerAddressList.Add(GetString("Ecom:Order.Customer.Name")); 252 billingFieldCount++; 253 } 254 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address"))) 255 { 256 customerAddressList.Add(GetString("Ecom:Order.Customer.Address")); 257 billingFieldCount++; 258 } 259 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address2"))) 260 { 261 customerAddressList.Add(GetString("Ecom:Order.Customer.Address2")); 262 billingFieldCount++; 263 } 264 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Zip"))) 265 { 266 customerAddressList.Add(GetString("Ecom:Order.Customer.Zip")); 267 billingFieldCount++; 268 } 269 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.City"))) 270 { 271 customerAddressList.Add(GetString("Ecom:Order.Customer.City")); 272 billingFieldCount++; 273 } 274 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Region"))) 275 { 276 string regionName = GetString("Ecom:Order.Customer.Region"); 277 foreach (LoopItem region in GetLoop("CustomerRegions")) 278 { 279 if (region.GetString("Ecom:CustomerRegion.IsCustomerRegion") == "true") 280 { 281 regionName = region.GetString("Ecom:CustomerRegion.Name"); 282 } 283 } 284 285 customerAddressList.Add(regionName); 286 billingFieldCount++; 287 } 288 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Country"))) 289 { 290 customerAddressList.Add(GetString("Ecom:Order.Customer.Country")); 291 billingFieldCount++; 292 } 293 string billingAddressString = (string.Join(",", customerAddressList.Select(x => x.ToString()).ToArray())).Trim(',').Replace(",", ", "); 294 295 if (!string.IsNullOrEmpty(billingAddressString) && billingFieldCount > 1) 296 { 297 <div class="list-group-item py-2 fs-7"> 298 <dl class="grid gap-1 gap-sm-3 mb-0"> 299 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Billing")</dt> 300 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@billingAddressString</dd> 301 302 @if (!hideEditBillingAddress) 303 { 304 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 305 @if (currentUserId == 0) 306 { 307 <button type="submit" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" name="CartV2.GotoStep0" id="EditBillingAddressButton"> 308 <span class="text-uppercase">@Translate("Edit")</span> 309 </button> 310 } 311 else 312 { 313 <a href="@userAccountPage" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" id="EditBillingAddressButton"> 314 <span class="text-uppercase">@Translate("Edit")</span> 315 </a> 316 } 317 </dd> 318 } 319 </dl> 320 </div> 321 } 322 } 323 324 325 @if (summaryCurrentStep != 1) 326 { 327 if(!String.Equals(summaryCurrentUserId.ToString(), userSelectedAddressID)) //Selected address 328 { 329 <text> 330 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 331 332 @{ 333 var hideEditAddress = Pageview.CurrentParagraph?.Item["HideEditBillingAddress"] != null ? Convert.ToBoolean(Pageview.CurrentParagraph.Item["HideEditBillingAddress"].ToString()) : false; 334 var selectedAddressString = string.Empty; 335 int fieldCount = 0; //Helps us render addresses that contains more than just the auto set country 336 List<string> address = new List<string>(); 337 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Company"))) 338 { 339 address.Add(GetString("Ecom:Order.Delivery.Company")); 340 fieldCount++; 341 } 342 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name"))) 343 { 344 address.Add(GetString("Ecom:Order.Delivery.Name")); 345 fieldCount++; 346 } 347 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address"))) 348 { 349 address.Add(GetString("Ecom:Order.Delivery.Address")); 350 fieldCount++; 351 } 352 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address2"))) 353 { 354 address.Add(GetString("Ecom:Order.Delivery.Address2")); 355 fieldCount++; 356 } 357 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Zip"))) 358 { 359 address.Add(GetString("Ecom:Order.Delivery.Zip")); 360 fieldCount++; 361 } 362 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.City"))) 363 { 364 address.Add(GetString("Ecom:Order.Delivery.City")); 365 fieldCount++; 366 } 367 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Region"))) 368 { 369 string regionName = GetString("Ecom:Order.Delivery.Region"); 370 foreach (LoopItem region in GetLoop("DeliveryRegions")) 371 { 372 if (region.GetString("Ecom:DeliveryRegion.IsDeliveryRegion") == "true") 373 { 374 regionName = region.GetString("Ecom:DeliveryRegion.Name"); 375 } 376 } 377 378 address.Add(regionName); 379 fieldCount++; 380 } 381 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Country"))) 382 { 383 address.Add(GetString("Ecom:Order.Delivery.Country")); 384 fieldCount++; 385 } 386 selectedAddressString = (string.Join(",", address.Select(x => x.ToString()).ToArray())).Trim(',').Replace(",", ", "); 387 } 388 389 @if (!string.IsNullOrEmpty(selectedAddressString) && fieldCount > 1) 390 { 391 <div class="list-group-item py-2 fs-7"> 392 <dl class="grid gap-1 gap-sm-3 mb-0"> 393 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Selected address")</dt> 394 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@selectedAddressString</dd> 395 396 @if (!hideEditAddress) 397 { 398 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 399 <button class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" type="submit" name="CartV2.GotoStep0" id="EditDeliveryAddressButton"> 400 <span class="text-uppercase">@Translate("Edit")</span> 401 </button> 402 </dd> 403 } 404 </dl> 405 </div> 406 } 407 408 </text> 409 } 410 } 411 @if (summaryCurrentStep > 2) 412 { 413 <text> 414 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 415 @{ 416 string shippingMethod = GetString("Ecom:Order.ShippingMethod"); 417 418 if (!string.IsNullOrEmpty(shippingMethod)) 419 { 420 421 List<string> shippingDetails = new List<string>(); 422 423 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Company"))) 424 { 425 shippingDetails.Add(GetString("Ecom:Order.Delivery.Company")); 426 } 427 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name"))) 428 { 429 if (GetString("Ecom:Order.Delivery.Company") != GetString("Ecom:Order.Delivery.Name")) 430 { 431 shippingDetails.Add(GetString("Ecom:Order.Delivery.Name")); 432 } 433 } 434 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address"))) 435 { 436 shippingDetails.Add(GetString("Ecom:Order.Delivery.Address")); 437 } 438 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address2"))) 439 { 440 shippingDetails.Add(GetString("Ecom:Order.Delivery.Address2")); 441 } 442 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Zip"))) 443 { 444 shippingDetails.Add(GetString("Ecom:Order.Delivery.Zip")); 445 } 446 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.City"))) 447 { 448 shippingDetails.Add(GetString("Ecom:Order.Delivery.City")); 449 } 450 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Region"))) 451 { 452 string regionName = GetString("Ecom:Order.Delivery.Region"); 453 foreach (LoopItem region in GetLoop("DeliveryRegions")) 454 { 455 if (region.GetString("Ecom:DeliveryRegion.IsDeliveryRegion") == "true") 456 { 457 regionName = region.GetString("Ecom:DeliveryRegion.Name"); 458 } 459 } 460 shippingDetails.Add(regionName); 461 } 462 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Country"))) 463 { 464 shippingDetails.Add(GetString("Ecom:Order.Delivery.Country")); 465 } 466 if (GetBoolean("Ecom:Order.Delivery.isPickupPoint")) 467 { 468 shippingDetails.Clear(); 469 var order = Dynamicweb.Ecommerce.Services.Orders.GetById(GetString("Ecom:Order.ID")); 470 if (order.ShippingProviderValues.ContainsKey("ShipmondoServicePointId")) 471 { 472 //Shipmondo provider 473 if (order.ShippingProviderValues.TryGetValue("ServiceSelectedDataCarrierName", out object CarrierName)) 474 { 475 shippingDetails.Add((string)CarrierName); 476 } 477 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCompanyName", out object CompanyName)) 478 { 479 shippingDetails.Add((string)CompanyName); 480 } 481 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataAddress", out object Address)) 482 { 483 shippingDetails.Add((string)Address); 484 } 485 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataAddress2", out object Address2) && !string.IsNullOrEmpty((string)Address2)) 486 { 487 shippingDetails.Add((string)Address2); 488 } 489 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataZipcode", out object Zipcode)) 490 { 491 shippingDetails.Add((string)Zipcode); 492 } 493 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCity", out object City)) 494 { 495 shippingDetails.Add((string)City); 496 } 497 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCountry", out object Country)) 498 { 499 shippingDetails.Add((string)Country); 500 } 501 if (order.ShippingProviderValues.Any()) 502 { 503 var deliveryName = 504 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Delivery.Name")) ? GetString("Ecom:Order.Delivery.Name") : 505 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Customer.Name")) ? GetString("Ecom:Order.Customer.Name") : 506 !string.IsNullOrWhiteSpace(GetString("UserManagement:User.Name")) ? GetString("UserManagement:User.Name") : string.Empty; 507 508 <div id="hiddenParcelshopFields" class="list-group-item visually-hidden"> 509 <input type="hidden" name="EcomOrderDeliveryCompany" value="@($"{(string)CompanyName} ({(string)CarrierName})")" disabled> 510 <input type="hidden" name="EcomOrderDeliveryName" value="@(deliveryName)" disabled> 511 <input type="hidden" name="EcomOrderDeliveryAddress" value="@((string)Address)" disabled> 512 <input type="hidden" name="EcomOrderDeliveryAddress2" value="@((string)Address2)" disabled> 513 <input type="hidden" name="EcomOrderDeliveryZip" value="@((string)Zipcode)" disabled> 514 <input type="hidden" name="EcomOrderDeliveryCity" value="@((string)City)" disabled> 515 <input type="hidden" name="EcomOrderDeliveryCountry" value="@((string)Country)" disabled> 516 </div> 517 } 518 } 519 520 if (order.ShippingProviderValues.ContainsKey("ParcelShopNumber")) 521 { 522 //GLS Provider 523 if (order.ShippingProviderValues.TryGetValue("parcelShop", out object parcelShop)) 524 { 525 if (parcelShop is System.Collections.Generic.Dictionary<System.String, System.Object>) 526 { 527 var selectedShop = (System.Collections.Generic.Dictionary<System.String, System.Object>)parcelShop; 528 529 if (selectedShop.TryGetValue("CompanyName", out object CompanyName)) 530 { 531 shippingDetails.Add((string)CompanyName); 532 } 533 if (selectedShop.TryGetValue("Streetname", out object Streetname)) 534 { 535 shippingDetails.Add((string)Streetname); 536 } 537 if (selectedShop.TryGetValue("Streetname2", out object Streetname2) && !string.IsNullOrEmpty((string)Streetname2)) 538 { 539 shippingDetails.Add((string)Streetname2); 540 } 541 if (selectedShop.TryGetValue("ZipCode", out object ZipCode)) 542 { 543 shippingDetails.Add((string)ZipCode); 544 } 545 if (selectedShop.TryGetValue("CityName", out object CityName)) 546 { 547 shippingDetails.Add((string)CityName); 548 } 549 if (selectedShop.TryGetValue("CountryCodeISO3166A2", out object Country)) 550 { 551 shippingDetails.Add((string)Country); 552 } 553 if (order.ShippingProviderValues.Any()) 554 { 555 var deliveryName = 556 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Delivery.Name")) ? GetString("Ecom:Order.Delivery.Name") : 557 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Customer.Name")) ? GetString("Ecom:Order.Customer.Name") : 558 !string.IsNullOrWhiteSpace(GetString("UserManagement:User.Name")) ? GetString("UserManagement:User.Name") : string.Empty; 559 560 <div id="hiddenParcelshopFields" class="list-group-item visually-hidden"> 561 <input type="hidden" name="EcomOrderDeliveryCompany" value="@($"{(string)CompanyName}")" disabled> 562 <input type="hidden" name="EcomOrderDeliveryName" value="@(deliveryName)" disabled> 563 <input type="hidden" name="EcomOrderDeliveryAddress" value="@((string)Streetname)" disabled> 564 <input type="hidden" name="EcomOrderDeliveryAddress2" value="@((string)Streetname2)" disabled> 565 <input type="hidden" name="EcomOrderDeliveryZip" value="@((string)ZipCode)" disabled> 566 <input type="hidden" name="EcomOrderDeliveryCity" value="@((string)CityName)" disabled> 567 <input type="hidden" name="EcomOrderDeliveryCountry" value="@((string)Country)" disabled> 568 </div> 569 } 570 } 571 } 572 } 573 } 574 575 string shippingDetailsString = (string.Join(", ", shippingDetails.Select(x => x).ToArray())); 576 577 <div class="list-group-item py-2 fs-7" id="DeliveryGroup"> 578 <dl class="grid gap-1 gap-sm-3 mb-0"> 579 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Delivery method")</dt> 580 <dd class="d-flex flex-column g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0"> 581 @if ((!string.IsNullOrEmpty(shippingDetailsString) && !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name")))) 582 { 583 <span>@shippingDetailsString</span> 584 <span class="opacity-75 fs-8"> 585 @shippingMethod 586 </span> 587 } 588 else if ((!string.IsNullOrEmpty(shippingDetailsString) && string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name")) && string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Country")))) { 589 <span>@shippingDetailsString</span> 590 <span class="opacity-75 fs-8"> 591 @shippingMethod 592 </span> 593 } 594 else 595 { 596 <span>@Translate("Same as billing address")</span> 597 <span class="opacity-75 fs-8"> 598 @shippingMethod 599 </span> 600 } 601 </dd> 602 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 603 <button class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" type="submit" name="CartV2.GotoStep1" id="EditDeliveryButton"> 604 <span class="text-uppercase">@Translate("Edit")</span> 605 </button> 606 </dd> 607 </dl> 608 </div> 609 } 610 } 611 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 612 613 @{ 614 string shippingDate = GetString("Ecom:Order.ShippingDate"), 615 shippingDateFormatted = GetDate("Ecom:Order.ShippingDate").ToShortDateString(); 616 } 617 618 @if (!string.IsNullOrEmpty(shippingDate)) 619 { 620 <div class="list-group-item py-2 fs-7"> 621 <dl class="grid gap-1 gap-sm-3 mb-0"> 622 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Delivery date")</dt> 623 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@shippingDateFormatted</dd> 624 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 625 <button class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" type="submit" name="CartV2.GotoStep1" id="EditDeliveryDateButton"> 626 <span class="text-uppercase">@Translate("Edit")</span> 627 </button> 628 </dd> 629 </dl> 630 </div> 631 } 632 633 634 </text> 635 } 636 </div> 637 } 638 @* Anonymous *@ 639 else 640 { 641 if (summaryCurrentStep != 1) 642 { 643 <div class="list-group" style="--bs-list-group-bg: rgba(var(--bs-body-color-rgb), 0.05)"> 644 645 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 646 647 @{ 648 var hideEditBillingAddress = Pageview.CurrentParagraph?.Item["HideEditBillingAddress"] != null ? Convert.ToBoolean(Pageview.CurrentParagraph.Item["HideEditBillingAddress"].ToString()) : false; 649 int currentUserId = Dynamicweb.Core.Converter.ToInt32(GetGlobalValue("Global:Extranet.UserID")); 650 651 List<string> contact = new List<string>(); 652 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Email")) || !string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Phone"))) 653 { 654 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Email"))) 655 { 656 contact.Add(GetString("Ecom:Order.Customer.Email")); 657 } 658 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Phone"))) 659 { 660 contact.Add(GetString("Ecom:Order.Customer.Phone")); 661 } 662 } 663 664 string contactString = (string.Join(",", contact.Select(x => x.ToString()).ToArray())).Replace(",", ", "); 665 string userAccountPage = Pageview.CurrentParagraph.Item["UserAccountPageLink"] != null ? Pageview.CurrentParagraph.Item["UserAccountPageLink"].ToString() + "&GoBackToPage=" + Pageview.Page.ID : ""; 666 667 if (!string.IsNullOrEmpty(contactString)) 668 { 669 <div class="list-group-item py-2 fs-7" id="ContactGroup"> 670 <dl class="grid gap-1 gap-sm-3 mb-0"> 671 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Contact")</dt> 672 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@contactString</dd> 673 674 @if (!hideEditBillingAddress) 675 { 676 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 677 @if (currentUserId == 0) 678 { 679 <button type="submit" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" name="CartV2.GotoStep0" id="EditBillingAddressButton"> 680 <span class="text-uppercase">@Translate("Edit")</span> 681 </button> 682 } 683 else 684 { 685 <a href="@userAccountPage" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" id="EditBillingAddressButton"> 686 <span class="text-uppercase">@Translate("Edit")</span> 687 </a> 688 } 689 </dd> 690 } 691 </dl> 692 </div> 693 } 694 695 int billingFieldCount = 0; //Helps us render addresses that contains more than just the auto set country 696 List<string> customerAddressList = new List<string>(); 697 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Company"))) 698 { 699 customerAddressList.Add(GetString("Ecom:Order.Customer.Company")); 700 billingFieldCount++; 701 } 702 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Name"))) 703 { 704 customerAddressList.Add(GetString("Ecom:Order.Customer.Name")); 705 billingFieldCount++; 706 } 707 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address"))) 708 { 709 customerAddressList.Add(GetString("Ecom:Order.Customer.Address")); 710 billingFieldCount++; 711 } 712 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Address2"))) 713 { 714 customerAddressList.Add(GetString("Ecom:Order.Customer.Address2")); 715 billingFieldCount++; 716 } 717 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Zip"))) 718 { 719 customerAddressList.Add(GetString("Ecom:Order.Customer.Zip")); 720 billingFieldCount++; 721 } 722 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.City"))) 723 { 724 customerAddressList.Add(GetString("Ecom:Order.Customer.City")); 725 billingFieldCount++; 726 } 727 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Region"))) 728 { 729 string regionName = GetString("Ecom:Order.Customer.Region"); 730 foreach (LoopItem region in GetLoop("CustomerRegions")) 731 { 732 if (region.GetString("Ecom:CustomerRegion.IsCustomerRegion") == "true") 733 { 734 regionName = region.GetString("Ecom:CustomerRegion.Name"); 735 } 736 } 737 738 customerAddressList.Add(regionName); 739 billingFieldCount++; 740 } 741 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Customer.Country"))) 742 { 743 customerAddressList.Add(GetString("Ecom:Order.Customer.Country")); 744 billingFieldCount++; 745 } 746 string billingAddressString = (string.Join(",", customerAddressList.Select(x => x.ToString()).ToArray())).Trim(',').Replace(",", ", "); 747 748 if (!string.IsNullOrEmpty(billingAddressString) && billingFieldCount > 1) 749 { 750 <div class="list-group-item py-2 fs-7"> 751 <dl class="grid gap-1 gap-sm-3 mb-0"> 752 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Billing")</dt> 753 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@billingAddressString</dd> 754 755 @if (!hideEditBillingAddress) 756 { 757 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 758 @if (currentUserId == 0) 759 { 760 <button type="submit" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" name="CartV2.GotoStep0" id="EditBillingAddressButton"> 761 <span class="text-uppercase">@Translate("Edit")</span> 762 </button> 763 } 764 else 765 { 766 <a href="@userAccountPage" class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" id="EditBillingAddressButton"> 767 <span class="text-uppercase">@Translate("Edit")</span> 768 </a> 769 } 770 </dd> 771 } 772 </dl> 773 </div> 774 } 775 } 776 777 778 @if (summaryCurrentStep > 2) 779 { 780 <text> 781 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 782 @{ 783 string shippingMethod = GetString("Ecom:Order.ShippingMethod"); 784 785 if (!string.IsNullOrEmpty(shippingMethod)) 786 { 787 788 List<string> shippingDetails = new List<string>(); 789 790 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Company"))) 791 { 792 shippingDetails.Add(GetString("Ecom:Order.Delivery.Company")); 793 } 794 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name"))) 795 { 796 if (GetString("Ecom:Order.Delivery.Company") != GetString("Ecom:Order.Delivery.Name")) 797 { 798 shippingDetails.Add(GetString("Ecom:Order.Delivery.Name")); 799 } 800 } 801 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address"))) 802 { 803 shippingDetails.Add(GetString("Ecom:Order.Delivery.Address")); 804 } 805 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Address2"))) 806 { 807 shippingDetails.Add(GetString("Ecom:Order.Delivery.Address2")); 808 } 809 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Zip"))) 810 { 811 shippingDetails.Add(GetString("Ecom:Order.Delivery.Zip")); 812 } 813 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.City"))) 814 { 815 shippingDetails.Add(GetString("Ecom:Order.Delivery.City")); 816 } 817 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Region"))) 818 { 819 string regionName = GetString("Ecom:Order.Delivery.Region"); 820 foreach (LoopItem region in GetLoop("DeliveryRegions")) 821 { 822 if (region.GetString("Ecom:DeliveryRegion.IsDeliveryRegion") == "true") 823 { 824 regionName = region.GetString("Ecom:DeliveryRegion.Name"); 825 } 826 } 827 shippingDetails.Add(regionName); 828 } 829 if (!string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Country"))) 830 { 831 shippingDetails.Add(GetString("Ecom:Order.Delivery.Country")); 832 } 833 if (GetBoolean("Ecom:Order.Delivery.isPickupPoint")) 834 { 835 shippingDetails.Clear(); 836 var order = Dynamicweb.Ecommerce.Services.Orders.GetById(GetString("Ecom:Order.ID")); 837 if (order.ShippingProviderValues.ContainsKey("ShipmondoServicePointId")) 838 { 839 //Shipmondo provider 840 if (order.ShippingProviderValues.TryGetValue("ServiceSelectedDataCarrierName", out object CarrierName)) 841 { 842 shippingDetails.Add((string)CarrierName); 843 } 844 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCompanyName", out object CompanyName)) 845 { 846 shippingDetails.Add((string)CompanyName); 847 } 848 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataAddress", out object Address)) 849 { 850 shippingDetails.Add((string)Address); 851 } 852 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataAddress2", out object Address2) && !string.IsNullOrEmpty((string)Address2)) 853 { 854 shippingDetails.Add((string)Address2); 855 } 856 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataZipcode", out object Zipcode)) 857 { 858 shippingDetails.Add((string)Zipcode); 859 } 860 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCity", out object City)) 861 { 862 shippingDetails.Add((string)City); 863 } 864 if (order.ShippingProviderValues.TryGetValue("ServicePointSelectedDataCountry", out object Country)) 865 { 866 shippingDetails.Add((string)Country); 867 } 868 if (order.ShippingProviderValues.Any()) 869 { 870 var deliveryName = 871 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Delivery.Name")) ? GetString("Ecom:Order.Delivery.Name") : 872 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Customer.Name")) ? GetString("Ecom:Order.Customer.Name") : 873 !string.IsNullOrWhiteSpace(GetString("UserManagement:User.Name")) ? GetString("UserManagement:User.Name") : string.Empty; 874 875 <div id="hiddenParcelshopFields" class="list-group-item visually-hidden"> 876 <input type="hidden" name="EcomOrderDeliveryCompany" value="@($"{(string)CompanyName} ({(string)CarrierName})")" disabled> 877 <input type="hidden" name="EcomOrderDeliveryName" value="@(deliveryName)" disabled> 878 <input type="hidden" name="EcomOrderDeliveryAddress" value="@((string)Address)" disabled> 879 <input type="hidden" name="EcomOrderDeliveryAddress2" value="@((string)Address2)" disabled> 880 <input type="hidden" name="EcomOrderDeliveryZip" value="@((string)Zipcode)" disabled> 881 <input type="hidden" name="EcomOrderDeliveryCity" value="@((string)City)" disabled> 882 <input type="hidden" name="EcomOrderDeliveryCountry" value="@((string)Country)" disabled> 883 </div> 884 } 885 } 886 887 if (order.ShippingProviderValues.ContainsKey("ParcelShopNumber")) 888 { 889 //GLS Provider 890 if (order.ShippingProviderValues.TryGetValue("parcelShop", out object parcelShop)) 891 { 892 if (parcelShop is System.Collections.Generic.Dictionary<System.String, System.Object>) 893 { 894 var selectedShop = (System.Collections.Generic.Dictionary<System.String, System.Object>)parcelShop; 895 896 if (selectedShop.TryGetValue("CompanyName", out object CompanyName)) 897 { 898 shippingDetails.Add((string)CompanyName); 899 } 900 if (selectedShop.TryGetValue("Streetname", out object Streetname)) 901 { 902 shippingDetails.Add((string)Streetname); 903 } 904 if (selectedShop.TryGetValue("Streetname2", out object Streetname2) && !string.IsNullOrEmpty((string)Streetname2)) 905 { 906 shippingDetails.Add((string)Streetname2); 907 } 908 if (selectedShop.TryGetValue("ZipCode", out object ZipCode)) 909 { 910 shippingDetails.Add((string)ZipCode); 911 } 912 if (selectedShop.TryGetValue("CityName", out object CityName)) 913 { 914 shippingDetails.Add((string)CityName); 915 } 916 if (selectedShop.TryGetValue("CountryCodeISO3166A2", out object Country)) 917 { 918 shippingDetails.Add((string)Country); 919 } 920 if (order.ShippingProviderValues.Any()) 921 { 922 var deliveryName = 923 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Delivery.Name")) ? GetString("Ecom:Order.Delivery.Name") : 924 !string.IsNullOrWhiteSpace(GetString("Ecom:Order.Customer.Name")) ? GetString("Ecom:Order.Customer.Name") : 925 !string.IsNullOrWhiteSpace(GetString("UserManagement:User.Name")) ? GetString("UserManagement:User.Name") : string.Empty; 926 927 <div id="hiddenParcelshopFields" class="list-group-item visually-hidden"> 928 <input type="hidden" name="EcomOrderDeliveryCompany" value="@($"{(string)CompanyName}")" disabled> 929 <input type="hidden" name="EcomOrderDeliveryName" value="@(deliveryName)" disabled> 930 <input type="hidden" name="EcomOrderDeliveryAddress" value="@((string)Streetname)" disabled> 931 <input type="hidden" name="EcomOrderDeliveryAddress2" value="@((string)Streetname2)" disabled> 932 <input type="hidden" name="EcomOrderDeliveryZip" value="@((string)ZipCode)" disabled> 933 <input type="hidden" name="EcomOrderDeliveryCity" value="@((string)CityName)" disabled> 934 <input type="hidden" name="EcomOrderDeliveryCountry" value="@((string)Country)" disabled> 935 </div> 936 } 937 } 938 } 939 } 940 } 941 942 string shippingDetailsString = (string.Join(", ", shippingDetails.Select(x => x).ToArray())); 943 944 <div class="list-group-item py-2 fs-7" id="DeliveryGroup"> 945 <dl class="grid gap-1 gap-sm-3 mb-0"> 946 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Delivery method")</dt> 947 <dd class="d-flex flex-column g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0"> 948 @if ((!string.IsNullOrEmpty(shippingDetailsString) && !string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name")))) 949 { 950 <span>@shippingDetailsString</span> 951 <span class="opacity-75 fs-8"> 952 @shippingMethod 953 </span> 954 } 955 else if ((!string.IsNullOrEmpty(shippingDetailsString) && string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Name")) && string.IsNullOrEmpty(GetString("Ecom:Order.Delivery.Country")))) { 956 <span>@shippingDetailsString</span> 957 <span class="opacity-75 fs-8"> 958 @shippingMethod 959 </span> 960 } 961 else 962 { 963 <span>@Translate("Same as billing address")</span> 964 <span class="opacity-75 fs-8"> 965 @shippingMethod 966 </span> 967 } 968 </dd> 969 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 970 <button class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" type="submit" name="CartV2.GotoStep1" id="EditDeliveryButton"> 971 <span class="text-uppercase">@Translate("Edit")</span> 972 </button> 973 </dd> 974 </dl> 975 </div> 976 } 977 } 978 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 979 980 @{ 981 string shippingDate = GetString("Ecom:Order.ShippingDate"), 982 shippingDateFormatted = GetDate("Ecom:Order.ShippingDate").ToShortDateString(); 983 } 984 985 @if (!string.IsNullOrEmpty(shippingDate)) 986 { 987 <div class="list-group-item py-2 fs-7"> 988 <dl class="grid gap-1 gap-sm-3 mb-0"> 989 <dt class="g-col-8 g-col-sm-4 fw-normal">@Translate("Delivery date")</dt> 990 <dd class="g-col-12 g-col-sm-7 order-2 order-sm-1 mb-0">@shippingDateFormatted</dd> 991 <dd class="g-col-4 g-col-sm-1 order-1 order-sm-2 mb-0 text-end"> 992 <button class="btn btn-sm btn-link fs-8 p-0" data-dw-button="link" type="submit" name="CartV2.GotoStep1" id="EditDeliveryDateButton"> 993 <span class="text-uppercase">@Translate("Edit")</span> 994 </button> 995 </dd> 996 </dl> 997 </div> 998 } 999 1000 1001 </text> 1002 } 1003 @if (summaryCurrentStep > 3) 1004 { 1005 <text> 1006 [Include file 'Helpers/StepSummaryPaymentMethod.cshtml' not found in 'Templates/Designs/Swift-v2/eCom7/CartV2/Step/Helpers/StepSummary.cshtml'] 1007 [Include file 'Helpers/StepSummaryOrderReference.cshtml' not found in 'Templates/Designs/Swift-v2/eCom7/CartV2/Step/Helpers/StepSummary.cshtml'] 1008 </text> 1009 } 1010 </div> 1011 } 1012 } 1013 } 1014 1015 1016 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1017 1018 @{ 1019 string apiKey = !string.IsNullOrEmpty(Pageview.AreaSettings.GetString("Google_APIKey")) ? Pageview.AreaSettings.GetString("Google_APIKey") : ""; 1020 1021 string userCheckoutPage = Pageview.CurrentParagraph.Item["CheckoutUserPageLink"] != null ? Pageview.CurrentParagraph.Item["CheckoutUserPageLink"]?.ToString()?.ToLower().Replace("default.aspx?id=", "") ?? "" : ""; 1022 string signInPage = Pageview.CurrentParagraph.Item["SignInPageLink"] != null ? Pageview.CurrentParagraph.Item["SignInPageLink"].ToString() + "&GoBackToPage=" + userCheckoutPage : ""; 1023 bool enableAdditionalAddress = Pageview.CurrentParagraph.Item["EnableAdditionalAddress"] != null ? (Boolean)Pageview.CurrentParagraph.Item["EnableAdditionalAddress"] : false; 1024 bool enableFindLocation = Pageview.CurrentParagraph.Item["EnableFindLocation"] != null ? (Boolean)Pageview.CurrentParagraph.Item["EnableFindLocation"] : false; 1025 1026 string currentCountry = Pageview.Area?.EcomCountryCode != null ? Pageview.Area.EcomCountryCode : "dk"; 1027 foreach (LoopItem country in GetLoop("Countries")) 1028 { 1029 if (country.GetString("Ecom:Country.IsCustomerCountryOrDefault") == "true") 1030 { 1031 currentCountry = country.GetString("Ecom:Country.Code2"); 1032 } 1033 } 1034 1035 string countrySelectorColumnSize = "g-col-6"; 1036 string customerRegionLabel = "State"; 1037 1038 <input type="hidden" name="EcomUserCreateNew" id="EcomUserCreateNew" value="true" disabled> 1039 1040 <div class="mb-0"> 1041 1042 <div class="d-flex"> 1043 <div class="flex-grow-1"> 1044 <h3 class="fs-6 fw-normal mb-3">@Translate("Contact information")</h3> 1045 </div> 1046 @if (Pageview.CurrentParagraph.Item["SignInPageLink"].ToString() != string.Empty) 1047 { 1048 <div class="text-end d-none d-md-block"> 1049 <a href="@signInPage" class="h6 fw-normal mb-3 d-block">@Translate("Already have account?") @Translate("Log in")</a> 1050 </div> 1051 } 1052 1053 </div> 1054 1055 </div> 1056 1057 <div class="mb-4"> 1058 <div class="grid"> 1059 <div class="g-col-12"> 1060 <div class="form-floating"> 1061 <input type="email" class="form-control" name="EcomOrderCustomerEmail" id="EcomOrderCustomerEmail" value="@GetString("Ecom:Order.Customer.Email")" placeholder="@Translate("Email Address")"> 1062 <label for="EcomOrderCustomerEmail">@Translate("Email Address")</label> 1063 </div> 1064 </div> 1065 @if (Pageview.CurrentParagraph.Item["SignInPageLink"].ToString() != string.Empty) 1066 { 1067 <div class="g-col-12 d-md-none"> 1068 <a href="@signInPage">@Translate("Already have account?") @Translate("Log in")</a> 1069 </div> 1070 } 1071 @* Use newsletter *@ 1072 @if (GetString("Ecom:Cart.UseNewsletterSubscription") == "True") 1073 { 1074 bool? isChecked = null; 1075 if (GetString("Ecom:Order.Customer.NewsletterSubscribe") == "true") 1076 { 1077 isChecked = true; 1078 } 1079 1080 <div class="g-col-12"> 1081 <div class="form-check"> 1082 <input class="form-check-input" type="checkbox" name="EcomOrderSubscribeToNewsletter" id="EcomOrderSubscribeToNewsletter" checked="@isChecked" onchange="toggleCreateUser(event);"> 1083 <label class="form-check-label lh-1" for="EcomOrderSubscribeToNewsletter"> 1084 <span>@Translate("Keep me updated with deals, news and offers")</span> 1085 </label> 1086 </div> 1087 </div> 1088 } 1089 </div> 1090 </div> 1091 1092 <div class="mt-4"> 1093 1094 <h3 class="fs-6 fw-normal mb-3">@Translate("Billing information")</h3> 1095 1096 <div class="grid gap-3"> 1097 <div class="g-col-12"> 1098 <div class="form-floating"> 1099 <input type="text" class="form-control" name="EcomOrderCustomerCompany" id="EcomOrderCustomerCompany" value="@GetString("Ecom:Order.Customer.Company")" placeholder="@Translate("Company")"> 1100 <label for="EcomOrderCustomerCompany">@Translate("Company (Optional)")</label> 1101 </div> 1102 </div> 1103 1104 <div class="g-col-12"> 1105 <div class="form-floating"> 1106 <input type="text" class="form-control" name="EcomOrderCustomerName" id="EcomOrderCustomerName" value="@GetString("Ecom:Order.Customer.Name")" placeholder="@Translate("Name")"> 1107 <label for="EcomOrderCustomerName">@Translate("Name")</label> 1108 </div> 1109 </div> 1110 1111 <div class="g-col-12"> 1112 <div class="form-floating"> 1113 <input type="text" class="form-control" name="EcomOrderCustomerAddress" id="EcomOrderCustomerAddress" value="@GetString("Ecom:Order.Customer.Address")" placeholder="@Translate("Street & Number")"> 1114 <label for="EcomOrderCustomerAddress">@Translate("Street & Number")</label> 1115 </div> 1116 </div> 1117 1118 @if (enableAdditionalAddress) 1119 { 1120 <div class="g-col-12"> 1121 <div class="form-floating"> 1122 <input type="text" class="form-control" name="EcomOrderCustomerAddress2" id="EcomOrderCustomerAddress2" value="@GetString("Ecom:Order.Customer.Address2")" placeholder="@Translate("Additional address")"> 1123 <label for="EcomOrderCustomerAddress">@Translate("Additional address")</label> 1124 </div> 1125 </div> 1126 } 1127 1128 <div class="g-col-12"> 1129 <div class="grid"> 1130 1131 <div class="g-col-6 g-col-md-3"> 1132 <div class="form-floating"> 1133 <input type="text" class="form-control" name="EcomOrderCustomerZip" id="EcomOrderCustomerZip" value="@GetString("Ecom:Order.Customer.Zip")" placeholder="@Translate("Zip code")"> 1134 <label for="EcomOrderCustomerZip">@Translate("Zip code")</label> 1135 </div> 1136 </div> 1137 1138 @if (GetLoop("CustomerRegions").Count > 0) 1139 { 1140 countrySelectorColumnSize = "g-col-3"; 1141 } 1142 1143 <div class="@countrySelectorColumnSize"> 1144 <div class="form-floating"> 1145 <input type="text" class="form-control" name="EcomOrderCustomerCity" id="EcomOrderCustomerCity" value="@GetString("Ecom:Order.Customer.City")" placeholder="@Translate("Town / City")"> 1146 <label for="EcomOrderCustomerCity">@Translate("Town / City")</label> 1147 </div> 1148 </div> 1149 1150 @if (GetLoop("CustomerRegions").Count > 0) 1151 { 1152 if (currentCountry == "CA") 1153 { 1154 customerRegionLabel = Translate("Province"); 1155 } 1156 else if (currentCountry == "GB") 1157 { 1158 customerRegionLabel = Translate("Region"); 1159 } 1160 else if (currentCountry == "US") 1161 { 1162 customerRegionLabel = Translate("State"); 1163 } 1164 1165 <div class="g-col-3"> 1166 <div class="form-floating"> 1167 <select class="form-select" name="EcomOrderCustomerRegion" id="EcomOrderCustomerRegion" onchange="submitForm()"> 1168 @foreach (LoopItem region in GetLoop("CustomerRegions")) 1169 { 1170 if (region.GetString("Ecom:CustomerRegion.IsCustomerRegion") == "true") 1171 { 1172 <option value="@region.GetString("Ecom:CustomerRegion.RegionCode")" selected>@region.GetString("Ecom:CustomerRegion.Name")</option> 1173 } 1174 else 1175 { 1176 <option value="@region.GetString("Ecom:CustomerRegion.RegionCode")">@region.GetString("Ecom:CustomerRegion.Name")</option> 1177 } 1178 } 1179 </select> 1180 <label for="EcomOrderCustomerRegion">@customerRegionLabel</label> 1181 </div> 1182 </div> 1183 } 1184 1185 <div class="g-col-12 g-col-md-3"> 1186 <div class="form-floating"> 1187 1188 <select class="form-select" name="EcomOrderCustomerCountry" id="EcomOrderCustomerCountry" onchange="submitForm()"> 1189 @foreach (LoopItem country in GetLoop("Countries")) 1190 { 1191 if (country.GetString("Ecom:Country.IsCustomerCountryOrDefault") == "true") 1192 { 1193 <option value="@country.GetString("Ecom:Country.Code2")" selected>@country.GetString("Ecom:Country.Name")</option> 1194 } 1195 else 1196 { 1197 <option value="@country.GetString("Ecom:Country.Code2")">@country.GetString("Ecom:Country.Name")</option> 1198 } 1199 } 1200 </select> 1201 <label for="EcomOrderCustomerCountry">@Translate("Country")</label> 1202 </div> 1203 </div> 1204 1205 </div> 1206 </div> 1207 1208 <div class="g-col-12"> 1209 <div class="form-floating"> 1210 <input type="tel" class="form-control" name="EcomOrderCustomerPhone" id="EcomOrderCustomerPhone" value="@GetString("Ecom:Order.Customer.Phone")" placeholder="@Translate("Phone number")"> 1211 <label for="EcomOrderCustomerPhone">@Translate("Phone number")</label> 1212 </div> 1213 </div> 1214 1215 @* Create user *@ 1216 @if (GetBoolean("Ecom:Cart.CreateUserInCheckout")) 1217 { 1218 <div class="g-col-12"> 1219 <div class="form-check"> 1220 <input class="form-check-input" type="checkbox" id="EcomUserCreateNewToggle" value="true" onchange="toggleCreateUser(event);"> 1221 <label class="form-check-label lh-1" for="EcomUserCreateNewToggle"> 1222 <span>@Translate("Create an account for easier checkout next time")</span> 1223 </label> 1224 </div> 1225 </div> 1226 1227 string passwordValidationPattern = null; 1228 string EcomUserCreatePasswordTitle = null; 1229 int minLength = Dynamicweb.Configuration.SystemConfiguration.Instance.GetInt32("/Globalsettings/Modules/Extranet/MinimumOfCharacters"); 1230 if (Dynamicweb.Configuration.SystemConfiguration.Instance.GetValue("/Globalsettings/Modules/Extranet/PasswordSecurity") == "medium") 1231 { 1232 passwordValidationPattern = $"^(?=.*[A-z])(?=.*[0-9]).{{{minLength},32}}"; 1233 EcomUserCreatePasswordTitle = Translate("Must contain letters and numbers"); 1234 } 1235 if (Dynamicweb.Configuration.SystemConfiguration.Instance.GetValue("/Globalsettings/Modules/Extranet/PasswordSecurity") == "high") 1236 { 1237 passwordValidationPattern = $"^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[@#$%^&+=.-_]).{{{minLength},32}}"; 1238 EcomUserCreatePasswordTitle = Translate("Must contain letters, numbers and special characters (@#$%^&+=.-_)"); 1239 } 1240 1241 <div class="d-none g-col-12 grid" id="PasswordFields"> 1242 <div class="g-col-12"> 1243 <div class="form-floating"> 1244 <input type="password" disabled required class="form-control" name="EcomUserCreatePassword" id="EcomUserCreatePassword" placeholder="@Translate("Password")" pattern="@passwordValidationPattern" onchange="setPasswordMustMatchValidation(event)" title="@EcomUserCreatePasswordTitle" minlength="@minLength"> 1245 <label for="EcomUserCreatePassword">@Translate("Password")</label> 1246 </div> 1247 </div> 1248 1249 <div class="g-col-12"> 1250 <div class="form-floating"> 1251 <input type="password" disabled required class="form-control" name="EcomUserCreateConfirmPassword" id="EcomUserCreateConfirmPassword" placeholder="@Translate("Confirm password")" pattern="@passwordValidationPattern" title="@Translate("Passwords must match")")" minlength="@minLength"> 1252 <label for="EcomUserCreateConfirmPassword">@Translate("Confirm password")</label> 1253 </div> 1254 </div> 1255 </div> 1256 1257 <script> 1258 toggleCreateUser = function (event) { 1259 var newsletterSubscribeCheckbox = document.querySelector("#EcomOrderSubscribeToNewsletter"); 1260 var createUserToggleCheckbox = document.querySelector("#EcomUserCreateNewToggle"); 1261 var createUserCheckbox = document.querySelector("#EcomUserCreateNew"); 1262 1263 if (newsletterSubscribeCheckbox.checked == true || createUserToggleCheckbox.checked == true) { 1264 createUserCheckbox.disabled = false; 1265 } else { 1266 createUserCheckbox.disabled = true; 1267 } 1268 1269 if (createUserToggleCheckbox.checked == true) { 1270 document.querySelector("#EcomUserCreatePassword").disabled = false; 1271 document.querySelector("#EcomUserCreateConfirmPassword").disabled = false; 1272 document.querySelector('#PasswordFields').classList.remove('d-none'); 1273 } else { 1274 document.querySelector("#EcomUserCreatePassword").disabled = true; 1275 document.querySelector("#EcomUserCreateConfirmPassword").disabled = true; 1276 document.querySelector('#PasswordFields').classList.add('d-none'); 1277 } 1278 } 1279 1280 setPasswordMustMatchValidation = function (event) { 1281 document.getElementById("EcomUserCreateConfirmPassword").setAttribute("pattern", document.getElementById("EcomUserCreatePassword").value); 1282 } 1283 </script> 1284 } 1285 </div> 1286 1287 </div> 1288 1289 if (enableFindLocation && !string.IsNullOrEmpty(apiKey)) 1290 { 1291 <script type="module"> 1292 const assetLink = 'https://maps.googleapis.com/maps/api/js?key=@(apiKey)&libraries=places'; 1293 1294 let assetFound = false; 1295 document.head.querySelectorAll('script').forEach(element => { 1296 if (assetLink == element.src) { 1297 assetFound = true; 1298 } 1299 }); 1300 1301 swift.AssetLoader.Load(assetLink, 'js'); 1302 1303 if (!assetFound) { 1304 document.addEventListener('load.swift.assetloader', function() { 1305 var mapSettings = { currentCountry: "@currentCountry" }; 1306 swift.Places.init(mapSettings); 1307 }); 1308 } else if (typeof google !== 'undefined') { 1309 var mapSettings = { currentCountry: "@currentCountry" }; 1310 swift.Places.init(mapSettings); 1311 } 1312 </script> 1313 } 1314 } 1315 1316 1317 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1318 1319 @{ 1320 string stepsIconPath = "/Files/Images/Icons/"; 1321 int currentStep = 1; 1322 string nextButtonName = Translate("Next"); 1323 string previousButtonName = Translate("Back"); 1324 1325 var buttonId = GetLoop("StepButtons").Count == 0 ? "PayButton" : GetString("CartV2.NextStepButtonName"); 1326 1327 foreach (LoopItem step in GetLoop("StepButtons")) 1328 { 1329 if (step.GetBoolean("Step.Current")) 1330 { 1331 currentStep = step.GetInteger("Step.Number"); 1332 } 1333 1334 if (step.GetInteger("Step.Number") == currentStep + 1) 1335 { 1336 nextButtonName = Translate(step.GetString("Step.Name")); 1337 } 1338 1339 if (step.GetInteger("Step.Number") == currentStep + step.GetInteger("Step.Index")) 1340 { 1341 previousButtonName = Translate("Back to") + " " + Translate(step.GetString("Step.Name")); 1342 } 1343 } 1344 1345 if (currentStep == GetLoop("StepButtons").Count - 1 && Pageview.CurrentParagraph.Item.SystemName != "Swift-v2_QuoteCheckoutApp") 1346 { 1347 <text> 1348 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1349 1350 @{ 1351 string termsAndConditionsCheckboxValue = GetBoolean("Ecom:Order.Customer.Accepted").ToString(); 1352 string termsAndConditionsPageLink = Pageview.CurrentParagraph.Item["TermsAndConditionsPageLink"] != null ? Pageview.CurrentParagraph.Item["TermsAndConditionsPageLink"].ToString() : string.Empty; 1353 } 1354 1355 @if (!string.IsNullOrEmpty(termsAndConditionsPageLink)) 1356 { 1357 <div class="mt-4" id="TermsAndConditions"> 1358 <h3 class="fs-6 fw-normal mb-0">@Translate("Terms and conditions")</h3> 1359 <p class="fs-8 mb-3">@Translate("Agree to terms and conditions and that your informations are correct")</p> 1360 <div class="list-group"> 1361 <label class="list-group-item list-group-item-action d-flex justify-content-between" for="EcomOrderCustomerAccepted"> 1362 <span class="d-flex justify-content-between align-items-center gap-3"> 1363 <input class="form-check-input m-0" type="checkbox" name="EcomOrderCustomerAccepted" id="EcomOrderCustomerAccepted" value="@termsAndConditionsCheckboxValue" @if (GetString("Ecom:Order.Customer.Accepted") == "true") { <text> checked="checked" </text> }> 1364 <span>@Translate("I accept the") <a href='/@termsAndConditionsPageLink' target='_blank' rel='noopener' id="TermsAndConditionsButton">@Translate("terms and conditions")</a></span> 1365 </span> 1366 </label> 1367 </div> 1368 </div> 1369 } 1370 1371 1372 </text> 1373 1374 nextButtonName = Translate("Place Order"); 1375 } 1376 else if (GetLoop("StepButtons").Count == 0) 1377 { 1378 nextButtonName = Translate("Pay"); 1379 } 1380 } 1381 1382 <div class="mt-4 d-flex flex-column flex-md-row justify-content-end gap-3 mt-lg-4" id="StepsNavigation"> 1383 @if (currentStep == 1) 1384 { 1385 var cartLink = $"Default.aspx?id={Pageview.CurrentParagraph.Page.Parent.ID}"; 1386 1387 <a href="@cartLink" class="btn btn-link text-decoration-none order-last order-md-first" data-dw-button="link" id="BackToCartButton"> 1388 <div class="d-flex align-items-center justify-content-center position-relative"> 1389 <span class="icon-2 me-1 position-absolute position-md-static start-0"> 1390 @ReadFile(stepsIconPath + "chevron-left.svg") 1391 </span> 1392 <span>@Translate("Back to cart")</span> 1393 </div> 1394 </a> 1395 } 1396 else 1397 { 1398 <button name="@GetString("CartV2.PreviousStepButtonName")" id="@GetString("CartV2.PreviousStepButtonName")" class="btn btn-link text-decoration-none" data-dw-button="link"> 1399 <div class="d-flex align-items-center justify-content-center position-relative"> 1400 <span class="icon-2 me-1 position-absolute position-md-static start-0"> 1401 @ReadFile(stepsIconPath + "chevron-left.svg") 1402 </span> 1403 <span>@previousButtonName</span> 1404 </div> 1405 </button> 1406 } 1407 1408 <button type="submit" name="@GetString("CartV2.NextStepButtonName")" id="@buttonId" class="btn btn-primary order-first order-md-last" data-dw-button="primary" > 1409 <div class="d-flex align-items-center justify-content-center position-relative pe-none"> 1410 <span>@nextButtonName</span> 1411 <span class="icon-2 ms-1 position-absolute position-md-static end-0"> 1412 @ReadFile(stepsIconPath + "chevron-right.svg") 1413 </span> 1414 </div> 1415 </button> 1416 1417 @* // SHIPMONDO 1418 Following script prevents writing pickup point address to order.delivery 1419 before finalizing the order. 1420 *@ 1421 @if (currentStep == GetLoop("StepButtons").Count - 1) 1422 { 1423 if (GetBoolean("Ecom:Order.Delivery.isPickupPoint")) 1424 { 1425 <input type="hidden" name="@GetString("CartV2.NextStepButtonName")" /> 1426 <script> 1427 document.getElementById("@GetString("CartV2.NextStepButtonName")").addEventListener("click", function (e) { 1428 const form = e.target.closest("form"), 1429 hiddenParcelShopFields = form.querySelector("#hiddenParcelshopFields"), 1430 hiddenParcelShopFieldsDisabled = hiddenParcelShopFields.querySelectorAll("input"); 1431 1432 e.preventDefault(); 1433 1434 if (hiddenParcelShopFieldsDisabled.length > 0) { 1435 hiddenParcelShopFieldsDisabled.forEach( (input) => { 1436 input.disabled = false; 1437 }); 1438 } 1439 1440 form.submit() 1441 }); 1442 </script> 1443 } 1444 } 1445 1446 <script> 1447 if (window.history.replaceState) { 1448 window.history.replaceState(null, null, window.location.href); 1449 } 1450 </script> 1451 </div> 1452 1453 1454 <input type="hidden" id="CurrentStep"> 1455 </form> 1456 </div> 1457 1458 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1459 1460 <div class="g-col-12 g-col-lg-4 py-2 p-3 p-lg-4 p-xl-5" id="summarySidebar"> 1461 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1462 1463 @{ 1464 string iconPath = "/Files/Images/Icons/"; 1465 } 1466 1467 <button class="toggle-order-summary btn text-reset w-100 d-block d-lg-none px-0" type="button" data-bs-toggle="collapse" data-bs-target="#orderSummary" aria-expanded="false" aria-controls="orderSummary" id="OrderSummaryToggleButton"> 1468 <span class="d-flex align-items-center justify-content-between"> 1469 <span class="d-flex align-items-center gap-2"> 1470 <span class="fs-7 lh-1"> 1471 <span class="toggle-order-summary-text" id="OrderSummaryToggleButtonLabel">@Translate("Show order summary")</span> 1472 </span> 1473 <span class="icon-2" id="OrderSummaryToggleButtonIcon" style="transition: all 0.25s ease-in-out;"> 1474 @ReadFile(iconPath + "chevron-down.svg") 1475 </span> 1476 </span> 1477 <span class="fw-bold"> 1478 <span class="text-price">@GetString("Ecom:Order.Price")</span> 1479 </span> 1480 </span> 1481 </button> 1482 1483 <script> 1484 const orderSummaryToggleButton = document.getElementById("OrderSummaryToggleButton"); 1485 const orderSummaryToggleButtonLabel = document.getElementById("OrderSummaryToggleButtonLabel"); 1486 const orderSummaryToggleButtonIcon = document.getElementById("OrderSummaryToggleButtonIcon"); 1487 const orderSummaryToggleText = '@Translate("Show order summary")'; 1488 1489 orderSummaryToggleButton.addEventListener('click', function handleClick() { 1490 if (orderSummaryToggleButtonLabel.textContent.toLowerCase().includes(orderSummaryToggleText.toLowerCase())) { 1491 orderSummaryToggleButtonLabel.textContent = '@Translate("Hide order summary")'; 1492 orderSummaryToggleButtonIcon.classList.add("rotate-180"); 1493 } else { 1494 orderSummaryToggleButtonLabel.textContent = orderSummaryToggleText; 1495 orderSummaryToggleButtonIcon.classList.remove("rotate-180"); 1496 } 1497 }); 1498 </script> 1499 1500 1501 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1502 1503 <div class="d-lg-block h-lg-auto collapse pt-2 pt-lg-0" id="orderSummary"> 1504 <div class="d-flex flex-column gap-2 gap-lg-3 pb-2 pb-lg-3"> 1505 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> @using Dynamicweb.Ecommerce.ProductCatalog @functions { private static string GetPrimaryImage(LoopItem orderline, string shopId) 1506 { 1507 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductID")) || !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductNumber")); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 1508 bool isProduct = orderline.GetBoolean("Ecom:Order:OrderLine.IsProduct") || (orderline.GetBoolean("Ecom:Order:OrderLine.IsDiscount") && isProductIdOrNumber); 1509 string productId = orderline.GetString("Ecom:Order:OrderLine.ProductID"); 1510 string variantId = orderline.GetString("Ecom:Order:OrderLine.ProductVariantID"); 1511 1512 if (!isProduct || string.IsNullOrEmpty(productId)) return ""; 1513 1514 ProductViewModelSettings productSetting = new ProductViewModelSettings { LanguageId = Dynamicweb.Ecommerce.Common.Context.LanguageID, CurrencyCode = Dynamicweb.Ecommerce.Common.Context.Currency?.Code, CountryCode = Dynamicweb.Ecommerce.Common.Context.Country?.Code2, ShopId = shopId }; 1515 ProductViewModel product = ViewModelFactory.CreateView(productSetting, productId, variantId); 1516 if (product != null && product.DefaultImage != null && !string.IsNullOrEmpty(product.DefaultImage.Value)) 1517 return product.DefaultImage.Value; 1518 return string.Empty; 1519 } } @{ var orderlines = GetLoop("OrderLines"); } @for (int i = orderlines.Count - 1; i >= 0; i--) 1520 { 1521 var orderline = orderlines[i]; 1522 string name = orderline.GetString("Ecom:Order:OrderLine.ProductName"); 1523 string orderlineImage = GetPrimaryImage(orderline, GetString("Ecom:Order.ShopID")); 1524 string image = $"/Admin/Public/GetImage.ashx?width=180&height=180&crop=5&fillcanvas=true&Background=ffffff&image={Dynamicweb.Context.Current.Server.UrlEncode(orderlineImage)}&format=webp"; 1525 image = !orderlineImage.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase) ? orderlineImage : image; 1526 string removeFromBasketLink = orderline.GetString("Ecom:Order:OrderLine.DeleteLink"); 1527 string priceTotalWithDiscounts = orderline.GetString("Ecom:Order:OrderLine.TotalPriceWithProductDiscounts.PriceFormatted"); 1528 string priceBefore = orderline.GetString("Ecom:Product.InformativePrice.PriceFormatted"); 1529 string unitPrice = orderline.GetString("Ecom:Order:OrderLine.UnitPrice.PriceFormatted"); 1530 string discountPrice = orderline.GetString("Ecom:Order:OrderLine.UnitPriceWithProductDiscount.PriceFormatted"); 1531 string discountTotal = orderline.GetString("Ecom:Order:OrderLine.TotalDiscount.PriceFormatted"); 1532 string variantText = orderline.GetString("Ecom:Order:OrderLine.ProductVariantText"); 1533 var orderlineId = orderline.GetValue("Ecom:Order:OrderLine.Id"); 1534 var quantity = orderline.GetDouble("Ecom:Order:OrderLine.Quantity"); 1535 var unitName = orderline.GetString("Ecom:Order:OrderLine.UnitName"); 1536 string primaryGroupId = orderline.GetString("Ecom:Order:OrderLine.PrimaryOrDefaultGroupId"); 1537 string productId = orderline.GetString("Ecom:Order:OrderLine.ProductID"); 1538 string variantId = orderline.GetString("Ecom:Order:OrderLine.ProductVariantID"); 1539 1540 string link = "Default.aspx?ID=" + GetPageIdByNavigationTag("Shop"); 1541 link += $"&GroupID={System.Net.WebUtility.UrlEncode(primaryGroupId)}"; 1542 link += $"&ProductID={System.Net.WebUtility.UrlEncode(productId)}"; 1543 link += !string.IsNullOrEmpty(variantId) ? $"&VariantID={System.Net.WebUtility.UrlEncode(variantId)}" : ""; 1544 1545 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductID")) || !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductNumber")); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 1546 bool isProduct = orderline.GetBoolean("Ecom:Order:OrderLine.IsProduct") || (orderline.GetBoolean("Ecom:Order:OrderLine.IsDiscount") && isProductIdOrNumber); 1547 1548 if (isProduct) 1549 { 1550 var bomItems = orderline.GetLoop("BOMItems"); <article class="grid grid-12"> <div class="g-col-2"> <a href="@link" class="ratio ratio-1x1 d-block " title="@name"> <img src="@image" style="object-fit: contain;" alt="@name"> </a> </div> <div class="g-col-10"> <div class="d-flex flex-column gap-1"> @* Title *@ <h3 class="h6 fs-7 m-0"> <a href="@link" class="text-decoration-none" title="@name">@name</a> </h3> @* Variants *@ @if (!string.IsNullOrEmpty(variantText)) 1551 { <p class="fs-8 m-0">@variantText</p> } @if (orderline.GetBoolean("Ecom:Order:OrderLine.IsDiscount")) 1552 { @* Free product notice *@ <p class="fs-8 m-0">@Translate("Free product")</p> } 1553 else 1554 { @* Unit price *@ <p class="fs-8 m-0"> @if (!string.IsNullOrEmpty(unitName)) 1555 { <span>@unitName: </span> } @if (discountPrice == unitPrice) 1556 { <span class="text-price">@unitPrice</span> } 1557 else 1558 { <span class="text-price">@discountPrice</span> <span class="text-decoration-line-through"> <span class="text-price">@unitPrice</span> </span> } </p> } <div class="d-flex flex-row justify-content-between"> @* Quantity *@ <span class="fs-8 d-block">@Translate("Qty"): @quantity</span> <div class="text-end flex-fill"> @* Total *@ <div class="fs-7 m-0"> <span class="text-price">@priceTotalWithDiscounts</span> </div> @if (orderline.GetDouble("Ecom:Order:OrderLine.TotalDiscount.Price.Value") != 0.0) { <div class="fs-8"> <span class="text-price">@discountTotal</span> </div> } </div> </div> </div> </div> @if (bomItems.Count > 0) 1559 { @* BOM items *@ @foreach (var bomItem in bomItems) 1560 { 1561 string bomImage = bomItem.GetString("Ecom:Product.PrimaryImage"); 1562 bomImage = !bomImage.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase) ? bomImage : $"/Admin/Public/GetImage.ashx?width=120&height=100&image={bomImage}&format=webp"; 1563 1564 string bomPriceTotalWithDiscounts = bomItem.GetString("Ecom:Order:OrderLine.TotalPriceWithProductDiscounts.PriceFormatted"); 1565 string bomDiscountTotal = bomItem.GetString("Ecom:Order:OrderLine.TotalDiscount.PriceFormatted"); <div class="g-col-3 g-col-lg-2 d-flex align-items-center gap-2"> <div class="icon-1 opacity-25"> @ReadFile("/Files/Images/Icons/arrow-turn-down-right.svg") </div> @if (!string.IsNullOrEmpty(bomImage)) 1566 { <div class="ratio ratio-1x1 d-block" title="@name"> <img class="cart-item-img" src="@bomImage" style="object-fit: contain;" alt="@name"> </div> } </div> <div class="g-col-9 g-col-lg-10 grid" style="row-gap: 0.5rem; --bs-gap:0;"> <div class="g-col-12 g-col-md-8"> <h3 class="fs-7 m-0">@bomItem.GetString("Ecom:Product.Name")</h3> <p class="fs-8 mb-0">@Translate("Qty"): @bomItem.GetDouble("Ecom:Order:OrderLine.Quantity")</p> </div> <div class="g-col-12 g-col-md-4 text-end"> @* Total - Hide when PriceType = Fixed *@ @if (orderline.GetInteger("Ecom:Product.PriceType") != 1) 1567 { <div class="fs-7"> <span class="text-price">@bomPriceTotalWithDiscounts</span> </div> if (bomItem.GetDouble("Ecom:Order:OrderLine.TotalDiscount.Price.Value") != 0) 1568 { <div class="fs-8"> <span class="text-price">@bomDiscountTotal</span> </div> } 1569 } </div> </div> } } </article> } 1570 } 1571 </div> 1572 1573 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1574 1575 @{ 1576 double totalPriceWithoutOrderDiscountsFeesAndTaxesValue = 1577 GetDouble("Ecom:Order.TotalPriceWithoutDiscountsFeesAndTaxes.Price.Value") + 1578 GetDouble("Ecom:Order.TotalProductDiscount.Price.Value"); 1579 var orderCurrency = Dynamicweb.Ecommerce.Services.Currencies.GetCurrency(GetString("Ecom:Order.Currency.Code")); 1580 string totalPriceWithoutOrderDiscountsFeesAndTaxes = Dynamicweb.Ecommerce.Services.Currencies.Format(orderCurrency, 1581 totalPriceWithoutOrderDiscountsFeesAndTaxesValue); 1582 1583 bool showPricesWithVat = Dynamicweb.Ecommerce.Common.Context.DisplayPricesWithVat; 1584 bool renderVatMessage = (GetString("Ecom:Order.OrderLines.Total.PriceWithVAT") != GetString("Ecom:Order.OrderLines.Total.PriceWithoutVAT")) || Dynamicweb.Ecommerce.Common.Context.Country?.Vat != null; 1585 1586 bool disableVouchers = Pageview.CurrentParagraph?.Item["DisableVouchers"] != null ? 1587 (Boolean)Pageview.CurrentParagraph.Item["DisableVouchers"] : false; 1588 disableVouchers = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.QueryString.Get("CompletedOrderId")) ? true : 1589 disableVouchers; 1590 1591 <div class="d-flex flex-column gap-2 gap-lg-3 pb-3 bottom-0 sticky-receipt" id="orderSummaryFooter"> 1592 1593 @if (!disableVouchers && Pageview.CurrentParagraph?.Item.SystemName != "Swift-v2_QuoteCheckoutApp") 1594 { 1595 <text> 1596 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 1597 @using Dynamicweb.Ecommerce.Orders 1598 1599 @{ 1600 string voucherCode = GetString("Ecom:Order.Customer.VoucherCode"); 1601 string voucherCodeError = GetString("Ecom:Cart.ValidationError.EcomOrderVoucherCode.ErrorMessage"); 1602 string validState = string.Empty; 1603 bool vouchersAppliedAsDiscounts = false; 1604 1605 IEnumerable<string> voucherCodes = new List<string>(); 1606 Order order = new OrderService().GetById(GetString("Ecom:Order.ID")); 1607 1608 if (!string.IsNullOrWhiteSpace(voucherCode)) 1609 { 1610 if (order.VoucherUseType.HasFlag(VoucherUseCategoryType.Discount)) 1611 { 1612 voucherCodes = voucherCode.Split(new string[] { ",", ";", " " }, StringSplitOptions.RemoveEmptyEntries); 1613 vouchersAppliedAsDiscounts = true; 1614 } 1615 else 1616 { 1617 voucherCodes = new string[] { voucherCode.Trim() }; 1618 } 1619 } 1620 1621 var voucherErrors = new List<string>(); 1622 if(!vouchersAppliedAsDiscounts) 1623 { 1624 foreach (string code in voucherCodes) 1625 { 1626 Dynamicweb.Ecommerce.Orders.Vouchers.Voucher vouch = Dynamicweb.Ecommerce.Services.Vouchers.GetVoucherByCode(code); 1627 if (vouch == null) 1628 { 1629 validState = "is-invalid"; 1630 voucherErrors.Add(Translate("Voucher") + " <span class='fw-bold'>" + code + "</span> " + Translate("not found")); 1631 continue; 1632 } 1633 if (vouch.DateUsed.HasValue) 1634 { 1635 validState = "is-invalid"; 1636 voucherErrors.Add(Translate("Voucher") + " <span class='fw-bold'>" + code + "</span> " + Translate("already used")); 1637 continue; 1638 } 1639 } 1640 } 1641 1642 var voucherErrorMessage = string.Join(",", voucherErrors); 1643 1644 <div class="py-3 border-top" id="orderVoucherForm"> 1645 <form method="post" id="VoucherForm"> 1646 <div class="input-group input-primary-button-group has-validation"> 1647 <input type="text" class="form-control @(validState)" name="EcomOrderVoucherCodeField" placeholder="@Translate("Add voucher here")" id="EcomOrderVoucherCodeField" value="" aria-label="@Translate("Voucher input")" oninput="document.querySelector('#EcomOrderVoucherCode').value = this.value;" onkeyup="document.querySelector('#EcomOrderVoucherCode').value = this.value;"> 1648 <button class="btn btn-sm btn-primary d-inline-flex align-items-center justify-content-center" data-dw-button="primary" type="submit" id="EcomOrderVoucherApply" style="min-width: 100px;"> 1649 <span>@Translate("Apply")</span> 1650 </button> 1651 1652 <div class="invalid-feedback"> 1653 @voucherErrorMessage 1654 </div> 1655 </div> 1656 <input type="hidden" name="EcomOrderVoucherCode" id="EcomOrderVoucherCode" value="@voucherCode"> 1657 <label for="EcomOrderVoucherCodeField" class="visually-hidden">@Translate("Add voucher here")</label> 1658 </form> 1659 1660 @if (!string.IsNullOrWhiteSpace(voucherCode)) 1661 { 1662 <div class="d-flex flex-wrap gap-2 pt-3"> 1663 1664 @foreach (string code in voucherCodes) 1665 { 1666 <form method="post"> 1667 <input type="hidden" name="EcomOrderVoucherCode" value="@voucherCode.Replace(code+",", "").Replace(","+code, "").Replace(code, "")"> 1668 <span class="badge fw-normal d-inline-flex align-items-center justify-content-center opacity-50 opacity-100-hover" style="background-color:var(--dw-color-foreground);color:var(--dw-color-background);"> 1669 <button type="submit" class="text-reset bg-transparent border-0 p-0" aria-label="@Translate("Remove voucher")" id="RemoveVoucherButton"> 1670 <span class="icon-2"> 1671 @ReadFile("/Files/Images/Icons/xmark.svg") 1672 </span> 1673 <span class="mx-2">@code</span> 1674 </span> 1675 </form> 1676 } 1677 </div> 1678 } 1679 @voucherCodeError 1680 </div> 1681 } 1682 1683 </text> 1684 } 1685 1686 <div class="fs-8 border-top pt-2 pt-lg-3"> 1687 @* Subtotal *@ 1688 <div class="d-flex justify-content-between fw-bold"> 1689 <span>@Translate("Subtotal")</span> 1690 <span class="text-end"> 1691 <span class="d-block"> 1692 @if (GetDouble("Ecom:Order.TotalPriceWithoutDiscountsFeesAndTaxes.Price.Value") != 1693 totalPriceWithoutOrderDiscountsFeesAndTaxesValue) 1694 { 1695 <span 1696 class="text-price fw-normal text-decoration-line-through">@GetString("Ecom:Order.TotalPriceWithoutDiscountsFeesAndTaxes.PriceFormatted")</span> 1697 } 1698 <span class="text-price">@totalPriceWithoutOrderDiscountsFeesAndTaxes</span> 1699 </span> 1700 1701 @if (renderVatMessage && !showPricesWithVat) 1702 { 1703 <span class="fs-8 fw-normal d-block">@Translate("Excl. VAT")</span> 1704 } 1705 else if (renderVatMessage) 1706 { 1707 <span class="fs-8 fw-normal d-block">@Translate("Incl. VAT")</span> 1708 } 1709 </span> 1710 </div> 1711 1712 @* Discounts (only order discounts) *@ 1713 @foreach (LoopItem orderline in GetLoop("OrderLines")) 1714 { 1715 bool isDiscount = orderline.GetBoolean("Ecom:Order:OrderLine.IsDiscount"); 1716 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductID")) || 1717 !string.IsNullOrEmpty(orderline.GetString("Ecom:Order:OrderLine.ProductNumber")); //Live Cart orderlines may not 1718 bool isOrderAmountDiscount = orderline.GetInteger("Ecom:Order:OrderLine.Type") == 1 && !isProductIdOrNumber; 1719 if (isDiscount && isOrderAmountDiscount) 1720 { 1721 <div class="d-flex justify-content-between"> 1722 <span>@orderline.GetString("Ecom:Order:OrderLine.ProductName")</span><span 1723 class="text-price">@orderline.GetString("Ecom:Order:OrderLine.TotalPriceWithProductDiscounts.PriceFormatted")</span> 1724 </div> 1725 } 1726 } 1727 1728 @* Delivery *@ 1729 @if (!string.IsNullOrEmpty(GetString("Ecom:Order.ShippingMethodID"))) 1730 { 1731 if (GetDouble("Ecom:Order.ShippingFee.Price.Value") != 0.0) 1732 { 1733 <div class="d-flex justify-content-between"> 1734 <span>@Translate("Delivery")</span> 1735 <span>@GetString("Ecom:Order.ShippingFee.PriceFormatted")</span> 1736 </div> 1737 } 1738 } 1739 else 1740 { 1741 <div class="d-flex justify-content-between"> 1742 <span>@Translate("Delivery")</span> 1743 <span>@Translate("Calculated in next step")</span> 1744 </div> 1745 } 1746 1747 @* Payment *@ 1748 @if (!string.IsNullOrEmpty(GetString("Ecom:Order.PaymentMethodID"))) 1749 { 1750 if (GetDouble("Ecom:Order.PaymentFee.Price.Value") != 0) 1751 { 1752 <div class="d-flex justify-content-between"> 1753 <span>@Translate("Payment")</span> 1754 <span class="text-price">@GetString("Ecom:Order.PaymentFee.PriceFormatted")</span> 1755 </div> 1756 } 1757 } 1758 else 1759 { 1760 <div class="d-flex justify-content-between"> 1761 <span>@Translate("Payment")</span> 1762 <span>@Translate("Calculated in next step")</span> 1763 </div> 1764 } 1765 1766 @* Taxes *@ 1767 @if (GetDouble("Ecom:Order.Taxes.Total.Price.Value") != 0) 1768 { 1769 <div class="d-flex justify-content-between mb-2"> 1770 <span>@Translate("Sales tax")</span> 1771 <span>@GetString("Ecom:Order.Taxes.Total.PriceFormatted")</span> 1772 </div> 1773 } 1774 </div> 1775 <div class="fs-8 border-top pt-2 pt-lg-3"> 1776 <div class="d-flex justify-content-between fs-6 fw-bold"> 1777 <span>@Translate("Total")</span> 1778 @if (renderVatMessage && !showPricesWithVat) 1779 { 1780 <span class="text-price text-end"> 1781 <span class="fs-5 d-block">@GetString("Ecom:Order.Price.PriceFormatted")</span> 1782 <span class="fs-8 fw-normal d-block">@Translate("Excl. VAT")</span> 1783 </span> 1784 } 1785 else if (renderVatMessage) 1786 { 1787 <span class="text-price text-end"> 1788 <span class="fs-5 d-block">@GetString("Ecom:Order.Price.PriceFormatted")</span> 1789 <span class="fs-8 fw-normal d-block">@Translate("Incl. VAT")</span> 1790 </span> 1791 } 1792 else 1793 { 1794 <span class="text-price fs-5">@GetString("Ecom:Order.Price.PriceFormatted")</span> 1795 } 1796 </div> 1797 1798 @if (renderVatMessage) 1799 { 1800 <div class="d-flex justify-content-between"><span>@Translate("VAT")</span><span 1801 class="text-price">@GetString("Ecom:Order.Price.VATFormatted")</span></div> 1802 if (!showPricesWithVat) 1803 { 1804 <div class="d-flex justify-content-between"><span>@Translate("Total incl. VAT")</span><span 1805 class="text-price">@GetString("Ecom:Order.OrderLines.Total.PriceWithVAT")</span></div> 1806 } 1807 } 1808 1809 @if (GetDouble("Ecom:Order.TotalDiscount.Price.Value") != 0) 1810 { 1811 <div class="d-flex justify-content-between"><span>@Translate("Discount")</span><span 1812 class="text-price">@GetString("Ecom:Order.TotalDiscount.PriceFormatted")</span></div> 1813 } 1814 </div> 1815 </div> 1816 } 1817 1818 </div> 1819 1820 </div> 1821 1822 1823 </div> 1824 1825 <script> 1826 function submitForm() { 1827 document.querySelector("#CurrentStep").name = "@GetString("CartV2.CurrentStepButtonName")"; 1828 swift.PageUpdater.Update(document.querySelector("#ordersubmit")); 1829 } 1830 </script> 1831 1832 <script> 1833 gtag("event", "begin_checkout", { 1834 currency: "@GetString("Ecom:Order.CurrencyCode")", 1835 value: @GetDouble("Ecom:Order.Price.Price.Value").ToString("0.00", System.Globalization.CultureInfo.InvariantCulture), 1836 items: [ 1837 @foreach (LoopItem orderline in GetLoop("OrderLines")) { 1838 <text> 1839 { 1840 item_id: "@orderline.GetString("Ecom:Order:OrderLine.ProductID")", 1841 item_name: "@Dynamicweb.Core.Encoders.HtmlEncoder.JavaScriptStringEncode(orderline.GetString("Ecom:Order:OrderLine.ProductName"))", 1842 currency: "@orderline.GetString("Ecom:Order:OrderLine.UnitPrice.CurrencyCode")", 1843 price: @orderline.GetDouble("Ecom:Order:OrderLine.UnitPriceWithProductDiscount.Price.Value").ToString("0.00", System.Globalization.CultureInfo.InvariantCulture), 1844 discount: @Math.Abs(orderline.GetDouble("Ecom:Order:OrderLine.UnitDiscount.Price.Value")).ToString("0.00", System.Globalization.CultureInfo.InvariantCulture), 1845 quantity: @orderline.GetDouble("Ecom:Order:OrderLine.Quantity").ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) 1846 }, 1847 </text> 1848 } 1849 ] 1850 }); 1851 </script> 1852 1853