Cravat CROATA
010200-004126
0,00 €
InStock
Error executing template "/Designs/Swift/Paragraph/DS_ProductAddToCart.cshtml" System.IO.IOException: The process cannot access the file 'C:\inetpub\wwwroot\DWProd_2025\Solutions\Swift_v1.21.0\Files\Templates\Designs\Swift\Translations.xml' because it is being used by another process. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) at Dynamicweb.Rendering.Translation.Source.WriteDocument(XmlDocument document) at Dynamicweb.Rendering.Translation.Source.Save() at Dynamicweb.Rendering.Translation.Source.UpdateTranslationSource(Source source, IEnumerable`1 newKeys, String designName, IEnumerable`1 cultures) at Dynamicweb.Rendering.Template.TranslateText(String text, String defaultValue, String cultureName) at Dynamicweb.Rendering.TemplateBase`1.Translate(String text) at CompiledRazorTemplates.Dynamic.RazorEngine_41f8cc09d18948e592b6741ba9e56884.Execute() in C:\inetpub\wwwroot\DWProd_2025\Solutions\Swift_v1.21.0\Files\Templates\Designs\Swift\Paragraph\DS_ProductAddToCart.cshtml:line 80 at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 @using Dynamicweb.Ecommerce.CustomerExperienceCenter.Favorites 4 5 6 @{ 7 ProductViewModel product = null; 8 if (Dynamicweb.Context.Current.Items.Contains("ProductDetails")) 9 { 10 product = (ProductViewModel)Dynamicweb.Context.Current.Items["ProductDetails"]; 11 } 12 else if (Pageview.Item["DummyProduct"] != null) 13 { 14 var pageViewModel = Dynamicweb.Frontend.ContentViewModelFactory.CreatePageInfoViewModel(Pageview.Page); 15 ProductListViewModel productList = pageViewModel.Item.GetValue("DummyProduct") != null ? pageViewModel.Item.GetValue("DummyProduct") as ProductListViewModel : new ProductListViewModel(); 16 17 if (productList?.Products is object) 18 { 19 product = productList.Products[0]; 20 } 21 } 22 23 string anonymousUsersLimitations = Pageview.AreaSettings.GetRawValueString("AnonymousUsers", ""); 24 bool anonymousUser = Pageview.User == null; 25 bool isErpConnectionDown = !Dynamicweb.Core.Converter.ToBoolean(Dynamicweb.Context.Current.Items["IsWebServiceConnectionAvailable"]); 26 bool hideAddToCart = anonymousUsersLimitations.Contains("cart") && anonymousUser || Pageview.AreaSettings.GetBoolean("ErpDownHideAddToCart") && isErpConnectionDown; 27 hideAddToCart = Pageview.IsVisualEditorMode ? false : hideAddToCart; 28 29 } 30 31 @if (product is object && !hideAddToCart) { 32 33 string horizontalAlign = Model.Item.GetRawValueString("HorizontalAlignment", ""); 34 horizontalAlign = horizontalAlign == "center" ? "justify-content-center" : horizontalAlign; 35 horizontalAlign = horizontalAlign == "end" ? "justify-content-end" : horizontalAlign; 36 horizontalAlign = horizontalAlign == "full" ? "" : horizontalAlign; 37 38 bool favoritesSelector = !string.IsNullOrEmpty(Model.Item.GetString("ShowAddToFavorites")) ? Model.Item.GetBoolean("ShowAddToFavorites") : false; 39 bool quantitySelector = !string.IsNullOrEmpty(Model.Item.GetString("ShowQuantitySelector")) ? Model.Item.GetBoolean("ShowQuantitySelector") : false; 40 bool unitsSelector = !string.IsNullOrEmpty(Model.Item.GetString("ShowUnitsSelector")) ? Model.Item.GetBoolean("ShowUnitsSelector") : false; 41 bool hideInventory = !string.IsNullOrEmpty(Model.Item.GetString("HideInventory")) ? Model.Item.GetBoolean("HideInventory") : false; 42 bool hideStockState = !string.IsNullOrEmpty(Model.Item.GetString("HideStockState")) ? Model.Item.GetBoolean("HideStockState") : false; 43 44 string buttonSize = Model.Item.GetRawValueString("ButtonSize", "regular"); 45 string inputSize = string.Empty; 46 47 switch (buttonSize) 48 { 49 case "small": 50 inputSize = " input-group-sm"; 51 buttonSize = " btn-sm"; 52 break; 53 case "regular": 54 buttonSize = string.Empty; 55 break; 56 case "large": 57 inputSize = " input-group-lg"; 58 buttonSize = " btn-lg"; 59 break; 60 } 61 62 string iconPath = "/Files/icons/"; 63 string url = "/Default.aspx?ID=" + (GetPageIdByNavigationTag("CartService")); 64 if (!url.Contains("LayoutTemplate")) 65 { 66 url += url.Contains("?") ? "&LayoutTemplate=Swift_MiniCart.cshtml" : "?LayoutTemplate=Swift_MiniCart.cshtml"; 67 } 68 69 string disableAddToCart = (product.StockLevel <= 0) ? "disabled" : ""; 70 bool isNeverOutOfStock = product.NeverOutOfstock; 71 disableAddToCart = isNeverOutOfStock ? "" : disableAddToCart; 72 73 string whenVariantsExist = Model.Item.GetRawValueString("WhenVariantsExist", "hide"); 74 75 string flexFill = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "flex-fill" : ""; 76 string fullWidth = Model.Item.GetRawValueString("HorizontalAlignment", "") == "full" ? "w-100" : ""; 77 string addToCartIcon = Model.Item.GetRawValueString("Icon", iconPath + "shopping-cart.svg"); 78 string addToCartLabel = !addToCartIcon.Contains("_none") ? "<span class=\"icon-2\">" + ReadFile(addToCartIcon) + "</span>" : ""; 79 addToCartLabel += !addToCartIcon.Contains("_none") && !Model.Item.GetBoolean("HideButtonText") ? " " : ""; 80 addToCartLabel += !Model.Item.GetBoolean("HideButtonText") ? Translate("Add to cart") : ""; 81 string imagePath = product?.DefaultImage?.Value ?? ""; 82 imagePath = Dynamicweb.Context.Current.Server.UrlEncode(imagePath); 83 string ratio = Model.Item.GetRawValueString("ImageAspectRatio", ""); 84 ratio = ratio != "0" ? ratio : ""; 85 string ratioCssClass = ratio != "" ? " ratio" : ""; 86 string ratioVariable = ratio != "" ? "--bs-aspect-ratio: " + ratio : ""; 87 88 string width = Model.Item.GetRawValueString("Width", "auto"); 89 int smallImageSize = 640; 90 int largeImageSize = width == "auto" ? 1280 : Convert.ToInt32(width); 91 string imagePathXs = "/Admin/Public/GetImage.ashx?width=" + smallImageSize + "&image=" + imagePath + "&format=webp"; 92 string imagePathS = "/Admin/Public/GetImage.ashx?width=" + largeImageSize + "&image=" + imagePath + "&format=webp"; 93 string imagePathFallBack = "/Admin/Public/GetImage.ashx?width=" + largeImageSize + "&image=" + imagePath + "&format=webp"; 94 95 96 if (product.VariantInfo.VariantInfo == null || whenVariantsExist == "disable") { 97 string unitId = !string.IsNullOrEmpty(Dynamicweb.Context.Current.Request.Form.Get("UnitId")) ? Dynamicweb.Context.Current.Request.Form.Get("UnitId") : product.DefaultUnitId; 98 if (string.IsNullOrEmpty(unitId) && product?.UnitOptions != null) { 99 if (product.UnitOptions.FirstOrDefault<UnitOptionViewModel>() != null) { 100 unitId = product.UnitOptions.FirstOrDefault<UnitOptionViewModel>().Id; 101 } 102 } 103 104 string minQty = product.PurchaseMinimumQuantity != 1 ? "min=\"" + product.PurchaseMinimumQuantity.ToString() + "\"" : "min=\"1\""; 105 string stepQty = product.PurchaseQuantityStep > 1 ? product.PurchaseQuantityStep.ToString() : "1"; 106 string valueQty = product.PurchaseMinimumQuantity > product.PurchaseQuantityStep ? product.PurchaseMinimumQuantity.ToString() : stepQty; 107 disableAddToCart = product.VariantInfo.VariantInfo != null && string.IsNullOrEmpty(product.VariantId) ? "disabled" : disableAddToCart; 108 109 var reserveMode = Dynamicweb.Ecommerce.Frontend.Cart.ProductReserve.Mode; 110 111 112 //IvanM 15.04.2024. - Adding default box to cart setup field 113 //------------------------------------------------------------------ 114 string DefaultBoxProductId = null; 115 Dynamicweb.Ecommerce.Products.Product boxProduct = null; 116 117 118 if (product.ProductFields.ContainsKey("DefaultBox")) 119 { 120 if (product.ProductFields["DefaultBox"] != null) 121 { 122 DefaultBoxProductId = product.ProductFields["DefaultBox"].Value.ToString(); 123 if (DefaultBoxProductId != null) 124 { 125 var dwProductServices = Dynamicweb.Ecommerce.Services.Products; 126 boxProduct = dwProductServices.GetProductById(DefaultBoxProductId, product.VariantId, product.LanguageId); 127 } 128 129 } 130 } 131 //------------------------------------------------------------------ 132 //IvanM 15.04.2024. - Adding default box to cart setup field -- end 133 134 if (unitsSelector && product.UnitOptions.Count > 0) { 135 <form method="post" action="/Default.aspx?ID=@(Pageview.Page.ID)&ProductId=@product.Id" id="UnitSelectorForm_@(product.Id)_@(product.VariantId)_@Model.ID"> 136 <input type="hidden" name="redirect" value="false"> 137 <input type="hidden" name="VariantID" value="@product.VariantId"> 138 <input type="hidden" name="UnitID" class="js-unit-id" value="@unitId"> 139 </form> 140 } 141 142 <div class="@DefaultBoxProductId d-flex @horizontalAlign @fullWidth js-input-group item_@Model.Item.SystemName.ToLower()"> 143 <form method="post" action="@url" class="@fullWidth" style="z-index: 1"> 144 <input type="hidden" name="redirect" value="false"> 145 <input type="hidden" name="ProductId" value="@product.Id"> 146 <input type="hidden" name="ProductName" value="@product.Name"> 147 <input type="hidden" name="ProductVariantName" value="@product.VariantName"> 148 <input type="hidden" name="ProductCurrency" value="@Dynamicweb.Ecommerce.Common.Context.Currency.Code"> 149 <input type="hidden" name="ProductPrice" value="@PriceViewModelExtensions.ToStringInvariant(product.Price)"> 150 <input type="hidden" name="ProductReferer" value="component_ProductAddToCart"> 151 <input type="hidden" name="cartcmd" value="add"> 152 @if(boxProduct!=null){ 153 <input type="hidden" name="EcomOrderLineFieldInput_LinkedItem" value="@boxProduct.Id"> 154 } 155 156 @if (reserveMode == Dynamicweb.Ecommerce.Frontend.Cart.ProductReserveMode.AddToCart) 157 { 158 <input type="hidden" name="GetReservedAmount" value="true"> 159 } 160 161 @if (!string.IsNullOrEmpty(product.VariantId)) 162 { 163 <input type="hidden" name="VariantId" value="@product.VariantId"> 164 } 165 166 @if (!product.NeverOutOfstock) 167 { 168 <input type="hidden" name="Stock" value="@product.StockLevel"> 169 170 <template class="js-out-of-stock-notice"> 171 <div class="modal-header"> 172 <h1 class="modal-title fs-5">@Translate("Stock limit")</h1> 173 <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> 174 </div> 175 <div class="modal-body"> 176 @Translate("There are not enough products in stock. The product might be sold out or discontinued. Please adjust the quantity.") 177 </div> 178 </template> 179 } 180 181 @if (stepQty != "1") 182 { 183 <template class="js-step-quantity-warning"> 184 <div class="modal-header"> 185 <h1 class="modal-title fs-5">@Translate("The quantity is not valid")</h1> 186 </div> 187 <div class="modal-body"> 188 @Translate("Please select a quantity that is dividable by") @stepQty 189 </div> 190 </template> 191 } 192 @if (product.PurchaseMinimumQuantity != 1) 193 { 194 <template class="js-min-quantity-warning"> 195 <div class="modal-header"> 196 <h1 class="modal-title fs-5">@Translate("The product could not be added to the cart")</h1> 197 </div> 198 <div class="modal-body"> 199 @Translate("The quantity is not valid. You must buy at least") @product.PurchaseMinimumQuantity 200 </div> 201 </template> 202 } 203 204 @if (quantitySelector || (!anonymousUser && product.VariantInfo.VariantInfo != null) || (!anonymousUser && favoritesSelector)) 205 { 206 <input type="hidden" id="Unit_@(product.Id)_@product.VariantId" name="UnitID" value="@unitId" /> 207 } 208 209 <div class="d-flex flex-row w-100"> 210 @if (!anonymousUser && favoritesSelector) 211 { 212 @RenderPartial("Components/ToggleFavorite.cshtml", product) 213 } 214 215 @if (!quantitySelector) 216 { 217 <input id="Quantity_@(product.Id)_@product.VariantId" name="Quantity" value="@valueQty" type="hidden" @disableAddToCart> 218 } 219 220 <div class="input-group input-primary-button-group flex-nowrap@(inputSize)"> 221 @if(product.StockLevel>0){ 222 if (quantitySelector) 223 { 224 <input id="Quantity_@(product.Id)_@product.VariantId" name="Quantity" value="@valueQty" step="@stepQty" @minQty class="form-control swift_quantity-field AddToCardButton" style="min-width: 60px; max-width: 100px; z-index: 1" type="number" onchange="swift.Cart.UpdateOnEnterKey(event)" onkeyup="swift.Cart.UpdateOnEnterKey(event)" @disableAddToCart> 225 } 226 227 if (unitsSelector && product.UnitOptions.Count > 0) 228 { 229 string selectedUnitName = !string.IsNullOrEmpty(unitId) && product?.UnitOptions != null ? unitId : product.UnitOptions.FirstOrDefault<UnitOptionViewModel>().Name; 230 231 foreach (var unitOption in product.UnitOptions) 232 { 233 if (unitOption.Id == unitId) 234 { 235 selectedUnitName = unitOption.Name; 236 } 237 } 238 239 <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false"> 240 @selectedUnitName 241 </button> 242 <ul class="dropdown-menu swift_unit-field"> 243 @foreach (var unitOption in product.UnitOptions) 244 { 245 var selectedUnit = unitOption.Id == unitId ? "selected" : ""; 246 247 <li> 248 <button type="button" class="btn dropdown-item" data-value="@unitOption.Id" onclick="document.querySelector('#UnitSelectorForm_@(product.Id)_@(product.VariantId)_@Model.ID').querySelector('.js-unit-id').value = this.getAttribute('data-value'); 249 document.querySelector('#Unit_@(product.Id)_@product.VariantId').value = this.getAttribute('data-value'); 250 swift.PageUpdater.Update(document.querySelector('#UnitSelectorForm_@(product.Id)_@(product.VariantId)_@Model.ID'))"> 251 <span>@unitOption.Name</span> 252 <span> 253 @if (unitOption.StockLevel > 0) 254 { 255 if (!Model.Item.GetBoolean("HideInventory")) 256 { 257 <span class="small text-success">@unitOption.StockLevel @Translate("In stock")</span> 258 } 259 else 260 { 261 <span class="small text-success">@Translate("In stock")</span> 262 } 263 } 264 else 265 { 266 <span class="small text-danger">@Translate("Out of Stock")</span> 267 } 268 </span> 269 </button> 270 </li> 271 } 272 </ul> 273 } 274 275 <button type="button" onclick="swift.Cart.Update(event); AddToCartInfo()" class="btn btn-secondary @(buttonSize) @flexFill js-add-to-cart-button" style="white-space: nowrap" @disableAddToCart title="@Translate("Add to cart")" id="AddToCartButton@(product.Id)_@Pageview.CurrentParagraph.ID"> 276 @if (!Model.Item.GetBoolean("HideButtonText")) 277 { 278 <span class="text-nowrap d-flex align-items-center justify-content-center gap-2"> 279 @addToCartLabel 280 </span> 281 } 282 else 283 { 284 @addToCartLabel 285 } 286 </button> 287 <div aria-live="polite" aria-atomic="true"> 288 <div class="position-fixed bottom-0 end-0 p-3" style="z-index: 11"> 289 <div id="AddToCartInfo" class="toast hide" role="alert" aria-live="assertive" aria-atomic="true" autohide="true"> 290 <div class="toast-header"> 291 <strong class="me-auto">@Translate("Product is added to the cart")</strong> 292 <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button> 293 </div> 294 <div class="toast-body d-flex gap-3"> 295 <div id="AddToCartInfoNotificationToast_Image"><img src="@imagePathXs" style="width:100px;"></div> 296 <div id="AddToCartInfoNotificationToast_Text" >@(product.Name)<br> 297 @(product.Id)</div> 298 </div> 299 </div> 300 </div> 301 </div> 302 <script> 303 function AddToCartInfo() { 304 document.getElementById("AddToCartInfo").classList.add("show"); 305 setTimeout(function() { 306 document.getElementById("AddToCartInfo").classList.remove("show"); 307 }, 3000); 308 } 309 </script> 310 311 312 313 314 315 } else { 316 317 <div class="productNotAvailable text-nowrap d-flex align-items-center justify-content-center gap-2">@Translate("This product is currently not available.")</div> 318 319 } 320 </div> 321 </div> 322 </form> 323 </div> 324 } else if (whenVariantsExist == "modal") { 325 string buttonText = Translate("Select"); 326 327 string variantSelectorServicePageId = !string.IsNullOrEmpty(Model.Item.GetString("VariantSelectorServicePageId")) ? Model.Item.GetLink("VariantSelectorServicePageId").PageId.ToString() : ""; 328 variantSelectorServicePageId = variantSelectorServicePageId != "" ? variantSelectorServicePageId : GetPageIdByNavigationTag("VariantSelectorService").ToString(); 329 330 <div class="d-flex @horizontalAlign w-100 item_@Model.Item.SystemName.ToLower()"> 331 @if (!anonymousUser && favoritesSelector) 332 { 333 @RenderPartial("Components/ToggleFavorite.cshtml", product) 334 } 335 <form action="/Default.aspx?ID=@variantSelectorServicePageId" data-response-target-element="DynamicModalContent" data-preloader="inline" style="z-index: 1" class="@fullWidth"> 336 <input type="hidden" name="ProductID" value="@product.Id"> 337 <input type="hidden" name="QuantitySelector" value="@quantitySelector.ToString()"> 338 <input type="hidden" name="HideInventory" value="@hideInventory.ToString()"> 339 <input type="hidden" name="HideStockState" value="@hideStockState.ToString()"> 340 <input type="hidden" name="VariantSelectorServicePage" value="@variantSelectorServicePageId"> 341 <input type="hidden" name="ViewType" value="ModalContent"> 342 <button type="button" onclick="swift.PageUpdater.Update(event)" class="btn btn-primary@(buttonSize) @fullWidth" title="@Translate("Select")" data-bs-toggle="modal" data-bs-target="#DynamicModal" id="OpenVariantSelectorModal@(product.Id)_@Pageview.CurrentParagraph.ID">@buttonText</button> 343 </form> 344 </div> 345 } 346 } else if (Pageview.IsVisualEditorMode) { 347 <div class="alert alert-dark m-0">@Translate("No products available")</div> 348 }
+ PRODUCT INFO
Design: Classic
Motif: Dots
Colour: Wine red
Product: Cravat
Size: Standard 8 cm
Brand: CROATA
Material composition : Silk 100%
+ FABRIC AND CARE
Finishing: Regular
Maintenance: Do not wash in washing machine
Producer: Potomac Grupa d.o.o., Trg kralja Tomislava 4, 10000 Zagreb, RH
Production technique: Jacquard
Pattern: All over
Material composition : Silk 100%
Material type: Jacquard fabric