Error compiling template "Designs/Swift-v2/Swift-v2_CartSummary.cshtml"
Line 1: An assembly with the same simple name 'Dynamicweb.LoadBalancing' has already been imported. Try removing one of the references (e.g. 'F:\Domains\Sites\dev-jayco.mydwsite3.com\Application\bin\Dynamicweb.LoadBalancing.dll') or sign them to enable side-by-side.
Line 601: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 30: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 31: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 32: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 34: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 87: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 91: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 92: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 93: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 94: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 95: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 96: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.
Line 97: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. Auto-generated code requires an explicit '#nullable' directive in source.

1 // <auto-generated/> 2 #pragma warning disable 1591 3 namespace CompiledRazorTemplates.Dynamic 4 { 5 #line hidden 6 using System.Threading.Tasks; 7 using System; 8 using System.Collections.Generic; 9 using System.Linq; 10 using Dynamicweb.Frontend; 11 using Dynamicweb.Core; 12 using Dynamicweb.Ecommerce.Frontend; 13 using Dynamicweb.Ecommerce.ProductCatalog; 14 using System.Globalization; 15 internal class RazorEngine_0ff133732a9c498a852d93689cf7d9d0 : Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 16 { 17 #pragma warning disable 1998 18 public async override global::System.Threading.Tasks.Task ExecuteAsync() 19 { 20 WriteLiteral("\r\n"); 21 WriteLiteral("\r\n"); 22 23 string iconPath = "/Files/Images/Icons/"; 24 bool anonymousUser = Pageview.User == null; 25 var cartServicePageId = GetPageIdByNavigationTag("CartService"); 26 var cartSummaryPageId = GetPageIdByNavigationTag("CartSummary"); 27 var cartType = Dynamicweb.Context.Current?.Request["CartType"]; 28 var requestPageId = Dynamicweb.Context.Current?.Request["RequestPageID"]; 29 var orderContext = Dynamicweb.Context.Current?.Request["OrderContext"]; 30 string? orderContextQueryString = string.IsNullOrEmpty(orderContext) ? string.Empty : $"?OrderContext={orderContext}"; 31 string? cartUrl = Model.Item?.GetLink("CartPageLink")?.Url; 32 string? checkoutUrl = Dynamicweb.Context.Current?.Request["checkoutUrl"]; 33 checkoutUrl = string.IsNullOrEmpty(checkoutUrl) ? (!anonymousUser ? Model.Item?.GetLink("CheckoutSignedInPageLink")?.Url : Model.Item?.GetLink("CheckoutAnonymousPageLink")?.Url) : checkoutUrl; 34 string? quoteCheckoutPageId = Dynamicweb.Context.Current?.Request["quoteCheckoutPageLink"]; 35 quoteCheckoutPageId = string.IsNullOrEmpty(quoteCheckoutPageId) ? Model.Item?.GetLink("QuoteCheckoutPageLink")?.PageId.ToString() : quoteCheckoutPageId; 36 var order = Dynamicweb.Ecommerce.Services.Orders.GetById(Model.Cart?.ID); 37 bool isMiniCart = cartType == "minicart"; 38 WriteLiteral("\r\n"); 39 if (isMiniCart) 40 { 41 WriteLiteral("\t<div class=\"modal-header sticky-top justify-content-between py-1 py-lg-3 ps-3 ps-lg-4 pe-0 pe-lg-3 bg-body\" style=\"box-shadow: 0 10px 10px -12px var(--bs-gray-300);\">\r\n\t\t<span class=\"h5 m-0\">"); 42 Write(Translate("Your cart")); 43 WriteLiteral("</span>\r\n\r\n\t\t<button type=\"button\" class=\"btn btn-sm p-2 d-flex align-items-center\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\" id=\"CloseMiniCart\">\r\n\t\t\t<span>"); 44 Write(Translate("Close")); 45 WriteLiteral("</span>\r\n\t\t\t<span class=\"icon-3\">\r\n\t\t\t\t"); 46 Write(ReadFile(iconPath + "xmark.svg")); 47 WriteLiteral("\r\n\t\t\t</span>\r\n\t\t</button>\r\n\t</div>\r\n"); 48 } 49 WriteLiteral("\r\n<div"); 50 BeginWriteAttribute("class", " class=\"", 2234, "\"", 2322, 3); 51 WriteAttributeValue("", 2242, "item_", 2242, 5, true); 52 WriteAttributeValue("", 2247, Model.Item?.SystemName.ToLower(), 2247, 33, false); 53 WriteAttributeValue(" ", 2280, isMiniCart ? "p-3 p-lg-4 h-100" : null, 2281, 41, false); 54 EndWriteAttribute(); 55 WriteLiteral(">\r\n"); 56 if (Model.Cart?.TotalProductsCount > 0) 57 { 58 if (!isMiniCart) 59 { 60 WriteLiteral(@" <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=""#CartSummary"" aria-expanded=""false"" aria-controls=""CartSummary""> 61 <div class=""d-flex align-items-center justify-content-between""> 62 <span class=""d-flex align-items-center""> 63 <span class=""fs-7 lh-1""><span class=""toggle-order-summary-text""></span> "); 64 Write(Translate("order summary")); 65 WriteLiteral("</span>\r\n\t\t\t\t\t\t<span class=\"icon-2 ms-2\">\r\n\t\t\t\t\t\t\t"); 66 Write(ReadFile(iconPath + "chevron-down.svg")); 67 WriteLiteral("\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class=\"fw-bold\">\r\n\t\t\t\t\t\t<span class=\"text-price\">"); 68 Write(Model.Cart.TotalPrice.Price.Formatted); 69 WriteLiteral("</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t</button>\r\n"); 70 WriteLiteral("\t\t\t<style>\r\n\t\t\t\t.toggle-order-summary .toggle-order-summary-text::after {\r\n\t\t\t\t\tcontent: \""); 71 Write(Translate("Show")); 72 WriteLiteral("\";\r\n\t\t\t\t}\r\n\t\t\t\t.toggle-order-summary[aria-expanded=\"true\"] .toggle-order-summary-text::after {\r\n\t\t\t\t\tcontent: \""); 73 Write(Translate("Hide")); 74 WriteLiteral("\";\r\n\t\t\t\t}\r\n\t\t\t\t.toggle-order-summary[ aria-expanded=\"true\" ] svg {\r\n\t\t\t\t\ttransform: rotate(-180deg);\r\n\t\t\t\t}\r\n\t\t\t</style>\r\n"); 75 } 76 77 WriteLiteral("\t\t<div"); 78 BeginWriteAttribute("class", " class=\"", 3467, "\"", 3565, 3); 79 WriteAttributeValue("", 3475, !isMiniCart ? "d-lg-block h-lg-auto collapse" : "d-flex flex-column h-100", 3475, 77, false); 80 WriteAttributeValue(" ", 3552, "pt-2", 3553, 5, true); 81 WriteAttributeValue(" ", 3557, "pt-lg-0", 3558, 8, true); 82 EndWriteAttribute(); 83 WriteLiteral(" id=\"CartSummary\">\r\n\t\t\t<div class=\"d-flex flex-column gap-4 pb-4\">\r\n"); 84 foreach (var orderline in Model.Cart.CartOrderlines.Reverse()) 85 { 86 var product = orderline?.GetProduct() ?? null; 87 string? name = orderline?.ProductName; 88 string image = product?.DefaultImage?.Value ?? string.Empty; 89 string imagePath = $"/Admin/Public/GetImage.ashx?image={image}&width=80&height=80&crop=5&fillcanvas=true&Background=ffffff&format=webp"; 90 imagePath = !string.IsNullOrWhiteSpace(image) && !image.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase) ? imagePath : image; 91 string? priceTotalWithDiscounts = orderline?.TotalPriceWithProductDiscounts.Price.Formatted; 92 string? priceBefore = orderline?.UnitPriceBeforeDiscount.Price.Formatted; 93 string? unitPrice = orderline?.UnitPrice.Price.Formatted; 94 string? discountPrice = orderline?.UnitPriceWithProductDiscount.Price.Formatted; 95 string? discountTotal = orderline?.TotalDiscount.Price.Formatted; 96 string? variantText = orderline?.ProductVariantText; 97 string? unitName = orderline?.UnitName; 98 var orderlineId = orderline?.ID; 99 var quantity = Math.Round(orderline.Quantity, 2); 100 double? stepQty = product?.PurchaseQuantityStep > 0 ? product.PurchaseQuantityStep : 1; 101 double? minQty = product?.PurchaseMinimumQuantity > 0 ? product.PurchaseMinimumQuantity : 1; 102 double? maxQty = null; 103 if (product?.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock && !product.NeverOutOfstock) 104 { 105 maxQty = product.StockLevel; 106 } 107 string link = product?.GetProductLink(GetPageIdByNavigationTag("Shop"), false) ?? string.Empty; 108 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.ProductID) || !string.IsNullOrEmpty(orderline.ProductNumber); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 109 bool isProduct = orderline.IsProduct || (orderline.IsDiscount && isProductIdOrNumber); 110 111 if (isProduct) 112 { 113 WriteLiteral("\t\t\t\t\t\t<article class=\"grid grid-12\">\r\n\r\n\t\t\t\t\t\t\t<div class=\"g-col-2\">\r\n\t\t\t\t\t\t\t\t<a"); 114 BeginWriteAttribute("href", " href=\"", 5686, "\"", 5698, 1); 115 WriteAttributeValue("", 5693, link, 5693, 5, false); 116 EndWriteAttribute(); 117 WriteLiteral(" class=\"ratio ratio-1x1 d-block \""); 118 BeginWriteAttribute("title", " title=\"", 5732, "\"", 5745, 1); 119 WriteAttributeValue("", 5740, name, 5740, 5, false); 120 EndWriteAttribute(); 121 WriteLiteral(" tabindex=\"-1\">\r\n\t\t\t\t\t\t\t\t\t<img"); 122 BeginWriteAttribute("src", " src=\"", 5776, "\"", 5792, 1); 123 WriteAttributeValue("", 5782, imagePath, 5782, 10, false); 124 EndWriteAttribute(); 125 WriteLiteral(" style=\"object-fit: contain;\""); 126 BeginWriteAttribute("alt", " alt=\"", 5822, "\"", 5833, 1); 127 WriteAttributeValue("", 5828, name, 5828, 5, false); 128 EndWriteAttribute(); 129 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"g-col-6\">\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"d-flex flex-column gap-1\">\r\n"); 130 WriteLiteral("\t\t\t\t\t\t\t\t\t<h3 class=\"h6 fs-7 m-0\">\r\n\t\t\t\t\t\t\t\t\t\t<a"); 131 BeginWriteAttribute("href", " href=\"", 6017, "\"", 6029, 1); 132 WriteAttributeValue("", 6024, link, 6024, 5, false); 133 EndWriteAttribute(); 134 WriteLiteral(" class=\"text-decoration-none\""); 135 BeginWriteAttribute("title", " title=\"", 6059, "\"", 6072, 1); 136 WriteAttributeValue("", 6067, name, 6067, 5, false); 137 EndWriteAttribute(); 138 WriteLiteral(" tabindex=\"-1\">"); 139 Write(name); 140 WriteLiteral("</a>\r\n\t\t\t\t\t\t\t\t\t</h3>\r\n\r\n"); 141 if (!string.IsNullOrEmpty(variantText)) 142 { 143 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<p class=\"fs-8 m-0\">"); 144 Write(variantText); 145 WriteLiteral("</p>\r\n"); 146 } 147 WriteLiteral("\r\n"); 148 if (orderline.IsDiscount) 149 { 150 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<p class=\"fs-8 m-0\">"); 151 Write(Translate("Free product")); 152 WriteLiteral("</p>\r\n"); 153 } 154 else 155 { 156 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<p class=\"fs-8 m-0\">\r\n"); 157 if (!string.IsNullOrEmpty(unitName)) 158 { 159 WriteLiteral("\t\t\t\t\t\t\t\t\t\t\t\t<span>"); 160 Write(unitName); 161 WriteLiteral(": </span>\r\n"); 162 } 163 if (discountPrice == unitPrice) 164 165 { 166 WriteLiteral("\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 167 Write(unitPrice); 168 WriteLiteral("</span>\t\r\n"); 169 } 170 else 171 { 172 WriteLiteral("\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 173 Write(discountPrice); 174 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-decoration-line-through\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 175 Write(unitPrice); 176 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\r\n"); 177 } 178 WriteLiteral("\t\t\t\t\t\t\t\t\t\t</p>\r\n"); 179 } 180 WriteLiteral("\r\n"); 181 if (isMiniCart && !orderline.IsDiscount) 182 { 183 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<form method=\"post\" autocomplete=\"off\""); 184 BeginWriteAttribute("action", " action=\"", 7169, "\"", 7212, 2); 185 WriteAttributeValue("", 7178, "Default.aspx?ID=", 7178, 16, true); 186 WriteAttributeValue("", 7194, cartServicePageId, 7194, 18, false); 187 EndWriteAttribute(); 188 WriteLiteral(" data-response-target-element=\"CartSummary\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"requestPageId\""); 189 BeginWriteAttribute("value", " value=\"", 7311, "\"", 7333, 1); 190 WriteAttributeValue("", 7319, requestPageId, 7319, 14, false); 191 EndWriteAttribute(); 192 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"redirect\" value=\"false\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"OrderContext\""); 193 BeginWriteAttribute("value", " value=\"", 7452, "\"", 7473, 1); 194 WriteAttributeValue("", 7460, orderContext, 7460, 13, false); 195 EndWriteAttribute(); 196 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"cartcmd\" value=\"updateorderlines\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"checkoutUrl\""); 197 BeginWriteAttribute("value", " value=\"", 7601, "\"", 7621, 1); 198 WriteAttributeValue("", 7609, checkoutUrl, 7609, 12, false); 199 EndWriteAttribute(); 200 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"key\""); 201 BeginWriteAttribute("value", " value=\"", 7667, "\"", 7688, 1); 202 WriteAttributeValue("", 7675, orderline.ID, 7675, 13, false); 203 EndWriteAttribute(); 204 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"CartType\""); 205 BeginWriteAttribute("value", " value=\"", 7739, "\"", 7756, 1); 206 WriteAttributeValue("", 7747, cartType, 7747, 9, false); 207 EndWriteAttribute(); 208 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" class=\"d-none\" onclick=\"event.preventDefault();\"> "); 209 WriteLiteral("\r\n\r\n"); 210 211 var orderlineViewModel = new Dynamicweb.Ecommerce.Frontend.OrderLineViewModel(){ 212 Id = orderlineId, 213 ProductId = orderline.ProductID, 214 ProductVariantId = orderline.ProductVariantID, 215 UnitId = orderline.UnitId, 216 Quantity = quantity 217 }; 218 219 Write(RenderPartial("Components/QuantitySelectorOrderline.cshtml", orderlineViewModel)); 220 WriteLiteral("\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t</form>\r\n"); 221 } 222 else { 223 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<span class=\"fs-8 d-block\">"); 224 Write(Translate("Qty")); 225 WriteLiteral(": "); 226 Write(quantity); 227 WriteLiteral("</span>\r\n"); 228 } 229 WriteLiteral("\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t<div class=\"g-col-4\">\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"d-flex flex-column gap-1 text-end h-100\">\r\n\r\n"); 230 if (isMiniCart && !orderline.IsDiscount) 231 { 232 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<form class=\"d-flex justify-content-end\""); 233 BeginWriteAttribute("action", " action=\"", 8732, "\"", 8775, 2); 234 WriteAttributeValue("", 8741, "Default.aspx?ID=", 8741, 16, true); 235 WriteAttributeValue("", 8757, cartServicePageId, 8757, 18, false); 236 EndWriteAttribute(); 237 WriteLiteral(" method=\"post\" data-layout-template=\"Swift-v2_CartSummary.cshtml\" data-response-target-element="); 238 Write(isMiniCart ? "DynamicOffcanvas" : "CartSummaryContainer"); 239 WriteLiteral(" data-preloader=\"inline\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"requestPageId\""); 240 BeginWriteAttribute("value", " value=\"", 9009, "\"", 9031, 1); 241 WriteAttributeValue("", 9017, requestPageId, 9017, 14, false); 242 EndWriteAttribute(); 243 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"redirect\" value=\"false\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"OrderContext\""); 244 BeginWriteAttribute("value", " value=\"", 9150, "\"", 9171, 1); 245 WriteAttributeValue("", 9158, orderContext, 9158, 13, false); 246 EndWriteAttribute(); 247 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"cartcmd\" value=\"DelOrderLine\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"checkoutUrl\""); 248 BeginWriteAttribute("value", " value=\"", 9295, "\"", 9315, 1); 249 WriteAttributeValue("", 9303, checkoutUrl, 9303, 12, false); 250 EndWriteAttribute(); 251 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"key\""); 252 BeginWriteAttribute("value", " value=\"", 9361, "\"", 9382, 1); 253 WriteAttributeValue("", 9369, orderline.ID, 9369, 13, false); 254 EndWriteAttribute(); 255 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"CartType\""); 256 BeginWriteAttribute("value", " value=\"", 9433, "\"", 9450, 1); 257 WriteAttributeValue("", 9441, cartType, 9441, 9, false); 258 EndWriteAttribute(); 259 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-link btn-sm lh-1 p-0 m-0 fs-8 opacity-50\" onclick=\"swift.Cart.Update(this);\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t"); 260 Write(Translate("Remove")); 261 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</form>\r\n"); 262 } 263 else if (!orderline.IsDiscount) 264 { 265 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<form class=\"d-flex justify-content-end\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"requestPageId\""); 266 BeginWriteAttribute("value", " value=\"", 9827, "\"", 9849, 1); 267 WriteAttributeValue("", 9835, requestPageId, 9835, 14, false); 268 EndWriteAttribute(); 269 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"redirect\" value=\"false\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"OrderContext\""); 270 BeginWriteAttribute("value", " value=\"", 9968, "\"", 9989, 1); 271 WriteAttributeValue("", 9976, orderContext, 9976, 13, false); 272 EndWriteAttribute(); 273 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"cartcmd\" value=\"DelOrderLine\">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"checkoutUrl\""); 274 BeginWriteAttribute("value", " value=\"", 10113, "\"", 10133, 1); 275 WriteAttributeValue("", 10121, checkoutUrl, 10121, 12, false); 276 EndWriteAttribute(); 277 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"key\""); 278 BeginWriteAttribute("value", " value=\"", 10179, "\"", 10200, 1); 279 WriteAttributeValue("", 10187, orderline.ID, 10187, 13, false); 280 EndWriteAttribute(); 281 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"CartType\""); 282 BeginWriteAttribute("value", " value=\"", 10251, "\"", 10268, 1); 283 WriteAttributeValue("", 10259, cartType, 10259, 9, false); 284 EndWriteAttribute(); 285 WriteLiteral(">\r\n\t\t\t\t\t\t\t\t\t\t\t<button type=\"submit\" class=\"btn btn-link btn-sm lh-1 p-0 m-0 fs-8 opacity-50\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t"); 286 Write(Translate("Remove")); 287 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t\t</form>\r\n"); 288 } 289 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t<div class=\"d-flex flex-column justify-content-end flex-fill\">\r\n"); 290 WriteLiteral("\t\t\t\t\t\t\t\t\t\t<span class=\"h6 d-block fs-7 m-0\">\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 291 Write(priceTotalWithDiscounts); 292 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n"); 293 if (orderline.TotalDiscount.Price.Value != 0) 294 { 295 WriteLiteral("\t\t\t\t\t\t\t\t\t\t\t<span class=\"d-block fs-8 opacity-50\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 296 Write(discountTotal); 297 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t\t\t</span>\r\n"); 298 } 299 WriteLiteral("\t\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t</article>\r\n"); 300 } 301 } 302 WriteLiteral("\t\t\t</div>\r\n\r\n\t\t\t<div class=\"d-flex justify-content-end pb-3\">\r\n"); 303 if (isMiniCart) { 304 WriteLiteral("\t\t\t\t\t<form"); 305 BeginWriteAttribute("action", " action=\"", 11082, "\"", 11125, 2); 306 WriteAttributeValue("", 11091, "Default.aspx?ID=", 11091, 16, true); 307 WriteAttributeValue("", 11107, cartServicePageId, 11107, 18, false); 308 EndWriteAttribute(); 309 WriteLiteral(" method=\"post\" data-layout-template=\"Swift-v2_CartSummary.cshtml\" data-response-target-element="); 310 Write(isMiniCart ? "DynamicOffcanvas" : "CartSummaryContainer"); 311 WriteLiteral(" data-preloader=\"inline\">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"requestPageId\""); 312 BeginWriteAttribute("value", " value=\"", 11354, "\"", 11376, 1); 313 WriteAttributeValue("", 11362, requestPageId, 11362, 14, false); 314 EndWriteAttribute(); 315 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"redirect\" value=\"false\">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"OrderContext\""); 316 BeginWriteAttribute("value", " value=\"", 11485, "\"", 11506, 1); 317 WriteAttributeValue("", 11493, orderContext, 11493, 13, false); 318 EndWriteAttribute(); 319 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"cartcmd\" value=\"emptycart\">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"checkoutUrl\""); 320 BeginWriteAttribute("value", " value=\"", 11617, "\"", 11637, 1); 321 WriteAttributeValue("", 11625, checkoutUrl, 11625, 12, false); 322 EndWriteAttribute(); 323 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"CartType\""); 324 BeginWriteAttribute("value", " value=\"", 11683, "\"", 11700, 1); 325 WriteAttributeValue("", 11691, cartType, 11691, 9, false); 326 EndWriteAttribute(); 327 WriteLiteral(">\r\n\t\t\t\t\t\t<button type=\"button\" class=\"btn btn-link p-0 text-decoration-none d-flex align-items-center gap-1\" onclick=\"swift.Cart.Update(this);\">\r\n\t\t\t\t\t\t\t<span class=\"icon-2\">"); 328 Write(ReadFile(iconPath + "trash-can.svg")); 329 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t<span class=\"text-decoration-underline\">"); 330 Write(Translate("Remove all")); 331 WriteLiteral("</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</form>\r\n"); 332 } 333 else 334 { 335 WriteLiteral("\t\t\t\t\t<form>\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"requestPageId\""); 336 BeginWriteAttribute("value", " value=\"", 12117, "\"", 12139, 1); 337 WriteAttributeValue("", 12125, requestPageId, 12125, 14, false); 338 EndWriteAttribute(); 339 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"redirect\" value=\"false\">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"OrderContext\""); 340 BeginWriteAttribute("value", " value=\"", 12248, "\"", 12269, 1); 341 WriteAttributeValue("", 12256, orderContext, 12256, 13, false); 342 EndWriteAttribute(); 343 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"cartcmd\" value=\"emptycart\">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"checkoutUrl\""); 344 BeginWriteAttribute("value", " value=\"", 12380, "\"", 12400, 1); 345 WriteAttributeValue("", 12388, checkoutUrl, 12388, 12, false); 346 EndWriteAttribute(); 347 WriteLiteral(">\r\n\t\t\t\t\t\t<input type=\"hidden\" name=\"CartType\""); 348 BeginWriteAttribute("value", " value=\"", 12446, "\"", 12463, 1); 349 WriteAttributeValue("", 12454, cartType, 12454, 9, false); 350 EndWriteAttribute(); 351 WriteLiteral(">\r\n\t\t\t\t\t\t<button type=\"submit\" class=\"btn btn-link p-0 text-decoration-none d-flex align-items-center gap-1\">\r\n\t\t\t\t\t\t\t<span class=\"icon-2\">"); 352 Write(ReadFile(iconPath + "trash-can.svg")); 353 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t<span class=\"text-decoration-underline\">"); 354 Write(Translate("Remove all")); 355 WriteLiteral("</span>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</form>\r\n"); 356 } 357 WriteLiteral("\t\t\t</div>\r\n\r\n"); 358 359 string totalPriceWithoutDiscountsFeesAndTaxes = Model.Cart.TotalPriceWithoutDiscountsFeesAndTaxes.Price.Formatted; 360 string totalPriceWithoutOrderDiscountsAndFees = Model.Cart.TotalPriceWithoutFees.Price.Formatted; 361 bool showPricesWithVat = Dynamicweb.Ecommerce.Common.Context.DisplayPricesWithVat; 362 bool renderVatMessage = (Model.Cart.TotalPrice?.PriceWithVat?.Value != Model.Cart.TotalPrice?.PriceWithoutVat?.Value) || Dynamicweb.Ecommerce.Common.Context.Country?.Vat != null; 363 364 WriteLiteral("\t\t\t\t<div class=\"d-flex flex-column mt-auto gap-2 gap-lg-3 position-sticky bottom-0 bg-body\" id=\"cartSummaryFooter\" style=\"box-shadow: 0 -10px 10px -12px var(--bs-gray-300);\">\r\n\r\n\t\t\t\t\t<div class=\"fs-8 border-top pt-2 pt-lg-3\">\r\n"); 365 WriteLiteral("\t\t\t\t\t\t<div class=\"d-flex justify-content-between fw-bold\">\r\n\t\t\t\t\t\t\t<span>"); 366 Write(Translate("Subtotal")); 367 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t<span class=\"text-end\">\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t<span class=\"d-block\">\r\n"); 368 if (totalPriceWithoutDiscountsFeesAndTaxes != totalPriceWithoutOrderDiscountsAndFees) 369 { 370 WriteLiteral("\t\t\t\t\t\t\t\t\t<span class=\"text-price fw-normal text-decoration-line-through\">"); 371 Write(totalPriceWithoutDiscountsFeesAndTaxes); 372 WriteLiteral("</span>\r\n"); 373 } 374 WriteLiteral("\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 375 Write(totalPriceWithoutOrderDiscountsAndFees); 376 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\r\n"); 377 if (renderVatMessage && !showPricesWithVat) 378 { 379 WriteLiteral("\t\t\t\t\t\t\t\t\t<span class=\"fs-8 fw-normal d-block\">"); 380 Write(Translate("Excl. VAT")); 381 WriteLiteral("</span>\r\n"); 382 } 383 else if (renderVatMessage) 384 { 385 WriteLiteral("\t\t\t\t\t\t\t\t\t<span class=\"fs-8 fw-normal d-block\">"); 386 Write(Translate("Incl. VAT")); 387 WriteLiteral("</span>\r\n"); 388 } 389 WriteLiteral("\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t</div>\r\n\r\n"); 390 foreach (var orderline in Model.Cart.CartOrderlines) 391 { 392 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.ProductID) || !string.IsNullOrEmpty(orderline.ProductNumber); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 393 var orderLineViewModel = Dynamicweb.Ecommerce.Services.OrderLines.GetById(orderline.ID); 394 bool isDiscount = orderLineViewModel.OrderLineType == Dynamicweb.Ecommerce.Orders.OrderLineType.Discount; 395 bool isOrderAmountDiscount = isDiscount && !isProductIdOrNumber; 396 397 if (isOrderAmountDiscount) 398 { 399 WriteLiteral("\t\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\"><span>"); 400 Write(orderline.ProductName); 401 WriteLiteral("</span><span class=\"text-price\">"); 402 Write(orderline.TotalPriceWithProductDiscounts.Price.Formatted); 403 WriteLiteral("</span></div>\r\n"); 404 } 405 } 406 WriteLiteral("\r\n"); 407 if (!string.IsNullOrEmpty(Model.Cart.ShippingMethod)) 408 { 409 if (Model.Cart.ShippingFee.Price.Value != 0.0) 410 { 411 WriteLiteral("\t\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\r\n\t\t\t\t\t\t\t\t\t<span>"); 412 Write(Translate("Delivery")); 413 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span>"); 414 Write(Model.Cart.ShippingFee.Price.Formatted); 415 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n"); 416 } 417 } 418 else 419 { 420 WriteLiteral("\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\r\n\t\t\t\t\t\t\t\t<span>"); 421 Write(Translate("Delivery")); 422 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t<span>"); 423 Write(Translate("Calculated in next step")); 424 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t</div>\r\n"); 425 } 426 WriteLiteral("\r\n"); 427 if (!string.IsNullOrEmpty(Model.Cart.PaymentMethod)) 428 { 429 if (Model.Cart.PaymentFee.Price.Value != 0) 430 { 431 WriteLiteral("\t\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\r\n\t\t\t\t\t\t\t\t\t<span>"); 432 Write(Translate("Payment")); 433 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"text-price\">"); 434 Write(Model.Cart.PaymentFee.Price.Formatted); 435 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n"); 436 } 437 } 438 else 439 { 440 WriteLiteral("\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\r\n\t\t\t\t\t\t\t\t<span>"); 441 Write(Translate("Payment")); 442 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t<span>"); 443 Write(Translate("Calculated in next step")); 444 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t</div>\r\n"); 445 } 446 WriteLiteral("\r\n"); 447 if (order is object) 448 { 449 if (order.TotalTax.Price != 0) 450 { 451 WriteLiteral("\t\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\">\r\n\t\t\t\t\t\t\t\t\t<span>"); 452 Write(Translate("Sales tax")); 453 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span>"); 454 Write(order.TotalTax.PriceFormatted); 455 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n"); 456 } 457 } 458 WriteLiteral("\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"fs-8 border-top pt-2 pt-lg-3\">\r\n\t\t\t\t\t\t<div class=\"d-flex justify-content-between fs-6 fw-bold\">\r\n\t\t\t\t\t\t\t<span>"); 459 Write(Translate("Total")); 460 WriteLiteral("</span>\r\n"); 461 if (renderVatMessage && !showPricesWithVat) 462 { 463 WriteLiteral("\t\t\t\t\t\t\t\t<span class=\"text-price text-end\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"fs-5 d-block\">"); 464 Write(Model.Cart.TotalPrice.Price.Formatted); 465 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"fs-8 fw-normal d-block\">"); 466 Write(Translate("Excl. VAT")); 467 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</span>\r\n"); 468 } 469 else if (renderVatMessage) 470 { 471 WriteLiteral("\t\t\t\t\t\t\t\t<span class=\"text-price text-end\">\r\n\t\t\t\t\t\t\t\t\t<span class=\"fs-5 d-block\">"); 472 Write(Model.Cart.TotalPrice.Price.Formatted); 473 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"fs-8 fw-normal d-block\">"); 474 Write(Translate("Incl. VAT")); 475 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</span>\r\n"); 476 } 477 else 478 { 479 WriteLiteral("\t\t\t\t\t\t\t\t<span class=\"text-price fs-5\">"); 480 Write(Model.Cart.TotalPrice.Price.Formatted); 481 WriteLiteral("</span>\r\n"); 482 } 483 WriteLiteral("\t\t\t\t\t\t</div>\r\n\r\n"); 484 if (renderVatMessage) 485 { 486 WriteLiteral("\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\"><span>"); 487 Write(Translate("VAT")); 488 WriteLiteral("</span><span class=\"text-price\">"); 489 Write(Model.Cart.TotalPrice.Vat.Formatted); 490 WriteLiteral("</span></div>\r\n"); 491 if (!showPricesWithVat) 492 { 493 WriteLiteral("\t\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\"><span>"); 494 Write(Translate("Total incl. VAT")); 495 WriteLiteral("</span><span class=\"text-price\">"); 496 Write(Model.Cart.TotalPrice.PriceWithVat.Formatted); 497 WriteLiteral("</span></div>\r\n"); 498 } 499 } 500 WriteLiteral("\r\n"); 501 if (Model.Cart.TotalDiscount.Price.Value != 0) 502 { 503 WriteLiteral("\t\t\t\t\t\t\t<div class=\"d-flex justify-content-between\"><span>"); 504 Write(Translate("Discount")); 505 WriteLiteral("</span><span class=\"text-price\">"); 506 Write(Model.Cart.TotalDiscount.Price.Formatted); 507 WriteLiteral("</span></div>\r\n"); 508 } 509 WriteLiteral("\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t<div class=\"mb-3 d-flex flex-column justify-content-end gap-3\">\r\n\r\n"); 510 if (isMiniCart) 511 { 512 WriteLiteral(@" <button type=""button"" class=""btn btn-link text-decoration-none order-last"" data-dw-button=""link"" data-bs-dismiss=""offcanvas"" aria-label=""Close"" id=""ContinueShopping""> 513 <div class=""d-flex align-items-center justify-content-center position-relative""> 514 <span class=""icon-2 me-1 position-absolute position-lg-static start-0""> 515 "); 516 Write(ReadFile(iconPath + "chevron-left.svg")); 517 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t<span>"); 518 Write(Translate("Continue shopping")); 519 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</button>\r\n"); 520 521 if (!string.IsNullOrEmpty(cartUrl)) 522 { 523 WriteLiteral("\t\t\t\t\t\t\t\t<a"); 524 BeginWriteAttribute("href", " href=\"", 19004, "\"", 19047, 2); 525 WriteAttributeValue("", 19011, cartUrl, 19011, 10, false); 526 WriteAttributeValue("", 19021, orderContextQueryString, 19021, 26, false); 527 EndWriteAttribute(); 528 WriteLiteral(" class=\"btn btn-secondary\" data-dw-button=\"secondary\" id=\"GoToCartButton\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center position-relative\">\r\n\t\t\t\t\t\t\t\t\t\t<span>"); 529 Write(Translate("Cart")); 530 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"icon-2 ms-1 position-absolute position-md-static end-0\">\r\n\t\t\t\t\t\t\t\t\t\t\t"); 531 Write(ReadFile(iconPath + "chevron-right.svg")); 532 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</a>\r\n"); 533 } 534 } 535 536 537 WriteLiteral("\t\t\t\t\t\t<a"); 538 BeginWriteAttribute("href", " href=\"", 19501, "\"", 19548, 2); 539 WriteAttributeValue("", 19508, checkoutUrl, 19508, 14, false); 540 WriteAttributeValue("", 19522, orderContextQueryString, 19522, 26, false); 541 EndWriteAttribute(); 542 WriteLiteral(" class=\"btn btn-primary order-first\" data-dw-button=\"primary\" id=\"CartSummaryGoToCheckoutButton\">\r\n\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center position-relative\">\r\n\t\t\t\t\t\t\t\t<span>"); 543 Write(Translate("Checkout")); 544 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t<span class=\"icon-2 ms-1 position-absolute position-md-static end-0\">\r\n\t\t\t\t\t\t\t\t\t"); 545 Write(ReadFile(iconPath + "chevron-right.svg")); 546 WriteLiteral("\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</a>\r\n\r\n"); 547 if (!string.IsNullOrEmpty(quoteCheckoutPageId) && Converter.ToInt32(quoteCheckoutPageId) > 0 && !anonymousUser) 548 { 549 WriteLiteral("\t\t\t\t\t\t\t<a"); 550 BeginWriteAttribute("href", " href=\"", 20130, "\"", 20201, 3); 551 WriteAttributeValue("", 20137, "Default.aspx?ID=", 20137, 16, true); 552 WriteAttributeValue("", 20153, quoteCheckoutPageId, 20153, 22, false); 553 WriteAttributeValue("", 20175, orderContextQueryString, 20175, 26, false); 554 EndWriteAttribute(); 555 WriteLiteral(" class=\"btn btn-secondary\" data-dw-button=\"secondary\" id=\"RequestQuoteButton\">\r\n\t\t\t\t\t\t\t\t<div class=\"d-flex align-items-center justify-content-center position-relative\">\r\n\t\t\t\t\t\t\t\t\t<span>"); 556 Write(Translate("Request quote")); 557 WriteLiteral("</span>\r\n\t\t\t\t\t\t\t\t\t<span class=\"icon-2 ms-1 position-absolute position-lg-static end-0\">\r\n\t\t\t\t\t\t\t\t\t\t"); 558 Write(ReadFile(iconPath + "chevron-right.svg")); 559 WriteLiteral("\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</a>\r\n"); 560 } 561 WriteLiteral("\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n"); 562 WriteLiteral("\t\t</div>\r\n"); 563 } 564 else 565 { 566 if (!isMiniCart) 567 { 568 WriteLiteral(@" <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=""#CartSummary"" aria-expanded=""false"" aria-controls=""CartSummary""> 569 <div class=""d-flex align-items-center justify-content-between""> 570 <span class=""d-flex align-items-center""> 571 <span class=""fs-7 lh-1""><span class=""toggle-order-summary-text""></span> "); 572 Write(Translate("order summary")); 573 WriteLiteral("</span>\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class=\"icon-2 ms-2\">\r\n\t\t\t\t\t\t"); 574 Write(ReadFile(iconPath + "chevron-down.svg")); 575 WriteLiteral("\r\n\t\t\t\t\t</span>\r\n\t\t\t\t</div>\r\n\t\t\t</button>\r\n"); 576 WriteLiteral("\t\t\t<style>\r\n\t\t\t\t.toggle-order-summary .toggle-order-summary-text::after {\r\n\t\t\t\t\tcontent: \""); 577 Write(Translate("Show")); 578 WriteLiteral("\";\r\n\t\t\t\t}\r\n\t\t\t\t.toggle-order-summary[aria-expanded=\"true\"] .toggle-order-summary-text::after {\r\n\t\t\t\t\tcontent: \""); 579 Write(Translate("Hide")); 580 WriteLiteral("\";\r\n\t\t\t\t}\r\n\t\t\t\t.toggle-order-summary[ aria-expanded=\"true\" ] svg {\r\n\t\t\t\t\ttransform: rotate(-180deg);\r\n\t\t\t\t}\r\n\t\t\t</style>\r\n"); 581 } 582 583 WriteLiteral("\t\t<div"); 584 BeginWriteAttribute("class", " class=\"", 21638, "\"", 21701, 3); 585 WriteAttributeValue("", 21646, "d-lg-block", 21646, 10, true); 586 WriteAttributeValue(" ", 21656, "h-lg-auto", 21657, 10, true); 587 WriteAttributeValue(" ", 21666, !isMiniCart ? "collapse" : null, 21667, 34, false); 588 EndWriteAttribute(); 589 WriteLiteral(" id=\"CartSummary\">\r\n\t\t\t<div class=\"d-flex flex-column align-items-center justify-content-center min-vh-50 text-center opacity-50\">\r\n\t\t\t\t<span class=\"icon-5\">\r\n\t\t\t\t\t"); 590 Write(ReadFile(iconPath + "cart-shopping.svg")); 591 WriteLiteral("\r\n\t\t\t\t</span>\r\n\t\t\t\t<span>"); 592 Write(Translate("Your shopping cart is empty")); 593 WriteLiteral("</span>\r\n\t\t\t\t<span>"); 594 Write(Translate("Add products to see cart summary")); 595 WriteLiteral("</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n"); 596 } 597 WriteLiteral("</div>\r\n"); 598 } 599 #pragma warning restore 1998 600 601 string? DoubleToString(double? value) 602 { 603 if (value.HasValue) 604 { 605 return value.Value.ToString(CultureInfo.InvariantCulture); 606 } 607 return null; 608 } 609 } 610 } 611 #pragma warning restore 1591 612

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.PageViewModel> 2 @using Dynamicweb.Frontend 3 @using Dynamicweb.Core 4 @using Dynamicweb.Ecommerce.Frontend 5 @using Dynamicweb.Ecommerce.ProductCatalog 6 @using System.Globalization 7 8 @functions { 9 string? DoubleToString(double? value) 10 { 11 if (value.HasValue) 12 { 13 return value.Value.ToString(CultureInfo.InvariantCulture); 14 } 15 return null; 16 } 17 } 18 19 @{ 20 string iconPath = "/Files/Images/Icons/"; 21 bool anonymousUser = Pageview.User == null; 22 var cartServicePageId = GetPageIdByNavigationTag("CartService"); 23 var cartSummaryPageId = GetPageIdByNavigationTag("CartSummary"); 24 var cartType = Dynamicweb.Context.Current?.Request["CartType"]; 25 var requestPageId = Dynamicweb.Context.Current?.Request["RequestPageID"]; 26 var orderContext = Dynamicweb.Context.Current?.Request["OrderContext"]; 27 string? orderContextQueryString = string.IsNullOrEmpty(orderContext) ? string.Empty : $"?OrderContext={orderContext}"; 28 string? cartUrl = Model.Item?.GetLink("CartPageLink")?.Url; 29 string? checkoutUrl = Dynamicweb.Context.Current?.Request["checkoutUrl"]; 30 checkoutUrl = string.IsNullOrEmpty(checkoutUrl) ? (!anonymousUser ? Model.Item?.GetLink("CheckoutSignedInPageLink")?.Url : Model.Item?.GetLink("CheckoutAnonymousPageLink")?.Url) : checkoutUrl; 31 string? quoteCheckoutPageId = Dynamicweb.Context.Current?.Request["quoteCheckoutPageLink"]; 32 quoteCheckoutPageId = string.IsNullOrEmpty(quoteCheckoutPageId) ? Model.Item?.GetLink("QuoteCheckoutPageLink")?.PageId.ToString() : quoteCheckoutPageId; 33 var order = Dynamicweb.Ecommerce.Services.Orders.GetById(Model.Cart?.ID); 34 bool isMiniCart = cartType == "minicart"; 35 } 36 37 @if (isMiniCart) 38 { 39 <div class="modal-header sticky-top justify-content-between py-1 py-lg-3 ps-3 ps-lg-4 pe-0 pe-lg-3 bg-body" style="box-shadow: 0 10px 10px -12px var(--bs-gray-300);"> 40 <span class="h5 m-0">@Translate("Your cart")</span> 41 42 <button type="button" class="btn btn-sm p-2 d-flex align-items-center" data-bs-dismiss="offcanvas" aria-label="Close" id="CloseMiniCart"> 43 <span>@Translate("Close")</span> 44 <span class="icon-3"> 45 @ReadFile(iconPath + "xmark.svg") 46 </span> 47 </button> 48 </div> 49 } 50 51 <div class="item_@Model.Item?.SystemName.ToLower() @(isMiniCart ? "p-3 p-lg-4 h-100" : null)"> 52 @if (Model.Cart?.TotalProductsCount > 0) 53 { 54 if (!isMiniCart) 55 { 56 <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="#CartSummary" aria-expanded="false" aria-controls="CartSummary"> 57 <div class="d-flex align-items-center justify-content-between"> 58 <span class="d-flex align-items-center"> 59 <span class="fs-7 lh-1"><span class="toggle-order-summary-text"></span> @Translate("order summary")</span> 60 <span class="icon-2 ms-2"> 61 @ReadFile(iconPath + "chevron-down.svg") 62 </span> 63 </span> 64 <span class="fw-bold"> 65 <span class="text-price">@Model.Cart.TotalPrice.Price.Formatted</span> 66 </span> 67 </div> 68 </button> 69 70 <style> 71 .toggle-order-summary .toggle-order-summary-text::after { 72 content: "@Translate("Show")"; 73 } 74 .toggle-order-summary[aria-expanded="true"] .toggle-order-summary-text::after { 75 content: "@Translate("Hide")"; 76 } 77 .toggle-order-summary[ aria-expanded="true" ] svg { 78 transform: rotate(-180deg); 79 } 80 </style> 81 } 82 83 <div class="@(!isMiniCart ? "d-lg-block h-lg-auto collapse" : "d-flex flex-column h-100") pt-2 pt-lg-0" id="CartSummary"> 84 <div class="d-flex flex-column gap-4 pb-4"> 85 @foreach (var orderline in Model.Cart.CartOrderlines.Reverse()) 86 { 87 var product = orderline?.GetProduct() ?? null; 88 string? name = orderline?.ProductName; 89 string image = product?.DefaultImage?.Value ?? string.Empty; 90 string imagePath = $"/Admin/Public/GetImage.ashx?image={image}&width=80&height=80&crop=5&fillcanvas=true&Background=ffffff&format=webp"; 91 imagePath = !string.IsNullOrWhiteSpace(image) && !image.StartsWith("/Files/", StringComparison.OrdinalIgnoreCase) ? imagePath : image; 92 string? priceTotalWithDiscounts = orderline?.TotalPriceWithProductDiscounts.Price.Formatted; 93 string? priceBefore = orderline?.UnitPriceBeforeDiscount.Price.Formatted; 94 string? unitPrice = orderline?.UnitPrice.Price.Formatted; 95 string? discountPrice = orderline?.UnitPriceWithProductDiscount.Price.Formatted; 96 string? discountTotal = orderline?.TotalDiscount.Price.Formatted; 97 string? variantText = orderline?.ProductVariantText; 98 string? unitName = orderline?.UnitName; 99 var orderlineId = orderline?.ID; 100 var quantity = Math.Round(orderline.Quantity, 2); 101 double? stepQty = product?.PurchaseQuantityStep > 0 ? product.PurchaseQuantityStep : 1; 102 double? minQty = product?.PurchaseMinimumQuantity > 0 ? product.PurchaseMinimumQuantity : 1; 103 double? maxQty = null; 104 if (product?.ProductType == Dynamicweb.Ecommerce.Products.ProductType.Stock && !product.NeverOutOfstock) 105 { 106 maxQty = product.StockLevel; 107 } 108 string link = product?.GetProductLink(GetPageIdByNavigationTag("Shop"), false) ?? string.Empty; 109 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.ProductID) || !string.IsNullOrEmpty(orderline.ProductNumber); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 110 bool isProduct = orderline.IsProduct || (orderline.IsDiscount && isProductIdOrNumber); 111 112 if (isProduct) 113 { 114 <article class="grid grid-12"> 115 116 <div class="g-col-2"> 117 <a href="@link" class="ratio ratio-1x1 d-block " title="@name" tabindex="-1"> 118 <img src="@imagePath" style="object-fit: contain;" alt="@name"> 119 </a> 120 </div> 121 122 <div class="g-col-6"> 123 124 <div class="d-flex flex-column gap-1"> 125 @* Title *@ 126 <h3 class="h6 fs-7 m-0"> 127 <a href="@link" class="text-decoration-none" title="@name" tabindex="-1">@name</a> 128 </h3> 129 130 @* Variants *@ 131 @if (!string.IsNullOrEmpty(variantText)) 132 { 133 <p class="fs-8 m-0">@variantText</p> 134 } 135 136 @if (orderline.IsDiscount) 137 { 138 @* Free product notice *@ 139 <p class="fs-8 m-0">@Translate("Free product")</p> 140 } 141 else 142 { 143 @* Unit price *@ 144 <p class="fs-8 m-0"> 145 @if (!string.IsNullOrEmpty(unitName)) 146 { 147 <span>@unitName: </span> 148 } 149 @if (discountPrice == unitPrice) 150 151 { 152 <span class="text-price">@unitPrice</span> 153 } 154 else 155 { 156 <span class="text-price">@discountPrice</span> 157 <span class="text-decoration-line-through"> 158 <span class="text-price">@unitPrice</span> 159 </span> 160 } 161 </p> 162 } 163 164 @* Quantity *@ 165 @if (isMiniCart && !orderline.IsDiscount) 166 { 167 <form method="post" autocomplete="off" action="Default.aspx?ID=@cartServicePageId" data-response-target-element="CartSummary"> 168 <input type="hidden" name="requestPageId" value="@requestPageId"> 169 <input type="hidden" name="redirect" value="false"> 170 <input type="hidden" name="OrderContext" value="@orderContext"> 171 <input type="hidden" name="cartcmd" value="updateorderlines"> 172 <input type="hidden" name="checkoutUrl" value="@checkoutUrl"> 173 <input type="hidden" name="key" value="@orderline.ID"> 174 <input type="hidden" name="CartType" value="@cartType"> 175 <input type="submit" class="d-none" onclick="event.preventDefault();"> @* Fix for enterKey should not redirect *@ 176 177 @{ 178 var orderlineViewModel = new Dynamicweb.Ecommerce.Frontend.OrderLineViewModel(){ 179 Id = orderlineId, 180 ProductId = orderline.ProductID, 181 ProductVariantId = orderline.ProductVariantID, 182 UnitId = orderline.UnitId, 183 Quantity = quantity 184 }; 185 186 @RenderPartial("Components/QuantitySelectorOrderline.cshtml", orderlineViewModel) 187 } 188 189 </form> 190 } 191 else { 192 <span class="fs-8 d-block">@Translate("Qty"): @quantity</span> 193 } 194 195 </div> 196 </div> 197 198 <div class="g-col-4"> 199 200 <div class="d-flex flex-column gap-1 text-end h-100"> 201 202 @if (isMiniCart && !orderline.IsDiscount) 203 { 204 <form class="d-flex justify-content-end" action="Default.aspx?ID=@cartServicePageId" method="post" data-layout-template="Swift-v2_CartSummary.cshtml" data-response-target-element=@(isMiniCart ? "DynamicOffcanvas" : "CartSummaryContainer") data-preloader="inline"> 205 <input type="hidden" name="requestPageId" value="@requestPageId"> 206 <input type="hidden" name="redirect" value="false"> 207 <input type="hidden" name="OrderContext" value="@orderContext"> 208 <input type="hidden" name="cartcmd" value="DelOrderLine"> 209 <input type="hidden" name="checkoutUrl" value="@checkoutUrl"> 210 <input type="hidden" name="key" value="@orderline.ID"> 211 <input type="hidden" name="CartType" value="@cartType"> 212 <button type="button" class="btn btn-link btn-sm lh-1 p-0 m-0 fs-8 opacity-50" onclick="swift.Cart.Update(this);"> 213 @Translate("Remove") 214 </button> 215 </form> 216 } 217 else if (!orderline.IsDiscount) 218 { 219 <form class="d-flex justify-content-end"> 220 <input type="hidden" name="requestPageId" value="@requestPageId"> 221 <input type="hidden" name="redirect" value="false"> 222 <input type="hidden" name="OrderContext" value="@orderContext"> 223 <input type="hidden" name="cartcmd" value="DelOrderLine"> 224 <input type="hidden" name="checkoutUrl" value="@checkoutUrl"> 225 <input type="hidden" name="key" value="@orderline.ID"> 226 <input type="hidden" name="CartType" value="@cartType"> 227 <button type="submit" class="btn btn-link btn-sm lh-1 p-0 m-0 fs-8 opacity-50"> 228 @Translate("Remove") 229 </button> 230 </form> 231 } 232 233 <div class="d-flex flex-column justify-content-end flex-fill"> 234 @* Total *@ 235 <span class="h6 d-block fs-7 m-0"> 236 <span class="text-price">@priceTotalWithDiscounts</span> 237 </span> 238 @if (orderline.TotalDiscount.Price.Value != 0) 239 { 240 <span class="d-block fs-8 opacity-50"> 241 <span class="text-price">@discountTotal</span> 242 </span> 243 } 244 </div> 245 246 </div> 247 248 </div> 249 250 </article> 251 } 252 } 253 </div> 254 255 <div class="d-flex justify-content-end pb-3"> 256 @if (isMiniCart) { 257 <form action="Default.aspx?ID=@cartServicePageId" method="post" data-layout-template="Swift-v2_CartSummary.cshtml" data-response-target-element=@(isMiniCart ? "DynamicOffcanvas" : "CartSummaryContainer") data-preloader="inline"> 258 <input type="hidden" name="requestPageId" value="@requestPageId"> 259 <input type="hidden" name="redirect" value="false"> 260 <input type="hidden" name="OrderContext" value="@orderContext"> 261 <input type="hidden" name="cartcmd" value="emptycart"> 262 <input type="hidden" name="checkoutUrl" value="@checkoutUrl"> 263 <input type="hidden" name="CartType" value="@cartType"> 264 <button type="button" class="btn btn-link p-0 text-decoration-none d-flex align-items-center gap-1" onclick="swift.Cart.Update(this);"> 265 <span class="icon-2">@ReadFile(iconPath + "trash-can.svg")</span> 266 <span class="text-decoration-underline">@Translate("Remove all")</span> 267 </button> 268 </form> 269 } 270 else 271 { 272 <form> 273 <input type="hidden" name="requestPageId" value="@requestPageId"> 274 <input type="hidden" name="redirect" value="false"> 275 <input type="hidden" name="OrderContext" value="@orderContext"> 276 <input type="hidden" name="cartcmd" value="emptycart"> 277 <input type="hidden" name="checkoutUrl" value="@checkoutUrl"> 278 <input type="hidden" name="CartType" value="@cartType"> 279 <button type="submit" class="btn btn-link p-0 text-decoration-none d-flex align-items-center gap-1"> 280 <span class="icon-2">@ReadFile(iconPath + "trash-can.svg")</span> 281 <span class="text-decoration-underline">@Translate("Remove all")</span> 282 </button> 283 </form> 284 } 285 </div> 286 287 @{ 288 string totalPriceWithoutDiscountsFeesAndTaxes = Model.Cart.TotalPriceWithoutDiscountsFeesAndTaxes.Price.Formatted; 289 string totalPriceWithoutOrderDiscountsAndFees = Model.Cart.TotalPriceWithoutFees.Price.Formatted; 290 bool showPricesWithVat = Dynamicweb.Ecommerce.Common.Context.DisplayPricesWithVat; 291 bool renderVatMessage = (Model.Cart.TotalPrice?.PriceWithVat?.Value != Model.Cart.TotalPrice?.PriceWithoutVat?.Value) || Dynamicweb.Ecommerce.Common.Context.Country?.Vat != null; 292 293 <div class="d-flex flex-column mt-auto gap-2 gap-lg-3 position-sticky bottom-0 bg-body" id="cartSummaryFooter" style="box-shadow: 0 -10px 10px -12px var(--bs-gray-300);"> 294 295 <div class="fs-8 border-top pt-2 pt-lg-3"> 296 @* Subtotal *@ 297 <div class="d-flex justify-content-between fw-bold"> 298 <span>@Translate("Subtotal")</span> 299 <span class="text-end"> 300 301 <span class="d-block"> 302 @if (totalPriceWithoutDiscountsFeesAndTaxes != totalPriceWithoutOrderDiscountsAndFees) 303 { 304 <span class="text-price fw-normal text-decoration-line-through">@(totalPriceWithoutDiscountsFeesAndTaxes)</span> 305 } 306 <span class="text-price">@totalPriceWithoutOrderDiscountsAndFees</span> 307 </span> 308 309 @if (renderVatMessage && !showPricesWithVat) 310 { 311 <span class="fs-8 fw-normal d-block">@Translate("Excl. VAT")</span> 312 } 313 else if (renderVatMessage) 314 { 315 <span class="fs-8 fw-normal d-block">@Translate("Incl. VAT")</span> 316 } 317 </span> 318 </div> 319 320 @* Discounts (only order discounts) *@ 321 @foreach (var orderline in Model.Cart.CartOrderlines) 322 { 323 bool isProductIdOrNumber = !string.IsNullOrEmpty(orderline.ProductID) || !string.IsNullOrEmpty(orderline.ProductNumber); //Live Cart orderlines may not return ProductId. Manually entered products may not have ProductNumber 324 var orderLineViewModel = Dynamicweb.Ecommerce.Services.OrderLines.GetById(orderline.ID); 325 bool isDiscount = orderLineViewModel.OrderLineType == Dynamicweb.Ecommerce.Orders.OrderLineType.Discount; 326 bool isOrderAmountDiscount = isDiscount && !isProductIdOrNumber; 327 328 if (isOrderAmountDiscount) 329 { 330 <div class="d-flex justify-content-between"><span>@orderline.ProductName</span><span class="text-price">@orderline.TotalPriceWithProductDiscounts.Price.Formatted</span></div> 331 } 332 } 333 334 @* Shipping *@ 335 @if (!string.IsNullOrEmpty(Model.Cart.ShippingMethod)) 336 { 337 if (Model.Cart.ShippingFee.Price.Value != 0.0) 338 { 339 <div class="d-flex justify-content-between"> 340 <span>@Translate("Delivery")</span> 341 <span>@Model.Cart.ShippingFee.Price.Formatted</span> 342 </div> 343 } 344 } 345 else 346 { 347 <div class="d-flex justify-content-between"> 348 <span>@Translate("Delivery")</span> 349 <span>@Translate("Calculated in next step")</span> 350 </div> 351 } 352 353 @* Payment *@ 354 @if (!string.IsNullOrEmpty(Model.Cart.PaymentMethod)) 355 { 356 if (Model.Cart.PaymentFee.Price.Value != 0) 357 { 358 <div class="d-flex justify-content-between"> 359 <span>@Translate("Payment")</span> 360 <span class="text-price">@Model.Cart.PaymentFee.Price.Formatted</span> 361 </div> 362 } 363 } 364 else 365 { 366 <div class="d-flex justify-content-between"> 367 <span>@Translate("Payment")</span> 368 <span>@Translate("Calculated in next step")</span> 369 </div> 370 } 371 372 @* Taxes *@ 373 @if (order is object) 374 { 375 if (order.TotalTax.Price != 0) 376 { 377 <div class="d-flex justify-content-between"> 378 <span>@Translate("Sales tax")</span> 379 <span>@order.TotalTax.PriceFormatted</span> 380 </div> 381 } 382 } 383 </div> 384 <div class="fs-8 border-top pt-2 pt-lg-3"> 385 <div class="d-flex justify-content-between fs-6 fw-bold"> 386 <span>@Translate("Total")</span> 387 @if (renderVatMessage && !showPricesWithVat) 388 { 389 <span class="text-price text-end"> 390 <span class="fs-5 d-block">@Model.Cart.TotalPrice.Price.Formatted</span> 391 <span class="fs-8 fw-normal d-block">@Translate("Excl. VAT")</span> 392 </span> 393 } 394 else if (renderVatMessage) 395 { 396 <span class="text-price text-end"> 397 <span class="fs-5 d-block">@Model.Cart.TotalPrice.Price.Formatted</span> 398 <span class="fs-8 fw-normal d-block">@Translate("Incl. VAT")</span> 399 </span> 400 } 401 else 402 { 403 <span class="text-price fs-5">@Model.Cart.TotalPrice.Price.Formatted</span> 404 } 405 </div> 406 407 @if (renderVatMessage) 408 { 409 <div class="d-flex justify-content-between"><span>@Translate("VAT")</span><span class="text-price">@Model.Cart.TotalPrice.Vat.Formatted</span></div> 410 if (!showPricesWithVat) 411 { 412 <div class="d-flex justify-content-between"><span>@Translate("Total incl. VAT")</span><span class="text-price">@Model.Cart.TotalPrice.PriceWithVat.Formatted</span></div> 413 } 414 } 415 416 @if (Model.Cart.TotalDiscount.Price.Value != 0) 417 { 418 <div class="d-flex justify-content-between"><span>@Translate("Discount")</span><span class="text-price">@Model.Cart.TotalDiscount.Price.Formatted</span></div> 419 } 420 </div> 421 422 <div class="mb-3 d-flex flex-column justify-content-end gap-3"> 423 424 @if (isMiniCart) 425 { 426 @*Close offcanvas button*@ 427 <button type="button" class="btn btn-link text-decoration-none order-last" data-dw-button="link" data-bs-dismiss="offcanvas" aria-label="Close" id="ContinueShopping"> 428 <div class="d-flex align-items-center justify-content-center position-relative"> 429 <span class="icon-2 me-1 position-absolute position-lg-static start-0"> 430 @ReadFile(iconPath + "chevron-left.svg") 431 </span> 432 <span>@Translate("Continue shopping")</span> 433 </div> 434 </button> 435 436 if (!string.IsNullOrEmpty(cartUrl)) 437 { 438 @*Cart button*@ 439 <a href="@(cartUrl)@(orderContextQueryString)" class="btn btn-secondary" data-dw-button="secondary" id="GoToCartButton"> 440 <div class="d-flex align-items-center justify-content-center position-relative"> 441 <span>@Translate("Cart")</span> 442 <span class="icon-2 ms-1 position-absolute position-md-static end-0"> 443 @ReadFile(iconPath + "chevron-right.svg") 444 </span> 445 </div> 446 </a> 447 } 448 } 449 450 451 @*Checkout button*@ 452 <a href="@(checkoutUrl)@(orderContextQueryString)" class="btn btn-primary order-first" data-dw-button="primary" id="CartSummaryGoToCheckoutButton"> 453 <div class="d-flex align-items-center justify-content-center position-relative"> 454 <span>@Translate("Checkout")</span> 455 <span class="icon-2 ms-1 position-absolute position-md-static end-0"> 456 @ReadFile(iconPath + "chevron-right.svg") 457 </span> 458 </div> 459 </a> 460 461 @*Quote Checkout button*@ 462 @if (!string.IsNullOrEmpty(quoteCheckoutPageId) && Converter.ToInt32(quoteCheckoutPageId) > 0 && !anonymousUser) 463 { 464 <a href="Default.aspx?ID=@(quoteCheckoutPageId)@(orderContextQueryString)" class="btn btn-secondary" data-dw-button="secondary" id="RequestQuoteButton"> 465 <div class="d-flex align-items-center justify-content-center position-relative"> 466 <span>@Translate("Request quote")</span> 467 <span class="icon-2 ms-1 position-absolute position-lg-static end-0"> 468 @ReadFile(iconPath + "chevron-right.svg") 469 </span> 470 </div> 471 </a> 472 } 473 </div> 474 </div> 475 } 476 </div> 477 } 478 else 479 { 480 if (!isMiniCart) 481 { 482 <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="#CartSummary" aria-expanded="false" aria-controls="CartSummary"> 483 <div class="d-flex align-items-center justify-content-between"> 484 <span class="d-flex align-items-center"> 485 <span class="fs-7 lh-1"><span class="toggle-order-summary-text"></span> @Translate("order summary")</span> 486 </span> 487 <span class="icon-2 ms-2"> 488 @ReadFile(iconPath + "chevron-down.svg") 489 </span> 490 </div> 491 </button> 492 493 <style> 494 .toggle-order-summary .toggle-order-summary-text::after { 495 content: "@Translate("Show")"; 496 } 497 .toggle-order-summary[aria-expanded="true"] .toggle-order-summary-text::after { 498 content: "@Translate("Hide")"; 499 } 500 .toggle-order-summary[ aria-expanded="true" ] svg { 501 transform: rotate(-180deg); 502 } 503 </style> 504 } 505 506 <div class="d-lg-block h-lg-auto @(!isMiniCart ? "collapse" : null)" id="CartSummary"> 507 <div class="d-flex flex-column align-items-center justify-content-center min-vh-50 text-center opacity-50"> 508 <span class="icon-5"> 509 @ReadFile(iconPath + "cart-shopping.svg") 510 </span> 511 <span>@Translate("Your shopping cart is empty")</span> 512 <span>@Translate("Add products to see cart summary")</span> 513 </div> 514 </div> 515 } 516 </div> 517