Error executing template "Designs/RTC/eCom/Product/ProductDetail.cshtml"
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
   at System.String.Substring(Int32 startIndex, Int32 length)
   at CompiledRazorTemplates.Dynamic.RazorEngine_32e33f128e5147bea740bb6162bee019.Execute() in D:\dynamicweb.net\Solutions\Altex Holding\altexrtc.cloud.dynamicweb-cms.com\Files\Templates\Designs\RTC\eCom\Product\ProductDetail.cshtml:line 300
   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 RazorTemplateBase<RazorTemplateModel<Template>> 2 @using Dynamicweb.Rendering; 3 @using System; 4 @using System.IO; 5 @using System.Web; 6 @using System.Text; 7 @using System.Collections.Generic; 8 @using System.Text.RegularExpressions; 9 10 @using Dynamicweb.Ecommerce.Products; 11 @using Dynamicweb.Modules.UserManagement; 12 @using System.Web; 13 @using System; 14 15 16 @{ 17 18 var currentUserAccess = Dynamicweb.Security.UserManagement.User.GetCurrentExtranetUser(); 19 var user = currentUserAccess; 20 var currentUser = currentUserAccess; 21 bool userIsLoggedIn = currentUser != null; // Dynamicweb.Security.UserManagement.User.IsExtranetUserLoggedIn(); 22 23 string customerNo = userIsLoggedIn && currentUser.CustomerNumber != null ? currentUser.CustomerNumber.ToString() : null; 24 25 int todayDay = (int)DateTime.Now.Day; 26 string fakecustomer = "xxx"; 27 bool commandIsEditted = !string.IsNullOrEmpty(GetString("EditedFromOrderId.Clean")) ? true : false; 28 var cartURL = ""; 29 if(commandIsEditted) { 30 cartURL = "/Default.aspx?ID=78"; 31 } else { 32 cartURL = "/Default.aspx?ID=37"; 33 } 34 35 if(!System.Web.HttpContext.Current.Request.Cookies.AllKeys.Contains("showMaintenanceBanner")) { 36 System.Web.HttpContext.Current.Response.Cookies["showMaintenanceBanner"].Value = "False"; 37 } 38 39 if(!userIsLoggedIn) { 40 System.Web.HttpContext.Current.Response.Cookies["showMaintenanceBanner"].Value = "False"; 41 } 42 43 44 bool bannerMentenanta = System.Web.HttpContext.Current.Request.Cookies["showMaintenanceBanner"].Value == "True" ? true : false; 45 46 string bannerMentenantaClass = "banner-mentenanta"; 47 if(bannerMentenanta) { 48 bannerMentenantaClass = "banner-mentenanta hidden"; 49 } 50 51 } 52 53 @{ string designName = GetString("Template:DesignBaseUrl").Replace("/Files/Templates/Designs/", "").Replace("/", ""); }@functions{ 54 public static string GetImage(string sourceString, int imageWidth, int imageHeight, int imageWidthTablet = 0, int imageHeightTablet = 0, int imageWidthMobile = 0, int imageHeightMobile = 0, string imageFormat = "png", int imageCompression = 0, int imageCrop = 5, string background = "", string designName = "CRS") 55 { 56 Dynamicweb.Frontend.PageView currentPageview = Dynamicweb.Frontend.PageView.Current(); 57 background ="#ffffff"; 58 string currDevice = currentPageview.Device.ToString(), 59 alternativeImage = currentPageview.Area.Item["NoImage"] != null ? currentPageview.Area.Item["NoImage"].ToString() : "/Files/Images/Products/Large/no-image-available_inter.png", 60 widthString = "", 61 heightString = "", 62 //getImageFormat = "&amp;Format=jpg", 63 getImageFormat = "&amp;Format="+ imageFormat, 64 getImageCompression = imageCompression != 0 ? "&amp;Compression=" + imageCompression : "", 65 bgColor = !string.IsNullOrEmpty(background) ? "&amp;background=" + background : ""; 66 int getImageWidth = imageWidth != 0 ? imageWidth : 0, 67 getImageHeight = imageHeight != 0 ? imageHeight : 0; 68 69 //if (currDevice == Dynamicweb.Frontend.PageView.DeviceType.Tablet.ToString()) 70 if (currDevice == Dynamicweb.Frontend.Devices.DeviceType.Tablet.ToString()) 71 { 72 getImageWidth = imageWidthTablet != 0 ? imageWidthTablet : getImageWidth; 73 getImageHeight = imageHeightTablet != 0 ? imageHeightTablet : getImageHeight; 74 } 75 //else if (currDevice == Dynamicweb.Frontend.PageView.DeviceType.Mobile.ToString()) 76 else if (currDevice == Dynamicweb.Frontend.Devices.DeviceType.Mobile.ToString()) 77 { 78 getImageWidth = imageWidthMobile != 0 ? imageWidthMobile : getImageWidth; 79 getImageHeight = imageHeightMobile != 0 ? imageHeightMobile : getImageHeight; 80 } 81 82 if (getImageWidth != 0) 83 { 84 widthString = "&amp;Width=" + getImageWidth; 85 } 86 if (getImageHeight != 0) 87 { 88 heightString = "&amp;Height=" + getImageHeight; 89 } 90 91 string output = "/Admin/Public/GetImage.ashx?Image=" + sourceString + widthString + heightString + "&amp;altFmImage_path=" + alternativeImage + getImageFormat + getImageCompression + "&amp;Crop=" + imageCrop + bgColor; 92 return output; 93 } 94 } 95 @* getImageFormat = imageFormat != "jpg" ? "&amp;Format=" + imageFormat : "", *@ 96 @inherits RazorTemplateBase<RazorTemplateModel<Template>> 97 @using Dynamicweb.Rendering; 98 99 @functions{ 100 private string GetImagePathUrl(string small, string medium, string large, string pattern) 101 { 102 string imagePath; 103 104 if (!string.IsNullOrEmpty(small)) 105 imagePath = small; 106 else if (!string.IsNullOrEmpty(medium)) 107 imagePath = medium; 108 else if (!string.IsNullOrEmpty(large)) 109 imagePath = large; 110 else 111 imagePath = pattern; 112 113 return imagePath; 114 } 115 } 116 117 @helper GetPriceMain(string price) { 118 @price.Substring(0,price.Length - 3); 119 } 120 @helper GetPriceUnits(string price) { 121 @price.Substring(price.Length - 3,3); 122 } 123 124 @{ 125 126 var lincu = GetString("Ecom:Product.Link1"); 127 var stopOrder = false; 128 var variantLoop = GetLoop("VariantCombinations"); 129 var productID = GetString("Ecom:Product.ID"); 130 string productVariantID = GetString("Ecom:Product.VariantID"); 131 string productVariantText = GetString("Ecom:Product.VariantText"); 132 bool isVariant = !string.IsNullOrEmpty(productVariantID)? true : false; 133 var productName = GetString("Ecom:Product.Name"); 134 var productCode = GetString("Ecom:Product:Field.Cod"); 135 var productPrice = GetString("Ecom:Product.Price.PriceWithVAT"); 136 var productOnlinePrice = GetString("Ecom:Product:Field.OnlinePrice"); 137 var productCurrency = GetString("Ecom:Product.Price.Currency.Symbol"); 138 var productStockText = GetString("Ecom:Product:Stock.Text"); 139 var productDiscount = GetString("Ecom:Product.Discount.TotalAmount.PriceWithoutVATFormatted");//GetString("Ecom:Product.Discount.Price.VATPercentFormatted"); 140 var productDiscountValue = GetDouble("Ecom:Product.Discount.TotalAmount.Price.Value");// GetString("Ecom:Product.Discount.Price.VATPercent"); 141 142 143 var productStock = GetString("Ecom:Product.Stock"); 144 var productMainImage = GetString("Ecom:Product.ImageLarge.Clean"); 145 var productVideo1 = GetString("Ecom:Product:Field.VideoLink1.Value"); 146 var productVideo2 = GetString("Ecom:Product:Field.VideoLink2.Value"); 147 var productCurrentUM = GetString("Ecom:Product:Field.UM"); 148 var productDescription = GetValue("Ecom:Product.LongDescription"); 149 var productLoyalityPoints = GetString("Ecom:Product.PointPrice"); 150 var productManufacturerId= GetString("Ecom:Manufacturer.ID"); 151 var productManufacturerName = GetString("Ecom:Manufacturer.Name"); 152 var productManufacturerImage = "/Files/Images/Products/logo/" + productManufacturerName +".jpg"; 153 var productManufacturerLink = "/Default.aspx?ID=73&Brand=" + productManufacturerId; 154 string ProductReferenceId = productCode; 155 string imagesFolder = "/Files/Images/Products/Large/"; 156 string imagePattern = imagesFolder + ProductReferenceId + ".jpg"; 157 string productImage = GetImagePathUrl(GetString("Ecom:Product.ImageSmall.Clean"), GetString("Ecom:Product.ImageMedium.Clean"), GetString("Ecom:Product.ImageLarge.Clean"), imagePattern); 158 string productGetImage = GetImage(productImage, 0, 600); 159 string productGetImageZoom = GetImage(productImage, 0, 1200,0,0,0,0,"jpg"); 160 string productGetImageMica = GetImage(productImage, 0, 105); 161 string pattern = ProductReferenceId + "_*.jpg"; 162 var bonus = GetString("Ecom:Product:Field.Bonus"); 163 var stocfurnizor = GetString("Ecom:Product:Field.stocfurnizor"); 164 var InfoAmbalare = GetString("Ecom:Product:Field.InfoAmbalare"); 165 var testeaza = GetString("Ecom:Product:Field.Testeaza"); 166 string titleKey = "title", 167 title = "", 168 imageKey = "image", 169 fileKey = "file", 170 image = ""; 171 var groupId = GetString("Ecom:Group.ID"); 172 if(GetBoolean("Ecom:Product:Field.ProdusDeComandaSpeciala") || GetString("Ecom:Product:Field.ItemsCustClassification") == "E"){ 173 if(productCode == "xFW122201" || productCode == "xFW222202" || productCode == "xFW122211" || productCode == "xFW222212" || productCode == "xFW122221" || productCode == "xFW222222") 174 {productStockText = Translate("StocFurnizor", "Stoc Furnizor");} 175 else { 176 productStockText = Translate("ComandaSpeciala", "Comanda speciala"); 177 if((productCode.Substring(0, 2) == "AX" || GetString("Ecom:Product:Field.ItemsCustClassification") == "E") && stocfurnizor == "99999") { 178 productStockText =Translate("Solicita Informatii", "Solicita Informatii"); 179 } 180 if(productCode.Substring(0, 2) == "AX" && stocfurnizor == "0") { 181 productStockText =Translate("Stoc Epuizat", "Stoc Epuizat"); 182 } 183 if(productCode.Substring(0, 2) == "AX" && stocfurnizor != "0" && stocfurnizor != "99999") { 184 productStockText = Translate("InStocFurnizor", "In Stoc Furnizor"); 185 } 186 187 if(productCode.Substring(0, 2) != "AX" && stocfurnizor != "0" && stocfurnizor != "99999" && GetString("Ecom:Product:Field.ItemsCustClassification") == "E") { 188 productStockText = Translate("InStocFurnizor", "In Stoc Furnizor"); 189 } 190 if(productCode.Substring(0, 2) != "AX" && stocfurnizor == "0" && stocfurnizor != "99999" && GetString("Ecom:Product:Field.ItemsCustClassification") == "E") { 191 productStockText =Translate("Stoc Epuizat", "Stoc Epuizat"); 192 } 193 194 195 } 196 197 } 198 if(GetBoolean("Ecom:Product:Field.fidelizare")) { 199 var yfidelizare = "1"; 200 } 201 else { 202 var yfidelizare = "2"; 203 } 204 205 206 List<LoopItem> loopVariantCombinations = variantLoop, 207 loopVariantGroups = GetLoop("VariantGroups"), 208 loopBOMProducts = GetLoop("BOMConfigurators"), 209 loopProdPrices = GetLoop("Product.Prices"), 210 loopDetails = GetLoop("Details"); 211 212 bool hasVariants = variantLoop.Count() > 1 ? true : false; 213 214 //if(!string.IsNullOrEmpty(currentUser.CustomerNumber)) { 215 if(userIsLoggedIn) { 216 productPrice = GetString("Ecom:Product.Price.PriceWithoutVAT"); 217 } 218 var found = 0; 219 foreach(var variant in variantLoop) { 220 221 var variantStock = variant.GetString("Ecom:Product.Stock"); 222 if (variantStock != "0") { 223 found++; 224 } 225 } 226 if (found == 0 ) { 227 stopOrder = true; 228 } 229 230 bool PriceUnavailable = productPrice == "0,00"; 231 if(PriceUnavailable) { 232 233 productStockText = Translate("ProdusMomentanIndisponibil","Momentan indisponibil"); 234 } 235 236 237 List<Dictionary<string, string>> imagesList = new List<Dictionary<string, string>>(); 238 string folderPath = Path.GetDirectoryName(HttpContext.Current.Server.MapPath("/Files/Images/Products/Large/")); 239 240 if (Directory.Exists(folderPath)) 241 { 242 string temp = @"\"; 243 foreach (string file in Directory.GetFiles(folderPath, pattern)) 244 { 245 Dictionary<string, string> dct_image = new Dictionary<string, string>(); 246 image = "/Files/Images/Products/Large/" + file.Substring((file.LastIndexOf(@temp) + 1), (file.Length - file.LastIndexOf(@temp) - 1)); 247 string metafield = "title"; 248 var metadata = Dynamicweb.Content.Files.Metadata.EditorFactory.GetMetadataForFile(image); 249 title = metadata != null ? metadata.GetValue(metafield).ToString() : productName; 250 dct_image.Add(titleKey, title); 251 dct_image.Add(imageKey, image); 252 imagesList.Add(dct_image); 253 } 254 } 255 256 257 258 259 } 260 261 262 263 <div class="product clearfix" data-compare-category='@groupId'> 264 265 266 267 <div class="col-sm-6"> 268 269 270 <div id="mainImage"> 271 @if(GetBoolean("Ecom:Product:Field.Nou.Value") && !GetBoolean("Ecom:Product:Field.Lichidare.Value")) { 272 273 <span class="newproductdetail">Nou</span> 274 275 } else if(!GetBoolean("Ecom:Product:Field.Nou.Value") && GetBoolean("Ecom:Product:Field.Lichidare.Value")){ 276 277 <span class="lichidareProductDetail">Lichidare</span> 278 279 } 280 281 else if(bonus != "" && bonus != " "){ 282 if(bonus == "666") { 283 <span class="bonusProductDetail" style="background-color: none;"><a href="#"><img src='@("/Files/Images/badges/bonus-1-6.png")'></a></span> 284 } 285 else { 286 <span class="bonusProductDetail" style="background-color: none; top: 0%;"><a href="http://rtc.ro/Content/Newsletter/Leitz-Culori-WOW/index.html"><img src='@("/Files/Images/badges/" + @bonus + ".png")'></a></span> 287 } 288 } 289 290 291 292 @if(testeaza != "" && testeaza != " "){ 293 if(testeaza == "1") { 294 <span class="rtcProductDetail" style="background-color: none;"><a href="https://www.rtc.ro/testeaza-gratuit-produsele-rtc?idp=@productCode"><img src='@("/Files/Images/badges/testeaza.png")'></a></span> 295 } 296 297 } 298 @if(GetBoolean("Ecom:Product:Field.fidelizare") && !GetBoolean("Ecom:Product:Field.Lichidare.Value")) { 299 300 if(productCode.Substring(0, 4) == "zSL11" || productCode.Substring(0, 4) == "zSL12" || productCode.Substring(0, 4) == "zSL80" || productCode.Substring(0, 5) == "zSL549") { 301 <span class="bonusProductDetail xfidelizare" style="background-color: none; display: none;"><a href="https://www.rtc.ro/cauta?q=rtcstars"><img src='@("/Files/Images/badges/rtcstarsx2.png")'></a></span> 302 } 303 else { 304 305 <span class="bonusProductDetail xfidelizare" style="background-color: none; display: none;"><a href="https://www.rtc.ro/cauta?q=rtcstars"><img src='@("/Files/Images/badges/rtcstars.png")'></a></span> 306 } 307 } 308 <div class="main-image"> 309 <img src="@productGetImage" alt="@productName" title="@productName" class="selectedImage" /> 310 </div> 311 </div> 312 313 <div class="thumbs row"> 314 315 316 @if(imagesList.Count() > 0) { 317 <a href="@productGetImage" class="swipebox hidden" title="@productName" id="galeriz">Deschide galeria </a> 318 <div class="item col-sm-4 col-xs-4"> 319 <a href="@productGetImageZoom" title="" data-type='main' class="active"> 320 <img data-image="@productGetImage" data-image-big="@productGetImageZoom" data-image-thumb="@productGetImageMica" class="img-responsive" src="@productGetImageZoom" title="productName" alt="@productName" /> 321 <span class="shadow"></span> 322 </a> 323 324 <a href="@productGetImageZoom" title="@productName" data-type='main' class="swipebox hidden"> 325 <img data-image="@productGetImage" data-image-big="@productGetImageZoom" data-image-thumb="@productGetImageMica" class="img-responsive" src="@productGetImageZoom" title="productName" alt="@productName" /> 326 327 </a> 328 329 </div> 330 foreach (System.Collections.Generic.Dictionary<String, String> imageStr in imagesList) 331 { 332 bool isAnImage = imageStr["image"].ToString().Contains(".jpg"); 333 string getimageImg = GetImage(imageStr["image"].ToString(), 0, 105), 334 getimageDataImg = isAnImage ? GetImage(imageStr["image"].ToString(), 600, 600) : imageStr["image"].ToString(), 335 getimageDataImgBig = isAnImage ? GetImage(imageStr["image"].ToString(), 1200, 1200, 0, 0, 0, 0, "jpg") : imageStr["image"].ToString(), 336 liClass = imagesList.IndexOf(imageStr) == 0 ? "active" : ""; 337 <div class="item col-sm-4 col-xs-4"> 338 <a href="@getimageDataImgBig#" title="" data-type='@imageStr["image"].ToString().Substring(imageStr["image"].ToString().LastIndexOf('/') + 1).Replace(productCode, "").Replace(".jpg","").Replace(".mp4","")' class="@liClass"> 339 <img data-image="@getimageDataImg" data-image-big="@getimageDataImgBig" data-image-thumb="@getimageImg" class="img-responsive" src="@getimageDataImgBig" title="@imageStr["title"]" alt="@imageStr["title"]" /> 340 <span class="shadow"></span> 341 </a> 342 </div> 343 344 <div class="item col-sm-4 col-xs-4 hidden"> 345 <a href="@getimageDataImgBig" title="@imageStr["title"]" data-type='@imageStr["image"].ToString().Substring(imageStr["image"].ToString().LastIndexOf('/') + 1).Replace(productCode, "").Replace(".jpg","").Replace(".mp4","")' class="@liClass swipebox"> 346 <img data-image="@getimageDataImg" data-image-big="@getimageDataImgBig" data-image-thumb="@getimageImg" class="img-responsive" src="@getimageDataImgBig" title="@imageStr["title"]" alt="@imageStr["title"]" /> 347 <span class="shadow"></span> 348 </a> 349 </div> 350 } 351 } 352 else { 353 <a href="@productGetImage" class="swipebox hidden" title="@productName" id="galeriz">Deschide galeria </a> 354 } 355 356 357 @foreach(var thumbs in loopDetails) { 358 <div class="item col-sm-4 col-xs-4"> 359 360 @if(!string.IsNullOrEmpty(thumbs.GetString("Ecom:Product:Detail.Image.Clean"))) { 361 <a href="#" title=""> 362 <img src='@thumbs.GetString("Ecom:Product:Detail.Image.Clean")' alt=""> 363 <span class="shadow"></span> 364 </a> 365 } else { 366 <a href="#" title=""> 367 <img src="/Files/Images/Products/Large/no-image-available_inter.png" /> 368 369 <span class="shadow"></span> 370 </a> 371 } 372 </div> 373 } 374 @if (!string.IsNullOrEmpty(productVideo1)) { 375 var productVideo1Link = productVideo1.Substring(17,GetString("Ecom:Product:Field.VideoLink1.Value").Length - 17); 376 <div class="col-xs-12"> 377 <iframe src="https://www.youtube.com/embed/@productVideo1Link?rel=0" frameborder="0" allowfullscreen style="width: 100%; height: 315px;"></iframe> 378 </div> 379 } 380 @if (!string.IsNullOrEmpty(productVideo2)) { 381 var productVideo2Link = productVideo2.Substring(17,GetString("Ecom:Product:Field.VideoLink2.Value").Length - 17); 382 <div class="col-xs-12"> 383 <iframe src="https://www.youtube.com/embed/@productVideo2Link?rel=0" frameborder="0" allowfullscreen style="width: 100%; height: 315px;"></iframe> 384 </div> 385 } 386 387 </div> 388 </div> 389 <div class="col-sm-6 detail"> 390 <div class="breadcrumbs col-xs-12 noPadding"> 391 <ul id="breadcrumbs" vocab="http://schema.org/" typeof="BreadcrumbList"> 392 <li property="itemListElement" typeof="ListItem"><a href='/' title="Acasa" property="item" typeof="WebPage"><span property="name">Acasa</span></a></li> 393 394 @RenderNavigation(new { 395 template = "Breadcrumb.xslt", 396 expandmode = "pathonly", 397 sitemapmode="true", 398 id = "NavBreadcrumb" 399 }) 400 </ul> 401 </div> 402 403 <h1 class="title">@productName</h1> 404 <p class="code">@Translate("Product Code", "cod"): @productCode</p> 405 406 407 @if(userIsLoggedIn) { 408 if(GetBoolean("Ecom:Product.IsProductInFavoriteList")){ 409 <p class="favorite"><a href='@GetValue("Ecom:Product.RemoveFromFavorites")'><i class="fa fa-heart" aria-hidden="true"></i> Sterge produsul din lista de favorite</a></p> 410 }else{ 411 <p class="favorite"><a href='@GetValue("Ecom:Product.AddToFavorites")'><i class="fa fa-heart-o" aria-hidden="true"></i> Adauga produsul in lista de favorite</a></p> 412 } 413 } 414 415 416 417 418 419 <div class="addthis_sharing_toolbox"></div> 420 421 422 <div class="row" style="position: relative;"> 423 <div class="col-sm-12"> 424 @if(userIsLoggedIn) { 425 if (!PriceUnavailable) { 426 <p class="price">@GetPriceMain(productPrice)<sup>@GetPriceUnits(productPrice)</sup><span style="font-size: 22px">@productCurrency</span> <span style="font-size: 14px">(fara TVA)</span></p> 427 if (productOnlinePrice != "0,00") { 428 <p class="old-price">@GetPriceMain(productOnlinePrice)<sup>@GetPriceUnits(productOnlinePrice)</sup> <span>@productCurrency</span> (fara TVA)</p> 429 } 430 431 if (productDiscountValue > 9) { 432 <p class="discount">@productDiscount @Translate("Product Discount","discount")</p> 433 434 } 435 } 436 } 437 438 <div class="variant"> 439 @* @if (stopOrder == false) { *@ 440 <div class="btn-group"> 441 @*if(hasVariants && !isVariant) { 442 443 <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 444 <span><i class="fa fa-angle-down"></i></span> 445 </button> 446 <ul class="dropdown-menu"> 447 @foreach(var variant in variantLoop) { 448 var link = variant.GetString("Ecom:Product.LinkGroup.Clean") + "&VariantID=" + variant.GetString("Ecom:Product.VariantID"); 449 var variantStock = variant.GetString("Ecom:Product.Stock"); 450 <li><a href='@link'>@variant.GetString("Ecom:VariantCombination.VariantText")</a></li> 451 } 452 </ul> 453 }else{ 454 <button type="button" class="btn btn-rtc" data-select='@GetString("Ecom:Product.SelectedVariantComboName")'>@productVariantText</button> 455 } 456 *@ 457 458 459 460 461 @*if (!string.IsNullOrEmpty(GetString("Ecom:Product.VariantID.Extended"))) { 462 <button type="button" class="btn btn-rtc" data-select='@GetString("Ecom:Product.SelectedVariantComboName")'>@GetString("Ecom:Product.SelectedVariantComboName")</button> 463 } else { 464 <button type="button" class="btn btn-rtc" data-select=""> @Translate("alege unitatea de vanzare","alege unitatea de vanzare")</button> 465 } *@ 466 @if(currentUser != null && !string.IsNullOrEmpty(currentUser.CustomerNumber)) { 467 if(hasVariants && variantLoop.Count() >1) { 468 469 if(isVariant){ 470 <button type="button" class="btn btn-rtc" data-select="">@productVariantText</button> 471 }else{ 472 <button type="button" class="btn btn-rtc" data-select="">@Translate("alege unitatea de vanzare","alege unitatea de vanzare")</button> 473 } 474 <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> 475 <span><i class="fa fa-angle-down"></i></span> 476 </button> 477 <ul class="dropdown-menu"> 478 @foreach(var variant in variantLoop) { 479 var link = variant.GetString("Ecom:Product.LinkGroup.Clean") + "&VariantID=" + variant.GetString("Ecom:Product.VariantID"); 480 var variantStock = variant.GetString("Ecom:Product.Stock"); 481 <li><a href='@link'>@variant.GetString("Ecom:VariantCombination.VariantText")</a></li> 482 } 483 </ul> 484 } else { 485 <button type="button" class="btn btn-rtc" data-select='@productVariantText'>@productVariantText</button> 486 } 487 } else { 488 <p> Pentru pret si disponibilitate stoc, autentifica-te sau solicita cont</p> 489 <a href="/Default.aspx?ID=7" class="button-login">@Translate("Login", "Login")</a> 490 } 491 </div> 492 @* } *@ 493 494 </div> 495 </div> 496 497 <div class="col-sm-12"> 498 @if(userIsLoggedIn) { 499 if (!PriceUnavailable) { 500 <form name="order" method="post" id="product-page-order" > 501 @if (!string.IsNullOrEmpty(productStockText)) 502 { 503 if(@productStockText == "Momentan indisponibil") 504 { 505 if(GetBoolean("Ecom:Product:Field.fidelizare")) 506 { 507 <p style = "color: red; display: none; font-size: 15px;" class="xfidelizare"> 508 @{ 509 double puncte = Convert.ToDouble(productPrice); 510 } 511 512 @if(GetBoolean("Ecom:Product:Field.Lichidare.Value") || productCode.Substring(0, 4) == "zSL11" || productCode == "FK024" || productCode == "FK183" || productCode == "FK424" || productCode == "LX810136" || productCode == "LX813900" || productCode == "LX814000" || productCode == "LX815000" || productCode == "LX818700" || productCode == "LX818800" || productCode == "LX819930" || productCode == "LX830002" || productCode == "LX830003" || productCode == "LX830004" || productCode == "LX830005" || productCode == "LX830006" || productCode == "LX830007" || productCode == "LX830008" || productCode == "LX830009" || productCode == "LX830010" || productCode == "LX850000" || productCode == "LX851000" || productCode == "MLTMB2236I") { 513 <span style="color: black; font-weight: bold">2XStele &raquo; </span><b>Primesti @(Math.Round(puncte, 0)*2) </b><b>stele pentru acest produs</b> 514 } 515 else { 516 <b>Primesti @(Math.Round(puncte, 0)) </b><b>stele pentru acest produs</b> 517 } 518 </p> 519 } 520 <p class="availability indisponibil">@productStockText </p> 521 } else { 522 if(GetBoolean("Ecom:Product:Field.fidelizare")) 523 { 524 <div>&nbsp;</div> 525 <div class="item xfidelizare"> 526 <p style = "color: red; display: none; font-size: 15px;" class="xfidelizare"> 527 <a href="https://www.rtc.ro/cauta?q=rtcstars" class="xfidelizare" style="display: none;"><img src='@("/Files/Images/badges/rtcstars.png")' width='38' alt='Vezi toate produsele RtcStars' title='Vezi toate produsele RtcStars'></a> 528 @{ 529 double puncte = Convert.ToDouble(productPrice); 530 } 531 532 @if(GetBoolean("Ecom:Product:Field.Lichidare.Value") || productCode.Substring(0, 4) == "zSL11" || productCode == "FK024" || productCode == "FK183" || productCode == "FK424" || productCode == "LX810136" || productCode == "LX813900" || productCode == "LX814000" || productCode == "LX815000" || productCode == "LX818700" || productCode == "LX818800" || productCode == "LX819930" || productCode == "LX830002" || productCode == "LX830003" || productCode == "LX830004" || productCode == "LX830005" || productCode == "LX830006" || productCode == "LX830007" || productCode == "LX830008" || productCode == "LX830009" || productCode == "LX830010" || productCode == "LX850000" || productCode == "LX851000" || productCode == "MLTMB2236I") { 533 <span style="color: black; font-weight: bold">2XStele &raquo; </span><b>Primesti @(Math.Round(puncte, 0)*2) </b><b>stele pentru acest produs</b> 534 } 535 else { 536 <b>Primesti @(Math.Round(puncte, 0)) </b><b>stele pentru acest produs</b> 537 } 538 </p> 539 @if(productCode == "LC000940" || productCode == "LC000941" || productCode == "LC000942" ) 540 { 541 <h4 style="margin-top: 15px; color: orange; padding: 5px;">Discounturi cantitative!</h4> 542 <table border=1 style="padding: 4px;"> 543 <tr style="background: orange; padding: 5px; color:white;"> 544 <th style="background: orange; padding: 5px;">1000 seturi</th><th style="background: orange; padding: 5px;">2000 seturi</th><th style="background: orange; padding: 5px;">3000 seturi</th> 545 </tr> 546 <tr style="padding: 5px; background: #EEEEEE;"> 547 <td style="padding: 5px;">10% discount</td><td style="padding: 5px;">20% discount</td><td style="padding: 5px;">30% discount</td> 548 </tr> 549 <tr> 550 <td style="padding: 5px;">@(Math.Round(Convert.ToDouble(productPrice) * 0.9,2)) lei</td><td style="padding: 5px;">@(Math.Round(Convert.ToDouble(productPrice) * 0.8,2)) lei</td><td style="padding: 5px;">@(Math.Round(Convert.ToDouble(productPrice) * 0.7,2)) lei</td> 551 </tr> 552 </table> 553 } 554 </div> 555 } 556 if(@stocfurnizor == "0" && (GetString("Ecom:Product:Field.ItemsCustClassification") == "E" || (productCode.Substring(0, 2) == "AX" && productStock == "0"))) { 557 <p class="availability indisponibil" style="color: red; font-size: 14px!important; font-weight:bold;">@productStockText.ToUpper() </p> 558 } 559 else if (@stocfurnizor == "99999" && @productCode.Substring(0, 2) == "AX") { 560 <p class="availability indisponibilai" style="font-size: 14px!important; font-weight:bold;">@productStockText.ToUpper() </p> 561 } 562 else { 563 if(@productStockText == "Comanda Speciala") 564 { 565 <p class="availability indisponibil" style="color: red; font-size: 14px!important; font-weight:bold;">@productStockText.ToUpper()</p> 566 } 567 else { 568 <p class="availability">@productStockText.ToUpper() </p> 569 } 570 } 571 572 } 573 574 } 575 <div class="quantity"> 576 <span>@Translate("Produs Cantitate","cantitate")</span> 577 578 <input type="number" name="Quantity" class="form-control stepValue" value="1" data-stock="@productStock" step="1" min="1" /> 579 580 </div> 581 <input type="hidden" name="ProductURL" id="ProductURL" value="" /> 582 <input type="hidden" name="CartCmd" id="CartCmd" value="add" /> 583 <input type="hidden" name="ProductID" id="ProductID" value="@productID" /><!--VR221002--> 584 <input type="hidden" name="VariantID" id="VariantID" value='@GetString("Ecom:Product.VariantID")' /> 585 <input type="hidden" name="UnitID" id="UnitID" value="" /> 586 <input type="hidden" name="wishListID" id="wishListID" value="0" /> 587 <input type="hidden" name="EcomOrderLineFieldInput_UM" value="@productCurrentUM"/> 588 <input type="hidden" name="EcomOrderLineFieldInput_Cod" value="@productCode"/> 589 590 @if(GetString("Ecom:Product.VariantCount") == "0") { 591 <button type="submit" class="button">@Translate("Adauga in cos","Adauga in cos")</button> 592 } else { 593 if(GetString("Ecom:Product.VariantID") != "") { 594 if((GetString("Ecom:Product:Field.ItemsCustClassification") == "E" && stocfurnizor == "99999") || stocfurnizor == "99999") { 595 <div class="disabled-submit" data-toggle="tooltip" data-placement="top" title='@Translate("Contactati consultantul de vanzari!","Contactati consultantul de vanzari!")'> 596 <button type="submit" class="button" style="background: gray" disabled>@Translate("Adauga in cos","Adauga in cos")</button> 597 </div> 598 } 599 else { 600 if((GetString("Ecom:Product:Field.ItemsCustClassification") == "E" || productCode.Substring(0, 2) == "AX") && stocfurnizor == "0" && productStock == "0") { 601 <div class="disabled-submit" data-toggle="tooltip" data-placement="top" title='@Translate("Contactati consultantul de vanzari!","Contactati consultantul de vanzari!")'> 602 <button type="submit" class="button" style="background: gray; display: none" disabled>@Translate("Adauga in cos","Adauga in cos")</button> 603 </div> 604 } 605 else { 606 <button type="submit" class="button">@Translate("Adauga in cos","Adauga in cos")</button> 607 } 608 } 609 } else { 610 <div class="disabled-submit" data-toggle="tooltip" data-placement="top" title='@Translate("Alege o optiune","Alege o optiune")'> 611 <button type="submit" class="button" disabled>@Translate("Adauga in cos","Adauga in cos")</button> 612 </div> 613 614 } 615 } 616 </form> 617 } else { 618 619 if(@productStockText == "Momentan indisponibil") 620 {<p class="availability indisponibil">@productStockText </p> 621 }else{ 622 <p class="availability">@productStockText </p> 623 } 624 625 626 627 } 628 } 629 </div> 630 631 @if(!string.IsNullOrEmpty(GetString("Ecom:Manufacturer.Logo"))) { 632 <div class="product-brand-logo"> 633 @* <a href="@productManufacturerLink" title="@productManufacturerName"> *@ 634 <img src='/Files/@GetString("Ecom:Manufacturer.Logo")' alt="@productManufacturerName" /> 635 @* </a> *@ 636 </div> 637 } 638 639 </div> 640 641 <div class="badges"> 642 643 @if(GetBoolean("Ecom:Product:Field.SimteVerde")) { 644 <div class="item"> 645 <a href="/rtc-simte-verde/" title="Vezi toate produsele sustenabile RTC"><img src="/Files/Images/badges/Simte-verde-2023_site.jpg" style="height:40px;" title="Vezi toate produsele sustenabile- Simte Verde" /></a> 646 </div> 647 <div class="item"> 648 <p style="color:gray; background-color: #daf9b1; padding: 7px;"> <a href="/rtc-simte-verde/" style="color: white;" title="Vezi toate produsele sustenabile RTC"><b>Vezi toate produsele Simte Verde!</b> <i class="fa fa-leaf" style="color:#2a3b8f; margin-right: 10px; padding: 3px; font-size: 18px;"> </i></a> </p> 649 </div> 650 } 651 652 @if(InfoAmbalare!="") { 653 <div class="item" style="clear:both;"> 654 <p style="color:gray; background-color: #ececec; padding: 7px;"> <i class="fa fa-info-circle" style="color:#2a3b8f; margin-right: 10px; padding: 3px; font-size: 18px;"> </i><b>INFO</b> - ambalare superioara: @InfoAmbalare</p> 655 </div> 656 657 } 658 659 @if(testeaza != "") { 660 if(testeaza == "1") { 661 <div class="item"> 662 663 <a href="https://www.rtc.ro/testeaza-gratuit-produsele-rtc?idp=@productCode"><img src='@("/Files/Images/badges/testeaza.png")' width='38' alt='Testeaza Gratuit' title='Testeaza Gratuit'> 664 </a> 665 666 </div> 667 } } 668 669 670 671 @if(bonus != "") { 672 if(bonus == "666") { 673 <div class="item"> 674 675 <a href="#"><img src='@("/Files/Images/badges/bonus-1-6.png")' width='38' alt='Produs cu Bonus' title='Produs cu Bonus'> 676 </a> 677 678 </div> 679 } 680 else { 681 <div class="item"> 682 683 <a href="http://rtc.ro/Content/Newsletter/Leitz-Culori-WOW/index.html"><img src='@("/Files/Images/badges/" + @bonus + ".png")' width='38' alt='Puncte in Promotia Leitz WOW' title='Puncte in Promotia Leitz WOW'> 684 </a> 685 686 </div> 687 } 688 } 689 </div> 690 691 @if(testeaza != "") { 692 if(testeaza == "1") { 693 <div class="badges"> 694 695 <p> Testeaza gratuit acest produs! – click <a href="https://www.rtc.ro/testeaza-gratuit-produsele-rtc?idp=@productCode"><strong>AICI</strong></a> si iti trimitem produsul!</p> 696 697 </div> 698 } } 699 @if(userIsLoggedIn) { 700 <button type="button" class="compare" data-group-id="@groupId" data-product-id="@productCode">@Translate("compara","compara") <i class="fa fa-square-o"></i></button> 701 702 <div class="compare-input-box form-inline"> 703 <p>@Translate("Compara cu:","Compara cu:")</p> 704 <select class="form-control" id="input-compare" data-group-id="@groupId" data-product-id="@productCode"> 705 <option value="" disabled>Alege un produs...</option> 706 </select> 707 <button type="button" class="btn-main">@Translate("Compara","Compara")</button> 708 </div> 709 } 710 <div class="description"> 711 <h2>Descriere</h2> 712 @{ 713 if(GetString("Ecom:Product:Field.stoppromo").Length > 4 && GetString("Ecom:Product:Field.startpromo").Length > 4) { 714 if (Convert.ToDateTime(@DateTime.Now.ToString("yyyy-MM-dd")) <= Convert.ToDateTime(@GetString("Ecom:Product:Field.stoppromo")) && Convert.ToDateTime(@DateTime.Now.ToString("yyyy-MM-dd")) >= Convert.ToDateTime(@GetString("Ecom:Product:Field.startpromo"))) 715 { 716 @GetString("Ecom:Product:Field.textpromo") 717 } 718 719 } 720 721 } 722 @if(lincu !="") { 723 <a href="@lincu"><img src="http://rtc.ro/Files/Images/Badges/PDF-icon.jpg" width="50" title="Descarca Documentatia Tehnica" /></a> 724 } 725 @productDescription 726 </div> 727 728 <div class="specifications"> 729 730 @foreach(var item in GetLoop("ProductCategories")) { 731 732 if(item.GetLoop("ProductCategoryFields").Count()>0) { 733 <hr style="clear:both;" /> 734 <h2>Specificatii</h2> 735 }} 736 <table> 737 <colgroup> 738 <col class="key"> 739 <col class="value"> 740 </colgroup> 741 <tbody> 742 743 @foreach(var field in GetLoop("ProductCategories")) { 744 745 foreach (var field2 in field.GetLoop("ProductCategoryFields")) { 746 if (!string.IsNullOrEmpty(field2.GetString("Ecom:Product.CategoryField.Value.Clean"))) { 747 <tr> 748 <td colspan='3' valign='top'>@if(field2.GetString("Ecom:Product.CategoryField.Label").Any(char.IsDigit)) { } else {<span> @field2.GetString("Ecom:Product.CategoryField.Label") </span>} </td> 749 <td colspan='2' style='padding-left: 30px;'>@field2.GetString("Ecom:Product.CategoryField.Value.Clean")</td> 750 </tr> 751 } 752 753 } 754 755 } 756 </tbody> 757 </table> 758 </div> 759 760 <!-- PRODUSE COMPLEMENTARE --> 761 762 <div class="specifications"> 763 764 @foreach(var item in GetLoop("ProductRelatedGroups")) { 765 766 if(item.GetLoop("RelatedProducts").Count()>0) { 767 <hr style="clear:both;" /> 768 if(item.GetString("Ecom:Product:RelatedGroup.Name") == "Alte variante") {<h2 id="relx">@item.GetString("Ecom:Product:RelatedGroup.Name")</h2>} 769 else {<h2>@item.GetString("Ecom:Product:RelatedGroup.Name")</h2>} 770 } 771 int i = 0; 772 string cssul = "col-xs-4 complem"; 773 774 foreach(var produs in item.GetLoop("RelatedProducts").Take(32)) 775 { 776 i++; 777 778 if(i > 6) { 779 cssul = "col-xs-4 complem hidden"; 780 } 781 782 <div class="@cssul"> 783 784 @{string imagesFolderC = "/Files/Images/Products/Large/"; 785 string imagePatternC = imagesFolderC + produs.GetString("Ecom:Product:Field.Cod") + ".jpg"; 786 string productImageC = GetString("Ecom:Product.PrimaryImage");//GetImagePathUrl(produs.GetString("Ecom:Product.ImageSmall.Clean"), produs.GetString("Ecom:Product.ImageMedium.Clean"), produs.GetString("Ecom:Product.ImageLarge.Clean"), imagePatternC); 787 string productGetImageC = GetImage(imagePatternC, 0, 100);} 788 <img src="@productGetImageC" /> 789 790 <div style="min-height:100px;"> @produs.GetString("Ecom:Product.VariantLinkGroup").Replace("ID="+@produs.GetValue("Ecom:Product.PrimaryOrCurrentPageID"),"ID=2") </div> 791 792 </div> 793 794 795 } 796 if(i > 6) { <br style="cleaar:both" /> 797 <button class="button-login afis-toate" style="background-color: grey">Afiseaza mai multe</button> 798 } 799 } 800 </div> 801 802 <!-- PRODUSE COMPLEMENTARE --> 803 @if(userIsLoggedIn) { 804 if(productLoyalityPoints != "0") { 805 <div class="fidelizare"> 806 <p>Campanie de fidelizare:</p> 807 <span class="badge-lp">@productLoyalityPoints <br/>puncte</span> 808 </div> 809 } 810 } 811 812 813 814 </div> 815 816 </div> 817 818 819 820 821 822 @SnippetStart("LowerCarousel") 823 @SnippetEnd("LowerCarousel") 824 <div class="compare-wrapper"> 825 <div class="compare-content"> 826 827 </div> 828 </div> 829 <div class="main-image-popup"> 830 <div class="inner-wrap"> 831 <button class="close"> 832 <i class="fa fa-times" aria-hidden="true"></i> 833 </button> 834 <div class="bmodal-content"></div> 835 </div> 836 </div> 837 838 <!-- Go to www.addthis.com/dashboard to customize your tools --> 839 @* <script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-5716953ddb10f4d0"></script> *@ 840 841 842 @SnippetStart("Bottom") 843 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-zoom/1.7.15/jquery.zoom.min.js" type="text/javascript"></script> 844 <script type="text/javascript"> 845 $(".afis-toate").on('click' , function() { 846 $(".complem").removeClass("hidden"); 847 $(".afis-toate").addClass("hidden"); 848 }); 849 $(".afisx").on('click' , function() { 850 $(".extindere").removeClass("hidden"); 851 $(".afisx").addClass("hidden"); 852 }); 853 854 $(function(){ 855 $('#product-page-order').on("submit", function(e){ 856 var variantValue = $(this).find("#VariantID").val(); 857 if (variantValue === "") { 858 e.preventDefault(); 859 alertify.logPosition("center center"); 860 alertify.alert("Alegeti o optiune"); 861 } 862 }); 863 }); 864 </script> 865 866 867 @SnippetEnd("Bottom") 868 @if(GetString("Ecom:Product:Field.longpage") != "") { 869 <div class="col-xs-12 hidden-print"> 870 871 @GetString("Ecom:Product:Field.longpage") 872 </div> 873 } 874 875 <div class="col-xs-12 hidden-print"> 876 877 <p style="color: gray; font-size:12px; padding:4px; text-align: center; font-style:italic">Depunem un efort constant pentru pastrarea acuratetii informatiilor. In unele cazuri specificatiile si informatiile prezentate pe site-ul www.RTC.ro pot contine mici inadvertente.<br /> Fotografiile produselor au caracter informativ, pot contine accesorii neincluse in pachetele standard si nu reprezinta obligatie contractuala. </p> 878 879 </div> 880 881 <style> 882 .item-left { 883 width: 50%; 884 float:left; 885 } 886 .item-left h2 b strong { 887 font-size:16px; 888 color: green; 889 } 890 891 .item-right h2 b strong{ 892 font-size:16px; 893 color: green; 894 } 895 896 .item-right { 897 width: 50%; 898 float:right; 899 900 } 901 902 .items-row { 903 clear:both; 904 overflow:auto; 905 906 margin-top: 40px; 907 908 } 909 .items-row h2 strong{ 910 font-size:14px; 911 } 912 913 .items-row h2 b{ 914 font-size:14px; 915 } 916 </style> 917