Error executing template "Designs/dechra-dvp/eCom/Productlist/dvp-product-list.cshtml"
System.Net.WebException: The operation has timed out
   at System.Net.HttpWebRequest.GetResponse()
   at CompiledRazorTemplates.Dynamic.RazorEngine_6923aa421af044e8b625e04845bf57ba.DietApi(String method, String productNumber, String cultureInfoName) in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 3992
   at CompiledRazorTemplates.Dynamic.RazorEngine_6923aa421af044e8b625e04845bf57ba.Execute() in D:\Dynamicweb.NET\Solutions\eu.dvp.dechra.espresso4.dk\Files\Templates\Designs\dechra-dvp\eCom\Productlist\dvp-product-list.cshtml:line 4083
   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.b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Co3.Espresso.Website.TemplateBases.Paragraphs.Module 2 @using System.Collections.Generic 3 @using Co3.Espresso.Base.Extensions; 4 @using Co3.Dechra.DVP.Website.UiServices; 5 @using System.Linq; 6 @using System.Web; 7 @using System.Net; 8 @using System.Text.RegularExpressions; 9 @using Co3.Espresso.Website.Services; 10 @using Dynamicweb.Ecommerce; 11 @using System.Collections.Generic; 12 @using Dynamicweb.Frontend; 13 @using Dynamicweb.Content; 14 @using Dynamicweb.Frontend.Devices 15 16 @using System.Web; 17 @using Dynamicweb.Frontend; 18 @using Dynamicweb.Content; 19 20 @helper signIn() 21 { 22 PageView currentPageView = PageView.Current(); 23 Area area = currentPageView.Area; 24 25 string redirectToFrontpage = string.Empty; 26 27 if(HttpContext.Current.Request.QueryString["RecoveryToken"] != null) 28 { 29 redirectToFrontpage = "/"; 30 } 31 32 string signUpPage = area.Item["SignUpPage"].ToString(); 33 34 string azureAuthenticationSignUpSignInPolicyId = area.Item["SignUpSignInPolicyId"].ToString(); 35 36 37 string forgotPasswordPage = area.Item["ForgotPasswordPage"].ToString(); 38 39 <div class="col-12 col-xl-6 mt-3 d-flex"> 40 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light"> 41 <h3 class="pb-1"><i class="material-icons">lock</i> @Translate("Sign in to your Dechra account", "Sign in to your Dechra account")</h3> 42 43 @if(!string.IsNullOrEmpty(azureAuthenticationSignUpSignInPolicyId)) 44 { 45 <p> 46 <a class="btn btn-primary" href="/Admin/Public/Social/ExternalLogin.aspx?action=login&providerID=1">@Translate("Sign in", "Sign in")</a> 47 </p> 48 } 49 else 50 { 51 <form method="post" action="@redirectToFrontpage" name="ExtUserForm"> 52 <div class="row"> 53 <div class="col-12 form-fields"> 54 <input maxlength="250" class="form-control required" placeholder='@Translate("Username", "Username")' name="Username" type="text" value="" /> 55 </div> 56 <div class="col-12 form-fields"> 57 <input maxlength="250" class="form-control required" placeholder='@Translate("Password", "Password")' type="password" name="Password" value="" /> 58 </div> 59 </div> 60 <div class="row pt-2"> 61 <div class="col-12 pb-1 d-flex flex-wrap align-items-center justify-content-between"> 62 <a class="small" href="/Default.aspx?ID=@forgotPasswordPage&LoginAction=Recovery">@Translate("Forgot your password?", "Forgot your password?")</a> <button class="btn btn-primary" type="submit">@Translate("Sign in", "Sign in")</button> 63 </div> 64 </div> 65 </form> 66 } 67 </div> 68 </div> 69 70 <div class="col-12 col-xl-6 mt-3 d-flex"> 71 <div class="w-100 px-2 py-2 px-lg-5 py-lg-3 bg-light"> 72 <h3><i class="material-icons">account_box</i> @Translate("Don't have an account yet?", "Don't have an account yet?")</h3> 73 <div class="row"> 74 <div class="col-12 small"> 75 <p class="mb-1">@Translate("Sign up now to access:", "Sign up now to access:")</p> 76 <ul> 77 <li>@Translate("Complete product and disease information", "Complete product and disease information")</li> 78 <li>@Translate("Free support materials, videos and webcasts", "Free support materials, videos and webcasts")</li> 79 <li>@Translate("Dechra Academy: Our FREE eLearning platform", "Dechra Academy: Our FREE eLearning platform")</li> 80 </ul> 81 </div> 82 </div> 83 <div class="row"> 84 <div class="col-12 text-right"> 85 <a class="btn btn-cta" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up", "Sign up")</a> 86 </div> 87 </div> 88 </div> 89 </div> 90 } 91 92 @{ 93 PageView currentPageView = PageView.Current(); 94 Area currentArea = currentPageView.Area; 95 int groupCount = GetLoop("Subgroups").Count(); 96 int productCount = GetLoop("Products").Count(); 97 string groupColSize = string.Empty; 98 string pageId = GetGlobalValue("Global:Page.ID"); 99 string productPageId = currentArea.Item["ProductPage"].ToString(); 100 bool shopIsActive = Espresso.Page.Area.Item.GetValue<bool>("Shop"); 101 bool isMobile = (PageView.Current().Device == DeviceType.Mobile); 102 103 bool hasAccess = ExtranetUiService.HasAccess(); 104 bool restrictProductList = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductList"); 105 bool restrictProductDetails = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductDetails"); 106 bool restrictProductFiles = Espresso.Page.Area.Item.GetValue<bool>("RestrictProductFiles"); 107 108 string restrictProductFileTypesValue = Espresso.Page.Area.Item.GetValue< string >( "RestrictProductFileTypes" ); 109 List<string> restrictProductFileTypes = !string.IsNullOrEmpty(restrictProductFileTypesValue) ? restrictProductFileTypesValue.Split( ',' ).ToList() : new List< string >(); 110 111 bool showProductFileTypeDatasheet = true; 112 bool showProductFileTypePackInsert = true; 113 bool showProductFileTypeSPC = true; 114 bool showProductFileTypeMSDS = true; 115 116 bool restrictProductFileTypeDatasheet = restrictProductFileTypes.Contains( "Datasheet" ); 117 bool restrictProductFileTypePackInsert = restrictProductFileTypes.Contains( "Pack Insert" ); 118 bool restrictProductFileTypeSPC = restrictProductFileTypes.Contains( "SPC" ); 119 bool restrictProductFileTypeMSDS = restrictProductFileTypes.Contains( "MSDS" ); 120 121 if(restrictProductFileTypeDatasheet) 122 { 123 if(!hasAccess) 124 { 125 showProductFileTypeDatasheet = false; 126 } 127 } 128 if(restrictProductFileTypePackInsert) 129 { 130 if(!hasAccess) 131 { 132 showProductFileTypePackInsert = false; 133 } 134 } 135 if(restrictProductFileTypeSPC) 136 { 137 if(!hasAccess) 138 { 139 showProductFileTypeSPC = false; 140 } 141 } 142 if(restrictProductFileTypeMSDS) 143 { 144 if(!hasAccess) 145 { 146 showProductFileTypeMSDS = false; 147 } 148 } 149 150 151 bool restrictSupportMaterials = Espresso.Page.Area.Item.GetValue<bool>("RestrictSupportMaterials"); 152 153 bool rangeListLevel = true; 154 bool sortedDESC = false; 155 bool showFilters = true; 156 List<LoopItem> rangeSortOrder = GetLoop("Ranges"); 157 158 159 if( Espresso.Item.FiltersShow != null && Espresso.Item.FiltersShow == "False" ) { 160 showFilters = false; 161 } 162 163 string sortOrder = string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["SortOrder"]) ? Espresso.Item.ModuleOverride_SortOrder : System.Web.HttpContext.Current.Request["SortOrder"]; 164 165 if(Espresso.Item.ModuleOverride_SortOrder != null && sortOrder == "DESC") 166 { 167 sortedDESC = true; 168 rangeSortOrder = GetLoop("Ranges").OrderByDescending(ro => ro.GetString("Range")).ToList(); 169 } 170 171 groupColSize = groupCount < 4 ? "4" : "3"; 172 173 } 174 175 @{ 176 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && GetLoop("Subgroups").Count() == 0) 177 { 178 rangeListLevel = false; 179 } 180 181 if(rangeListLevel) 182 { 183 if(!string.IsNullOrEmpty(GetString("Ecom:Group.Name"))) 184 { 185 <div class="row mb-1 mb-md-2"> 186 <div class="col-12"> 187 <h1 class="d-block d-md-inline mb-0">@GetString("Ecom:Group.Name")</h1> 188 @if(GetInteger("Ecom:Group.ProductCount") > 0) 189 { 190 string productGroupListCountTranslation = GetInteger("Ecom:Group.ProductCount") == 1 ? productGroupListCountTranslation = Translate("product","product") : Translate("products","products"); 191 192 <small class="d-block d-md-inline my-0 font-weight-normal h3"> (@GetInteger("Ecom:Group.ProductCount") @productGroupListCountTranslation)</small> 193 } 194 @if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.Teaser"))) 195 { 196 <p class="lead mb-0 mt-2">@GetString("Ecom:Group:Field.Teaser")</p> 197 } 198 </div> 199 </div> 200 } 201 else 202 { 203 if( Espresso.Item.HeadingShow != null && Espresso.Item.HeadingShow == "True" ){ 204 <div class="row"> 205 <div class="col-12"> 206 <h1>@Espresso.Item.Name</h1> 207 </div> 208 </div> 209 } 210 } 211 if(groupCount > 0 && productCount < 1) 212 { 213 <div class="row"> 214 @foreach(LoopItem subgroup in @GetLoop("Subgroups")) 215 { 216 string groupId = subgroup.GetString("Ecom:Group.ID"); 217 string groupName = subgroup.GetString("Ecom:Group.Name"); 218 string groupImage = subgroup.GetString("Ecom:Group.LargeImage"); 219 string groupDescription = subgroup.GetString("Ecom:Group.Description"); 220 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}"; 221 222 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 223 <div class="card"> 224 <a href="@groupUrl" title="@groupName"> 225 <p class="card-header font-weight-bold text-center">@groupName</p> 226 @if(!string.IsNullOrEmpty(groupImage)) 227 { 228 <div class="p-img-container"> 229 <div class="row"> 230 <div class="col-12"> 231 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 232 </div> 233 </div> 234 </div> 235 } 236 @if(!string.IsNullOrEmpty(groupDescription)) 237 { 238 <div class="p-txt-container"> 239 <div class="card-body"> 240 <p class="small">@groupDescription</p> 241 </div> 242 </div> 243 } 244 </a> 245 </div> 246 </div> 247 } 248 </div> 249 } 250 else 251 { 252 if(string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"]) && pageId == productPageId) 253 { 254 255 Dynamicweb.Ecommerce.Products.GroupCollection groups = Dynamicweb.Ecommerce.Products.Group.GetToplevelGroups(currentArea.EcomLanguageId); 256 257 <div class="row mb-2"> 258 <div class="col-12"> 259 <h1 class="d-inline">@GetGlobalValue("Global:Page.Name")</h1> 260 </div> 261 </div> 262 <div class="row"> 263 @foreach( Dynamicweb.Ecommerce.Products.Group group in groups.Where(gr=> gr.ShopId.Equals(currentArea.EcomShopId) && gr.NavigationShowInMenu.Equals(true) && gr.NavigationClickable.Equals(true))) 264 { 265 if ( currentArea.ID == 67 || currentArea.ID == 75 || currentArea.ID == 77 || currentArea.ID == 78 || currentArea.ID == 79 || currentArea.ID == 64 || currentArea.ID == 65 || currentArea.ID == 84 ) 266 { 267 string groupName = group.Name; 268 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={group.Id}"; 269 string groupImage = group.LargeImage; 270 string groupDescription = group.Description; 271 272 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 273 <div class="card"> 274 <a href="@groupUrl" title="@groupName"> 275 <p class="card-header font-weight-bold text-center">@groupName</p> 276 @if(!string.IsNullOrEmpty(groupImage)) 277 { 278 <div class="p-img-container"> 279 <div class="row"> 280 <div class="col-12"> 281 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 282 </div> 283 </div> 284 </div> 285 } 286 @if(!string.IsNullOrEmpty(groupDescription)) 287 { 288 <div class="p-txt-container"> 289 <div class="card-body"> 290 <p class="small">@groupDescription</p> 291 </div> 292 </div> 293 } 294 </a> 295 </div> 296 </div> 297 } 298 else 299 { 300 Dynamicweb.Ecommerce.Products.GroupCollection subgroups = group.Subgroups; 301 302 foreach(Dynamicweb.Ecommerce.Products.Group subgroup in subgroups.Where(sgr=> sgr.NavigationClickable.Equals(true) && sgr.NavigationShowInMenu.Equals(true))) 303 { 304 string groupName = subgroup.Name; 305 string groupUrl = $"/Default.aspx?ID={pageId}&GroupID={subgroup.Id}"; 306 string groupImage = subgroup.LargeImage; 307 string groupDescription = subgroup.Description; 308 309 <div class="p col-12 col-sm-6 col-lg-@groupColSize p-card p-card-top-bottom p-card-txt-small"> 310 <div class="card"> 311 <a href="@groupUrl" title="@groupName"> 312 <p class="card-header font-weight-bold text-center">@groupName</p> 313 @if(!string.IsNullOrEmpty(groupImage)) 314 { 315 <div class="p-img-container"> 316 <div class="row"> 317 <div class="col-12"> 318 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@groupImage&amp;Format=jpg&amp;Width=600&amp;Quality=75" class="p-img" alt="@groupName"> 319 </div> 320 </div> 321 </div> 322 } 323 @if(!string.IsNullOrEmpty(groupDescription)) 324 { 325 <div class="p-txt-container"> 326 <div class="card-body"> 327 <p class="small">@groupDescription</p> 328 </div> 329 </div> 330 } 331 </a> 332 </div> 333 </div> 334 } 335 } 336 } 337 </div> 338 } 339 else 340 { 341 if(rangeSortOrder.Count() > 0) 342 { 343 if(!restrictProductList || hasAccess) 344 { 345 <div class="row"> 346 <div class="col-12"> 347 <div class="row align-items-end"> 348 @if(showFilters) 349 { 350 <div class="col-12 col-sm-3"> 351 <h3 class="mb-0">@Translate("Narrow your results","Narrow your results")</h3> 352 <hr class="mt-1 mb-1 mb-md-2"> 353 </div> 354 } 355 <div class="col-12 @(showFilters?"col-sm-9 text-md-right":"d-flex justify-content-between")"> 356 @if(!showFilters && productCount>0) 357 { 358 string productListCountTranslation = productCount==1 ? Translate("product","product") : Translate("products","products"); 359 360 <small class="font-weight-normal h3"> (@productCount @productListCountTranslation)</small> 361 } 362 @if( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True"){ 363 <form class="hidden-mobile"> 364 <label class="mr-sm-2 d-block d-md-inline font-weight-bold" for="sortProducts">@Translate("Sort by","Sort by"):</label> 365 <select class="custom-select d-block d-md-inline mb-2 mb-sm-0 sortProducts" id="sortProducts"> 366 <option value="ASC" @(sortedDESC?"":"selected")>@Translate("Name: A-Z","Name: A-Z")</option> 367 <option value="DESC" @(sortedDESC?"selected":"")>@Translate("Name: Z-A","Name: Z-A")</option> 368 </select> 369 </form> 370 } 371 @if(showFilters) 372 { 373 <hr class="my-1 mb-2 hidden-mobile"> 374 } 375 </div> 376 </div> 377 </div> 378 379 @if(showFilters) 380 { 381 <div class="col-12 col-sm-3"> 382 <div class="js-e-productlist"> 383 @using Dynamicweb.Ecommerce.Products; 384 @using Dynamicweb.Ecommerce.Products.Categories; 385 @functions { 386 public FieldOption GetTranslatedProductCategoryFieldOption(string value, string categoryId, string fieldId) 387 { 388 FieldOption translatedFieldOption = null; 389 390 var collection = Dynamicweb.Ecommerce.Products.Categories.Category.GetCategories(Dynamicweb.Ecommerce.Common.Context.LanguageID); 391 Category category = collection.FirstOrDefault(c => c.Id.Equals(categoryId)); 392 393 if (category.Fields != null) 394 { 395 Field field = category.Fields.FirstOrDefault(f => f.Id.Equals(fieldId)); 396 if (field != null && field.FieldOptions != null) 397 { 398 translatedFieldOption = field.FieldOptions.FirstOrDefault(fo => fo.Value.Equals(value)); 399 } 400 } 401 402 return translatedFieldOption; 403 } 404 } 405 @if (GetLoop("FacetGroups").Count > 0) 406 { 407 Dictionary<string,Dictionary<string,string>> selectedOptions = new Dictionary<string,Dictionary<string,string>>(); 408 409 <div id="js-e-productlist-filters"> 410 <form class="js-e-productlist-form" novalidate="novalidate"> 411 <input type="hidden" name="SortOrder" value="@(sortedDESC ? "DESC" : "ASC")"> 412 <input type="hidden" class="js-e-visible-options-count" value="@Espresso.Item.FiltersVisibleOptionCount"> 413 <div class="row"> 414 @foreach (LoopItem facetGroup in GetLoop("FacetGroups")) 415 { 416 foreach (LoopItem facet in facetGroup.GetLoop("Facets")) 417 { 418 string facetGroupFacetName = facet.GetString("Facet.Name"); 419 string facetGroupFacetNameTranslated = Translate( $"Filter_Facet_Label_{facetGroupFacetName}", facetGroupFacetName ); 420 421 string facetGroupFacetField = facet.GetString("Facet.Field"); 422 423 string facetQueryParameter = facet.GetString("Facet.QueryParameter"); 424 425 string facetGroupFacetType = facet.GetString("Facet.RenderType"); 426 427 int espressoItemfiltersVisibleOptionCount; 428 int facetOptionsCount = facet.GetInteger("Facet.OptionResultTotalCount"); 429 int facetNotEmptyOptionsCount = facet.GetLoop("FacetOptions").Where(o => !o.GetInteger("FacetOption.Count").Equals(0)).Count(); 430 431 bool hasEspressoItemfiltersVisibleOptionCount = Int32.TryParse( Espresso.Item.FiltersVisibleOptionCount, out espressoItemfiltersVisibleOptionCount ); 432 433 string[] productCategoryIds = facetGroupFacetField.Split('|'); 434 435 var facetOptions = facet.GetLoop("FacetOptions"); 436 437 if (facetOptionsCount > 0) 438 { 439 <div class="js-e-productlist-filters-group col-12"> 440 <p class="e-productlist-filters-group-header font-weight-bold mb-0"> 441 <span class="e-productlist-filters-group-name">@facetGroupFacetNameTranslated</span> 442 </p> 443 <fieldset class="e-productlist-filters-group-options js-e-productlist-filters-group-options small mt-half"> 444 <div class="@(isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount ? "js-e-productlist-filters-options-collapse-peek e-productlist-filters-options-collapse-peek is-peeking" : "")"> 445 @if(facetGroupFacetType == "Checkboxes"){ 446 <div class="e-productlist-filters-option js-e-productlist-filters-option"> 447 <label for="reset-filter-@facetGroupFacetName" class="custom-control custom-checkbox mb-1"> 448 <input class="js-e-productlist-filters-option-reset-group custom-control-input" name="@facetQueryParameter" id="reset-filter-@facetGroupFacetName" type="checkbox" value=""> 449 <span class="custom-control-indicator"></span> 450 <span class="custom-control-description">@Translate("All","All")</span> 451 </label> 452 </div> 453 foreach (LoopItem facetOption in facetOptions) 454 { 455 456 string value = facetOption.GetString("FacetOption.Value"); 457 bool selected = facetOption.GetBoolean("FacetOption.Selected"); 458 459 Dictionary<string,string> selectedOption = new Dictionary<string,string>(); 460 selectedOption.Add(value, facetQueryParameter); 461 462 if(facetNotEmptyOptionsCount < 2) 463 { 464 selected = true; 465 } 466 467 string label = facetOption.GetString("FacetOption.Label"); 468 int count = facetOption.GetInteger("FacetOption.Count"); 469 string cssClass = ""; 470 string disabled = string.Empty; 471 472 FieldOption optionLabel = null; 473 474 if(!string.IsNullOrEmpty(productCategoryIds[1]) && !string.IsNullOrEmpty(productCategoryIds[2])) 475 { 476 optionLabel = GetTranslatedProductCategoryFieldOption(value.ToString(), productCategoryIds[1], productCategoryIds[2]); 477 if(optionLabel != null) 478 { 479 label = optionLabel.Name; 480 } 481 } 482 483 if(selected && count > 0) 484 { 485 selectedOptions.Add($"{facetGroupFacetNameTranslated} / {label}", selectedOption); 486 } 487 488 if (count > 0) 489 { 490 <div class="e-productlist-filters-option js-e-productlist-filters-option @(selected ? "is-selected" : "")"> 491 <label for="facet_@(facetGroupFacetName)_@value" class="custom-control custom-checkbox @cssClass" title="@label"> 492 <input id="facet_@(facetGroupFacetName)_@value" name="@facetQueryParameter" class="js-e-productlist-filter custom-control-input" type="checkbox" value="@value" checked="@selected" @disabled> 493 <span class="custom-control-indicator"></span> 494 <span class="custom-control-description text-truncate">@label</span> 495 <span class="e-productlist-filters-option-count small text-muted">&nbsp;(@count)</span> 496 </label> 497 </div> 498 } 499 } 500 } 501 @if ( isMobile && hasEspressoItemfiltersVisibleOptionCount && facetNotEmptyOptionsCount > espressoItemfiltersVisibleOptionCount ) 502 { 503 <a href="javascript:void(0);" class="js-e-productlist-filters-options-collapse-peek-toggle e-productlist-filters-options-collapse-peek-toggle small" data-closed-text="@Translate( "eCom Productlist Filter - Options Show More - Link", "Show more" )" data-open-text="@Translate( "eCom Productlist Filter - Options Show Less - Link", "Show less" )"><i class="material-icons">keyboard_arrow_down</i></a> 504 } 505 </div> 506 </fieldset> 507 <hr class="my-1"> 508 </div> 509 } 510 } 511 } 512 @if(selectedOptions.Count() > 0) 513 { 514 <div class="e-productlist-filters-group border-0 col-12 order-first"> 515 <p class="e-productlist-filters-group-header small mb-1"> 516 <a href="javascript:void(0);" class="reset-filter d-block text-left pl-0 js-e-productlist-filters-clear-all"> 517 <i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@Translate("eCom Productlist Filters - Reset Filters - Button", "Reset all") 518 </a> 519 </p> 520 <div class="small"> 521 <ul class="e-productlist-filters-group-options-selected list-unstyled mb-1"> 522 @foreach(KeyValuePair<string, Dictionary<string,string>> selectedOption in selectedOptions) 523 { 524 string value = selectedOption.Value.Keys.FirstOrDefault(); 525 string systemName = selectedOption.Value.Values.FirstOrDefault(); 526 527 <li class="e-productlist-filters-option-selected is-selected-active pl-0"> 528 <a class="js-e-productlist-filters-remove d-block text-truncate" href="javascript:void(0);" data-system-name="@systemName" data-value="@value"><i class="material-icons material-icons-fixed text-danger text-left mr-1">clear</i>@selectedOption.Key</a> 529 </li> 530 } 531 </ul> 532 </div> 533 <hr class="my-1"> 534 </div> 535 } 536 </div> 537 </form> 538 </div> 539 } 540 541 </div> 542 @if ( Espresso.Item.SortShow == null || Espresso.Item.SortShow == "True" ) 543 { 544 <form class="hidden-desktop mb-2"> 545 <select class="custom-select d-inline form-control sortProducts"> 546 <option value="ASC" @(sortedDESC ? "" : "selected")>@Translate( "Name: A-Z", "Name: A-Z" )</option> 547 <option value="DESC" @(sortedDESC ? "selected" : "")>@Translate( "Name: Z-A", "Name: Z-A" )</option> 548 </select> 549 </form> 550 } 551 </div> 552 } 553 554 <div class="col-12 @(showFilters?"col-sm-9":"") dvp-ranges-list"> 555 @if(!showFilters) 556 { 557 <hr class="mt-1"> 558 } 559 <div class="row"> 560 @foreach(LoopItem range in rangeSortOrder) 561 { 562 string rangeGroupId = ""; 563 564 int productInt = 0; 565 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 566 string rangeName = range.GetString("Range"); 567 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 568 string rangeNameCleaned = Regex.Replace(rangeName, @"[^A-Za-z0-9_\~]+", "-"); 569 570 <div class="col-12 col-lg-6 mb-3"> 571 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames") ? "dvp-range-header" : "")"> 572 <h3>@rangeNameSuperscripted@(productsInRangeCount > 1 ? $" <small class='font-weight-normal'>({productsInRangeCount} {Translate("products","products")})</small>" : "")</h3> 573 </div> 574 <div class="col-12 px-1 pt-1 border dvp-range"> 575 <div> 576 <div class="row"> 577 @foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 578 { 579 Dynamicweb.Ecommerce.Products.Product p = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")); 580 581 if(!string.IsNullOrEmpty(System.Web.HttpContext.Current.Request["GroupID"])) 582 { 583 Dynamicweb.Ecommerce.Products.GroupCollection gc = p.Groups; 584 585 foreach(Dynamicweb.Ecommerce.Products.Group g in gc.Where(g=>g.Subgroups.Count() == 0)) 586 { 587 if(!g.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"])) 588 { 589 foreach(Dynamicweb.Ecommerce.Products.Group sg in g.ParentGroups) 590 { 591 if(sg.ParentGroups.ContainsById(System.Web.HttpContext.Current.Request["GroupID"])) 592 { 593 rangeGroupId = g.Id; 594 } 595 } 596 } 597 else 598 { 599 rangeGroupId = g.Id; 600 } 601 } 602 } 603 else 604 { 605 rangeGroupId = p.PrimaryGroupId; 606 } 607 608 if(!product.GetBoolean("Ecom:Product:Field.AwaitingApproval")) 609 { 610 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 611 } 612 613 if(productInt == 2) 614 { 615 @:</div> 616 @:</div> 617 @:<div class="collapse" id="range-@rangeNameCleaned"> 618 @:<div class="row"> 619 } 620 621 string url = string.Empty; 622 623 string urlFriendlyProduct = string.Empty; 624 625 string productName = product.GetString("Ecom:Product.Name"); 626 627 bool hideProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 628 629 string productDisplayName = productName; 630 string productTitleName = productName; 631 632 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 633 { 634 if(hideProductName) 635 { 636 productDisplayName = rangeNameSuperscripted; 637 productTitleName = rangeName; 638 } 639 else 640 { 641 productDisplayName = $"{rangeNameSuperscripted} {productName}"; 642 productTitleName = $"{rangeName} {productName}"; 643 } 644 } 645 646 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 647 { 648 url = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 649 } 650 else 651 { 652 url = productName; 653 } 654 655 if(productsInRangeCount > 1) 656 { 657 urlFriendlyProduct = $"#{Regex.Replace(url, @"[^A-Za-z0-9_\~]+", "-")}"; 658 } 659 660 string productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 661 string productUrl = "javascript:void(0);"; 662 663 if(!string.IsNullOrEmpty(rangeGroupId)) 664 { 665 productUrl = $"/Default.aspx?ID={pageId}&GroupID={rangeGroupId}{urlFriendlyProduct}"; 666 } 667 668 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 669 <a href="@productUrl" title="@productTitleName"> 670 <div class="row"> 671 <div class="col-12 dvp-image-container"> 672 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productTitleName"> 673 </div> 674 <div class="col-12"> 675 <p class="m-0 small dvp-range-product-name">@productDisplayName</p> 676 </div> 677 </div> 678 </a> 679 </div> 680 681 productInt++; 682 } 683 </div> 684 </div> 685 <div class="row mt-1 dvp-view-more-products"> 686 @if(productsInRangeCount > 2) 687 { 688 int amountOfProductsLeft = productsInRangeCount - 2; 689 690 string amountOfProductsLeftTranslation = productsInRangeCount == 3 ? Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product") : Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 691 692 string amountOfProductsLeftTranslationReplaced = amountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", amountOfProductsLeft.ToString()); 693 694 <div class="col-12"> 695 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 696 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@rangeNameCleaned" aria-expanded="false" aria-controls="range-@rangeNameCleaned" href="javascript:void(0);"> 697 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @amountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 698 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 699 </a> 700 </p> 701 </div> 702 } 703 </div> 704 </div> 705 706 </div> 707 } 708 </div> 709 </div> 710 </div> 711 712 } 713 else 714 { 715 <div class="row"> 716 @signIn() 717 </div> 718 } 719 } 720 } 721 } 722 } 723 else 724 { 725 if(!restrictProductDetails || hasAccess) 726 { 727 foreach(LoopItem range in rangeSortOrder) 728 { 729 LoopItem productType = range.GetLoop("ProductsInRange").FirstOrDefault(); 730 731 if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "pharma") 732 { 733 string rangeName = range.GetString("Range"); 734 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 735 string rangeId = string.Empty; 736 string therapyAreaId = string.Empty; 737 string therapyAreaName = string.Empty; 738 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 739 string optionalName = string.Empty; 740 string displayName = string.Empty; 741 string displayNameSuperscripted = string.Empty; 742 string groupId = string.Empty; 743 string productName = string.Empty; 744 string productNameJSON = string.Empty; 745 string productDisplayName = string.Empty; 746 string productDisplayNameSuperscripted = string.Empty; 747 string urlFriendlyProductName = string.Empty; 748 string productShortDescription = string.Empty; 749 string productShortDescriptionJSON = string.Empty; 750 string productActives = string.Empty; 751 string productActivesJSON = string.Empty; 752 string productStorageCondition = string.Empty; 753 string productStorageConditionJSON = string.Empty; 754 string productPackSize = string.Empty; 755 string productWithdrawalPeriod = string.Empty; 756 string productDatasheet = string.Empty; 757 string productPackInsert = string.Empty; 758 string productSPC = string.Empty; 759 string productMSDS = string.Empty; 760 bool hasDocuments = true; 761 string productDisclaimer = string.Empty; 762 string productDisclaimerJSON = string.Empty; 763 string productShopInformation = string.Empty; 764 string productShopInformationJSON = string.Empty; 765 string productImage = string.Empty; 766 List<string> images = new List<string>(); 767 string productUrl = string.Empty; 768 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 769 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 770 771 <div class="row"> 772 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 773 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 774 {{#if premiumPages.0.searchFriendlyImageBanner}} 775 <div class="js-dvp-product-premium-content-animate fade mb-2"> 776 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 777 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 778 </a> 779 </div> 780 {{/if}} 781 </script> 782 </div> 783 </div> 784 785 if(productsInRangeCount > 1) 786 { 787 <div class="row e-product"> 788 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 789 <h1 class="mb-1 font-weight-bold"> 790 @rangeNameSuperscripted 791 </h1> 792 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 793 { 794 795 groupId = product.GetString("Ecom:Group.ID"); 796 797 productName = product.GetString("Ecom:Product.Name"); 798 productNameJSON = productName.Replace("\"","&quot;"); 799 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 800 801 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 802 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 803 804 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 805 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 806 807 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 808 809 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 810 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 811 812 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 813 814 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 815 816 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 817 818 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 819 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 820 821 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 822 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 823 824 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 825 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 826 827 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 828 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 829 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 830 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 831 832 hasDocuments = true; 833 834 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 835 { 836 hasDocuments = false; 837 } 838 839 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 840 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 841 842 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value"); 843 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>"); 844 845 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 846 847 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 848 849 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 850 851 dynamic JSON = new { 852 Name = productDisplayName, 853 ShortDescription = productShortDescriptionJSON, 854 Image = productImage, 855 Images = images, 856 Actives = productActivesJSON, 857 StorageCondition = productStorageConditionJSON, 858 PackSize = productPackSize, 859 WithdrawalPeriod = productWithdrawalPeriod, 860 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "", 861 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "", 862 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "", 863 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "", 864 ShowDatasheet = showProductFileTypeDatasheet, 865 ShowPackInsert = showProductFileTypePackInsert, 866 ShowSPC = showProductFileTypeSPC, 867 ShowMSDS = showProductFileTypeMSDS, 868 HasDocuments = hasDocuments, 869 Disclaimer = productDisclaimerJSON, 870 ShopInformation = productShopInformationJSON 871 }; 872 873 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 874 <div class="row px-sm-1 my-2 my-sm-0"> 875 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 876 <div class="row"> 877 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 878 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 879 </div> 880 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 881 <p class="mb-0"> 882 @if(applyRangeNameToProductNames) 883 { 884 <b>@productDisplayNameSuperscripted</b> 885 } 886 else 887 { 888 <b class="h3">@displayNameSuperscripted</b> 889 <br> @productDisplayNameSuperscripted 890 } 891 </p> 892 </div> 893 <div class="col-2 d-none d-sm-block my-auto text-center"> 894 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 895 </div> 896 </div> 897 <script type="application/json" class="@urlFriendlyProductName"> 898 @JsonService.Instance.ToJson( JSON ) 899 </script> 900 </div> 901 </div> 902 </a> 903 } 904 </div> 905 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 906 <div class="js-dvp-product-details-animate fade"> 907 <div class="row"> 908 <div class="col-12"> 909 <div class="e-product-image-container dvp-product-details-image-container text-center"> 910 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 911 </div> 912 </div> 913 </div> 914 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 915 { 916 <div class="row"> 917 <div class="col-12"> 918 @productShortDescriptionJSON 919 </div> 920 </div> 921 } 922 <div class="row"> 923 <div class="col-12 mt-2 table-responsive"> 924 <table class="table"> 925 @if(!string.IsNullOrEmpty(productActives)) 926 { 927 <tr> 928 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 929 <td>@productActives</td> 930 </tr> 931 } 932 @if(!string.IsNullOrEmpty(productPackSize)) 933 { 934 <tr> 935 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 936 <td>@productPackSize</td> 937 </tr> 938 } 939 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 940 { 941 <tr> 942 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 943 <td>@productWithdrawalPeriod</td> 944 </tr> 945 } 946 @if(!string.IsNullOrEmpty(productStorageCondition)) 947 { 948 <tr> 949 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 950 <td>@productStorageCondition</td> 951 </tr> 952 } 953 @if(hasDocuments) 954 { 955 <tr> 956 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 957 <td> 958 @if(!string.IsNullOrEmpty(productDatasheet)) 959 { 960 if ( showProductFileTypeDatasheet ) 961 { 962 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 963 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 964 </a> 965 } 966 else 967 { 968 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 969 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 970 </a> 971 } 972 } 973 @if(!string.IsNullOrEmpty(productPackInsert)) 974 { 975 if ( showProductFileTypePackInsert ) 976 { 977 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 978 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 979 </a> 980 } 981 else 982 { 983 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 984 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 985 </a> 986 } 987 } 988 @if(!string.IsNullOrEmpty(productSPC)) 989 { 990 if ( showProductFileTypeSPC ) 991 { 992 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 993 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 994 </a> 995 } 996 else 997 { 998 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 999 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1000 </a> 1001 } 1002 } 1003 @if(!string.IsNullOrEmpty(productMSDS)) 1004 { 1005 if ( showProductFileTypeMSDS ) 1006 { 1007 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 1008 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 1009 </a> 1010 } 1011 else 1012 { 1013 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1014 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1015 </a> 1016 } 1017 } 1018 </td> 1019 </tr> 1020 } 1021 </table> 1022 </div> 1023 </div> 1024 @if(!string.IsNullOrEmpty(productShopInformationJSON)) 1025 { 1026 <div class="row"> 1027 <div class="col-12"> 1028 <div class="table-responsive"> 1029 @productShopInformationJSON 1030 </div> 1031 </div> 1032 </div> 1033 } 1034 @if(!string.IsNullOrEmpty(productDisclaimer)) 1035 { 1036 <div class="row"> 1037 <div class="col-12"> 1038 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1039 <small> 1040 @productDisclaimer 1041 </small> 1042 </div> 1043 </div> 1044 } 1045 @if(!hideRequestmoreinformation) 1046 { 1047 <div class="row"> 1048 <div class="col-12"> 1049 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1050 @Translate("Request more information","Request more information") 1051 </button> 1052 </div> 1053 </div> 1054 } 1055 </div> 1056 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 1057 <div class="js-dvp-product-details-animate fade"> 1058 <div class="e-product-image-container multi-range"> 1059 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 1060 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 1061 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 1062 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 1063 </div> 1064 {{#each Images}} 1065 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 1066 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 1067 </div> 1068 {{/each}} 1069 </div> 1070 {{#if Images}} 1071 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 1072 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 1073 <ol class="carousel-indicators"> 1074 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 1075 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 1076 </li> 1077 {{#each Images}} 1078 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 1079 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 1080 </li> 1081 {{/each}} 1082 </ol> 1083 {{/if}} 1084 </div> 1085 </div> 1086 {{#if ShortDescription}} 1087 <div class="dvp-short-description"> 1088 {{{ShortDescription}}} 1089 </div> 1090 {{/if}} 1091 <div class="row"> 1092 <div class="col-12 mt-2 table-responsive"> 1093 <table class="table"> 1094 {{#if Actives}} 1095 <tr> 1096 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 1097 <td>{{{Actives}}}</td> 1098 </tr> 1099 {{/if}} 1100 {{#if PackSize}} 1101 <tr> 1102 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 1103 <td>{{PackSize}}</td> 1104 </tr> 1105 {{/if}} 1106 {{#if WithdrawalPeriod}} 1107 <tr> 1108 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 1109 <td>{{{WithdrawalPeriod}}}</td> 1110 </tr> 1111 {{/if}} 1112 {{#if StorageCondition}} 1113 <tr> 1114 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1115 <td>{{{StorageCondition}}}</td> 1116 </tr> 1117 {{/if}} 1118 {{#if HasDocuments}} 1119 <tr> 1120 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1121 <td> 1122 {{#if Datasheet}} 1123 {{#if ShowDatasheet}} 1124 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 1125 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i> 1126 </a> 1127 {{else}} 1128 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1129 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1130 </a> 1131 {{/if}} 1132 {{/if}} 1133 {{#if PackInsert}} 1134 {{#if ShowPackInsert}} 1135 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}"> 1136 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i> 1137 </a> 1138 {{else}} 1139 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1140 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1141 </a> 1142 {{/if}} 1143 {{/if}} 1144 {{#if SPC}} 1145 {{#if ShowSPC}} 1146 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}"> 1147 @Translate("SPC","SPC") <i class="material-icons">get_app</i> 1148 </a> 1149 {{else}} 1150 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1151 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1152 </a> 1153 {{/if}} 1154 {{/if}} 1155 {{#if MSDS}} 1156 {{#if ShowMSDS}} 1157 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}"> 1158 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i> 1159 </a> 1160 {{else}} 1161 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1162 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1163 </a> 1164 {{/if}} 1165 {{/if}} 1166 </td> 1167 </tr> 1168 {{/if}} 1169 </table> 1170 </div> 1171 </div> 1172 {{#if ShopInformation}} 1173 <div class="row mt-1"> 1174 <div class="col-12"> 1175 <div class="table-responsive"> 1176 {{{ShopInformation}}} 1177 </div> 1178 </div> 1179 </div> 1180 {{/if}} 1181 {{#if Disclaimer}} 1182 <div class="row mt-1"> 1183 <div class="col-12"> 1184 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1185 <small> 1186 {{{Disclaimer}}} 1187 </small> 1188 </div> 1189 </div> 1190 {{/if}} 1191 @if(!hideRequestmoreinformation) 1192 { 1193 <div class="row"> 1194 <div class="col-12"> 1195 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1196 @Translate("Request more information","Request more information") 1197 </button> 1198 </div> 1199 </div> 1200 } 1201 </div> 1202 </script> 1203 </div> 1204 </div> 1205 } 1206 else 1207 { 1208 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 1209 { 1210 1211 groupId = product.GetString("Ecom:Group.ID"); 1212 1213 productName = product.GetString("Ecom:Product.Name"); 1214 productNameJSON = productName.Replace("\"","&quot;"); 1215 1216 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 1217 1218 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 1219 1220 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 1221 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 1222 1223 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 1224 1225 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 1226 1227 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 1228 1229 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 1230 1231 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 1232 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 1233 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 1234 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 1235 1236 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 1237 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 1238 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 1239 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 1240 1241 hasDocuments = true; 1242 1243 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 1244 { 1245 hasDocuments = false; 1246 } 1247 1248 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 1249 1250 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 1251 1252 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 1253 1254 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 1255 1256 } 1257 <div class="row e-product dvp-product-details"> 1258 <div class="col-12"> 1259 <div class="row"> 1260 <div class="col-12"> 1261 <h1 class="mb-1 font-weight-bold"> 1262 @rangeNameSuperscripted 1263 </h1> 1264 </div> 1265 </div> 1266 </div> 1267 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 1268 <div class="row"> 1269 <div class="col-12"> 1270 <div class="e-product-image-container single-range"> 1271 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 1272 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 1273 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 1274 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 1275 </div> 1276 1277 @for(int i = 0; i < images.Count(); i++) 1278 { 1279 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 1280 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 1281 </div> 1282 } 1283 </div> 1284 @if(images.Any()) 1285 { 1286 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 1287 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 1288 <ol class="carousel-indicators"> 1289 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 1290 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 1291 </li> 1292 @for(int i = 0; i < images.Count(); i++) 1293 { 1294 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 1295 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 1296 </li> 1297 } 1298 </ol> 1299 } 1300 </div> 1301 </div> 1302 </div> 1303 </div> 1304 </div> 1305 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 1306 @if(!string.IsNullOrEmpty(optionalName)) 1307 { 1308 <div class="row"> 1309 <div class="col-12"> 1310 <h2 class="mb-0">@displayNameSuperscripted</h2> 1311 </div> 1312 </div> 1313 } 1314 @if(!string.IsNullOrEmpty(productShortDescription)) 1315 { 1316 <div class="row"> 1317 <div class="col-12"> 1318 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 1319 </div> 1320 </div> 1321 } 1322 <div class="row"> 1323 <div class="col-12 mt-2 table-responsive"> 1324 <table class="table"> 1325 @if(!string.IsNullOrEmpty(productActives)) 1326 { 1327 <tr> 1328 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 1329 <td>@productActives</td> 1330 </tr> 1331 } 1332 @if(!string.IsNullOrEmpty(productPackSize)) 1333 { 1334 <tr> 1335 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 1336 <td>@productPackSize</td> 1337 </tr> 1338 } 1339 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 1340 { 1341 <tr> 1342 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 1343 <td>@productWithdrawalPeriod</td> 1344 </tr> 1345 } 1346 @if(!string.IsNullOrEmpty(productStorageCondition)) 1347 { 1348 <tr> 1349 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 1350 <td>@productStorageCondition</td> 1351 </tr> 1352 } 1353 @if(hasDocuments) 1354 { 1355 <tr> 1356 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 1357 <td> 1358 @if(!string.IsNullOrEmpty(productDatasheet)) 1359 { 1360 if ( showProductFileTypeDatasheet ) 1361 { 1362 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 1363 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 1364 </a> 1365 } 1366 else 1367 { 1368 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1369 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 1370 </a> 1371 } 1372 } 1373 @if(!string.IsNullOrEmpty(productPackInsert)) 1374 { 1375 if ( showProductFileTypePackInsert ) 1376 { 1377 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 1378 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 1379 </a> 1380 } 1381 else 1382 { 1383 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1384 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 1385 </a> 1386 } 1387 } 1388 @if(!string.IsNullOrEmpty(productSPC)) 1389 { 1390 if ( showProductFileTypeSPC ) 1391 { 1392 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 1393 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 1394 </a> 1395 } 1396 else 1397 { 1398 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1399 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 1400 </a> 1401 } 1402 } 1403 @if(!string.IsNullOrEmpty(productMSDS)) 1404 { 1405 if ( showProductFileTypeMSDS ) 1406 { 1407 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 1408 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 1409 </a> 1410 } 1411 else 1412 { 1413 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 1414 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 1415 </a> 1416 } 1417 } 1418 </td> 1419 </tr> 1420 } 1421 </table> 1422 </div> 1423 </div> 1424 @if(!string.IsNullOrEmpty(productShopInformation)) 1425 { 1426 <div class="row mt-1"> 1427 <div class="col-12"> 1428 <div class="table-responsive"> 1429 @productShopInformation 1430 </div> 1431 </div> 1432 </div> 1433 } 1434 @if(!string.IsNullOrEmpty(productDisclaimer)) 1435 { 1436 <div class="row mt-1"> 1437 <div class="col-12"> 1438 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 1439 <small> 1440 @productDisclaimer 1441 </small> 1442 </div> 1443 </div> 1444 } 1445 @if(!hideRequestmoreinformation) 1446 { 1447 <div class="row"> 1448 <div class="col-12"> 1449 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 1450 @Translate("Request more information","Request more information") 1451 </button> 1452 </div> 1453 </div> 1454 } 1455 </div> 1456 </div> 1457 } 1458 1459 int productPanelsItemId = 0; 1460 1461 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 1462 { 1463 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 1464 1465 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 1466 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 1467 { 1468 string productPanelNameValue = productPanel.GetValue<string>("Name"); 1469 1470 if(productPanelNameValue == "Premium Content") 1471 { 1472 <div class="col-12" id="js-dvp-product-premium-content"> 1473 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1474 <div class="row"> 1475 <div class="col-12 is-loading"> 1476 <div class="e-loading-spinner"></div> 1477 </div> 1478 </div> 1479 </div> 1480 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 1481 <div class="js-dvp-product-premium-content-animate fade"> 1482 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1483 <div class="row"> 1484 <div class="col-12 col-md-4"> 1485 <div class="e-product-section-header"> 1486 <h2 class="mb-1 mb-md-0"> 1487 @Translate("Premium Content","Premium Content") 1488 </h2> 1489 </div> 1490 </div> 1491 <div class="col-12 col-md-8 mt-half"> 1492 {{#each premiumPages}} 1493 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 1494 <div class="col-12 col-md-6"> 1495 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 1496 </div> 1497 <div class="col-12 col-md-6"> 1498 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 1499 <p>{{searchFriendlyDescription}}</p> 1500 <p> 1501 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 1502 {{searchFriendlyButtonText}} 1503 </a> 1504 </p> 1505 </div> 1506 </div> 1507 {{/each}} 1508 </div> 1509 </div> 1510 </div> 1511 </div> 1512 </script> 1513 </div> 1514 } 1515 else if(productPanelNameValue == "Supportmaterials for vets") 1516 { 1517 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 1518 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1519 <div class="row"> 1520 <div class="col-12 is-loading"> 1521 <div class="e-loading-spinner"></div> 1522 </div> 1523 </div> 1524 </div> 1525 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 1526 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 1527 {{#if vetSupportmaterials.items}} 1528 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1529 <div class="row"> 1530 {{#if vetSupportmaterials.display}} 1531 <div class="col-12 col-md-4"> 1532 <div class="e-product-section-header"> 1533 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 1534 </div> 1535 </div> 1536 <div class="col-12 col-md-8 mt-half"> 1537 {{#each vetSupportmaterials.items}} 1538 1539 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 1540 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1541 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1542 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1543 </p> 1544 1545 <div class="row"> 1546 <div class="col-12"> 1547 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 1548 <div class="row"> 1549 <div class="col-12 pl-md-3"> 1550 <div class="row"> 1551 {{#each materials}} 1552 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1553 <div class="row"> 1554 <div class="col-12 col-md-6 text-center"> 1555 {{#if download}} 1556 {{#if loginToDownload}} 1557 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1558 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1559 </a> 1560 {{else}} 1561 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 1562 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1563 </a> 1564 {{/if}} 1565 {{else}} 1566 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1567 {{/if}} 1568 </div> 1569 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1570 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1571 1572 {{#if loginToDownload}} 1573 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1574 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 1575 </a> 1576 {{else}} 1577 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 1578 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1579 </a> 1580 {{/if}} 1581 1582 @if(shopIsActive && hasAccess) 1583 { 1584 @:{{#if orderable}} 1585 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1586 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1587 <input type="hidden" name="CartCmd" value="Add"> 1588 <input type="hidden" name="ProductID" value="{{id}}"> 1589 <input type="hidden" name="VariantID" value=""> 1590 <input type="hidden" name="UnitID" value=""> 1591 <input type="hidden" name="Redirect" value="false"> 1592 <input type="hidden" name="Quantity" value="1"> 1593 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1594 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1595 </form> 1596 @:{{/if}} 1597 } 1598 </div> 1599 </div> 1600 </div> 1601 {{/each}} 1602 </div> 1603 </div> 1604 </div> 1605 </div> 1606 </div> 1607 </div> 1608 {{/each}} 1609 </div> 1610 {{else}} 1611 <div class="col-12 text-center"> 1612 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 1613 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 1614 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1615 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1616 </div> 1617 {{/if}} 1618 </div> 1619 </div> 1620 {{/if}} 1621 </div> 1622 </script> 1623 1624 </div> 1625 } 1626 else if(productPanelNameValue == "Supportmaterials for pet owners") 1627 { 1628 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 1629 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1630 <div class="row"> 1631 <div class="col-12 is-loading"> 1632 <div class="e-loading-spinner"></div> 1633 </div> 1634 </div> 1635 </div> 1636 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 1637 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 1638 {{#if clientSupportmaterials.items}} 1639 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1640 <div class="row"> 1641 {{#if clientSupportmaterials.display}} 1642 <div class="col-12 col-md-4"> 1643 <div class="e-product-section-header"> 1644 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 1645 </div> 1646 </div> 1647 <div class="col-12 col-md-8 mt-half"> 1648 {{#each clientSupportmaterials.items}} 1649 1650 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 1651 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 1652 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 1653 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 1654 </p> 1655 1656 <div class="row"> 1657 <div class="col-12"> 1658 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 1659 <div class="row"> 1660 <div class="col-12 pl-md-3"> 1661 <div class="row"> 1662 {{#each materials}} 1663 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 1664 <div class="row"> 1665 <div class="col-12 col-md-6 text-center"> 1666 {{#if download}} 1667 {{#if loginToDownload}} 1668 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 1669 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1670 </a> 1671 {{else}} 1672 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 1673 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1674 </a> 1675 {{/if}} 1676 {{else}} 1677 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 1678 {{/if}} 1679 </div> 1680 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 1681 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 1682 {{#if download}} 1683 <p class="mb-1"> 1684 {{#if loginToDownload}} 1685 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 1686 {{else}} 1687 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 1688 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 1689 </a> 1690 {{/if}} 1691 </p> 1692 {{/if}} 1693 1694 @if(shopIsActive && hasAccess) 1695 { 1696 @:{{#if orderable}} 1697 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 1698 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 1699 <input type="hidden" name="CartCmd" value="Add"> 1700 <input type="hidden" name="ProductID" value="{{id}}"> 1701 <input type="hidden" name="VariantID" value=""> 1702 <input type="hidden" name="UnitID" value=""> 1703 <input type="hidden" name="Redirect" value="false"> 1704 <input type="hidden" name="Quantity" value="1"> 1705 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 1706 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 1707 </form> 1708 @:{{/if}} 1709 } 1710 1711 </div> 1712 </div> 1713 </div> 1714 {{/each}} 1715 </div> 1716 </div> 1717 </div> 1718 </div> 1719 </div> 1720 </div> 1721 {{/each}} 1722 </div> 1723 {{else}} 1724 <div class="col-12 text-center"> 1725 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 1726 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 1727 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 1728 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1729 </div> 1730 {{/if}} 1731 </div> 1732 </div> 1733 {{/if}} 1734 </div> 1735 </script> 1736 1737 </div> 1738 } 1739 else if(productPanelNameValue == "Videos") 1740 { 1741 <div class="col-12" id="js-dvp-product-videos"> 1742 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1743 <div class="row"> 1744 <div class="col-12 is-loading"> 1745 <div class="e-loading-spinner"></div> 1746 </div> 1747 </div> 1748 </div> 1749 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 1750 <div class="js-dvp-product-videos-animate fade"> 1751 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1752 <div class="row"> 1753 {{#if display}} 1754 <div class="col-12 col-md-4"> 1755 <div class="e-product-section-header"> 1756 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 1757 </div> 1758 </div> 1759 <div class="col-12 col-md-8 mt-half"> 1760 {{#compare totalVideoCount '>' 4}} 1761 <div class="collapse-peek"> 1762 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 1763 {{/compare}} 1764 <div class="row"> 1765 {{#each videos}} 1766 {{#each videos}} 1767 <div class="col-12 col-md-6"> 1768 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 1769 <div> 1770 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 1771 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 1772 </div> 1773 </a> 1774 <sc{{handlebarHack}}ript type="application/json"> 1775 { 1776 "url":"{{../url}}", 1777 "header":"{{embedTitle}}", 1778 "embedUrl":"{{{embedUrl}}}" 1779 } 1780 </sc{{handlebarHack}}ript> 1781 </div> 1782 {{/each}} 1783 {{/each}} 1784 </div> 1785 {{#compare totalVideoCount '>' 4}} 1786 </div> 1787 <div class="collapse-peek-toggle"> 1788 <div class="row"> 1789 <div class="col-12 mx-auto text-center"> 1790 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 1791 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 1792 </a> 1793 </div> 1794 </div> 1795 </div> 1796 {{/compare}} 1797 </div> 1798 </div> 1799 {{else}} 1800 <div class="col-12 text-center"> 1801 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 1802 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 1803 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 1804 </div> 1805 {{/if}} 1806 </div> 1807 </div> 1808 </div> 1809 </script> 1810 </div> 1811 } 1812 else if(productPanelNameValue == "Related ranges") 1813 { 1814 <div class="col-12"> 1815 @if( GetLoop("RelatedRanges").Count() > 0 ) 1816 { 1817 string relatedProductsHeader = Translate("Other related products","Other related products"); 1818 1819 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 1820 { 1821 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 1822 } 1823 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1824 <div class="row"> 1825 <div class="col-12 col-md-4"> 1826 <div class="e-product-section-header"> 1827 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 1828 </div> 1829 </div> 1830 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 1831 <div class="row"> 1832 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 1833 { 1834 string relatedRangeGroupId = ""; 1835 1836 int relatedProductInt = 0; 1837 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 1838 string relatedRangeName = relatedRange.GetString("Range"); 1839 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 1840 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 1841 1842 <div class="col-12 col-lg-6 mb-3"> 1843 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 1844 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 1845 </div> 1846 <div class="col-12 px-1 pt-1 border dvp-range"> 1847 <div> 1848 <div class="row"> 1849 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 1850 { 1851 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 1852 1853 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 1854 1855 if(relatedProductInt == 2) 1856 { 1857 @:</div> 1858 @:</div> 1859 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 1860 @:<div class="row"> 1861 } 1862 1863 string relatedUrl = string.Empty; 1864 1865 string relatedUrlFriendlyProduct = string.Empty; 1866 1867 string relatedProductName = product.GetString("Ecom:Product.Name"); 1868 1869 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 1870 1871 string relatedProductDisplayName = relatedProductName; 1872 string relatedProductTitleName = relatedProductName; 1873 1874 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 1875 { 1876 if(hideRelatedProductName) 1877 { 1878 relatedProductDisplayName = relatedRangeNameSuperscripted; 1879 relatedProductTitleName = relatedRangeName; 1880 } 1881 else 1882 { 1883 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 1884 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 1885 } 1886 } 1887 1888 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 1889 { 1890 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 1891 } 1892 else 1893 { 1894 relatedUrl = relatedProductName; 1895 } 1896 1897 if(relatedProductsInRangeCount > 1) 1898 { 1899 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 1900 } 1901 1902 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 1903 1904 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 1905 1906 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 1907 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 1908 <div class="row"> 1909 <div class="col-12 dvp-image-container"> 1910 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 1911 </div> 1912 <div class="col-12"> 1913 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 1914 </div> 1915 </div> 1916 </a> 1917 </div> 1918 1919 relatedProductInt++; 1920 } 1921 </div> 1922 </div> 1923 <div class="row mt-1 dvp-view-more-products"> 1924 @if(relatedProductsInRangeCount > 2) 1925 { 1926 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 1927 1928 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 1929 1930 if(relatedProductsInRangeCount == 3 ) 1931 { 1932 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 1933 } 1934 1935 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 1936 1937 <div class="col-12"> 1938 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 1939 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 1940 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 1941 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 1942 </a> 1943 </p> 1944 </div> 1945 } 1946 </div> 1947 </div> 1948 </div> 1949 } 1950 </div> 1951 </div> 1952 </div> 1953 </div> 1954 } 1955 </div> 1956 } 1957 else if(productPanelNameValue == "Newsletter") 1958 { 1959 <div class="col-12"> 1960 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1961 <div class="row"> 1962 <div class="col-12 col-md-4"> 1963 <div class="e-product-section-header"> 1964 <h2 class="mb-1 mb-md-0">Newsletter</h2> 1965 </div> 1966 </div> 1967 <div class="col-12 col-md-8"> 1968 <div class="dvp-newsletter-signup-form"> 1969 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 1970 <div class="form-group"> 1971 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 1972 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 1973 </div> 1974 <div class="form-group"> 1975 <button type="submit" class="btn btn-primary">Sign up</button> 1976 </div> 1977 </form> 1978 </div> 1979 </div> 1980 </div> 1981 </div> 1982 </div> 1983 } 1984 else if(productPanelNameValue == "eLearning") 1985 { 1986 <div class="col-12" id="js-dvp-product-elearning"> 1987 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1988 <div class="row"> 1989 <div class="col-12 is-loading"> 1990 <div class="e-loading-spinner"></div> 1991 </div> 1992 </div> 1993 </div> 1994 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 1995 <div class="js-dvp-product-elearning-animate fade"> 1996 {{#if elearning.items}} 1997 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 1998 <div class="row"> 1999 <div class="col-12 col-md-4"> 2000 <div class="e-product-section-header"> 2001 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 2002 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 2003 </div> 2004 </div> 2005 <div class="col-12 col-md-8"> 2006 <h3> 2007 {{elearning.items.0.courseAmountText}} 2008 </h3> 2009 <div class="row"> 2010 <div class="col-12"> 2011 <div class="list-group"> 2012 {{#if elearning.display}} 2013 {{#each elearning.items.0.courses}} 2014 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2015 <b>{{name}}</b> 2016 </a> 2017 {{/each}} 2018 {{else}} 2019 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 2020 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2021 {{/if}} 2022 </div> 2023 </div> 2024 </div> 2025 {{#unless elearning.display}} 2026 <div class="row mt-2"> 2027 <div class="col-12"> 2028 <div class="bg-academy"> 2029 <div class="row p-2"> 2030 @{ 2031 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 2032 } 2033 <div class="col-12"> 2034 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 2035 </div> 2036 <div class="col-12 col-md-8 text-white"> 2037 <ul class="mb-0"> 2038 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 2039 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 2040 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 2041 </ul> 2042 </div> 2043 <div class="col-12 col-md-4 pt-2"> 2044 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 2045 </div> 2046 </div> 2047 </div> 2048 </div> 2049 </div> 2050 {{/unless}} 2051 </div> 2052 </div> 2053 </div> 2054 {{/if}} 2055 </div> 2056 </script> 2057 </div> 2058 } 2059 else if(productPanelNameValue == "Product Websites") 2060 { 2061 <div class="col-12" id="js-dvp-product-websites"> 2062 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2063 <div class="row"> 2064 <div class="col-12 is-loading"> 2065 <div class="e-loading-spinner"></div> 2066 </div> 2067 </div> 2068 </div> 2069 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 2070 <div class="js-dvp-product-websites-animate fade"> 2071 {{#if websites.items}} 2072 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2073 <div class="row"> 2074 {{#if websites.display}} 2075 <div class="col-12 col-md-4"> 2076 <div class="e-product-section-header"> 2077 <h2 class="mb-1 mb-md-0"> 2078 {{#compare count '>' 1}} 2079 @Translate("Product Websites","Product Websites") 2080 {{else}} 2081 @Translate("Product Website","Product Website") 2082 {{/compare}} 2083 </h2> 2084 </div> 2085 </div> 2086 <div class="col-12 col-md-8 mt-half"> 2087 {{#each websites.items.0.website}} 2088 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 2089 <div class="col-12 col-md-6"> 2090 <p class="lead"> 2091 {{name}} 2092 </p> 2093 <p> 2094 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2095 @Translate("Go to website","Go to website") 2096 </a> 2097 </p> 2098 </div> 2099 <div class="col-12 col-md-6"> 2100 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 2101 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 2102 </a> 2103 </div> 2104 </div> 2105 {{/each}} 2106 </div> 2107 {{else}} 2108 <div class="col-12 text-center"> 2109 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 2110 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 2111 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2112 </div> 2113 {{/if}} 2114 </div> 2115 </div> 2116 {{/if}} 2117 </div> 2118 </script> 2119 </div> 2120 } 2121 else if(productPanelNameValue == "Previous Premium Content") 2122 { 2123 <div class="col-12" id="js-dvp-product-previous-premium-content"> 2124 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2125 <div class="row"> 2126 <div class="col-12 is-loading"> 2127 <div class="e-loading-spinner"></div> 2128 </div> 2129 </div> 2130 </div> 2131 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 2132 <div class="js-dvp-product-previous-premium-content-animate fade"> 2133 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2134 <div class="row"> 2135 <div class="col-12 col-md-4"> 2136 <div class="e-product-section-header"> 2137 <h2 class="mb-1 mb-md-0"> 2138 @Translate("Previous Premium Content","Premium Content") 2139 </h2> 2140 </div> 2141 </div> 2142 <div class="col-12 col-md-8 mt-half"> 2143 {{#each premiumPages}} 2144 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 2145 <div class="col-12 col-md-6"> 2146 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 2147 </div> 2148 <div class="col-12 col-md-6"> 2149 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 2150 <p>{{searchFriendlyDescription}}</p> 2151 <p> 2152 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 2153 {{searchFriendlyButtonText}} 2154 </a> 2155 </p> 2156 </div> 2157 </div> 2158 {{/each}} 2159 </div> 2160 </div> 2161 </div> 2162 </div> 2163 </script> 2164 </div> 2165 } 2166 else if(productPanelNameValue == "Frequent Treatment Questions") 2167 { 2168 <div class="col-12" id="js-dvp-product-faq"> 2169 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2170 <div class="row"> 2171 <div class="col-12 is-loading"> 2172 <div class="e-loading-spinner"></div> 2173 </div> 2174 </div> 2175 </div> 2176 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 2177 <div class="js-dvp-product-faq-animate fade"> 2178 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2179 <div class="row"> 2180 {{#if display}} 2181 <div class="col-12 col-md-4"> 2182 <div class="e-product-section-header"> 2183 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 2184 </div> 2185 </div> 2186 <div class="col-12 col-md-8 mt-half dvp-faq"> 2187 {{# faqs}} 2188 {{#each faq}} 2189 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 2190 <div class="row"> 2191 <div class="col-12"> 2192 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 2193 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 2194 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 2195 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 2196 </h3> 2197 </div> 2198 </div> 2199 <div class="row"> 2200 <div class="col-12"> 2201 <div class="collapse" id="collapse-{{paragraphId}}"> 2202 <div class="row"> 2203 <div class="col-12 pl-3"> 2204 {{#each faqList}} 2205 <div class="row"> 2206 <div class="col-12 mt-1"> 2207 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 2208 {{listHeader}} 2209 </a> 2210 <sc{{handlebarHack}}ript type="application/json"> 2211 { 2212 "url":"{{../../url}}", 2213 "categoryName": "{{../categoryName}}", 2214 "header":"{{listHeader}}", 2215 "content":"{{{listContent}}}" 2216 } 2217 </sc{{handlebarHack}}ript> 2218 </div> 2219 </div> 2220 {{/each}} 2221 </div> 2222 </div> 2223 </div> 2224 </div> 2225 </div> 2226 </div> 2227 {{/each}} 2228 {{/faqs}} 2229 2230 {{#each accordions}} 2231 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 2232 {{#if introText}} 2233 <div class="p-accordion-lead"> 2234 {{{introText}}} 2235 </div> 2236 {{/if}} 2237 <div class="p-accordion-container "> 2238 {{#each accordionItems}} 2239 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 2240 <div class="p-accordion-toggle"> 2241 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 2242 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 2243 {{heading}} 2244 </span> 2245 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 2246 </p> 2247 </div> 2248 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 2249 <div class="px-2 pb-1 p-accordion-content"> 2250 <div class="p-txt-container dvp-rich-text-content pt-1"> 2251 {{{text}}} 2252 </div> 2253 </div> 2254 </div> 2255 </div> 2256 {{/each}} 2257 </div> 2258 </div> 2259 {{/each}} 2260 2261 2262 </div> 2263 {{else}} 2264 <div class="col-12 text-center"> 2265 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 2266 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 2267 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 2268 </div> 2269 {{/if}} 2270 </div> 2271 </div> 2272 </div> 2273 </script> 2274 </div> 2275 } 2276 else if(productPanelNameValue == "Got More Questions form") 2277 { 2278 <div class="col-12 js-dvp-product-details-more-info-section"> 2279 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 2280 <div class="row"> 2281 <div class="col-12 col-md-4"> 2282 <div class="e-product-section-header"> 2283 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 2284 </div> 2285 </div> 2286 <div class="p col-12 col-md-8 mt-half"> 2287 @{ 2288 int currentPageId; 2289 2290 int.TryParse(pageId, out currentPageId); 2291 2292 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 2293 2294 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 2295 2296 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 2297 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 2298 2299 int formPageId; 2300 int formParagraphId; 2301 2302 int.TryParse(formPageIdString, out formPageId); 2303 int.TryParse(formParagraphIdString, out formParagraphId); 2304 2305 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 2306 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 2307 2308 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 2309 2310 } 2311 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 2312 </div> 2313 </div> 2314 </div> 2315 </div> 2316 } 2317 } 2318 </div> 2319 } 2320 2321 } 2322 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "supplies") 2323 { 2324 string rangeName = range.GetString("Range"); 2325 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 2326 string rangeId = string.Empty; 2327 string therapyAreaId = string.Empty; 2328 string therapyAreaName = string.Empty; 2329 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 2330 string optionalName = string.Empty; 2331 string displayName = string.Empty; 2332 string displayNameSuperscripted = string.Empty; 2333 string groupId = string.Empty; 2334 string productName = string.Empty; 2335 string productNameJSON = string.Empty; 2336 string productDisplayName = string.Empty; 2337 string productDisplayNameSuperscripted = string.Empty; 2338 string urlFriendlyProductName = string.Empty; 2339 string productShortDescription = string.Empty; 2340 string productShortDescriptionJSON = string.Empty; 2341 string productActives = string.Empty; 2342 string productActivesJSON = string.Empty; 2343 string productStorageCondition = string.Empty; 2344 string productStorageConditionJSON = string.Empty; 2345 string productPackSize = string.Empty; 2346 string productWithdrawalPeriod = string.Empty; 2347 string productDatasheet = string.Empty; 2348 string productPackInsert = string.Empty; 2349 string productSPC = string.Empty; 2350 string productMSDS = string.Empty; 2351 bool hasDocuments = true; 2352 string productDisclaimer = string.Empty; 2353 string productDisclaimerJSON = string.Empty; 2354 string productShopInformation = string.Empty; 2355 string productShopInformationJSON = string.Empty; 2356 string productImage = string.Empty; 2357 List<string> images = new List<string>(); 2358 string productUrl = string.Empty; 2359 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 2360 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 2361 2362 <div class="row"> 2363 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 2364 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 2365 {{#if premiumPages.0.searchFriendlyImageBanner}} 2366 <div class="js-dvp-product-premium-content-animate fade mb-2"> 2367 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 2368 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 2369 </a> 2370 </div> 2371 {{/if}} 2372 </script> 2373 </div> 2374 </div> 2375 2376 if(productsInRangeCount > 1) 2377 { 2378 <div class="row e-product"> 2379 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 2380 <h1 class="mb-1 font-weight-bold"> 2381 @rangeNameSuperscripted 2382 </h1> 2383 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 2384 { 2385 2386 groupId = product.GetString("Ecom:Group.ID"); 2387 2388 productName = product.GetString("Ecom:Product.Name"); 2389 productNameJSON = productName.Replace("\"","&quot;"); 2390 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 2391 2392 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 2393 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 2394 2395 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 2396 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 2397 2398 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 2399 2400 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 2401 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2402 2403 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 2404 2405 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 2406 2407 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 2408 2409 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 2410 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2411 2412 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 2413 productStorageConditionJSON = WebUtility.HtmlDecode(Regex.Replace(productStorageCondition, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2414 2415 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 2416 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 2417 2418 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 2419 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 2420 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 2421 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 2422 2423 hasDocuments = true; 2424 2425 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 2426 { 2427 hasDocuments = false; 2428 } 2429 2430 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 2431 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 2432 2433 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value"); 2434 productShopInformationJSON = WebUtility.HtmlDecode(Regex.Replace(productShopInformation, @"\t|\n|\r", " ")).Replace("\"","'").Replace("<table>","<table class='table table-striped table-condensed'>"); 2435 2436 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 2437 2438 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 2439 2440 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 2441 2442 dynamic JSON = new { 2443 Name = productDisplayName, 2444 ShortDescription = productShortDescriptionJSON, 2445 Image = productImage, 2446 Images = images, 2447 Actives = productActivesJSON, 2448 StorageCondition = productStorageConditionJSON, 2449 PackSize = productPackSize, 2450 WithdrawalPeriod = productWithdrawalPeriod, 2451 Datasheet = !string.IsNullOrEmpty(productDatasheet) ? showProductFileTypeDatasheet ? productDatasheet : "None" : "", 2452 PackInsert = !string.IsNullOrEmpty(productPackInsert) ? showProductFileTypePackInsert ? productPackInsert : "None" : "", 2453 SPC = !string.IsNullOrEmpty(productSPC) ? showProductFileTypeSPC ? productSPC : "None" : "", 2454 MSDS = !string.IsNullOrEmpty(productMSDS) ? showProductFileTypeMSDS ? productMSDS : "None" : "", 2455 ShowDatasheet = showProductFileTypeDatasheet, 2456 ShowPackInsert = showProductFileTypePackInsert, 2457 ShowSPC = showProductFileTypeSPC, 2458 ShowMSDS = showProductFileTypeMSDS, 2459 HasDocuments = hasDocuments, 2460 Disclaimer = productDisclaimerJSON, 2461 ShopInformation = productShopInformationJSON 2462 }; 2463 2464 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 2465 <div class="row px-sm-1 my-2 my-sm-0"> 2466 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 2467 <div class="row"> 2468 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 2469 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 2470 </div> 2471 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 2472 <p class="mb-0"> 2473 @if(applyRangeNameToProductNames) 2474 { 2475 <b>@productDisplayNameSuperscripted</b> 2476 } 2477 else 2478 { 2479 <b class="h3">@displayNameSuperscripted</b> 2480 <br> @productDisplayNameSuperscripted 2481 } 2482 </p> 2483 </div> 2484 <div class="col-2 d-none d-sm-block my-auto text-center"> 2485 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 2486 </div> 2487 </div> 2488 <script type="application/json" class="@urlFriendlyProductName"> 2489 @JsonService.Instance.ToJson( JSON ) 2490 </script> 2491 </div> 2492 </div> 2493 </a> 2494 } 2495 </div> 2496 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 2497 <div class="js-dvp-product-details-animate fade"> 2498 <div class="row"> 2499 <div class="col-12"> 2500 <div class="e-product-image-container dvp-product-details-image-container text-center"> 2501 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 2502 </div> 2503 </div> 2504 </div> 2505 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 2506 { 2507 <div class="row"> 2508 <div class="col-12"> 2509 @productShortDescriptionJSON 2510 </div> 2511 </div> 2512 } 2513 <div class="row"> 2514 <div class="col-12 mt-2 table-responsive"> 2515 <table class="table"> 2516 @if(!string.IsNullOrEmpty(productActives)) 2517 { 2518 <tr> 2519 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2520 <td>@productActives</td> 2521 </tr> 2522 } 2523 @if(!string.IsNullOrEmpty(productPackSize)) 2524 { 2525 <tr> 2526 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2527 <td>@productPackSize</td> 2528 </tr> 2529 } 2530 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 2531 { 2532 <tr> 2533 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2534 <td>@productWithdrawalPeriod</td> 2535 </tr> 2536 } 2537 @if(!string.IsNullOrEmpty(productStorageCondition)) 2538 { 2539 <tr> 2540 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2541 <td>@productStorageCondition</td> 2542 </tr> 2543 } 2544 @if(hasDocuments) 2545 { 2546 <tr> 2547 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2548 <td> 2549 @if(!string.IsNullOrEmpty(productDatasheet)) 2550 { 2551 if ( showProductFileTypeDatasheet ) 2552 { 2553 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 2554 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 2555 </a> 2556 } 2557 else 2558 { 2559 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2560 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2561 </a> 2562 } 2563 } 2564 @if(!string.IsNullOrEmpty(productPackInsert)) 2565 { 2566 if ( showProductFileTypePackInsert ) 2567 { 2568 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 2569 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 2570 </a> 2571 } 2572 else 2573 { 2574 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2575 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 2576 </a> 2577 } 2578 } 2579 @if(!string.IsNullOrEmpty(productSPC)) 2580 { 2581 if ( showProductFileTypeSPC ) 2582 { 2583 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 2584 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 2585 </a> 2586 } 2587 else 2588 { 2589 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2590 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 2591 </a> 2592 } 2593 } 2594 @if(!string.IsNullOrEmpty(productMSDS)) 2595 { 2596 if ( showProductFileTypeMSDS ) 2597 { 2598 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 2599 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 2600 </a> 2601 } 2602 else 2603 { 2604 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2605 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 2606 </a> 2607 } 2608 } 2609 </td> 2610 </tr> 2611 } 2612 </table> 2613 </div> 2614 </div> 2615 @if(!string.IsNullOrEmpty(productShopInformationJSON)) 2616 { 2617 <div class="row"> 2618 <div class="col-12"> 2619 <div class="table-responsive"> 2620 @productShopInformationJSON 2621 </div> 2622 </div> 2623 </div> 2624 } 2625 @if(!string.IsNullOrEmpty(productDisclaimer)) 2626 { 2627 <div class="row"> 2628 <div class="col-12"> 2629 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 2630 <small> 2631 @productDisclaimer 2632 </small> 2633 </div> 2634 </div> 2635 } 2636 @if(!hideRequestmoreinformation) 2637 { 2638 <div class="row"> 2639 <div class="col-12"> 2640 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 2641 @Translate("Request more information","Request more information") 2642 </button> 2643 </div> 2644 </div> 2645 } 2646 </div> 2647 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 2648 <div class="js-dvp-product-details-animate fade"> 2649 <div class="e-product-image-container multi-range"> 2650 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 2651 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 2652 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 2653 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 2654 </div> 2655 {{#each Images}} 2656 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 2657 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 2658 </div> 2659 {{/each}} 2660 </div> 2661 {{#if Images}} 2662 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 2663 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 2664 <ol class="carousel-indicators"> 2665 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 2666 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 2667 </li> 2668 {{#each Images}} 2669 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 2670 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 2671 </li> 2672 {{/each}} 2673 </ol> 2674 {{/if}} 2675 </div> 2676 </div> 2677 {{#if ShortDescription}} 2678 <div class="dvp-short-description"> 2679 {{{ShortDescription}}} 2680 </div> 2681 {{/if}} 2682 <div class="row"> 2683 <div class="col-12 mt-2 table-responsive"> 2684 <table class="table"> 2685 {{#if Actives}} 2686 <tr> 2687 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2688 <td>{{{Actives}}}</td> 2689 </tr> 2690 {{/if}} 2691 {{#if PackSize}} 2692 <tr> 2693 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2694 <td>{{PackSize}}</td> 2695 </tr> 2696 {{/if}} 2697 {{#if WithdrawalPeriod}} 2698 <tr> 2699 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2700 <td>{{{WithdrawalPeriod}}}</td> 2701 </tr> 2702 {{/if}} 2703 {{#if StorageCondition}} 2704 <tr> 2705 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2706 <td>{{{StorageCondition}}}</td> 2707 </tr> 2708 {{/if}} 2709 {{#if HasDocuments}} 2710 <tr> 2711 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2712 <td> 2713 {{#if Datasheet}} 2714 {{#if ShowDatasheet}} 2715 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 2716 @Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i> 2717 </a> 2718 {{else}} 2719 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2720 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2721 </a> 2722 {{/if}} 2723 {{/if}} 2724 {{#if PackInsert}} 2725 {{#if ShowPackInsert}} 2726 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{PackInsert}}" data-tracking-type="Pack Insert" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{PackInsert}}"> 2727 @Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i> 2728 </a> 2729 {{else}} 2730 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2731 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 2732 </a> 2733 {{/if}} 2734 {{/if}} 2735 {{#if SPC}} 2736 {{#if ShowSPC}} 2737 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{SPC}}" data-tracking-type="SPC" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{SPC}}"> 2738 @Translate("SPC","SPC") <i class="material-icons">get_app</i> 2739 </a> 2740 {{else}} 2741 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2742 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 2743 </a> 2744 {{/if}} 2745 {{/if}} 2746 {{#if MSDS}} 2747 {{#if ShowMSDS}} 2748 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{MSDS}}" data-tracking-type="MSDS" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{MSDS}}"> 2749 @Translate("MSDS","MSDS") <i class="material-icons">get_app</i> 2750 </a> 2751 {{else}} 2752 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2753 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 2754 </a> 2755 {{/if}} 2756 {{/if}} 2757 </td> 2758 </tr> 2759 {{/if}} 2760 </table> 2761 </div> 2762 </div> 2763 {{#if ShopInformation}} 2764 <div class="row mt-1"> 2765 <div class="col-12"> 2766 <div class="table-responsive"> 2767 {{{ShopInformation}}} 2768 </div> 2769 </div> 2770 </div> 2771 {{/if}} 2772 {{#if Disclaimer}} 2773 <div class="row mt-1"> 2774 <div class="col-12"> 2775 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 2776 <small> 2777 {{{Disclaimer}}} 2778 </small> 2779 </div> 2780 </div> 2781 {{/if}} 2782 @if(!hideRequestmoreinformation) 2783 { 2784 <div class="row"> 2785 <div class="col-12"> 2786 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 2787 @Translate("Request more information","Request more information") 2788 </button> 2789 </div> 2790 </div> 2791 } 2792 </div> 2793 </script> 2794 </div> 2795 </div> 2796 } 2797 else 2798 { 2799 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 2800 { 2801 2802 groupId = product.GetString("Ecom:Group.ID"); 2803 2804 productName = product.GetString("Ecom:Product.Name"); 2805 productNameJSON = productName.Replace("\"","&quot;"); 2806 2807 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 2808 2809 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 2810 2811 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 2812 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 2813 2814 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 2815 2816 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 2817 2818 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 2819 2820 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 2821 2822 productActives = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 2823 productStorageCondition = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.StorageCondition.Value"); 2824 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ");; 2825 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.WithdrawalPeriod.Value"); 2826 2827 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 2828 productPackInsert = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.PackInsert.Value"); 2829 productSPC = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.SPC.Value"); 2830 productMSDS = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.MSDS.Value"); 2831 2832 hasDocuments = true; 2833 2834 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 2835 { 2836 hasDocuments = false; 2837 } 2838 2839 productDisclaimer = product.GetString("Ecom:Product.CategoryField.DechraPIMPharmaProducts.Disclaimer.Value"); 2840 2841 productShopInformation = product.GetString("Ecom:Product.CategoryField.DechraPIMShopProducts.ShopInformation.Value").Replace("<table>","<table class='table table-striped table-condensed'>"); 2842 2843 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 2844 2845 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 2846 2847 } 2848 <div class="row e-product dvp-product-details"> 2849 <div class="col-12"> 2850 <div class="row"> 2851 <div class="col-12"> 2852 <h1 class="mb-1 font-weight-bold"> 2853 @rangeNameSuperscripted 2854 </h1> 2855 </div> 2856 </div> 2857 </div> 2858 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 2859 <div class="row"> 2860 <div class="col-12"> 2861 <div class="e-product-image-container single-range"> 2862 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 2863 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 2864 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 2865 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 2866 </div> 2867 2868 @for(int i = 0; i < images.Count(); i++) 2869 { 2870 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 2871 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 2872 </div> 2873 } 2874 </div> 2875 @if(images.Any()) 2876 { 2877 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 2878 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 2879 <ol class="carousel-indicators"> 2880 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 2881 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 2882 </li> 2883 @for(int i = 0; i < images.Count(); i++) 2884 { 2885 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 2886 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 2887 </li> 2888 } 2889 </ol> 2890 } 2891 </div> 2892 </div> 2893 </div> 2894 </div> 2895 </div> 2896 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 2897 @if(!string.IsNullOrEmpty(optionalName)) 2898 { 2899 <div class="row"> 2900 <div class="col-12"> 2901 <h2 class="mb-0">@displayNameSuperscripted</h2> 2902 </div> 2903 </div> 2904 } 2905 @if(!string.IsNullOrEmpty(productShortDescription)) 2906 { 2907 <div class="row"> 2908 <div class="col-12"> 2909 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 2910 </div> 2911 </div> 2912 } 2913 <div class="row"> 2914 <div class="col-12 mt-2 table-responsive"> 2915 <table class="table"> 2916 @if(!string.IsNullOrEmpty(productActives)) 2917 { 2918 <tr> 2919 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 2920 <td>@productActives</td> 2921 </tr> 2922 } 2923 @if(!string.IsNullOrEmpty(productPackSize)) 2924 { 2925 <tr> 2926 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 2927 <td>@productPackSize</td> 2928 </tr> 2929 } 2930 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 2931 { 2932 <tr> 2933 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 2934 <td>@productWithdrawalPeriod</td> 2935 </tr> 2936 } 2937 @if(!string.IsNullOrEmpty(productStorageCondition)) 2938 { 2939 <tr> 2940 <td width="30%"><b>@Translate("Storage Condition:","Storage Condition:")</b></td> 2941 <td>@productStorageCondition</td> 2942 </tr> 2943 } 2944 @if(hasDocuments) 2945 { 2946 <tr> 2947 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 2948 <td> 2949 @if(!string.IsNullOrEmpty(productDatasheet)) 2950 { 2951 if ( showProductFileTypeDatasheet ) 2952 { 2953 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 2954 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">get_app</i> 2955 </a> 2956 } 2957 else 2958 { 2959 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2960 @Translate( "Datasheet", "Datasheet" ) <i class="material-icons">lock_outline</i> 2961 </a> 2962 } 2963 } 2964 @if(!string.IsNullOrEmpty(productPackInsert)) 2965 { 2966 if ( showProductFileTypePackInsert ) 2967 { 2968 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productPackInsert" data-tracking-type="Pack Insert" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productPackInsert"> 2969 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">get_app</i> 2970 </a> 2971 } 2972 else 2973 { 2974 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2975 @Translate( "Pack Insert", "Pack Insert" ) <i class="material-icons">lock_outline</i> 2976 </a> 2977 } 2978 } 2979 @if(!string.IsNullOrEmpty(productSPC)) 2980 { 2981 if ( showProductFileTypeSPC ) 2982 { 2983 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productSPC" data-tracking-type="SPC" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productSPC"> 2984 @Translate( "SPC", "SPC" ) <i class="material-icons">get_app</i> 2985 </a> 2986 } 2987 else 2988 { 2989 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 2990 @Translate( "SPC", "SPC" ) <i class="material-icons">lock_outline</i> 2991 </a> 2992 } 2993 } 2994 @if(!string.IsNullOrEmpty(productMSDS)) 2995 { 2996 if ( showProductFileTypeMSDS ) 2997 { 2998 <a target="_blank" class="btn btn-sm btn-secondary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productMSDS" data-tracking-type="MSDS" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productMSDS"> 2999 @Translate( "MSDS", "MSDS" ) <i class="material-icons">get_app</i> 3000 </a> 3001 } 3002 else 3003 { 3004 <a class="js-dvp-extranet-login btn btn-sm btn-danger d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="javascript:void(0);" title="@Translate("Login to download","Login to download")"> 3005 @Translate( "MSDS", "MSDS" ) <i class="material-icons">lock_outline</i> 3006 </a> 3007 } 3008 } 3009 </td> 3010 </tr> 3011 } 3012 </table> 3013 </div> 3014 </div> 3015 @if(!string.IsNullOrEmpty(productShopInformation)) 3016 { 3017 <div class="row mt-1"> 3018 <div class="col-12"> 3019 <div class="table-responsive"> 3020 @productShopInformation 3021 </div> 3022 </div> 3023 </div> 3024 } 3025 @if(!string.IsNullOrEmpty(productDisclaimer)) 3026 { 3027 <div class="row mt-1"> 3028 <div class="col-12"> 3029 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 3030 <small> 3031 @productDisclaimer 3032 </small> 3033 </div> 3034 </div> 3035 } 3036 @if(!hideRequestmoreinformation) 3037 { 3038 <div class="row"> 3039 <div class="col-12"> 3040 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 3041 @Translate("Request more information","Request more information") 3042 </button> 3043 </div> 3044 </div> 3045 } 3046 </div> 3047 </div> 3048 } 3049 3050 int productPanelsItemId = 0; 3051 3052 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 3053 { 3054 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 3055 3056 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 3057 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 3058 { 3059 string productPanelNameValue = productPanel.GetValue<string>("Name"); 3060 3061 if(productPanelNameValue == "Premium Content") 3062 { 3063 <div class="col-12" id="js-dvp-product-premium-content"> 3064 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3065 <div class="row"> 3066 <div class="col-12 is-loading"> 3067 <div class="e-loading-spinner"></div> 3068 </div> 3069 </div> 3070 </div> 3071 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 3072 <div class="js-dvp-product-premium-content-animate fade"> 3073 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3074 <div class="row"> 3075 <div class="col-12 col-md-4"> 3076 <div class="e-product-section-header"> 3077 <h2 class="mb-1 mb-md-0"> 3078 @Translate("Premium Content","Premium Content") 3079 </h2> 3080 </div> 3081 </div> 3082 <div class="col-12 col-md-8 mt-half"> 3083 {{#each premiumPages}} 3084 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 3085 <div class="col-12 col-md-6"> 3086 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 3087 </div> 3088 <div class="col-12 col-md-6"> 3089 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 3090 <p>{{searchFriendlyDescription}}</p> 3091 <p> 3092 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 3093 {{searchFriendlyButtonText}} 3094 </a> 3095 </p> 3096 </div> 3097 </div> 3098 {{/each}} 3099 </div> 3100 </div> 3101 </div> 3102 </div> 3103 </script> 3104 </div> 3105 } 3106 else if(productPanelNameValue == "Supportmaterials for vets") 3107 { 3108 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 3109 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3110 <div class="row"> 3111 <div class="col-12 is-loading"> 3112 <div class="e-loading-spinner"></div> 3113 </div> 3114 </div> 3115 </div> 3116 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 3117 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 3118 {{#if vetSupportmaterials.items}} 3119 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3120 <div class="row"> 3121 {{#if vetSupportmaterials.display}} 3122 <div class="col-12 col-md-4"> 3123 <div class="e-product-section-header"> 3124 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 3125 </div> 3126 </div> 3127 <div class="col-12 col-md-8 mt-half"> 3128 {{#each vetSupportmaterials.items}} 3129 3130 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 3131 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3132 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3133 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3134 </p> 3135 3136 <div class="row"> 3137 <div class="col-12"> 3138 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 3139 <div class="row"> 3140 <div class="col-12 pl-md-3"> 3141 <div class="row"> 3142 {{#each materials}} 3143 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3144 <div class="row"> 3145 <div class="col-12 col-md-6 text-center"> 3146 {{#if download}} 3147 {{#if loginToDownload}} 3148 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3149 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3150 </a> 3151 {{else}} 3152 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 3153 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3154 </a> 3155 {{/if}} 3156 {{else}} 3157 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3158 {{/if}} 3159 </div> 3160 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3161 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3162 3163 {{#if loginToDownload}} 3164 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3165 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 3166 </a> 3167 {{else}} 3168 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 3169 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3170 </a> 3171 {{/if}} 3172 3173 @if(shopIsActive && hasAccess) 3174 { 3175 @:{{#if orderable}} 3176 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3177 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3178 <input type="hidden" name="CartCmd" value="Add"> 3179 <input type="hidden" name="ProductID" value="{{id}}"> 3180 <input type="hidden" name="VariantID" value=""> 3181 <input type="hidden" name="UnitID" value=""> 3182 <input type="hidden" name="Redirect" value="false"> 3183 <input type="hidden" name="Quantity" value="1"> 3184 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3185 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3186 </form> 3187 @:{{/if}} 3188 } 3189 </div> 3190 </div> 3191 </div> 3192 {{/each}} 3193 </div> 3194 </div> 3195 </div> 3196 </div> 3197 </div> 3198 </div> 3199 {{/each}} 3200 </div> 3201 {{else}} 3202 <div class="col-12 text-center"> 3203 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 3204 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 3205 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3206 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3207 </div> 3208 {{/if}} 3209 </div> 3210 </div> 3211 {{/if}} 3212 </div> 3213 </script> 3214 3215 </div> 3216 } 3217 else if(productPanelNameValue == "Supportmaterials for pet owners") 3218 { 3219 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 3220 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3221 <div class="row"> 3222 <div class="col-12 is-loading"> 3223 <div class="e-loading-spinner"></div> 3224 </div> 3225 </div> 3226 </div> 3227 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 3228 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 3229 {{#if clientSupportmaterials.items}} 3230 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3231 <div class="row"> 3232 {{#if clientSupportmaterials.display}} 3233 <div class="col-12 col-md-4"> 3234 <div class="e-product-section-header"> 3235 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 3236 </div> 3237 </div> 3238 <div class="col-12 col-md-8 mt-half"> 3239 {{#each clientSupportmaterials.items}} 3240 3241 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 3242 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 3243 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 3244 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 3245 </p> 3246 3247 <div class="row"> 3248 <div class="col-12"> 3249 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 3250 <div class="row"> 3251 <div class="col-12 pl-md-3"> 3252 <div class="row"> 3253 {{#each materials}} 3254 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 3255 <div class="row"> 3256 <div class="col-12 col-md-6 text-center"> 3257 {{#if download}} 3258 {{#if loginToDownload}} 3259 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 3260 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3261 </a> 3262 {{else}} 3263 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 3264 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3265 </a> 3266 {{/if}} 3267 {{else}} 3268 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 3269 {{/if}} 3270 </div> 3271 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 3272 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 3273 {{#if download}} 3274 <p class="mb-1"> 3275 {{#if loginToDownload}} 3276 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 3277 {{else}} 3278 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 3279 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 3280 </a> 3281 {{/if}} 3282 </p> 3283 {{/if}} 3284 3285 @if(shopIsActive && hasAccess) 3286 { 3287 @:{{#if orderable}} 3288 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 3289 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 3290 <input type="hidden" name="CartCmd" value="Add"> 3291 <input type="hidden" name="ProductID" value="{{id}}"> 3292 <input type="hidden" name="VariantID" value=""> 3293 <input type="hidden" name="UnitID" value=""> 3294 <input type="hidden" name="Redirect" value="false"> 3295 <input type="hidden" name="Quantity" value="1"> 3296 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 3297 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 3298 </form> 3299 @:{{/if}} 3300 } 3301 3302 </div> 3303 </div> 3304 </div> 3305 {{/each}} 3306 </div> 3307 </div> 3308 </div> 3309 </div> 3310 </div> 3311 </div> 3312 {{/each}} 3313 </div> 3314 {{else}} 3315 <div class="col-12 text-center"> 3316 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 3317 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 3318 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 3319 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3320 </div> 3321 {{/if}} 3322 </div> 3323 </div> 3324 {{/if}} 3325 </div> 3326 </script> 3327 3328 </div> 3329 } 3330 else if(productPanelNameValue == "Videos") 3331 { 3332 <div class="col-12" id="js-dvp-product-videos"> 3333 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3334 <div class="row"> 3335 <div class="col-12 is-loading"> 3336 <div class="e-loading-spinner"></div> 3337 </div> 3338 </div> 3339 </div> 3340 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 3341 <div class="js-dvp-product-videos-animate fade"> 3342 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3343 <div class="row"> 3344 {{#if display}} 3345 <div class="col-12 col-md-4"> 3346 <div class="e-product-section-header"> 3347 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 3348 </div> 3349 </div> 3350 <div class="col-12 col-md-8 mt-half"> 3351 {{#compare totalVideoCount '>' 4}} 3352 <div class="collapse-peek"> 3353 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 3354 {{/compare}} 3355 <div class="row"> 3356 {{#each videos}} 3357 {{#each videos}} 3358 <div class="col-12 col-md-6"> 3359 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 3360 <div> 3361 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 3362 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 3363 </div> 3364 </a> 3365 <sc{{handlebarHack}}ript type="application/json"> 3366 { 3367 "url":"{{../url}}", 3368 "header":"{{embedTitle}}", 3369 "embedUrl":"{{{embedUrl}}}" 3370 } 3371 </sc{{handlebarHack}}ript> 3372 </div> 3373 {{/each}} 3374 {{/each}} 3375 </div> 3376 {{#compare totalVideoCount '>' 4}} 3377 </div> 3378 <div class="collapse-peek-toggle"> 3379 <div class="row"> 3380 <div class="col-12 mx-auto text-center"> 3381 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 3382 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 3383 </a> 3384 </div> 3385 </div> 3386 </div> 3387 {{/compare}} 3388 </div> 3389 </div> 3390 {{else}} 3391 <div class="col-12 text-center"> 3392 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 3393 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 3394 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3395 </div> 3396 {{/if}} 3397 </div> 3398 </div> 3399 </div> 3400 </script> 3401 </div> 3402 } 3403 else if(productPanelNameValue == "Related ranges") 3404 { 3405 <div class="col-12"> 3406 @if( GetLoop("RelatedRanges").Count() > 0 ) 3407 { 3408 string relatedProductsHeader = Translate("Other related products","Other related products"); 3409 3410 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 3411 { 3412 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 3413 } 3414 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3415 <div class="row"> 3416 <div class="col-12 col-md-4"> 3417 <div class="e-product-section-header"> 3418 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 3419 </div> 3420 </div> 3421 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 3422 <div class="row"> 3423 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 3424 { 3425 string relatedRangeGroupId = ""; 3426 3427 int relatedProductInt = 0; 3428 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 3429 string relatedRangeName = relatedRange.GetString("Range"); 3430 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 3431 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 3432 3433 <div class="col-12 col-lg-6 mb-3"> 3434 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 3435 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 3436 </div> 3437 <div class="col-12 px-1 pt-1 border dvp-range"> 3438 <div> 3439 <div class="row"> 3440 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 3441 { 3442 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 3443 3444 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 3445 3446 if(relatedProductInt == 2) 3447 { 3448 @:</div> 3449 @:</div> 3450 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 3451 @:<div class="row"> 3452 } 3453 3454 string relatedUrl = string.Empty; 3455 3456 string relatedUrlFriendlyProduct = string.Empty; 3457 3458 string relatedProductName = product.GetString("Ecom:Product.Name"); 3459 3460 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 3461 3462 string relatedProductDisplayName = relatedProductName; 3463 string relatedProductTitleName = relatedProductName; 3464 3465 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 3466 { 3467 if(hideRelatedProductName) 3468 { 3469 relatedProductDisplayName = relatedRangeNameSuperscripted; 3470 relatedProductTitleName = relatedRangeName; 3471 } 3472 else 3473 { 3474 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 3475 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 3476 } 3477 } 3478 3479 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 3480 { 3481 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 3482 } 3483 else 3484 { 3485 relatedUrl = relatedProductName; 3486 } 3487 3488 if(relatedProductsInRangeCount > 1) 3489 { 3490 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 3491 } 3492 3493 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 3494 3495 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 3496 3497 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 3498 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 3499 <div class="row"> 3500 <div class="col-12 dvp-image-container"> 3501 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 3502 </div> 3503 <div class="col-12"> 3504 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 3505 </div> 3506 </div> 3507 </a> 3508 </div> 3509 3510 relatedProductInt++; 3511 } 3512 </div> 3513 </div> 3514 <div class="row mt-1 dvp-view-more-products"> 3515 @if(relatedProductsInRangeCount > 2) 3516 { 3517 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 3518 3519 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 3520 3521 if(relatedProductsInRangeCount == 3 ) 3522 { 3523 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 3524 } 3525 3526 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 3527 3528 <div class="col-12"> 3529 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 3530 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 3531 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 3532 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 3533 </a> 3534 </p> 3535 </div> 3536 } 3537 </div> 3538 </div> 3539 </div> 3540 } 3541 </div> 3542 </div> 3543 </div> 3544 </div> 3545 } 3546 </div> 3547 } 3548 else if(productPanelNameValue == "Newsletter") 3549 { 3550 <div class="col-12"> 3551 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3552 <div class="row"> 3553 <div class="col-12 col-md-4"> 3554 <div class="e-product-section-header"> 3555 <h2 class="mb-1 mb-md-0">Newsletter</h2> 3556 </div> 3557 </div> 3558 <div class="col-12 col-md-8"> 3559 <div class="dvp-newsletter-signup-form"> 3560 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 3561 <div class="form-group"> 3562 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 3563 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 3564 </div> 3565 <div class="form-group"> 3566 <button type="submit" class="btn btn-primary">Sign up</button> 3567 </div> 3568 </form> 3569 </div> 3570 </div> 3571 </div> 3572 </div> 3573 </div> 3574 } 3575 else if(productPanelNameValue == "eLearning") 3576 { 3577 <div class="col-12" id="js-dvp-product-elearning"> 3578 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3579 <div class="row"> 3580 <div class="col-12 is-loading"> 3581 <div class="e-loading-spinner"></div> 3582 </div> 3583 </div> 3584 </div> 3585 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 3586 <div class="js-dvp-product-elearning-animate fade"> 3587 {{#if elearning.items}} 3588 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3589 <div class="row"> 3590 <div class="col-12 col-md-4"> 3591 <div class="e-product-section-header"> 3592 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 3593 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 3594 </div> 3595 </div> 3596 <div class="col-12 col-md-8"> 3597 <h3> 3598 {{elearning.items.0.courseAmountText}} 3599 </h3> 3600 <div class="row"> 3601 <div class="col-12"> 3602 <div class="list-group"> 3603 {{#if elearning.display}} 3604 {{#each elearning.items.0.courses}} 3605 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 3606 <b>{{name}}</b> 3607 </a> 3608 {{/each}} 3609 {{else}} 3610 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 3611 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3612 {{/if}} 3613 </div> 3614 </div> 3615 </div> 3616 {{#unless elearning.display}} 3617 <div class="row mt-2"> 3618 <div class="col-12"> 3619 <div class="bg-academy"> 3620 <div class="row p-2"> 3621 @{ 3622 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 3623 } 3624 <div class="col-12"> 3625 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 3626 </div> 3627 <div class="col-12 col-md-8 text-white"> 3628 <ul class="mb-0"> 3629 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 3630 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 3631 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 3632 </ul> 3633 </div> 3634 <div class="col-12 col-md-4 pt-2"> 3635 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 3636 </div> 3637 </div> 3638 </div> 3639 </div> 3640 </div> 3641 {{/unless}} 3642 </div> 3643 </div> 3644 </div> 3645 {{/if}} 3646 </div> 3647 </script> 3648 </div> 3649 } 3650 else if(productPanelNameValue == "Product Websites") 3651 { 3652 <div class="col-12" id="js-dvp-product-websites"> 3653 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3654 <div class="row"> 3655 <div class="col-12 is-loading"> 3656 <div class="e-loading-spinner"></div> 3657 </div> 3658 </div> 3659 </div> 3660 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 3661 <div class="js-dvp-product-websites-animate fade"> 3662 {{#if websites.items}} 3663 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3664 <div class="row"> 3665 {{#if websites.display}} 3666 <div class="col-12 col-md-4"> 3667 <div class="e-product-section-header"> 3668 <h2 class="mb-1 mb-md-0"> 3669 {{#compare count '>' 1}} 3670 @Translate("Product Websites","Product Websites") 3671 {{else}} 3672 @Translate("Product Website","Product Website") 3673 {{/compare}} 3674 </h2> 3675 </div> 3676 </div> 3677 <div class="col-12 col-md-8 mt-half"> 3678 {{#each websites.items.0.website}} 3679 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 3680 <div class="col-12 col-md-6"> 3681 <p class="lead"> 3682 {{name}} 3683 </p> 3684 <p> 3685 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 3686 @Translate("Go to website","Go to website") 3687 </a> 3688 </p> 3689 </div> 3690 <div class="col-12 col-md-6"> 3691 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 3692 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 3693 </a> 3694 </div> 3695 </div> 3696 {{/each}} 3697 </div> 3698 {{else}} 3699 <div class="col-12 text-center"> 3700 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 3701 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 3702 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3703 </div> 3704 {{/if}} 3705 </div> 3706 </div> 3707 {{/if}} 3708 </div> 3709 </script> 3710 </div> 3711 } 3712 else if(productPanelNameValue == "Previous Premium Content") 3713 { 3714 <div class="col-12" id="js-dvp-product-previous-premium-content"> 3715 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3716 <div class="row"> 3717 <div class="col-12 is-loading"> 3718 <div class="e-loading-spinner"></div> 3719 </div> 3720 </div> 3721 </div> 3722 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 3723 <div class="js-dvp-product-previous-premium-content-animate fade"> 3724 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3725 <div class="row"> 3726 <div class="col-12 col-md-4"> 3727 <div class="e-product-section-header"> 3728 <h2 class="mb-1 mb-md-0"> 3729 @Translate("Previous Premium Content","Premium Content") 3730 </h2> 3731 </div> 3732 </div> 3733 <div class="col-12 col-md-8 mt-half"> 3734 {{#each premiumPages}} 3735 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 3736 <div class="col-12 col-md-6"> 3737 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 3738 </div> 3739 <div class="col-12 col-md-6"> 3740 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 3741 <p>{{searchFriendlyDescription}}</p> 3742 <p> 3743 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 3744 {{searchFriendlyButtonText}} 3745 </a> 3746 </p> 3747 </div> 3748 </div> 3749 {{/each}} 3750 </div> 3751 </div> 3752 </div> 3753 </div> 3754 </script> 3755 </div> 3756 } 3757 else if(productPanelNameValue == "Frequent Treatment Questions") 3758 { 3759 <div class="col-12" id="js-dvp-product-faq"> 3760 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3761 <div class="row"> 3762 <div class="col-12 is-loading"> 3763 <div class="e-loading-spinner"></div> 3764 </div> 3765 </div> 3766 </div> 3767 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 3768 <div class="js-dvp-product-faq-animate fade"> 3769 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3770 <div class="row"> 3771 {{#if display}} 3772 <div class="col-12 col-md-4"> 3773 <div class="e-product-section-header"> 3774 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 3775 </div> 3776 </div> 3777 <div class="col-12 col-md-8 mt-half dvp-faq"> 3778 {{# faqs}} 3779 {{#each faq}} 3780 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 3781 <div class="row"> 3782 <div class="col-12"> 3783 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 3784 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 3785 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 3786 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 3787 </h3> 3788 </div> 3789 </div> 3790 <div class="row"> 3791 <div class="col-12"> 3792 <div class="collapse" id="collapse-{{paragraphId}}"> 3793 <div class="row"> 3794 <div class="col-12 pl-3"> 3795 {{#each faqList}} 3796 <div class="row"> 3797 <div class="col-12 mt-1"> 3798 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 3799 {{listHeader}} 3800 </a> 3801 <sc{{handlebarHack}}ript type="application/json"> 3802 { 3803 "url":"{{../../url}}", 3804 "categoryName": "{{../categoryName}}", 3805 "header":"{{listHeader}}", 3806 "content":"{{{listContent}}}" 3807 } 3808 </sc{{handlebarHack}}ript> 3809 </div> 3810 </div> 3811 {{/each}} 3812 </div> 3813 </div> 3814 </div> 3815 </div> 3816 </div> 3817 </div> 3818 {{/each}} 3819 {{/faqs}} 3820 3821 {{#each accordions}} 3822 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 3823 {{#if introText}} 3824 <div class="p-accordion-lead"> 3825 {{{introText}}} 3826 </div> 3827 {{/if}} 3828 <div class="p-accordion-container "> 3829 {{#each accordionItems}} 3830 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 3831 <div class="p-accordion-toggle"> 3832 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 3833 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 3834 {{heading}} 3835 </span> 3836 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 3837 </p> 3838 </div> 3839 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 3840 <div class="px-2 pb-1 p-accordion-content"> 3841 <div class="p-txt-container dvp-rich-text-content pt-1"> 3842 {{{text}}} 3843 </div> 3844 </div> 3845 </div> 3846 </div> 3847 {{/each}} 3848 </div> 3849 </div> 3850 {{/each}} 3851 3852 3853 </div> 3854 {{else}} 3855 <div class="col-12 text-center"> 3856 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 3857 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 3858 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 3859 </div> 3860 {{/if}} 3861 </div> 3862 </div> 3863 </div> 3864 </script> 3865 </div> 3866 } 3867 else if(productPanelNameValue == "Got More Questions form") 3868 { 3869 <div class="col-12 js-dvp-product-details-more-info-section"> 3870 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 3871 <div class="row"> 3872 <div class="col-12 col-md-4"> 3873 <div class="e-product-section-header"> 3874 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 3875 </div> 3876 </div> 3877 <div class="p col-12 col-md-8 mt-half"> 3878 @{ 3879 int currentPageId; 3880 3881 int.TryParse(pageId, out currentPageId); 3882 3883 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 3884 3885 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 3886 3887 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 3888 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 3889 3890 int formPageId; 3891 int formParagraphId; 3892 3893 int.TryParse(formPageIdString, out formPageId); 3894 int.TryParse(formParagraphIdString, out formParagraphId); 3895 3896 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 3897 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 3898 3899 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 3900 3901 } 3902 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 3903 </div> 3904 </div> 3905 </div> 3906 </div> 3907 } 3908 } 3909 </div> 3910 } 3911 3912 } 3913 else if(productType.GetString("Ecom:Product.CategoryField.DechraPIMProducts.ProductType.Value") == "diet") 3914 { 3915 string rangeName = range.GetString("Range"); 3916 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 3917 string rangeId = string.Empty; 3918 string therapyAreaId = string.Empty; 3919 string therapyAreaName = string.Empty; 3920 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 3921 string optionalName = string.Empty; 3922 string displayName = string.Empty; 3923 string displayNameSuperscripted = string.Empty; 3924 string groupId = string.Empty; 3925 string productName = string.Empty; 3926 string productNameJSON = string.Empty; 3927 string productDisplayName = string.Empty; 3928 string productDisplayNameSuperscripted = string.Empty; 3929 string urlFriendlyProductName = string.Empty; 3930 string productShortDescription = string.Empty; 3931 string productShortDescriptionJSON = string.Empty; 3932 string productColorCode = string.Empty; 3933 string productPublicProductCode = string.Empty; 3934 string productIngredients = string.Empty; 3935 string productIngredientsJSON = string.Empty; 3936 string productPackSize = string.Empty; 3937 string productDatasheet = string.Empty; 3938 string productRecommendation = string.Empty; 3939 string productNotRecommendedFor = string.Empty; 3940 string productIcon1 = string.Empty; 3941 string productIcon2 = string.Empty; 3942 string productIcon3 = string.Empty; 3943 string productIcon4 = string.Empty; 3944 string productIcon5 = string.Empty; 3945 string productIcon6 = string.Empty; 3946 string productTextArea1 = string.Empty; 3947 string productTextArea2 = string.Empty; 3948 string productTextArea3 = string.Empty; 3949 string productTextArea4 = string.Empty; 3950 string productTextArea5 = string.Empty; 3951 string productTextArea6 = string.Empty; 3952 string productFeedingGuideImage = string.Empty; 3953 string productNutrientTableImage = string.Empty; 3954 Dictionary<string, dynamic> dietDetails = new Dictionary<string, dynamic>(); 3955 Dictionary<string, dynamic> dietFeedingGuides = new Dictionary<string, dynamic>(); 3956 string productImage = string.Empty; 3957 List<string> images = new List<string>(); 3958 string productUrl = string.Empty; 3959 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 3960 bool applyRangeNameToProductNames = Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames"); 3961 3962 <div class="row"> 3963 <div class="col-12 d-none d-md-block" id="js-dvp-product-premium-content-highlight"> 3964 <script id="js-e-handlebars-tmpl-dvp-product-premium-content-highlight" type="text/x-handlebars-template"> 3965 {{#if premiumPages.0.searchFriendlyImageBanner}} 3966 <div class="js-dvp-product-premium-content-animate fade mb-2"> 3967 <a href="javascript:void(0);" class="js-dvp-product-details-premium-content-highlight-banner-link"> 3968 <img class="p-img" src="{{premiumPages.0.searchFriendlyImageBanner}}" alt="{{premiumPages.0.searchFriendlyTitle}}" /> 3969 </a> 3970 </div> 3971 {{/if}} 3972 </script> 3973 </div> 3974 </div> 3975 3976 @functions 3977 { 3978 3979 public dynamic DietApi(string method, string productNumber, string cultureInfoName) 3980 { 3981 if ( !string.IsNullOrEmpty( method ) && !string.IsNullOrEmpty( productNumber ) && !string.IsNullOrEmpty( cultureInfoName )) 3982 { 3983 productNumber = Regex.Replace( productNumber, @".*_", "", RegexOptions.None, TimeSpan.FromMilliseconds( 100 ) ); 3984 3985 if ( !string.IsNullOrEmpty( productNumber ) ) 3986 { 3987 System.Net.WebRequest request = System.Net.WebRequest.Create($"https://dietspim.dechra.espresso4.dk/api/dechra-diets/v1/{method}/{productNumber}/{cultureInfoName}"); 3988 request.Timeout = 1000; 3989 request.Method = "GET"; 3990 request.ContentType = "application/json"; 3991 3992 using (dynamic response = (System.Net.HttpWebResponse) request.GetResponse()) 3993 { 3994 using (System.IO.Stream stream = response.GetResponseStream()) 3995 { 3996 using (System.IO.StreamReader reader = new System.IO.StreamReader(stream)) 3997 { 3998 return Newtonsoft.Json.JsonConvert.DeserializeObject(reader.ReadToEnd()); 3999 } 4000 } 4001 } 4002 } 4003 } 4004 return null; 4005 } 4006 4007 } 4008 4009 if(productsInRangeCount > 1) 4010 { 4011 <div class="row e-product"> 4012 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 4013 <h1 class="mb-1 font-weight-bold"> 4014 @rangeNameSuperscripted 4015 </h1> 4016 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 4017 { 4018 groupId = product.GetString("Ecom:Group.ID"); 4019 4020 productName = product.GetString("Ecom:Product.Name"); 4021 productNameJSON = productName.Replace("\"","&quot;"); 4022 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4023 4024 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4025 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4026 4027 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4028 productDisplayNameSuperscripted = applyRangeNameToProductNames ? $"{displayNameSuperscripted} {productNameJSON}" : productNameJSON; 4029 4030 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 4031 4032 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4033 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4034 4035 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4036 4037 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4038 4039 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4040 4041 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4042 productIngredientsJSON = WebUtility.HtmlDecode(Regex.Replace(productIngredients, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4043 4044 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4045 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4046 4047 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4048 4049 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4050 4051 productRecommendation = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4052 productNotRecommendedFor = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4053 4054 productIcon1 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg" : ""; 4055 productIcon2 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg" : ""; 4056 productIcon3 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg" : ""; 4057 productIcon4 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg" : ""; 4058 productIcon5 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg" : ""; 4059 productIcon6 = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value")) ? "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg" : ""; 4060 4061 productTextArea1 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4062 productTextArea2 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4063 productTextArea3 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4064 productTextArea4 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4065 productTextArea5 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4066 productTextArea6 = WebUtility.HtmlDecode(Regex.Replace(product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"), @"\t|\n|\r", " ")).Replace("\"","&quot;"); 4067 4068 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4069 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4070 4071 productUrl = $"/Default.aspx?ID={pageId}&GroupID={groupId}#{urlFriendlyProductName}"; 4072 4073 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4074 4075 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4076 4077 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4078 { 4079 dietDetails.Add(productDisplayNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4080 dietFeedingGuides.Add(productDisplayNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4081 } 4082 4083 dynamic JSON = new { 4084 Name = productDisplayName, 4085 ShortDescription = productShortDescriptionJSON, 4086 Image = productImage, 4087 Images = images, 4088 Ingredients = productIngredientsJSON, 4089 PackSize = productPackSize, 4090 Datasheet = productDatasheet, 4091 ColorCode = productColorCode, 4092 ProductCode = productPublicProductCode, 4093 Recommendation = productRecommendation, 4094 NotRecommendedFor = productNotRecommendedFor, 4095 Icon1 = productIcon1, 4096 Icon2 = productIcon2, 4097 Icon3 = productIcon3, 4098 Icon4 = productIcon4, 4099 Icon5 = productIcon5, 4100 Icon6 = productIcon6, 4101 TextArea1 = productTextArea1, 4102 TextArea2 = productTextArea2, 4103 TextArea3 = productTextArea3, 4104 TextArea4 = productTextArea4, 4105 TextArea5 = productTextArea5, 4106 TextArea6 = productTextArea6, 4107 FeedingGuideImage = productFeedingGuideImage, 4108 NutrientTableImage = productNutrientTableImage, 4109 Details = DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name) 4110 }; 4111 4112 <a class="js-dvp-product-list-details" href="@productUrl" title="@productDisplayName" data-productname="@urlFriendlyProductName"> 4113 <div class="row px-sm-1 my-2 my-sm-0"> 4114 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 4115 <div class="row"> 4116 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 4117 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 4118 </div> 4119 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 4120 <p class="mb-0"> 4121 @if(applyRangeNameToProductNames) 4122 { 4123 <b>@productDisplayNameSuperscripted</b> 4124 } 4125 else 4126 { 4127 <b class="h3">@displayNameSuperscripted</b> 4128 <br> @productDisplayNameSuperscripted 4129 } 4130 </p> 4131 </div> 4132 <div class="col-2 d-none d-sm-block my-auto text-center"> 4133 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 4134 </div> 4135 </div> 4136 <script type="application/json" class="@urlFriendlyProductName"> 4137 @JsonService.Instance.ToJson( JSON ) 4138 </script> 4139 </div> 4140 </div> 4141 </a> 4142 } 4143 </div> 4144 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-0 pb-4 pl-sm-3 dvp-product-details"> 4145 <div class="js-dvp-product-details-animate fade"> 4146 <div class="row"> 4147 <div class="col-12"> 4148 <div class="e-product-image-container dvp-product-details-image-container text-center"> 4149 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 4150 </div> 4151 </div> 4152 </div> 4153 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 4154 { 4155 <div class="row"> 4156 <div class="col-12"> 4157 @productShortDescriptionJSON 4158 </div> 4159 </div> 4160 } 4161 <div class="row"> 4162 <div class="col-12 mt-2 table-responsive"> 4163 <table class="table"> 4164 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 4165 { 4166 <tr> 4167 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4168 <td>@productIngredientsJSON</td> 4169 </tr> 4170 } 4171 @if(!string.IsNullOrEmpty(productRecommendation)) 4172 { 4173 <tr> 4174 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4175 <td>@productRecommendation</td> 4176 </tr> 4177 } 4178 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 4179 { 4180 <tr> 4181 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4182 <td>@productNotRecommendedFor</td> 4183 </tr> 4184 } 4185 @if(!string.IsNullOrEmpty(productPackSize)) 4186 { 4187 <tr> 4188 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4189 <td>@productPackSize</td> 4190 </tr> 4191 } 4192 @if(!string.IsNullOrEmpty(productDatasheet)) 4193 { 4194 <tr> 4195 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4196 <td> 4197 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 4198 @Translate("Download","Download") <i class="material-icons">get_app</i> 4199 </a> 4200 </td> 4201 </tr> 4202 } 4203 </table> 4204 </div> 4205 </div> 4206 @if(!hideRequestmoreinformation) 4207 { 4208 <div class="row"> 4209 <div class="col-12"> 4210 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 4211 @Translate("Request more information","Request more information") 4212 </button> 4213 </div> 4214 </div> 4215 } 4216 </div> 4217 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 4218 <div class="js-dvp-product-details-animate fade"> 4219 <div class="e-product-image-container multi-range"> 4220 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4221 <div class="carousel-inner{{#if Images}} carousel-multiple-images{{/if}}"> 4222 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4223 <img src="/admin/public/getimage.ashx?Crop=0&Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{Name}}" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 4224 </div> 4225 {{#each Images}} 4226 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4227 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{this}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="{{../Name}} - {{math @@index "+" 1}}" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="{{math @@index "+" 1}}"> 4228 </div> 4229 {{/each}} 4230 </div> 4231 {{#if Images}} 4232 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 4233 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 4234 <ol class="carousel-indicators"> 4235 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4236 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{Image}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 4237 </li> 4238 {{#each Images}} 4239 <li data-target="#js-e-product-image-carousel" data-slide-to="{{math @@index "+" 1}}"> 4240 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image={{this}}&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 4241 </li> 4242 {{/each}} 4243 </ol> 4244 {{/if}} 4245 </div> 4246 </div> 4247 {{#if ShortDescription}} 4248 <div class="dvp-short-description"> 4249 {{{ShortDescription}}} 4250 </div> 4251 {{/if}} 4252 <div class="row"> 4253 <div class="col-12 mt-2 table-responsive"> 4254 <table class="table"> 4255 {{#if Ingredients}} 4256 <tr> 4257 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4258 <td>{{{Ingredients}}}</td> 4259 </tr> 4260 {{/if}} 4261 {{#if Recommendation}} 4262 <tr> 4263 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4264 <td>{{{Recommendation}}}</td> 4265 </tr> 4266 {{/if}} 4267 {{#if NotRecommendedFor}} 4268 <tr> 4269 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4270 <td>{{{NotRecommendedFor}}}</td> 4271 </tr> 4272 {{/if}} 4273 {{#if PackSize}} 4274 <tr> 4275 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4276 <td>{{PackSize}}</td> 4277 </tr> 4278 {{/if}} 4279 {{#if Datasheet}} 4280 <tr> 4281 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4282 <td> 4283 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="{{Datasheet}}" data-tracking-type="Datasheet" data-tracking-product-name="{{Name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{Datasheet}}"> 4284 @Translate("Download","Download") <i class="material-icons">get_app</i> 4285 </a> 4286 </td> 4287 </tr> 4288 {{/if}} 4289 </table> 4290 </div> 4291 </div> 4292 <div class="row"> 4293 {{#if Details}} 4294 {{#each Details}} 4295 <div class="col-12"> 4296 <div class="row mb-2"> 4297 <div class="col-6 col-md-2"> 4298 <div style="background-color:{{../ColorCode}};" class="rounded text-center text-white"> 4299 <i class="dechra-details-icon dechra-icon-{{IconCssClass}}"></i> 4300 </div> 4301 </div> 4302 <div class="col-12 col-md-10 d-flex align-items-center"> 4303 <p class="mb-0">{{{Description}}}</p> 4304 </div> 4305 </div> 4306 </div> 4307 {{/each}} 4308 {{else}} 4309 {{#if Icon1}} 4310 <div class="col-12"> 4311 <div class="row mb-2"> 4312 <div class="col-6 col-md-2"> 4313 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4314 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon1}}" /> 4315 </div> 4316 </div> 4317 <div class="col-12 col-md-10 d-flex align-items-center"> 4318 <p class="mb-0">{{{TextArea1}}}</p> 4319 </div> 4320 </div> 4321 </div> 4322 {{/if}} 4323 {{#if Icon2}} 4324 <div class="col-12"> 4325 <div class="row mb-2"> 4326 <div class="col-6 col-md-2"> 4327 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4328 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon2}}" /> 4329 </div> 4330 </div> 4331 <div class="col-12 col-md-10 d-flex align-items-center"> 4332 <p class="mb-0">{{{TextArea2}}}</p> 4333 </div> 4334 </div> 4335 </div> 4336 {{/if}} 4337 {{#if Icon3}} 4338 <div class="col-12"> 4339 <div class="row mb-2"> 4340 <div class="col-6 col-md-2"> 4341 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4342 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon3}}" /> 4343 </div> 4344 </div> 4345 <div class="col-12 col-md-10 d-flex align-items-center"> 4346 <p class="mb-0">{{{TextArea3}}}</p> 4347 </div> 4348 </div> 4349 </div> 4350 {{/if}} 4351 {{#if Icon4}} 4352 <div class="col-12"> 4353 <div class="row mb-2"> 4354 <div class="col-6 col-md-2"> 4355 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4356 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon4}}" /> 4357 </div> 4358 </div> 4359 <div class="col-12 col-md-10 d-flex align-items-center"> 4360 <p class="mb-0">{{{TextArea4}}}</p> 4361 </div> 4362 </div> 4363 </div> 4364 {{/if}} 4365 {{#if Icon5}} 4366 <div class="col-12"> 4367 <div class="row mb-2"> 4368 <div class="col-6 col-md-2"> 4369 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4370 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon5}}" /> 4371 </div> 4372 </div> 4373 <div class="col-12 col-md-10 d-flex align-items-center"> 4374 <p class="mb-0">{{{TextArea5}}}</p> 4375 </div> 4376 </div> 4377 </div> 4378 {{/if}} 4379 {{#if Icon6}} 4380 <div class="col-12"> 4381 <div class="row mb-2"> 4382 <div class="col-6 col-md-2"> 4383 <div style="background-color:{{ColorCode}};" class="rounded p-1"> 4384 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="{{Icon6}}" /> 4385 </div> 4386 </div> 4387 <div class="col-12 col-md-10 d-flex align-items-center"> 4388 <p class="mb-0">{{{TextArea6}}}</p> 4389 </div> 4390 </div> 4391 </div> 4392 {{/if}} 4393 {{/if}} 4394 </div> 4395 @if(!hideRequestmoreinformation) 4396 { 4397 <div class="row"> 4398 <div class="col-12"> 4399 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 4400 @Translate("Request more information","Request more information") 4401 </button> 4402 </div> 4403 </div> 4404 } 4405 </div> 4406 </script> 4407 </div> 4408 </div> 4409 } 4410 else 4411 { 4412 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 4413 { 4414 groupId = product.GetString("Ecom:Group.ID"); 4415 4416 productName = product.GetString("Ecom:Product.Name"); 4417 productNameJSON = productName.Replace("\"","&quot;"); 4418 4419 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 4420 4421 optionalName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.OptionalName.Value"); 4422 4423 displayName = !string.IsNullOrEmpty(optionalName) ? optionalName : rangeName; 4424 displayNameSuperscripted = !string.IsNullOrEmpty(optionalName) ? optionalName.Replace("®","<sup>®</sup>") : rangeNameSuperscripted; 4425 4426 productDisplayName = applyRangeNameToProductNames ? $"{displayName} {productNameJSON}" : productNameJSON; 4427 4428 rangeId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Range.Value") : "0"; 4429 4430 therapyAreaId = !string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value")) ? product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.Value") : "0"; 4431 4432 therapyAreaName = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.TherapyAreas.OptionLabel"); 4433 4434 productIngredients = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Ingredients.Value"); 4435 4436 productPackSize = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.PacketSize.OptionLabel").Replace(",",", ").Replace(".", GetGlobalValue("Global:eCommerce.Currency.DecimalSeparator")); 4437 productDatasheet = product.GetString("Ecom:Product.CategoryField.DechraPIMProducts.Datasheet.Value"); 4438 4439 productColorCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.ColorCode.Value"); 4440 4441 productPublicProductCode = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.PublicProductCode.Value"); 4442 4443 productRecommendation = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Recommendation.Value"); 4444 productNotRecommendedFor = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NotRecommendedFor.Value"); 4445 4446 productIcon1 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon1.Value").Replace("http://","") + ".svg"; 4447 productIcon2 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon2.Value").Replace("http://","") + ".svg"; 4448 productIcon3 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon3.Value").Replace("http://","") + ".svg"; 4449 productIcon4 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon4.Value").Replace("http://","") + ".svg"; 4450 productIcon5 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon5.Value").Replace("http://","") + ".svg"; 4451 productIcon6 = "/Files/Templates/Designs/dechra-dvp/_assets/img/icons/" + product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.Icon6.Value").Replace("http://","") + ".svg"; 4452 4453 productTextArea1 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea1.Value"); 4454 productTextArea2 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea2.Value"); 4455 productTextArea3 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea3.Value"); 4456 productTextArea4 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea4.Value"); 4457 productTextArea5 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea5.Value"); 4458 productTextArea6 = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.TextArea6.Value"); 4459 4460 productFeedingGuideImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.FeedingGuideImage.Value"); 4461 productNutrientTableImage = product.GetString("Ecom:Product.CategoryField.DechraPIMDietProducts.NutrientTableImage.Value"); 4462 4463 productImage = product.GetString("Ecom:Product.ImageDefault.Clean"); 4464 4465 images = product.GetLoop("Details").Select(i => i.GetString("Ecom:Product:Detail.Image.Clean")).ToList(); 4466 4467 if ( !string.IsNullOrEmpty(HttpContext.Current.Request["test"]) && HttpContext.Current.Request["test"] == "true" && !string.IsNullOrEmpty( product.GetString("Ecom:Product.Number") ) ) 4468 { 4469 dietDetails.Add(rangeNameSuperscripted, DietApi( "dietdetails", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4470 dietFeedingGuides.Add(rangeNameSuperscripted, DietApi( "feedingguide", product.GetString("Ecom:Product.Number"), currentArea.CultureInfo.Name)); 4471 } 4472 } 4473 <div class="row e-product dvp-product-details"> 4474 <div class="col-12"> 4475 <div class="row"> 4476 <div class="col-12"> 4477 <h1 class="mb-1 font-weight-bold"> 4478 @rangeNameSuperscripted 4479 </h1> 4480 </div> 4481 </div> 4482 </div> 4483 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 4484 <div class="row"> 4485 <div class="col-12"> 4486 <div class="e-product-image-container single-range"> 4487 <div id="js-e-product-image-carousel" class="carousel slide" data-ride="carousel" data-interval="false"> 4488 <div class="carousel-inner @(images.Any() ? "carousel-multiple-images" : "")"> 4489 <div class="carousel-item dvp-product-details-image-container text-center active" data-toggle="modal" data-target="#js-e-product-image-modal"> 4490 <img src="/admin/public/getimage.ashx?Crop=0&Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image dvp-product-details-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="0"> 4491 </div> 4492 4493 @for(int i = 0; i < images.Count(); i++) 4494 { 4495 <div class="carousel-item" data-toggle="modal" data-target="#js-e-product-image-modal"> 4496 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@images[i]&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@productDisplayName" class="e-product-image" data-target="#js-e-product-image-modal-carousel" data-slide-to="@(i + 1)"> 4497 </div> 4498 } 4499 </div> 4500 @if(images.Any()) 4501 { 4502 <a class="carousel-control-prev d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="prev"><i class="material-icons carousel-control-prev-icon">navigate_before</i></a> 4503 <a class="carousel-control-next d-none d-md-flex" data-target="#js-e-product-image-carousel" data-slide="next"><i class="material-icons carousel-control-next-icon">navigate_next</i></a> 4504 <ol class="carousel-indicators"> 4505 <li data-target="#js-e-product-image-carousel" data-slide-to="0" class="active"> 4506 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@productImage&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=90)"></span> 4507 </li> 4508 @for(int i = 0; i < images.Count(); i++) 4509 { 4510 <li data-target="#js-e-product-image-carousel" data-slide-to="@(i + 1)"> 4511 <span style="background-image:url(/admin/public/getimage.ashx?Crop=0&Image=@images[i]&Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&Width=50&Height=&Quality=75)"></span> 4512 </li> 4513 } 4514 </ol> 4515 } 4516 </div> 4517 </div> 4518 </div> 4519 </div> 4520 </div> 4521 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-0 pb-4 pl-sm-3"> 4522 @if(!string.IsNullOrEmpty(optionalName)) 4523 { 4524 <div class="row"> 4525 <div class="col-12"> 4526 <h2 class="mb-0">@displayNameSuperscripted</h2> 4527 </div> 4528 </div> 4529 } 4530 @if(!string.IsNullOrEmpty(productShortDescription)) 4531 { 4532 <div class="row"> 4533 <div class="col-12"> 4534 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 4535 </div> 4536 </div> 4537 } 4538 <div class="row"> 4539 <div class="col-12 mt-2 table-responsive"> 4540 <table class="table"> 4541 @if(!string.IsNullOrEmpty(productIngredients)) 4542 { 4543 <tr> 4544 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 4545 <td>@productIngredients</td> 4546 </tr> 4547 } 4548 @if(!string.IsNullOrEmpty(productRecommendation)) 4549 { 4550 <tr> 4551 <td width="30%"><b>@Translate("Recommended for","Recommended for")</b></td> 4552 <td>@productRecommendation</td> 4553 </tr> 4554 } 4555 @if(!string.IsNullOrEmpty(productNotRecommendedFor)) 4556 { 4557 <tr> 4558 <td width="30%"><b>@Translate("Not recommended for","Not recommended for")</b></td> 4559 <td>@productNotRecommendedFor</td> 4560 </tr> 4561 } 4562 @if(!string.IsNullOrEmpty(productPackSize)) 4563 { 4564 <tr> 4565 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 4566 <td>@productPackSize</td> 4567 </tr> 4568 } 4569 @if(!string.IsNullOrEmpty(productDatasheet)) 4570 { 4571 <tr> 4572 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 4573 <td> 4574 <a target="_blank" class="btn btn-sm btn-primary js-dvp-product-details-tracking-product-download d-block d-md-inline-block mr-md-1 mb-2 my-md-1" href="@productDatasheet" data-tracking-type="Datasheet" data-tracking-product-name="@productDisplayName" data-tracking-range-name="@rangeName" data-tracking-url="@productDatasheet"> 4575 @Translate("Download","Download") <i class="material-icons">get_app</i> 4576 </a> 4577 </td> 4578 </tr> 4579 } 4580 4581 </table> 4582 </div> 4583 </div> 4584 @if(!hideRequestmoreinformation) 4585 { 4586 <div class="row"> 4587 <div class="col-12"> 4588 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn js-dvp-product-details-tracking-more-info-click" data-tracking-range-name="@rangeName"> 4589 @Translate("Request more information","Request more information") 4590 </button> 4591 </div> 4592 </div> 4593 } 4594 </div> 4595 @if ( dietDetails.Count == 0 ) 4596 { 4597 if ( !string.IsNullOrEmpty( productIcon1 ) && !string.IsNullOrEmpty( productTextArea1 ) ) 4598 { 4599 <div class="col-12 col-md-6"> 4600 <div class="row mb-2"> 4601 <div class="col-6 col-md-2"> 4602 <div style="background-color:@productColorCode;" class="rounded p-1"> 4603 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon1"/> 4604 </div> 4605 </div> 4606 <div class="col-12 col-md-10 d-flex align-items-center"> 4607 <p class="mb-0">@productTextArea1</p> 4608 </div> 4609 </div> 4610 </div> 4611 } 4612 if ( !string.IsNullOrEmpty( productIcon2 ) && !string.IsNullOrEmpty( productTextArea2 ) ) 4613 { 4614 <div class="col-12 col-md-6"> 4615 <div class="row mb-2"> 4616 <div class="col-6 col-md-2"> 4617 <div style="background-color:@productColorCode;" class="rounded p-1"> 4618 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon2"/> 4619 </div> 4620 </div> 4621 <div class="col-12 col-md-10 d-flex align-items-center"> 4622 <p class="mb-0">@productTextArea2</p> 4623 </div> 4624 </div> 4625 </div> 4626 } 4627 if ( !string.IsNullOrEmpty( productIcon3 ) && !string.IsNullOrEmpty( productTextArea3 ) ) 4628 { 4629 <div class="col-12 col-md-6"> 4630 <div class="row mb-2"> 4631 <div class="col-6 col-md-2"> 4632 <div style="background-color:@productColorCode;" class="rounded p-1"> 4633 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon3"/> 4634 </div> 4635 </div> 4636 <div class="col-12 col-md-10 d-flex align-items-center"> 4637 <p class="mb-0">@productTextArea3</p> 4638 </div> 4639 </div> 4640 </div> 4641 } 4642 if ( !string.IsNullOrEmpty( productIcon4 ) && !string.IsNullOrEmpty( productTextArea4 ) ) 4643 { 4644 <div class="col-12 col-md-6"> 4645 <div class="row mb-2"> 4646 <div class="col-6 col-md-2"> 4647 <div style="background-color:@productColorCode;" class="rounded p-1"> 4648 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon4"/> 4649 </div> 4650 </div> 4651 <div class="col-12 col-md-10 d-flex align-items-center"> 4652 <p class="mb-0">@productTextArea4</p> 4653 </div> 4654 </div> 4655 </div> 4656 } 4657 if ( !string.IsNullOrEmpty( productIcon5 ) && !string.IsNullOrEmpty( productTextArea5 ) ) 4658 { 4659 <div class="col-12 col-md-6"> 4660 <div class="row mb-2"> 4661 <div class="col-6 col-md-2"> 4662 <div style="background-color:@productColorCode;" class="rounded p-1"> 4663 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon5"/> 4664 </div> 4665 </div> 4666 <div class="col-12 col-md-10 d-flex align-items-center"> 4667 <p class="mb-0">@productTextArea5</p> 4668 </div> 4669 </div> 4670 </div> 4671 } 4672 if ( !string.IsNullOrEmpty( productIcon6 ) && !string.IsNullOrEmpty( productTextArea6 ) ) 4673 { 4674 <div class="col-12 col-md-6"> 4675 <div class="row mb-2"> 4676 <div class="col-6 col-md-2"> 4677 <div style="background-color:@productColorCode;" class="rounded p-1"> 4678 <image style="-webkit-filter: invert(1);filter: brightness(0) invert(1);" class="p-img" src="@productIcon6"/> 4679 </div> 4680 </div> 4681 <div class="col-12 col-md-10 d-flex align-items-center"> 4682 <p class="mb-0">@productTextArea6</p> 4683 </div> 4684 </div> 4685 </div> 4686 } 4687 } 4688 </div> 4689 4690 if ( !string.IsNullOrEmpty( productFeedingGuideImage ) && string.IsNullOrEmpty(HttpContext.Current.Request["test"])) 4691 { 4692 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 4693 <div class="row"> 4694 <div class="col-12 col-md-4"> 4695 <div class="e-product-section-header"> 4696 <h2 class="mb-1 mb-md-0">@Translate( "Feeding guide", "Feeding guide" )</h2> 4697 </div> 4698 </div> 4699 <div class="col-12 col-md-8"> 4700 <img src="@productFeedingGuideImage" class="p-img"/> 4701 </div> 4702 </div> 4703 </div> 4704 } 4705 if(!string.IsNullOrEmpty(productNutrientTableImage)) 4706 { 4707 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4708 <div class="row"> 4709 <div class="col-12 col-md-4"> 4710 <div class="e-product-section-header"> 4711 <h2 class="mb-1 mb-md-0">@Translate("Nutrient table","Nutrient table")</h2> 4712 </div> 4713 </div> 4714 <div class="col-12 col-md-8"> 4715 <img src="@productNutrientTableImage" class="p-img" /> 4716 </div> 4717 </div> 4718 </div> 4719 } 4720 } 4721 4722 if ( dietDetails.Count > 0 ) 4723 { 4724 int tabCounter = 0; 4725 4726 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 pt-2 pt-md-4 mt-2"> 4727 @if ( dietDetails.Count > 1 ) 4728 { 4729 int tabLinkCounter = 0; 4730 4731 <div class="row mb-3"> 4732 <div class="col-12"> 4733 <div class="list-group flex-column flex-md-row" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 4734 @foreach ( KeyValuePair< string, dynamic > dietDetail in dietDetails ) 4735 { 4736 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-details-@(dietDetail.Key.Replace( " ", "-" ))" role="tab"> 4737 @dietDetail.Key 4738 <i class="material-icons d-block d-md-none">keyboard_arrow_right</i> 4739 <i class="material-icons d-none d-md-block">keyboard_arrow_down</i> 4740 </a> 4741 4742 tabLinkCounter++; 4743 } 4744 </div> 4745 </div> 4746 </div> 4747 } 4748 @foreach ( KeyValuePair<string, dynamic> dietDetail in dietDetails ) 4749 { 4750 if ( dietDetails.Count > 1 ) 4751 { 4752 if ( tabCounter == 0 ) 4753 { 4754 @:<div class="tab-content"> 4755 } 4756 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-details-@dietDetail.Key.Replace(" ","-")" role="tabpanel"> 4757 @:<div class="row"> 4758 } 4759 else 4760 { 4761 @:<div class="row"> 4762 } 4763 foreach ( dynamic detail in dietDetail.Value ) 4764 { 4765 if ( detail.IconCssClass != null && detail.Description != null ) 4766 { 4767 <div class="col-12 col-md-6"> 4768 <div class="row mb-2"> 4769 <div class="col-6 col-md-2"> 4770 <div style="background-color:@productColorCode;" class="rounded text-center text-white"> 4771 <i class="dechra-details-icon dechra-icon-@detail.IconCssClass"></i> 4772 </div> 4773 </div> 4774 <div class="col-12 col-md-10 d-flex align-items-center"> 4775 <p class="mb-0">@detail.Description</p> 4776 </div> 4777 </div> 4778 </div> 4779 } 4780 } 4781 if ( dietDetails.Count > 1 ) 4782 { 4783 @:</div> 4784 @:</div> 4785 4786 tabCounter++; 4787 4788 if(tabCounter == dietDetails.Count) 4789 { 4790 @:</div> 4791 } 4792 } 4793 else 4794 { 4795 @:</div> 4796 } 4797 } 4798 </div> 4799 } 4800 4801 if ( dietFeedingGuides.Count > 0 ) 4802 { 4803 int tabCounter = 0; 4804 4805 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4 mt-2"> 4806 <div class="row"> 4807 <div class="col-12 col-md-4"> 4808 @if ( dietFeedingGuides.Count > 1 ) 4809 { 4810 int tabLinkCounter = 0; 4811 4812 <div class="list-group mb-3" style="background-color: @productColorCode;border-color: @productColorCode;" role="tablist"> 4813 @foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 4814 { 4815 <a class="list-group-item list-group-item-action js-dvp-specific-diet-tabs dvp-specific-diet-tabs d-flex justify-content-between align-items-center@(tabLinkCounter == 0 ? " active" : "")" data-toggle="list" href="#tab-feeding-@(dietFeedingGuide.Key.Replace( " ", "-" ))" role="tab"> 4816 @dietFeedingGuide.Key 4817 <i class="material-icons">keyboard_arrow_right</i> 4818 </a> 4819 4820 tabLinkCounter++; 4821 } 4822 </div> 4823 } 4824 else 4825 { 4826 foreach ( KeyValuePair< string, dynamic > dietFeedingGuide in dietFeedingGuides ) 4827 { 4828 foreach ( dynamic guide in dietFeedingGuide.Value ) 4829 { 4830 <div class="e-product-section-header"> 4831 <h2 class="mb-1 mb-md-0">@guide.Name</h2> 4832 </div> 4833 } 4834 } 4835 } 4836 </div> 4837 <div class="col-12 col-md-8"> 4838 @foreach ( KeyValuePair<string, dynamic> dietFeedingGuide in dietFeedingGuides ) 4839 { 4840 foreach ( dynamic guide in dietFeedingGuide.Value ) 4841 { 4842 if ( dietFeedingGuides.Count > 1 ) 4843 { 4844 if ( tabCounter == 0 ) 4845 { 4846 @:<div class="tab-content"> 4847 } 4848 @:<div class="tab-pane fade@(tabCounter == 0 ? " active show" : "")" id="tab-feeding-@dietFeedingGuide.Key.Replace(" ","-")" role="tabpanel"> 4849 <p class="mb-0 h3 text-center">@guide.Name</p> 4850 <p class="mb-1 mt-0 h4 text-center">@dietFeedingGuide.Key</p> 4851 } 4852 <table class="table table-condensed border"> 4853 <thead> 4854 <tr> 4855 @foreach ( dynamic th in guide.Headers ) 4856 { 4857 <th style="background: @productColorCode" class="text-center text-white"> 4858 <img class="p-img" src="@th.Icon" alt="@th.Header"> 4859 <br> 4860 @th.Header 4861 </th> 4862 } 4863 </tr> 4864 </thead> 4865 <tbody> 4866 @foreach ( dynamic tr in guide.Rows ) 4867 { 4868 <tr> 4869 @foreach ( dynamic td in tr.Row ) 4870 { 4871 <td class="text-center"> 4872 @td.Value 4873 </td> 4874 } 4875 </tr> 4876 } 4877 </tbody> 4878 </table> 4879 4880 if ( dietFeedingGuides.Count > 1 ) 4881 { 4882 @:</div> 4883 4884 tabCounter++; 4885 4886 if(tabCounter == dietFeedingGuides.Count) 4887 { 4888 @:</div> 4889 } 4890 } 4891 } 4892 } 4893 </div> 4894 </div> 4895 </div> 4896 } 4897 4898 int productPanelsItemId = 0; 4899 4900 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 4901 { 4902 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 4903 4904 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 4905 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 4906 { 4907 string productPanelNameValue = productPanel.GetValue<string>("Name"); 4908 4909 if(productPanelNameValue == "Premium Content") 4910 { 4911 <div class="col-12" id="js-dvp-product-premium-content"> 4912 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4913 <div class="row"> 4914 <div class="col-12 is-loading"> 4915 <div class="e-loading-spinner"></div> 4916 </div> 4917 </div> 4918 </div> 4919 <script id="js-e-handlebars-tmpl-dvp-product-premium-content" type="text/x-handlebars-template"> 4920 <div class="js-dvp-product-premium-content-animate fade"> 4921 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4922 <div class="row"> 4923 <div class="col-12 col-md-4"> 4924 <div class="e-product-section-header"> 4925 <h2 class="mb-1 mb-md-0"> 4926 @Translate("Premium Content","Premium Content") 4927 </h2> 4928 </div> 4929 </div> 4930 <div class="col-12 col-md-8 mt-half"> 4931 {{#each premiumPages}} 4932 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 4933 <div class="col-12 col-md-6"> 4934 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 4935 </div> 4936 <div class="col-12 col-md-6"> 4937 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 4938 <p>{{searchFriendlyDescription}}</p> 4939 <p> 4940 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 4941 {{searchFriendlyButtonText}} 4942 </a> 4943 </p> 4944 </div> 4945 </div> 4946 {{/each}} 4947 </div> 4948 </div> 4949 </div> 4950 </div> 4951 </script> 4952 </div> 4953 } 4954 else if(productPanelNameValue == "Supportmaterials for vets") 4955 { 4956 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 4957 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4958 <div class="row"> 4959 <div class="col-12 is-loading"> 4960 <div class="e-loading-spinner"></div> 4961 </div> 4962 </div> 4963 </div> 4964 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 4965 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 4966 {{#if vetSupportmaterials.items}} 4967 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 4968 <div class="row"> 4969 {{#if vetSupportmaterials.display}} 4970 <div class="col-12 col-md-4"> 4971 <div class="e-product-section-header"> 4972 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 4973 </div> 4974 </div> 4975 <div class="col-12 col-md-8 mt-half"> 4976 {{#each vetSupportmaterials.items}} 4977 4978 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 4979 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 4980 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 4981 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 4982 </p> 4983 4984 <div class="row"> 4985 <div class="col-12"> 4986 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 4987 <div class="row"> 4988 <div class="col-12 pl-md-3"> 4989 <div class="row"> 4990 {{#each materials}} 4991 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 4992 <div class="row"> 4993 <div class="col-12 col-md-6 text-center"> 4994 {{#if download}} 4995 {{#if loginToDownload}} 4996 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 4997 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 4998 </a> 4999 {{else}} 5000 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 5001 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5002 </a> 5003 {{/if}} 5004 {{else}} 5005 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5006 {{/if}} 5007 </div> 5008 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5009 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5010 5011 {{#if loginToDownload}} 5012 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5013 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 5014 </a> 5015 {{else}} 5016 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 5017 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5018 </a> 5019 {{/if}} 5020 5021 @if(shopIsActive && hasAccess) 5022 { 5023 @:{{#if orderable}} 5024 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5025 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5026 <input type="hidden" name="CartCmd" value="Add"> 5027 <input type="hidden" name="ProductID" value="{{id}}"> 5028 <input type="hidden" name="VariantID" value=""> 5029 <input type="hidden" name="UnitID" value=""> 5030 <input type="hidden" name="Redirect" value="false"> 5031 <input type="hidden" name="Quantity" value="1"> 5032 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5033 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5034 </form> 5035 @:{{/if}} 5036 } 5037 </div> 5038 </div> 5039 </div> 5040 {{/each}} 5041 </div> 5042 </div> 5043 </div> 5044 </div> 5045 </div> 5046 </div> 5047 {{/each}} 5048 </div> 5049 {{else}} 5050 <div class="col-12 text-center"> 5051 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 5052 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 5053 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5054 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5055 </div> 5056 {{/if}} 5057 </div> 5058 </div> 5059 {{/if}} 5060 </div> 5061 </script> 5062 5063 </div> 5064 } 5065 else if(productPanelNameValue == "Supportmaterials for pet owners") 5066 { 5067 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 5068 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5069 <div class="row"> 5070 <div class="col-12 is-loading"> 5071 <div class="e-loading-spinner"></div> 5072 </div> 5073 </div> 5074 </div> 5075 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 5076 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 5077 {{#if clientSupportmaterials.items}} 5078 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5079 <div class="row"> 5080 {{#if clientSupportmaterials.display}} 5081 <div class="col-12 col-md-4"> 5082 <div class="e-product-section-header"> 5083 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 5084 </div> 5085 </div> 5086 <div class="col-12 col-md-8 mt-half"> 5087 {{#each clientSupportmaterials.items}} 5088 5089 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 5090 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 5091 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 5092 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 5093 </p> 5094 5095 <div class="row"> 5096 <div class="col-12"> 5097 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 5098 <div class="row"> 5099 <div class="col-12 pl-md-3"> 5100 <div class="row"> 5101 {{#each materials}} 5102 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 5103 <div class="row"> 5104 <div class="col-12 col-md-6 text-center"> 5105 {{#if download}} 5106 {{#if loginToDownload}} 5107 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 5108 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5109 </a> 5110 {{else}} 5111 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 5112 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5113 </a> 5114 {{/if}} 5115 {{else}} 5116 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 5117 {{/if}} 5118 </div> 5119 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 5120 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 5121 {{#if download}} 5122 <p class="mb-1"> 5123 {{#if loginToDownload}} 5124 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 5125 {{else}} 5126 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 5127 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 5128 </a> 5129 {{/if}} 5130 </p> 5131 {{/if}} 5132 5133 @if(shopIsActive && hasAccess) 5134 { 5135 @:{{#if orderable}} 5136 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 5137 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 5138 <input type="hidden" name="CartCmd" value="Add"> 5139 <input type="hidden" name="ProductID" value="{{id}}"> 5140 <input type="hidden" name="VariantID" value=""> 5141 <input type="hidden" name="UnitID" value=""> 5142 <input type="hidden" name="Redirect" value="false"> 5143 <input type="hidden" name="Quantity" value="1"> 5144 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 5145 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 5146 </form> 5147 @:{{/if}} 5148 } 5149 5150 </div> 5151 </div> 5152 </div> 5153 {{/each}} 5154 </div> 5155 </div> 5156 </div> 5157 </div> 5158 </div> 5159 </div> 5160 {{/each}} 5161 </div> 5162 {{else}} 5163 <div class="col-12 text-center"> 5164 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 5165 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 5166 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 5167 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5168 </div> 5169 {{/if}} 5170 </div> 5171 </div> 5172 {{/if}} 5173 </div> 5174 </script> 5175 5176 </div> 5177 } 5178 else if(productPanelNameValue == "Videos") 5179 { 5180 <div class="col-12" id="js-dvp-product-videos"> 5181 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5182 <div class="row"> 5183 <div class="col-12 is-loading"> 5184 <div class="e-loading-spinner"></div> 5185 </div> 5186 </div> 5187 </div> 5188 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 5189 <div class="js-dvp-product-videos-animate fade"> 5190 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5191 <div class="row"> 5192 {{#if display}} 5193 <div class="col-12 col-md-4"> 5194 <div class="e-product-section-header"> 5195 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 5196 </div> 5197 </div> 5198 <div class="col-12 col-md-8 mt-half"> 5199 {{#compare totalVideoCount '>' 4}} 5200 <div class="collapse-peek"> 5201 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 5202 {{/compare}} 5203 <div class="row"> 5204 {{#each videos}} 5205 {{#each videos}} 5206 <div class="col-12 col-md-6"> 5207 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 5208 <div> 5209 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 5210 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 5211 </div> 5212 </a> 5213 <sc{{handlebarHack}}ript type="application/json"> 5214 { 5215 "url":"{{../url}}", 5216 "header":"{{embedTitle}}", 5217 "embedUrl":"{{{embedUrl}}}" 5218 } 5219 </sc{{handlebarHack}}ript> 5220 </div> 5221 {{/each}} 5222 {{/each}} 5223 </div> 5224 {{#compare totalVideoCount '>' 4}} 5225 </div> 5226 <div class="collapse-peek-toggle"> 5227 <div class="row"> 5228 <div class="col-12 mx-auto text-center"> 5229 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 5230 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 5231 </a> 5232 </div> 5233 </div> 5234 </div> 5235 {{/compare}} 5236 </div> 5237 </div> 5238 {{else}} 5239 <div class="col-12 text-center"> 5240 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 5241 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 5242 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5243 </div> 5244 {{/if}} 5245 </div> 5246 </div> 5247 </div> 5248 </script> 5249 </div> 5250 } 5251 else if(productPanelNameValue == "Related ranges") 5252 { 5253 <div class="col-12"> 5254 @if( GetLoop("RelatedRanges").Count() > 0 ) 5255 { 5256 string relatedProductsHeader = Translate("Other related products","Other related products"); 5257 5258 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 5259 { 5260 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 5261 } 5262 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5263 <div class="row"> 5264 <div class="col-12 col-md-4"> 5265 <div class="e-product-section-header"> 5266 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 5267 </div> 5268 </div> 5269 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 5270 <div class="row"> 5271 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 5272 { 5273 string relatedRangeGroupId = ""; 5274 5275 int relatedProductInt = 0; 5276 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 5277 string relatedRangeName = relatedRange.GetString("Range"); 5278 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 5279 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 5280 5281 <div class="col-12 col-lg-6 mb-3"> 5282 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 5283 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 5284 </div> 5285 <div class="col-12 px-1 pt-1 border dvp-range"> 5286 <div> 5287 <div class="row"> 5288 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 5289 { 5290 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 5291 5292 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 5293 5294 if(relatedProductInt == 2) 5295 { 5296 @:</div> 5297 @:</div> 5298 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 5299 @:<div class="row"> 5300 } 5301 5302 string relatedUrl = string.Empty; 5303 5304 string relatedUrlFriendlyProduct = string.Empty; 5305 5306 string relatedProductName = product.GetString("Ecom:Product.Name"); 5307 5308 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 5309 5310 string relatedProductDisplayName = relatedProductName; 5311 string relatedProductTitleName = relatedProductName; 5312 5313 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 5314 { 5315 if(hideRelatedProductName) 5316 { 5317 relatedProductDisplayName = relatedRangeNameSuperscripted; 5318 relatedProductTitleName = relatedRangeName; 5319 } 5320 else 5321 { 5322 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 5323 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 5324 } 5325 } 5326 5327 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 5328 { 5329 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 5330 } 5331 else 5332 { 5333 relatedUrl = relatedProductName; 5334 } 5335 5336 if(relatedProductsInRangeCount > 1) 5337 { 5338 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 5339 } 5340 5341 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 5342 5343 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 5344 5345 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 5346 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 5347 <div class="row"> 5348 <div class="col-12 dvp-image-container"> 5349 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 5350 </div> 5351 <div class="col-12"> 5352 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 5353 </div> 5354 </div> 5355 </a> 5356 </div> 5357 5358 relatedProductInt++; 5359 } 5360 </div> 5361 </div> 5362 <div class="row mt-1 dvp-view-more-products"> 5363 @if(relatedProductsInRangeCount > 2) 5364 { 5365 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 5366 5367 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 5368 5369 if(relatedProductsInRangeCount == 3 ) 5370 { 5371 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 5372 } 5373 5374 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 5375 5376 <div class="col-12"> 5377 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 5378 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 5379 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 5380 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 5381 </a> 5382 </p> 5383 </div> 5384 } 5385 </div> 5386 </div> 5387 </div> 5388 } 5389 </div> 5390 </div> 5391 </div> 5392 </div> 5393 } 5394 </div> 5395 } 5396 else if(productPanelNameValue == "Newsletter") 5397 { 5398 <div class="col-12"> 5399 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5400 <div class="row"> 5401 <div class="col-12 col-md-4"> 5402 <div class="e-product-section-header"> 5403 <h2 class="mb-1 mb-md-0">Newsletter</h2> 5404 </div> 5405 </div> 5406 <div class="col-12 col-md-8"> 5407 <div class="dvp-newsletter-signup-form"> 5408 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 5409 <div class="form-group"> 5410 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 5411 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 5412 </div> 5413 <div class="form-group"> 5414 <button type="submit" class="btn btn-primary">Sign up</button> 5415 </div> 5416 </form> 5417 </div> 5418 </div> 5419 </div> 5420 </div> 5421 </div> 5422 } 5423 else if(productPanelNameValue == "eLearning") 5424 { 5425 <div class="col-12" id="js-dvp-product-elearning"> 5426 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5427 <div class="row"> 5428 <div class="col-12 is-loading"> 5429 <div class="e-loading-spinner"></div> 5430 </div> 5431 </div> 5432 </div> 5433 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 5434 <div class="js-dvp-product-elearning-animate fade"> 5435 {{#if elearning.items}} 5436 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5437 <div class="row"> 5438 <div class="col-12 col-md-4"> 5439 <div class="e-product-section-header"> 5440 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 5441 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 5442 </div> 5443 </div> 5444 <div class="col-12 col-md-8"> 5445 <h3> 5446 {{elearning.items.0.courseAmountText}} 5447 </h3> 5448 <div class="row"> 5449 <div class="col-12"> 5450 <div class="list-group"> 5451 {{#if elearning.display}} 5452 {{#each elearning.items.0.courses}} 5453 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5454 <b>{{name}}</b> 5455 </a> 5456 {{/each}} 5457 {{else}} 5458 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 5459 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5460 {{/if}} 5461 </div> 5462 </div> 5463 </div> 5464 {{#unless elearning.display}} 5465 <div class="row mt-2"> 5466 <div class="col-12"> 5467 <div class="bg-academy"> 5468 <div class="row p-2"> 5469 @{ 5470 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 5471 } 5472 <div class="col-12"> 5473 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 5474 </div> 5475 <div class="col-12 col-md-8 text-white"> 5476 <ul class="mb-0"> 5477 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 5478 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 5479 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 5480 </ul> 5481 </div> 5482 <div class="col-12 col-md-4 pt-2"> 5483 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 5484 </div> 5485 </div> 5486 </div> 5487 </div> 5488 </div> 5489 {{/unless}} 5490 </div> 5491 </div> 5492 </div> 5493 {{/if}} 5494 </div> 5495 </script> 5496 </div> 5497 } 5498 else if(productPanelNameValue == "Product Websites") 5499 { 5500 <div class="col-12" id="js-dvp-product-websites"> 5501 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5502 <div class="row"> 5503 <div class="col-12 is-loading"> 5504 <div class="e-loading-spinner"></div> 5505 </div> 5506 </div> 5507 </div> 5508 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 5509 <div class="js-dvp-product-websites-animate fade"> 5510 {{#if websites.items}} 5511 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5512 <div class="row"> 5513 {{#if websites.display}} 5514 <div class="col-12 col-md-4"> 5515 <div class="e-product-section-header"> 5516 <h2 class="mb-1 mb-md-0"> 5517 {{#compare count '>' 1}} 5518 @Translate("Product Websites","Product Websites") 5519 {{else}} 5520 @Translate("Product Website","Product Website") 5521 {{/compare}} 5522 </h2> 5523 </div> 5524 </div> 5525 <div class="col-12 col-md-8 mt-half"> 5526 {{#each websites.items.0.website}} 5527 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 5528 <div class="col-12 col-md-6"> 5529 <p class="lead"> 5530 {{name}} 5531 </p> 5532 <p> 5533 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5534 @Translate("Go to website","Go to website") 5535 </a> 5536 </p> 5537 </div> 5538 <div class="col-12 col-md-6"> 5539 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 5540 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 5541 </a> 5542 </div> 5543 </div> 5544 {{/each}} 5545 </div> 5546 {{else}} 5547 <div class="col-12 text-center"> 5548 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 5549 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 5550 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5551 </div> 5552 {{/if}} 5553 </div> 5554 </div> 5555 {{/if}} 5556 </div> 5557 </script> 5558 </div> 5559 } 5560 else if(productPanelNameValue == "Previous Premium Content") 5561 { 5562 <div class="col-12" id="js-dvp-product-previous-premium-content"> 5563 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5564 <div class="row"> 5565 <div class="col-12 is-loading"> 5566 <div class="e-loading-spinner"></div> 5567 </div> 5568 </div> 5569 </div> 5570 <script id="js-e-handlebars-tmpl-dvp-product-previous-premium-content" type="text/x-handlebars-template"> 5571 <div class="js-dvp-product-previous-premium-content-animate fade"> 5572 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5573 <div class="row"> 5574 <div class="col-12 col-md-4"> 5575 <div class="e-product-section-header"> 5576 <h2 class="mb-1 mb-md-0"> 5577 @Translate("Previous Premium Content","Premium Content") 5578 </h2> 5579 </div> 5580 </div> 5581 <div class="col-12 col-md-8 mt-half"> 5582 {{#each premiumPages}} 5583 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 5584 <div class="col-12 col-md-6"> 5585 <img class="p-img" src="{{searchFriendlyImageThumbnail}}" alt="{{searchFriendlyTitle}}" /> 5586 </div> 5587 <div class="col-12 col-md-6"> 5588 <h3 class="mt-1 mb-0">{{searchFriendlyTitle}}</h3> 5589 <p>{{searchFriendlyDescription}}</p> 5590 <p> 5591 <a {{#if hasAccess}}target="_blank"{{/if}} href="{{#if hasAccess}}{{url}}{{else}}javascript:void(0);{{/if}}" class="{{#unless hasAccess}}js-dvp-extranet-login js-dvp-extranet-login-premium-content {{/unless}}btn btn-sm btn-primary" title="{{searchFriendlyTitle}}"> 5592 {{searchFriendlyButtonText}} 5593 </a> 5594 </p> 5595 </div> 5596 </div> 5597 {{/each}} 5598 </div> 5599 </div> 5600 </div> 5601 </div> 5602 </script> 5603 </div> 5604 } 5605 else if(productPanelNameValue == "Frequent Treatment Questions") 5606 { 5607 <div class="col-12" id="js-dvp-product-faq"> 5608 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5609 <div class="row"> 5610 <div class="col-12 is-loading"> 5611 <div class="e-loading-spinner"></div> 5612 </div> 5613 </div> 5614 </div> 5615 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 5616 <div class="js-dvp-product-faq-animate fade"> 5617 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5618 <div class="row"> 5619 {{#if display}} 5620 <div class="col-12 col-md-4"> 5621 <div class="e-product-section-header"> 5622 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 5623 </div> 5624 </div> 5625 <div class="col-12 col-md-8 mt-half dvp-faq"> 5626 {{# faqs}} 5627 {{#each faq}} 5628 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 5629 <div class="row"> 5630 <div class="col-12"> 5631 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 5632 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 5633 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 5634 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 5635 </h3> 5636 </div> 5637 </div> 5638 <div class="row"> 5639 <div class="col-12"> 5640 <div class="collapse" id="collapse-{{paragraphId}}"> 5641 <div class="row"> 5642 <div class="col-12 pl-3"> 5643 {{#each faqList}} 5644 <div class="row"> 5645 <div class="col-12 mt-1"> 5646 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 5647 {{listHeader}} 5648 </a> 5649 <sc{{handlebarHack}}ript type="application/json"> 5650 { 5651 "url":"{{../../url}}", 5652 "categoryName": "{{../categoryName}}", 5653 "header":"{{listHeader}}", 5654 "content":"{{{listContent}}}" 5655 } 5656 </sc{{handlebarHack}}ript> 5657 </div> 5658 </div> 5659 {{/each}} 5660 </div> 5661 </div> 5662 </div> 5663 </div> 5664 </div> 5665 </div> 5666 {{/each}} 5667 {{/faqs}} 5668 5669 {{#each accordions}} 5670 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 5671 {{#if introText}} 5672 <div class="p-accordion-lead"> 5673 {{{introText}}} 5674 </div> 5675 {{/if}} 5676 <div class="p-accordion-container "> 5677 {{#each accordionItems}} 5678 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 5679 <div class="p-accordion-toggle"> 5680 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 5681 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 5682 {{heading}} 5683 </span> 5684 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 5685 </p> 5686 </div> 5687 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 5688 <div class="px-2 pb-1 p-accordion-content"> 5689 <div class="p-txt-container dvp-rich-text-content pt-1"> 5690 {{{text}}} 5691 </div> 5692 </div> 5693 </div> 5694 </div> 5695 {{/each}} 5696 </div> 5697 </div> 5698 {{/each}} 5699 5700 5701 </div> 5702 {{else}} 5703 <div class="col-12 text-center"> 5704 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 5705 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 5706 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 5707 </div> 5708 {{/if}} 5709 </div> 5710 </div> 5711 </div> 5712 </script> 5713 </div> 5714 } 5715 else if(productPanelNameValue == "Got More Questions form") 5716 { 5717 <div class="col-12 js-dvp-product-details-more-info-section"> 5718 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 5719 <div class="row"> 5720 <div class="col-12 col-md-4"> 5721 <div class="e-product-section-header"> 5722 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 5723 </div> 5724 </div> 5725 <div class="p col-12 col-md-8 mt-half"> 5726 @{ 5727 int currentPageId; 5728 5729 int.TryParse(pageId, out currentPageId); 5730 5731 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 5732 5733 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 5734 5735 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 5736 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 5737 5738 int formPageId; 5739 int formParagraphId; 5740 5741 int.TryParse(formPageIdString, out formPageId); 5742 int.TryParse(formParagraphIdString, out formParagraphId); 5743 5744 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 5745 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 5746 5747 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 5748 5749 } 5750 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 5751 </div> 5752 </div> 5753 </div> 5754 </div> 5755 } 5756 } 5757 </div> 5758 } 5759 5760 } 5761 else if(productType.GetBoolean("Ecom:Product:Field.IsPharma")) 5762 { 5763 string rangeName = range.GetString("Range"); 5764 string rangeNameSuperscripted = range.GetString("Range").Replace("®","<sup>®</sup>"); 5765 string rangeId = string.Empty; 5766 string therapyAreaId = string.Empty; 5767 string therapyAreaName = string.Empty; 5768 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 5769 string optionalName = string.Empty; 5770 string displayName = string.Empty; 5771 string displayNameSuperscripted = string.Empty; 5772 string groupId = string.Empty; 5773 string productName = string.Empty; 5774 string productDisplayName = string.Empty; 5775 string urlFriendlyProductName = string.Empty; 5776 string productShortDescription = string.Empty; 5777 string productShortDescriptionJSON = string.Empty; 5778 string productActives = string.Empty; 5779 string productActivesJSON = string.Empty; 5780 string productPackSize = string.Empty; 5781 string productWithdrawalPeriod = string.Empty; 5782 string productDatasheet = string.Empty; 5783 string productPackInsert = string.Empty; 5784 string productSPC = string.Empty; 5785 string productMSDS = string.Empty; 5786 bool hasDocuments = true; 5787 string productDisclaimer = string.Empty; 5788 string productDisclaimerJSON = string.Empty; 5789 string productImage = string.Empty; 5790 string productUrl = string.Empty; 5791 bool hideRequestmoreinformation = Espresso.Page.Area.Item.GetValue<bool>("HideRequestmoreInformationOnProducts"); 5792 5793 if(productsInRangeCount > 1) 5794 { 5795 <div class="row"> 5796 <div class="col-12 col-md-6 mb-md-3 pr-sm-3"> 5797 <h1 class="mb-1 font-weight-bold"> 5798 @rangeNameSuperscripted 5799 </h1> 5800 @foreach(LoopItem product in range.GetLoop("ProductsInRange")) 5801 { 5802 5803 groupId = product.GetString("Ecom:Group.ID"); 5804 5805 productName = product.GetString("Ecom:Product.Name"); 5806 productDisplayName = productName; 5807 urlFriendlyProductName = Regex.Replace(productName, @"[^A-Za-z0-9_\~]+", "-"); 5808 5809 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 5810 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 5811 5812 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 5813 5814 if(!string.IsNullOrEmpty(optionalName)) 5815 { 5816 displayName = optionalName; 5817 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 5818 } 5819 else 5820 { 5821 displayName = rangeName; 5822 displayNameSuperscripted = rangeNameSuperscripted; 5823 } 5824 5825 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 5826 { 5827 productDisplayName = displayNameSuperscripted + " " + productName; 5828 } 5829 5830 rangeId = "0"; 5831 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 5832 { 5833 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 5834 } 5835 5836 therapyAreaId = "0"; 5837 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 5838 { 5839 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 5840 } 5841 5842 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 5843 5844 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 5845 productActivesJSON = WebUtility.HtmlDecode(Regex.Replace(productActives, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 5846 5847 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", "); 5848 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 5849 5850 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 5851 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 5852 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 5853 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 5854 5855 hasDocuments = true; 5856 5857 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 5858 { 5859 hasDocuments = false; 5860 } 5861 5862 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 5863 productDisclaimerJSON = WebUtility.HtmlDecode(Regex.Replace(productDisclaimer, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 5864 5865 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 5866 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 5867 5868 <a class="js-dvp-product-list-details" href="@productUrl" title="@displayName - @productName" data-productname="@urlFriendlyProductName"> 5869 <div class="row px-sm-1 my-2 my-sm-0"> 5870 <div class="dvp-product-list-details col-12 p-sm-1 py-1"> 5871 <div class="row"> 5872 <div class="col-3 col-sm-2 my-auto text-center dvp-product-list-details-image-container"> 5873 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" alt="@productDisplayName"> 5874 </div> 5875 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 5876 <p class="mb-0"> 5877 @if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 5878 { 5879 <b>@productDisplayName</b> 5880 } 5881 else 5882 { 5883 <b class="h3">@displayNameSuperscripted</b> 5884 <br> @productDisplayName 5885 } 5886 </p> 5887 </div> 5888 <div class="col-2 d-none d-sm-block my-auto text-center"> 5889 <i class="material-icons material-icons-4x">keyboard_arrow_right</i> 5890 </div> 5891 </div> 5892 <script type="application/json" class="@urlFriendlyProductName"> 5893 { 5894 "Name":"@productDisplayName", 5895 "ShortDescription":"@productShortDescriptionJSON", 5896 "Image":"@productImage", 5897 "Actives":"@productActivesJSON", 5898 "PackSize":"@productPackSize", 5899 "WithdrawalPeriod":"@productWithdrawalPeriod", 5900 "Datasheet":"@productDatasheet", 5901 "PackInsert":"@productPackInsert", 5902 "SPC":"@productSPC", 5903 "MSDS":"@productMSDS", 5904 "HasDocuments":"@hasDocuments", 5905 "Disclaimer":"@productDisclaimerJSON" 5906 } 5907 </script> 5908 </div> 5909 </div> 5910 </a> 5911 } 5912 </div> 5913 <div id="js-dvp-product-details" class="col-12 col-md-6 mt-4 pb-4 mt-sm-0 pl-sm-3 align-self-center dvp-product-details"> 5914 <div class="js-dvp-product-details-animate fade"> 5915 <div class="row"> 5916 <div class="col-12"> 5917 <div class="e-product-image-container dvp-product-details-image-container text-center"> 5918 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productDisplayName"> 5919 </div> 5920 </div> 5921 </div> 5922 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 5923 { 5924 <div class="row"> 5925 <div class="col-12"> 5926 @productShortDescriptionJSON 5927 </div> 5928 </div> 5929 } 5930 <div class="row"> 5931 <div class="col-12 mt-2 table-responsive"> 5932 <table class="table"> 5933 @if(!string.IsNullOrEmpty(productActives)) 5934 { 5935 <tr> 5936 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 5937 <td>@productActives</td> 5938 </tr> 5939 } 5940 @if(!string.IsNullOrEmpty(productPackSize)) 5941 { 5942 <tr> 5943 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 5944 <td>@productPackSize</td> 5945 </tr> 5946 } 5947 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 5948 { 5949 <tr> 5950 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 5951 <td>@productWithdrawalPeriod</td> 5952 </tr> 5953 } 5954 @if(hasDocuments) 5955 { 5956 <tr> 5957 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 5958 <td> 5959 @if(!string.IsNullOrEmpty(productDatasheet)) 5960 { 5961 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 5962 } 5963 @if(!string.IsNullOrEmpty(productPackInsert)) 5964 { 5965 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 5966 } 5967 @if(!string.IsNullOrEmpty(productSPC)) 5968 { 5969 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 5970 } 5971 @if(!string.IsNullOrEmpty(productMSDS)) 5972 { 5973 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 5974 } 5975 </td> 5976 </tr> 5977 } 5978 </table> 5979 </div> 5980 </div> 5981 @if(!string.IsNullOrEmpty(productDisclaimer)) 5982 { 5983 <div class="row"> 5984 <div class="col-12"> 5985 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 5986 <small> 5987 @productDisclaimer 5988 </small> 5989 </div> 5990 </div> 5991 } 5992 @if(!hideRequestmoreinformation) 5993 { 5994 <div class="row"> 5995 <div class="col-12"> 5996 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 5997 </div> 5998 </div> 5999 } 6000 </div> 6001 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 6002 <div class="js-dvp-product-details-animate fade"> 6003 6004 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6005 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="{{Name}}"> 6006 </div> 6007 {{#if ShortDescription}} 6008 <div class="dvp-short-description"> 6009 {{{ShortDescription}}} 6010 </div> 6011 {{/if}} 6012 <div class="row"> 6013 <div class="col-12 mt-2 table-responsive"> 6014 <table class="table"> 6015 {{#if Actives}} 6016 <tr> 6017 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6018 <td>{{{Actives}}}</td> 6019 </tr> 6020 {{/if}} 6021 {{#if PackSize}} 6022 <tr> 6023 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6024 <td>{{PackSize}}</td> 6025 </tr> 6026 {{/if}} 6027 {{#if WithdrawalPeriod}} 6028 <tr> 6029 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6030 <td>{{{WithdrawalPeriod}}}</td> 6031 </tr> 6032 {{/if}} 6033 {{#compare HasDocuments '===' 'True'}} 6034 <tr> 6035 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6036 <td> 6037 {{#if Datasheet}} 6038 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{Datasheet}}">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 6039 {{/if}} 6040 {{#if PackInsert}} 6041 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{PackInsert}}">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 6042 {{/if}} 6043 {{#if SPC}} 6044 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="{{SPC}}">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 6045 {{/if}} 6046 {{#if MSDS}} 6047 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="{{MSDS}}">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 6048 {{/if}} 6049 </td> 6050 </tr> 6051 {{/compare}} 6052 </table> 6053 </div> 6054 </div> 6055 {{#if Disclaimer}} 6056 <div class="row mt-1"> 6057 <div class="col-12"> 6058 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6059 <small> 6060 {{{Disclaimer}}} 6061 </small> 6062 </div> 6063 </div> 6064 {{/if}} 6065 @if(!hideRequestmoreinformation) 6066 { 6067 <div class="row"> 6068 <div class="col-12"> 6069 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6070 </div> 6071 </div> 6072 } 6073 </div> 6074 </script> 6075 </div> 6076 </div> 6077 } 6078 else 6079 { 6080 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 6081 { 6082 6083 groupId = product.GetString("Ecom:Group.ID"); 6084 6085 productName = product.GetString("Ecom:Product.Name"); 6086 6087 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 6088 6089 optionalName = product.GetString("Ecom:Product:Field.OptionalName"); 6090 6091 if(!string.IsNullOrEmpty(optionalName)) 6092 { 6093 displayName = optionalName; 6094 displayNameSuperscripted = optionalName.Replace("®","<sup>®</sup>"); 6095 } 6096 6097 rangeId = "0"; 6098 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"))) 6099 { 6100 rangeId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.range.Value"); 6101 } 6102 6103 therapyAreaId = "0"; 6104 if(!string.IsNullOrEmpty(product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"))) 6105 { 6106 therapyAreaId = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.Value"); 6107 } 6108 6109 therapyAreaName = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.therapyareas.OptionLabel"); 6110 6111 productActives = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.ingredients.Value"); 6112 productPackSize = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packetsize.OptionLabel").Replace(",",", ");; 6113 productWithdrawalPeriod = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.withdrawalperiod.Value"); 6114 6115 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.datasheet.Value"); 6116 productPackInsert = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.packinsert.Value"); 6117 productSPC = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.spc.Value"); 6118 productMSDS = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.msds.Value"); 6119 6120 hasDocuments = true; 6121 6122 if(string.IsNullOrEmpty(productDatasheet) && string.IsNullOrEmpty(productPackInsert) && string.IsNullOrEmpty(productSPC) && string.IsNullOrEmpty(productMSDS)) 6123 { 6124 hasDocuments = false; 6125 } 6126 6127 productDisclaimer = product.GetString("Ecom:Product.CategoryField.dechrapharmaceutical.disclaimer.Value"); 6128 6129 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6130 } 6131 <div class="row dvp-product-details"> 6132 <div class="col-12"> 6133 <div class="row"> 6134 <div class="col-12"> 6135 <h1 class="mb-1 font-weight-bold"> 6136 @rangeNameSuperscripted 6137 </h1> 6138 </div> 6139 </div> 6140 </div> 6141 <div class="col-12 col-sm-6 pr-sm-3 pb-0 pb-md-4"> 6142 <div class="row"> 6143 <div class="col-12"> 6144 <div class="e-product-image-container dvp-product-details-image-container text-center"> 6145 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="dvp-product-details-image" alt="@productName"> 6146 </div> 6147 </div> 6148 </div> 6149 </div> 6150 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 pb-4 mt-sm-0 pl-sm-3"> 6151 @if(!string.IsNullOrEmpty(optionalName)) 6152 { 6153 <div class="row"> 6154 <div class="col-12"> 6155 <h2 class="mb-0">@displayNameSuperscripted</h2> 6156 </div> 6157 </div> 6158 } 6159 @if(!string.IsNullOrEmpty(productShortDescription)) 6160 { 6161 <div class="row"> 6162 <div class="col-12"> 6163 @WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")) 6164 </div> 6165 </div> 6166 } 6167 <div class="row"> 6168 <div class="col-12 mt-2 table-responsive"> 6169 <table class="table"> 6170 @if(!string.IsNullOrEmpty(productActives)) 6171 { 6172 <tr> 6173 <td width="30%"><b>@Translate("Active(s):","Active(s):")</b></td> 6174 <td>@productActives</td> 6175 </tr> 6176 } 6177 @if(!string.IsNullOrEmpty(productPackSize)) 6178 { 6179 <tr> 6180 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 6181 <td>@productPackSize</td> 6182 </tr> 6183 } 6184 @if(!string.IsNullOrEmpty(productWithdrawalPeriod)) 6185 { 6186 <tr> 6187 <td width="30%"><b>@Translate("Withdrawal period:","Withdrawal period:")</b></td> 6188 <td>@productWithdrawalPeriod</td> 6189 </tr> 6190 } 6191 @if(hasDocuments) 6192 { 6193 <tr> 6194 <td width="30%"><b>@Translate("Documents:","Documents:")</b></td> 6195 <td> 6196 @if(!string.IsNullOrEmpty(productDatasheet)) 6197 { 6198 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productDatasheet">@Translate("Datasheet","Datasheet") <i class="material-icons">get_app</i></a> 6199 } 6200 @if(!string.IsNullOrEmpty(productPackInsert)) 6201 { 6202 <a target="_blank" class="btn btn-sm btn-primary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productPackInsert">@Translate("Pack Insert","Pack Insert") <i class="material-icons">get_app</i></a> 6203 } 6204 @if(!string.IsNullOrEmpty(productSPC)) 6205 { 6206 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block mr-md-1 mb-2 mb-md-0" href="@productSPC">@Translate("SPC","SPC") <i class="material-icons">get_app</i></a> 6207 } 6208 @if(!string.IsNullOrEmpty(productMSDS)) 6209 { 6210 <a target="_blank" class="btn btn-sm btn-secondary d-block d-md-inline-block" href="@productMSDS">@Translate("MSDS","MSDS") <i class="material-icons">get_app</i></a> 6211 } 6212 </td> 6213 </tr> 6214 } 6215 </table> 6216 </div> 6217 </div> 6218 @if(!string.IsNullOrEmpty(productDisclaimer)) 6219 { 6220 <div class="row mt-1"> 6221 <div class="col-12"> 6222 <h4 class="text-uppercase">@Translate("Important safety information","Important safety information")</h4> 6223 <small> 6224 @productDisclaimer 6225 </small> 6226 </div> 6227 </div> 6228 } 6229 @if(!hideRequestmoreinformation) 6230 { 6231 <div class="row"> 6232 <div class="col-12"> 6233 <button class="btn btn-outline-primary js-dvp-product-details-more-info-btn">@Translate("Request more information","Request more information")</button> 6234 </div> 6235 </div> 6236 } 6237 </div> 6238 </div> 6239 } 6240 6241 int productPanelsItemId = 0; 6242 6243 if(Int32.TryParse(currentArea.Item["ProductPanels"].ToString(), out productPanelsItemId)) 6244 { 6245 Dynamicweb.Content.Items.ItemList productPanels = Dynamicweb.Content.Items.ItemList.GetItemListById(productPanelsItemId); 6246 6247 <div class="row js-dvp-product-details-search-values" data-range-id="@rangeId" data-therapyarea-id="@therapyAreaId"> 6248 @foreach(Dynamicweb.Content.Items.Item productPanel in productPanels.Relations) 6249 { 6250 string productPanelNameValue = productPanel.GetValue<string>("Name"); 6251 6252 if(productPanelNameValue == "Supportmaterials for vets") 6253 { 6254 <div class="col-12" id="js-dvp-product-supportmaterials-vets"> 6255 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6256 <div class="row"> 6257 <div class="col-12 is-loading"> 6258 <div class="e-loading-spinner"></div> 6259 </div> 6260 </div> 6261 </div> 6262 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-vets" type="text/x-handlebars-template"> 6263 <div class="js-dvp-product-supportmaterials-vets-animate fade"> 6264 {{#if vetSupportmaterials.items}} 6265 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6266 <div class="row"> 6267 {{#if vetSupportmaterials.display}} 6268 <div class="col-12 col-md-4"> 6269 <div class="e-product-section-header"> 6270 <h2 class="mb-1 mb-md-0">@Translate("Veterinary Professional Materials","Veterinary Professional Materials")</h2> 6271 </div> 6272 </div> 6273 <div class="col-12 col-md-8 mt-half"> 6274 {{#each vetSupportmaterials.items}} 6275 6276 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-vet-supportmaterials-{{categoryId}}"> 6277 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6278 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6279 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6280 </p> 6281 6282 <div class="row"> 6283 <div class="col-12"> 6284 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-vet-supportmaterials-{{categoryId}}"> 6285 <div class="row"> 6286 <div class="col-12 pl-md-3"> 6287 <div class="row"> 6288 {{#each materials}} 6289 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6290 <div class="row"> 6291 <div class="col-12 col-md-6 text-center"> 6292 {{#if download}} 6293 {{#if loginToDownload}} 6294 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6295 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6296 </a> 6297 {{else}} 6298 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 6299 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6300 </a> 6301 {{/if}} 6302 {{else}} 6303 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6304 {{/if}} 6305 </div> 6306 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6307 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6308 6309 {{#if loginToDownload}} 6310 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6311 <i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download") 6312 </a> 6313 {{else}} 6314 <a class="js-dvp-product-details-tracking-supportmaterial-vets-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Veterinarians"> 6315 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6316 </a> 6317 {{/if}} 6318 6319 @if(shopIsActive && hasAccess) 6320 { 6321 @:{{#if orderable}} 6322 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6323 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6324 <input type="hidden" name="CartCmd" value="Add"> 6325 <input type="hidden" name="ProductID" value="{{id}}"> 6326 <input type="hidden" name="VariantID" value=""> 6327 <input type="hidden" name="UnitID" value=""> 6328 <input type="hidden" name="Redirect" value="false"> 6329 <input type="hidden" name="Quantity" value="1"> 6330 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6331 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6332 </form> 6333 @:{{/if}} 6334 } 6335 </div> 6336 </div> 6337 </div> 6338 {{/each}} 6339 </div> 6340 </div> 6341 </div> 6342 </div> 6343 </div> 6344 </div> 6345 {{/each}} 6346 </div> 6347 {{else}} 6348 <div class="col-12 text-center"> 6349 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for vets are intended for healthcare professionals only.","These support materials for vets are intended for healthcare professionals only.")</p> 6350 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 6351 <p class="mb-1">{{#each vetSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6352 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6353 </div> 6354 {{/if}} 6355 </div> 6356 </div> 6357 {{/if}} 6358 </div> 6359 </script> 6360 6361 </div> 6362 } 6363 else if(productPanelNameValue == "Supportmaterials for pet owners") 6364 { 6365 <div class="col-12" id="js-dvp-product-supportmaterials-clients"> 6366 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6367 <div class="row"> 6368 <div class="col-12 is-loading"> 6369 <div class="e-loading-spinner"></div> 6370 </div> 6371 </div> 6372 </div> 6373 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials-clients" type="text/x-handlebars-template"> 6374 <div class="js-dvp-product-supportmaterials-clients-animate fade"> 6375 {{#if clientSupportmaterials.items}} 6376 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6377 <div class="row"> 6378 {{#if clientSupportmaterials.display}} 6379 <div class="col-12 col-md-4"> 6380 <div class="e-product-section-header"> 6381 <h2 class="mb-1 mb-md-0">@Translate("Pet Owner Materials","Pet Owner Materials")</h2> 6382 </div> 6383 </div> 6384 <div class="col-12 col-md-8 mt-half"> 6385 {{#each clientSupportmaterials.items}} 6386 6387 <p class="{{#compare @@index '!==' 0}}collapsed border border-bottom-0 border-right-0 border-left-0 pt-1{{/compare}} pb-1 mb-0 font-weight-bold cursor-pointer dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-client-supportmaterials-{{categoryId}}"> 6388 <span class="dvp-collapsed"><i class="material-icons">add</i></span> 6389 <span class="dvp-expanded"><i class="material-icons">clear</i></span> 6390 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 6391 </p> 6392 6393 <div class="row"> 6394 <div class="col-12"> 6395 <div class="collapse {{#compare @@index '===' 0}}show{{/compare}}" id="collapse-details-client-supportmaterials-{{categoryId}}"> 6396 <div class="row"> 6397 <div class="col-12 pl-md-3"> 6398 <div class="row"> 6399 {{#each materials}} 6400 <div class="col-12 col-md-6 pb-3 pb-md-2 pt-0"> 6401 <div class="row"> 6402 <div class="col-12 col-md-6 text-center"> 6403 {{#if download}} 6404 {{#if loginToDownload}} 6405 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"> 6406 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6407 </a> 6408 {{else}} 6409 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 6410 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6411 </a> 6412 {{/if}} 6413 {{else}} 6414 <img class="p-img" src="{{imageLarge}}" alt="{{{name}}}"> 6415 {{/if}} 6416 </div> 6417 <div class="col-12 col-md-6 pr-1 mt-half text-center text-md-left"> 6418 <p class="mb-0 mb-md-1 font-weight-bold">{{{name}}}</p> 6419 {{#if download}} 6420 <p class="mb-1"> 6421 {{#if loginToDownload}} 6422 <a class="js-dvp-extranet-login text-danger" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Login to download","Login to download")</a> 6423 {{else}} 6424 <a class="js-dvp-product-details-tracking-supportmaterial-clients-download" target="_blank" href="{{url}}" data-tracking-product-name="{{{name}}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}" data-tracking-category-name="{{mediaName}}" data-tracking-target-audience="Clients"> 6425 <i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u> 6426 </a> 6427 {{/if}} 6428 </p> 6429 {{/if}} 6430 6431 @if(shopIsActive && hasAccess) 6432 { 6433 @:{{#if orderable}} 6434 <p class="mb-0">@Translate("Get as free print","Get as free print")</p> 6435 <form class="js-e-product-form e-product-form" action="/system/data/cart" method="post"> 6436 <input type="hidden" name="CartCmd" value="Add"> 6437 <input type="hidden" name="ProductID" value="{{id}}"> 6438 <input type="hidden" name="VariantID" value=""> 6439 <input type="hidden" name="UnitID" value=""> 6440 <input type="hidden" name="Redirect" value="false"> 6441 <input type="hidden" name="Quantity" value="1"> 6442 <button type="submit" class="btn btn-sm btn-secondary mt-half mb-1">@Translate("eCom Product - Add To Cart - Button", "Add to cart")</button> 6443 <div class="e-loading-overlay js-e-loading-overlay"><div class="e-loading-spinner"></div></div> 6444 </form> 6445 @:{{/if}} 6446 } 6447 6448 </div> 6449 </div> 6450 </div> 6451 {{/each}} 6452 </div> 6453 </div> 6454 </div> 6455 </div> 6456 </div> 6457 </div> 6458 {{/each}} 6459 </div> 6460 {{else}} 6461 <div class="col-12 text-center"> 6462 <p class="mb-1 lead text-black font-italic">@Translate("These support materials for petowners are intended for healthcare professionals only.","These support materials for petowners are intended for healthcare professionals only.")</p> 6463 <p class="mb-0">@Translate("Please sign in to access the following related support materials:", "Please sign in to access the following related support materials:")</p> 6464 <p class="mb-1">{{#each clientSupportmaterials.items}}{{#compare @@index '!==' 0}}, {{/compare}}<strong>{{categoryName}} ({{count}})</strong>{{/each}}</p> 6465 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6466 </div> 6467 {{/if}} 6468 </div> 6469 </div> 6470 {{/if}} 6471 </div> 6472 </script> 6473 6474 </div> 6475 } 6476 else if(productPanelNameValue == "Videos") 6477 { 6478 <div class="col-12" id="js-dvp-product-videos"> 6479 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6480 <div class="row"> 6481 <div class="col-12 is-loading"> 6482 <div class="e-loading-spinner"></div> 6483 </div> 6484 </div> 6485 </div> 6486 <script id="js-e-handlebars-tmpl-dvp-product-videos" type="text/x-handlebars-template"> 6487 <div class="js-dvp-product-videos-animate fade"> 6488 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6489 <div class="row"> 6490 {{#if display}} 6491 <div class="col-12 col-md-4"> 6492 <div class="e-product-section-header"> 6493 <h2 class="mb-1 mb-md-0">@Translate("Videos related to [{rangeName}]","Videos related to [{rangeName}]").Replace("[{rangeName}]", rangeNameSuperscripted)</h2> 6494 </div> 6495 </div> 6496 <div class="col-12 col-md-8 mt-half"> 6497 {{#compare totalVideoCount '>' 4}} 6498 <div class="collapse-peek"> 6499 <div class="collapse collapse-peek-content collapse-peek-lg" id="collapse-videos"> 6500 {{/compare}} 6501 <div class="row"> 6502 {{#each videos}} 6503 {{#each videos}} 6504 <div class="col-12 col-md-6"> 6505 <a href="javascript:void(0);" title="{{embedTitle}}" class="js-dvp-video-modal js-dvp-product-details-tracking-video-popup" data-tracking-title="{{embedTitle}}" data-tracking-range-name="@rangeName" data-tracking-url="{{{embedUrl}}}"> 6506 <div> 6507 <img class="p-img" src="{{embedThumbnail}}" alt="{{embedTitle}}" /> 6508 <p class="text-center mt-1 mb-3">{{embedTitle}}</p> 6509 </div> 6510 </a> 6511 <sc{{handlebarHack}}ript type="application/json"> 6512 { 6513 "url":"{{../url}}", 6514 "header":"{{embedTitle}}", 6515 "embedUrl":"{{{embedUrl}}}" 6516 } 6517 </sc{{handlebarHack}}ript> 6518 </div> 6519 {{/each}} 6520 {{/each}} 6521 </div> 6522 {{#compare totalVideoCount '>' 4}} 6523 </div> 6524 <div class="collapse-peek-toggle"> 6525 <div class="row"> 6526 <div class="col-12 mx-auto text-center"> 6527 <a href="javascript:void(0);" class="btn btn-primary collapse-peek-btn-show" data-toggle="collapse" data-target="#collapse-videos"> 6528 <span class="collapse-peek-btn-show">@Translate("Show more videos", "Show more videos")<i class="material-icons">keyboard_arrow_down</i></span> 6529 </a> 6530 </div> 6531 </div> 6532 </div> 6533 {{/compare}} 6534 </div> 6535 </div> 6536 {{else}} 6537 <div class="col-12 text-center"> 6538 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related videos","Please sign in to access our related videos")</p> 6539 <p class="mb-1">@Translate("Number of related vidoes","Number of related vidoes"): ({{totalVideoCount}})</p> 6540 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6541 </div> 6542 {{/if}} 6543 </div> 6544 </div> 6545 </div> 6546 </script> 6547 </div> 6548 } 6549 else if(productPanelNameValue == "Related ranges") 6550 { 6551 <div class="col-12"> 6552 @if( GetLoop("RelatedRanges").Count() > 0 ) 6553 { 6554 string relatedProductsHeader = Translate("Other related products","Other related products"); 6555 6556 if(!string.IsNullOrEmpty(GetString("Ecom:Group:Field.RelatedProductsHeader.Value"))) 6557 { 6558 relatedProductsHeader = GetString("Ecom:Group:Field.RelatedProductsHeader.Value"); 6559 } 6560 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6561 <div class="row"> 6562 <div class="col-12 col-md-4"> 6563 <div class="e-product-section-header"> 6564 <h2 class="mb-1 mb-md-0">@relatedProductsHeader</h2> 6565 </div> 6566 </div> 6567 <div class="col-12 col-md-8 mt-half dvp-ranges-list"> 6568 <div class="row"> 6569 @foreach(LoopItem relatedRange in GetLoop("RelatedRanges")) 6570 { 6571 string relatedRangeGroupId = ""; 6572 6573 int relatedProductInt = 0; 6574 int relatedProductsInRangeCount = relatedRange.GetLoop("ProductsInRange").Count(); 6575 string relatedRangeName = relatedRange.GetString("Range"); 6576 string relatedRangeNameSuperscripted = relatedRange.GetString("Range").Replace("®","<sup>®</sup>"); 6577 string relatedRangeNameCleaned = Regex.Replace(relatedRangeName, @"[^A-Za-z0-9_\~]+", "-"); 6578 6579 <div class="col-12 col-lg-6 mb-3"> 6580 <div class="@(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")?"dvp-range-header":"")"> 6581 <h3>@relatedRangeNameSuperscripted@(relatedProductsInRangeCount>1?" <small class='font-weight-normal'>(" + relatedProductsInRangeCount + " " + Translate("products","products") + ")</small>":"")</h3> 6582 </div> 6583 <div class="col-12 px-1 pt-1 border dvp-range"> 6584 <div> 6585 <div class="row"> 6586 @foreach(LoopItem product in @relatedRange.GetLoop("ProductsInRange")) 6587 { 6588 relatedRangeGroupId = Dynamicweb.Ecommerce.Products.Product.GetProductById(product.GetString("Ecom:Product.ID")).PrimaryGroupId; 6589 6590 pageId = Espresso.Page.Area.Item.GetValue<string>("ProductPage"); 6591 6592 if(relatedProductInt == 2) 6593 { 6594 @:</div> 6595 @:</div> 6596 @:<div class="collapse" id="range-@relatedRangeNameCleaned"> 6597 @:<div class="row"> 6598 } 6599 6600 string relatedUrl = string.Empty; 6601 6602 string relatedUrlFriendlyProduct = string.Empty; 6603 6604 string relatedProductName = product.GetString("Ecom:Product.Name"); 6605 6606 bool hideRelatedProductName = product.GetBoolean("Ecom:Product:Field.HideProductName"); 6607 6608 string relatedProductDisplayName = relatedProductName; 6609 string relatedProductTitleName = relatedProductName; 6610 6611 if(Espresso.Page.Area.Item.GetValue<bool>("ApplyRangeNameToProductNames")) 6612 { 6613 if(hideRelatedProductName) 6614 { 6615 relatedProductDisplayName = relatedRangeNameSuperscripted; 6616 relatedProductTitleName = relatedRangeName; 6617 } 6618 else 6619 { 6620 relatedProductDisplayName = relatedRangeNameSuperscripted + " " + relatedProductName; 6621 relatedProductTitleName = relatedRangeName + " " + relatedProductName; 6622 } 6623 } 6624 6625 if(product.GetBoolean("Ecom:Product:Field.IsDiets")) 6626 { 6627 relatedUrl = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 6628 } 6629 else 6630 { 6631 relatedUrl = relatedProductName; 6632 } 6633 6634 if(relatedProductsInRangeCount > 1) 6635 { 6636 relatedUrlFriendlyProduct = "#" + Regex.Replace(relatedUrl, @"[^A-Za-z0-9_\~]+", "-"); 6637 } 6638 6639 string relatedProductImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 6640 6641 string relatedProductUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + relatedRangeGroupId + relatedUrlFriendlyProduct; 6642 6643 <div class="col-12 col-sm-6 px-1 pt-1 mx-auto text-center"> 6644 <a href="@relatedProductUrl" title="@relatedProductTitleName"> 6645 <div class="row"> 6646 <div class="col-12 dvp-image-container"> 6647 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@relatedProductImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" alt="@relatedProductTitleName"> 6648 </div> 6649 <div class="col-12"> 6650 <p class="m-0 small dvp-range-product-name">@relatedProductDisplayName</p> 6651 </div> 6652 </div> 6653 </a> 6654 </div> 6655 6656 relatedProductInt++; 6657 } 6658 </div> 6659 </div> 6660 <div class="row mt-1 dvp-view-more-products"> 6661 @if(relatedProductsInRangeCount > 2) 6662 { 6663 int relatedAmountOfProductsLeft = relatedProductsInRangeCount - 2; 6664 6665 string relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more products","View [{amountOfProductsLeft}] more products"); 6666 6667 if(relatedProductsInRangeCount == 3 ) 6668 { 6669 relatedAmountOfProductsLeftTranslation = Translate("View [{amountOfProductsLeft}] more product","View [{amountOfProductsLeft}] more product"); 6670 } 6671 6672 string relatedAmountOfProductsLeftTranslationReplaced = relatedAmountOfProductsLeftTranslation.Replace("[{amountOfProductsLeft}]", relatedAmountOfProductsLeft.ToString()); 6673 6674 <div class="col-12"> 6675 <p class="my-0 mx-lg-2 mx-xl-5 text-center small dvp-show-more"> 6676 <a class="px-md-1 d-block collapsed" data-toggle="collapse" data-target="#range-@relatedRangeNameCleaned" aria-expanded="false" aria-controls="range-@relatedRangeNameCleaned" href="javascript:void(0);"> 6677 <span class="dvp-collapsed"><i class="material-icons">expand_more</i> @relatedAmountOfProductsLeftTranslationReplaced <i class="material-icons">expand_more</i></span> 6678 <span class="dvp-expanded"><i class="material-icons">expand_less</i> @Translate("View less products","View less products") <i class="material-icons">expand_less</i></span> 6679 </a> 6680 </p> 6681 </div> 6682 } 6683 </div> 6684 </div> 6685 </div> 6686 } 6687 </div> 6688 </div> 6689 </div> 6690 </div> 6691 } 6692 </div> 6693 } 6694 else if(productPanelNameValue == "Newsletter") 6695 { 6696 <div class="col-12"> 6697 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6698 <div class="row"> 6699 <div class="col-12 col-md-4"> 6700 <div class="e-product-section-header"> 6701 <h2 class="mb-1 mb-md-0">Newsletter</h2> 6702 </div> 6703 </div> 6704 <div class="col-12 col-md-8"> 6705 <div class="dvp-newsletter-signup-form"> 6706 <form method="post" action="/Admin/Public/404.aspx" enctype="multipart/form-data" class="e-form-dw e-form-labels-hide"> 6707 <div class="form-group"> 6708 <label for="EMAIL-Newsletter" class="form-control-label">E-mail</label> 6709 <input type="email" value="" placeholder="E-mail" name="EMAIL" class="form-control required" id="EMAIL-Newsletter"> 6710 </div> 6711 <div class="form-group"> 6712 <button type="submit" class="btn btn-primary">Sign up</button> 6713 </div> 6714 </form> 6715 </div> 6716 </div> 6717 </div> 6718 </div> 6719 </div> 6720 } 6721 else if(productPanelNameValue == "eLearning") 6722 { 6723 <div class="col-12" id="js-dvp-product-elearning"> 6724 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6725 <div class="row"> 6726 <div class="col-12 is-loading"> 6727 <div class="e-loading-spinner"></div> 6728 </div> 6729 </div> 6730 </div> 6731 <script id="js-e-handlebars-tmpl-dvp-product-elearning" type="text/x-handlebars-template"> 6732 <div class="js-dvp-product-elearning-animate fade"> 6733 {{#if elearning.items}} 6734 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6735 <div class="row"> 6736 <div class="col-12 col-md-4"> 6737 <div class="e-product-section-header"> 6738 <h2 class="mb-1">@Translate("Free eLearning for Vets about [{therapyAreaName}]","Free eLearning for Vets about [{therapyAreaName}]").Replace("[{therapyAreaName}]", therapyAreaName)</h2> 6739 <img width="50%" src="/Files/Templates/Designs/dechra-dvp/_assets/img/dvp-academy-link.svg" /> 6740 </div> 6741 </div> 6742 <div class="col-12 col-md-8"> 6743 <h3> 6744 {{elearning.items.0.courseAmountText}} 6745 </h3> 6746 <div class="row"> 6747 <div class="col-12"> 6748 <div class="list-group"> 6749 {{#if elearning.display}} 6750 {{#each elearning.items.0.courses}} 6751 <a class="px-2 list-group-item list-group-item-action js-dvp-product-details-tracking-elearning-click" href="{{url}}" target="_blank" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 6752 <b>{{name}}</b> 6753 </a> 6754 {{/each}} 6755 {{else}} 6756 <p class="mb-1">@Translate("Please sign in to access our free eLearning courses","Please sign in to access our free eLearning courses")</p> 6757 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6758 {{/if}} 6759 </div> 6760 </div> 6761 </div> 6762 {{#unless elearning.display}} 6763 <div class="row mt-2"> 6764 <div class="col-12"> 6765 <div class="bg-academy"> 6766 <div class="row p-2"> 6767 @{ 6768 string signUpPage = currentPageView.Area.Item["SignUpPage"].ToString(); 6769 } 6770 <div class="col-12"> 6771 <h3 class="text-white mb-1">@Translate("Don't have an account on our free eLearning platform for vets?","Don't have an account on our free eLearning platform for vets?")</h3> 6772 </div> 6773 <div class="col-12 col-md-8 text-white"> 6774 <ul class="mb-0"> 6775 <li>@Translate("Free and easy Sign Up on any device","Free and easy Sign Up on any device")</li> 6776 <li>@Translate("Learn with key opinion leaders any time and place","Learn with key opinion leaders any time and place")</li> 6777 <li>@Translate("Earn certificates for your CPD requirements","Earn certificates for your CPD requirements")</li> 6778 </ul> 6779 </div> 6780 <div class="col-12 col-md-4 pt-2"> 6781 <p><a class="btn btn-cta" target="_blank" href="/Default.aspx?ID=@signUpPage">@Translate("Sign up now","Sign up now")</a></p> 6782 </div> 6783 </div> 6784 </div> 6785 </div> 6786 </div> 6787 {{/unless}} 6788 </div> 6789 </div> 6790 </div> 6791 {{/if}} 6792 </div> 6793 </script> 6794 </div> 6795 } 6796 else if(productPanelNameValue == "Product Websites") 6797 { 6798 <div class="col-12" id="js-dvp-product-websites"> 6799 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6800 <div class="row"> 6801 <div class="col-12 is-loading"> 6802 <div class="e-loading-spinner"></div> 6803 </div> 6804 </div> 6805 </div> 6806 <script id="js-e-handlebars-tmpl-dvp-product-websites" type="text/x-handlebars-template"> 6807 <div class="js-dvp-product-websites-animate fade"> 6808 {{#if websites.items}} 6809 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6810 <div class="row"> 6811 {{#if websites.display}} 6812 <div class="col-12 col-md-4"> 6813 <div class="e-product-section-header"> 6814 <h2 class="mb-1 mb-md-0"> 6815 {{#compare count '>' 1}} 6816 @Translate("Product Websites","Product Websites") 6817 {{else}} 6818 @Translate("Product Website","Product Website") 6819 {{/compare}} 6820 </h2> 6821 </div> 6822 </div> 6823 <div class="col-12 col-md-8 mt-half"> 6824 {{#each websites.items.0.website}} 6825 <div class="row {{#compare @@index '>' 0}}border border-top-1 border-right-0 border-left-0 border-bottom-0 pt-3{{else}}pb-3{{/compare}}"> 6826 <div class="col-12 col-md-6"> 6827 <p class="lead"> 6828 {{name}} 6829 </p> 6830 <p> 6831 <a class="btn btn-primary js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 6832 @Translate("Go to website","Go to website") 6833 </a> 6834 </p> 6835 </div> 6836 <div class="col-12 col-md-6"> 6837 <a class="js-dvp-product-details-tracking-website-click" title="{{name}}" target="_blank" href="{{url}}" data-tracking-title="{{name}}" data-tracking-range-name="@rangeName" data-tracking-url="{{url}}"> 6838 <img class="p-img" src="{{imageLarge}}" alt="{{name}}" /> 6839 </a> 6840 </div> 6841 </div> 6842 {{/each}} 6843 </div> 6844 {{else}} 6845 <div class="col-12 text-center"> 6846 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our product websites","Please sign in to access our product websites")</p> 6847 <p class="mb-1">@Translate("Number of related product websites","Number of related product websites"): ({{websites.items.0.count}})</p> 6848 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6849 </div> 6850 {{/if}} 6851 </div> 6852 </div> 6853 {{/if}} 6854 </div> 6855 </script> 6856 </div> 6857 } 6858 else if(productPanelNameValue == "Frequent Treatment Questions") 6859 { 6860 <div class="col-12" id="js-dvp-product-faq"> 6861 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6862 <div class="row"> 6863 <div class="col-12 is-loading"> 6864 <div class="e-loading-spinner"></div> 6865 </div> 6866 </div> 6867 </div> 6868 <script id="js-e-handlebars-tmpl-dvp-product-faq" type="text/x-handlebars-template"> 6869 <div class="js-dvp-product-faq-animate fade"> 6870 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6871 <div class="row"> 6872 {{#if display}} 6873 <div class="col-12 col-md-4"> 6874 <div class="e-product-section-header"> 6875 <h2 class="mb-1 mb-md-0">@Translate("Frequent Treatment Questions","Frequent Treatment Questions")</h2> 6876 </div> 6877 </div> 6878 <div class="col-12 col-md-8 mt-half dvp-faq"> 6879 {{# faqs}} 6880 {{#each faq}} 6881 <div class="{{#compare @@index '!==' 0}}border border-bottom-0 border-right-0 border-left-0 py-2{{else}}pb-2{{/compare}}"> 6882 <div class="row"> 6883 <div class="col-12"> 6884 <h3 class="collapsed mb-0" data-toggle="collapse" data-target="#collapse-{{paragraphId}}"> 6885 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 6886 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 6887 {{categoryName}} <small class='font-weight-normal'>({{listCount}})</small> 6888 </h3> 6889 </div> 6890 </div> 6891 <div class="row"> 6892 <div class="col-12"> 6893 <div class="collapse" id="collapse-{{paragraphId}}"> 6894 <div class="row"> 6895 <div class="col-12 pl-3"> 6896 {{#each faqList}} 6897 <div class="row"> 6898 <div class="col-12 mt-1"> 6899 <a href="javascript:void(0);" class="js-dvp-faq-modal js-dvp-product-details-tracking-faq-popup" data-tracking-title="{{listHeader}}" data-tracking-category-name="{{../categoryName}}" data-tracking-range-name="@rangeName" data-tracking-url="{{../../url}}"> 6900 {{listHeader}} 6901 </a> 6902 <sc{{handlebarHack}}ript type="application/json"> 6903 { 6904 "url":"{{../../url}}", 6905 "categoryName": "{{../categoryName}}", 6906 "header":"{{listHeader}}", 6907 "content":"{{{listContent}}}" 6908 } 6909 </sc{{handlebarHack}}ript> 6910 </div> 6911 </div> 6912 {{/each}} 6913 </div> 6914 </div> 6915 </div> 6916 </div> 6917 </div> 6918 </div> 6919 {{/each}} 6920 {{/faqs}} 6921 6922 {{#each accordions}} 6923 <div class="p col-12 p-accordion" id="{{paragraphID}}"> 6924 {{#if introText}} 6925 <div class="p-accordion-lead"> 6926 {{{introText}}} 6927 </div> 6928 {{/if}} 6929 <div class="p-accordion-container "> 6930 {{#each accordionItems}} 6931 <div class="p-accordion-item js-e-scroll-reveal border border-right-0 border-left-0 bg-light mb-0 "> 6932 <div class="p-accordion-toggle"> 6933 <p data-toggle="collapse" data-target="#e-accordion-{{../paragraphId}}-{{id}}" class="px-2 py-1 d-flex align-items-center m-0 justify-content-between collapsed" aria-expanded="false"> 6934 <span class="p-accordion-toggle-text mb-0 line-height-sm none"> 6935 {{heading}} 6936 </span> 6937 <i class="material-icons p-accordion-toggle-icon text-primary ml-1 order-last">add</i> 6938 </p> 6939 </div> 6940 <div id="e-accordion-{{../paragraphId}}-{{id}}" class="collapse"> 6941 <div class="px-2 pb-1 p-accordion-content"> 6942 <div class="p-txt-container dvp-rich-text-content pt-1"> 6943 {{{text}}} 6944 </div> 6945 </div> 6946 </div> 6947 </div> 6948 {{/each}} 6949 </div> 6950 </div> 6951 {{/each}} 6952 6953 6954 </div> 6955 {{else}} 6956 <div class="col-12 text-center"> 6957 <p class="mb-1 lead text-black font-italic">@Translate("Please sign in to access our related FAQs","Please sign in to access our related FAQs")</p> 6958 <p class="mb-1">@Translate("Number of related FAQs","Number of related FAQs"): ({{totalFAQListCount}})</p> 6959 <p class="mb-0"><a class="js-dvp-extranet-login btn btn-cta btn-sm" href="javascript:void(0);"><i class="material-icons">lock_outline</i> @Translate("Sign in","Sign in")</a></p> 6960 </div> 6961 {{/if}} 6962 </div> 6963 </div> 6964 </div> 6965 </script> 6966 </div> 6967 } 6968 else if(productPanelNameValue == "Got More Questions form") 6969 { 6970 <div class="col-12 js-dvp-product-details-more-info-section"> 6971 <div class="e-product-section border border-dark border-left-0 border-right-0 border-bottom-0 py-2 py-md-4"> 6972 <div class="row"> 6973 <div class="col-12 col-md-4"> 6974 <div class="e-product-section-header"> 6975 <h2 class="mb-1 mb-md-0">@Translate("Got More Questions?","Got More Questions?")</h2> 6976 </div> 6977 </div> 6978 <div class="p col-12 col-md-8 mt-half"> 6979 @{ 6980 int currentPageId; 6981 6982 int.TryParse(pageId, out currentPageId); 6983 6984 Dynamicweb.Content.Paragraph currentParagraph = currentPageView.CurrentParagraph; 6985 6986 int currentParagraphId = currentParagraph.GlobalRecordParagraphID; 6987 6988 string formPageIdString = currentPageView.Area.Item["GeneralInquiryPage"].ToString(); 6989 string formParagraphIdString = currentPageView.Area.Item["GeneralInquiryModule"].ToString(); 6990 6991 int formPageId; 6992 int formParagraphId; 6993 6994 int.TryParse(formPageIdString, out formPageId); 6995 int.TryParse(formParagraphIdString, out formParagraphId); 6996 6997 Dynamicweb.Content.Paragraph formParagraph = Dynamicweb.Services.Paragraphs.GetParagraph(formParagraphId); 6998 Dynamicweb.Frontend.PageView formPageView = Dynamicweb.Frontend.PageView.GetPageviewByPageID(formPageId); 6999 7000 string formMarkup = Dynamicweb.Frontend.Content.GetModuleOutput(formParagraph,formPageView); 7001 7002 } 7003 @formMarkup.Replace("/Default.aspx?ID=" + currentPageId + "&PID=" + currentParagraphId,"/Default.aspx?ID=" + formPageId + "&PID=" + formParagraphIdString) 7004 </div> 7005 </div> 7006 </div> 7007 </div> 7008 } 7009 } 7010 </div> 7011 } 7012 } 7013 else if(productType.GetBoolean("Ecom:Product:Field.IsDiets")) 7014 { 7015 string rangeName = range.GetString("Range"); 7016 int productsInRangeCount = range.GetLoop("ProductsInRange").Count(); 7017 string groupId = string.Empty; 7018 string productName = string.Empty; 7019 string publicProductCode = string.Empty; 7020 string urlFriendlyProductName = string.Empty; 7021 string productShortDescription = string.Empty; 7022 string productShortDescriptionJSON = string.Empty; 7023 string productIngredients = string.Empty; 7024 string productIngredientsJSON = string.Empty; 7025 string productPackSize = string.Empty; 7026 string productDatasheet = string.Empty; 7027 string productImage = string.Empty; 7028 string productUrl = string.Empty; 7029 7030 if(productsInRangeCount > 1) 7031 { 7032 <div class="col-12 col-sm-6 pr-sm-3"> 7033 <h1 class="mb-1 font-weight-bold"> 7034 @rangeName 7035 </h1> 7036 @foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7037 { 7038 7039 groupId = product.GetString("Ecom:Group.ID"); 7040 7041 productName = product.GetString("Ecom:Product.Name"); 7042 7043 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7044 7045 urlFriendlyProductName = Regex.Replace(publicProductCode, @"[^A-Za-z0-9_\~]+", "-"); 7046 7047 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7048 productShortDescriptionJSON = WebUtility.HtmlDecode(Regex.Replace(productShortDescription, @"\t|\n|\r", " ")).Replace("\"","&quot;"); 7049 7050 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7051 productIngredientsJSON = Regex.Replace(productIngredients, @"\t|\n|\r", " "); 7052 7053 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7054 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7055 7056 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7057 productUrl = "/Default.aspx?ID=" + pageId + "&GroupID=" + groupId + "#" + urlFriendlyProductName; 7058 7059 <a class="js-dvp-product-list-details" href="@productUrl" title="@rangeName - @productName" data-productname="@urlFriendlyProductName"> 7060 <div class="row px-sm-1"> 7061 <div class="dvp-product-list-details col-12 p-sm-1"> 7062 <div class="row"> 7063 <div class="col-3 col-sm-2 my-auto text-center"> 7064 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=200&amp;Quality=75" class="p-img" alt="@productName"> 7065 </div> 7066 <div class="col-9 col-sm-8 px-sm-2 my-auto"> 7067 <p class="mb-0"><b class="h3">@rangeName</b><br> @productName</p> 7068 </div> 7069 <div class="col-2 d-none d-sm-block my-auto text-center"> 7070 <i class="material-icons material-icons-5x">keyboard_arrow_right</i> 7071 </div> 7072 </div> 7073 <script type="application/json" class="@urlFriendlyProductName"> 7074 { 7075 "Name":"@productName", 7076 "ShortDescription":"@productShortDescriptionJSON", 7077 "Image":"@productImage", 7078 "Ingredients":"@productIngredientsJSON", 7079 "PackSize":"@productPackSize", 7080 "Datasheet":"@productDatasheet" 7081 } 7082 </script> 7083 </div> 7084 </div> 7085 </a> 7086 } 7087 </div> 7088 <div id="js-dvp-product-details" class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3 align-self-center dvp-details"> 7089 <div class="js-dvp-product-details-animate fade"> 7090 <div class="row"> 7091 <div class="col-12"> 7092 <div class="e-product-image-container"> 7093 <div class="e-product-image-wrapper text-center"> 7094 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="@productName"> 7095 </div> 7096 </div> 7097 </div> 7098 </div> 7099 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7100 { 7101 <div class="row"> 7102 <div class="col-12"> 7103 @productShortDescriptionJSON 7104 </div> 7105 </div> 7106 } 7107 <div class="row"> 7108 <div class="col-12 mt-2 table-responsive"> 7109 <table class="table"> 7110 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7111 { 7112 <tr> 7113 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7114 <td>@productIngredientsJSON</td> 7115 </tr> 7116 } 7117 @if(!string.IsNullOrEmpty(productPackSize)) 7118 { 7119 <tr> 7120 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7121 <td>@productPackSize</td> 7122 </tr> 7123 } 7124 @if(!string.IsNullOrEmpty(productDatasheet)) 7125 { 7126 <tr> 7127 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7128 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7129 </tr> 7130 } 7131 </table> 7132 </div> 7133 </div> 7134 </div> 7135 <script id="js-e-handlebars-tmpl-dvp-product-details" type="text/x-handlebars-template"> 7136 <div class="js-dvp-product-details-animate fade dvp-details"> 7137 <div class="row"> 7138 <div class="col-12"> 7139 <div class="e-product-image-container"> 7140 <div class="e-product-image-wrapper text-center"> 7141 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image={{Image}}&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="{{Name}}"> 7142 </div> 7143 </div> 7144 </div> 7145 </div> 7146 @if(!string.IsNullOrEmpty(productShortDescriptionJSON)) 7147 { 7148 <div class="row"> 7149 <div class="col-12"> 7150 {{{ShortDescription}}} 7151 </div> 7152 </div> 7153 } 7154 <div class="row"> 7155 <div class="col-12 mt-2 table-responsive"> 7156 <table class="table"> 7157 @if(!string.IsNullOrEmpty(productIngredientsJSON)) 7158 { 7159 <tr> 7160 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7161 <td>{{Ingredients}}</td> 7162 </tr> 7163 } 7164 @if(!string.IsNullOrEmpty(productPackSize)) 7165 { 7166 <tr> 7167 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7168 <td>{{PackSize}}</td> 7169 </tr> 7170 } 7171 @if(!string.IsNullOrEmpty(productDatasheet)) 7172 { 7173 <tr> 7174 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7175 <td><a target="_blank" class="btn btn-sm btn-primary mr-1" href="{{Datasheet}}">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7176 </tr> 7177 } 7178 </table> 7179 </div> 7180 </div> 7181 </div> 7182 </script> 7183 </div> 7184 } 7185 else 7186 { 7187 foreach(LoopItem product in @range.GetLoop("ProductsInRange")) 7188 { 7189 groupId = product.GetString("Ecom:Group.ID"); 7190 7191 productName = product.GetString("Ecom:Product.Name"); 7192 7193 publicProductCode = product.GetString("Ecom:Product.CategoryField.dechradiets.publicproductcode.Value"); 7194 7195 productShortDescription = product.GetString("Ecom:Product.ShortDescription"); 7196 7197 productIngredients = product.GetString("Ecom:Product.CategoryField.dechradiets.ingredients.Value"); 7198 productPackSize = product.GetString("Ecom:Product.CategoryField.dechradiets.packetsize.Value"); 7199 productDatasheet = product.GetString("Ecom:Product.CategoryField.dechradiets.datasheet.Value"); 7200 7201 productImage = Co3.Dechra.DVP.Website.UiServices.ProductListUiService.GetDefaultImage( product.GetString("Ecom:Product.ID"), product.GetString("Ecom:Product.LanguageID")); 7202 } 7203 <div class="col-12"> 7204 <div class="row"> 7205 <div class="col-12"> 7206 <h1 class="mb-1 font-weight-bold"> 7207 @rangeName 7208 </h1> 7209 </div> 7210 </div> 7211 </div> 7212 <div class="col-12 col-sm-6 pr-sm-3"> 7213 <div class="row"> 7214 <div class="col-12"> 7215 <div class="e-product-image-container"> 7216 <div class="e-product-image-wrapper text-center"> 7217 <img src="/admin/public/getimage.ashx?Crop=0&amp;Image=@productImage&amp;Format=jpg&amp;AlternativeImage=/files/Images/placeholder-image.png&amp;Width=600&amp;Quality=75" class="p-img" alt="@productName"> 7218 </div> 7219 </div> 7220 </div> 7221 </div> 7222 </div> 7223 <div class="col-12 col-sm-6 mt-4 mt-sm-0 pl-sm-3"> 7224 @if(!string.IsNullOrEmpty(productShortDescription)) 7225 { 7226 <div class="row"> 7227 <div class="col-12"> 7228 @productShortDescription 7229 </div> 7230 </div> 7231 } 7232 <div class="row"> 7233 <div class="col-12 mt-2 table-responsive"> 7234 <table class="table"> 7235 @if(!string.IsNullOrEmpty(productIngredients)) 7236 { 7237 <tr> 7238 <td width="30%"><b>@Translate("Ingredients:","Ingredients:")</b></td> 7239 <td>@productIngredients</td> 7240 </tr> 7241 } 7242 @if(!string.IsNullOrEmpty(productPackSize)) 7243 { 7244 <tr> 7245 <td width="30%"><b>@Translate("Pack size(s):","Pack size(s):")</b></td> 7246 <td>@productPackSize</td> 7247 </tr> 7248 } 7249 @if(!string.IsNullOrEmpty(productDatasheet)) 7250 { 7251 <tr> 7252 <td width="30%"><b>@Translate("Datasheet","Datasheet"):</b></td> 7253 <td><a target="_blank" class="btn btn-sm btn-secondary" href="@productDatasheet">@Translate("Download","Download") <i class="material-icons">get_app</i></a></td> 7254 </tr> 7255 } 7256 </table> 7257 </div> 7258 </div> 7259 </div> 7260 } 7261 7262 <div class="col-12" id="js-dvp-product-supportmaterials"> 7263 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0"> 7264 <div class="row"> 7265 <div class="col-12 is-loading"> 7266 <div class="e-loading-spinner"></div> 7267 </div> 7268 </div> 7269 </div> 7270 <script id="js-e-handlebars-tmpl-dvp-product-supportmaterials" type="text/x-handlebars-template"> 7271 <div class="js-dvp-product-supportmaterials-animate fade"> 7272 <div class="e-product-section border mt-2 py-4 border-left-0 border-right-0 border-bottom-0"> 7273 <div class="row"> 7274 <div class="col-12 col-md-4"> 7275 <div class="e-product-section-header"> 7276 <h2 class="m-a-0">@Translate("Supplementary Materials","Supplementary Materials")</h2> 7277 </div> 7278 </div> 7279 <div class="col-12 col-md-8 mt-half"> 7280 {{#each supportmaterials}} 7281 <div class="row pb-1"> 7282 <div class="col-12"> 7283 <p class="collapsed mb-1 font-weight-bold dvp-details-toggle" data-toggle="collapse" data-target="#collapse-details-supportmaterials-{{categoryId}}"> 7284 <span class="dvp-collapsed"><i class="material-icons">expand_more</i></span> 7285 <span class="dvp-expanded"><i class="material-icons">expand_less</i></span> 7286 {{categoryName}} <small class="font-weight-normal">({{count}})</small> 7287 </p> 7288 </div> 7289 </div> 7290 <div class="row"> 7291 <div class="col-12"> 7292 <div class="collapse" id="collapse-details-supportmaterials-{{categoryId}}"> 7293 <div class="row"> 7294 <div class="col-12 pl-3 pb-2"> 7295 <div class="row border border-top-0 border-right-0 border-left-0"> 7296 {{#each materials}} 7297 <div class="col-12 col-md-6 py-2"> 7298 <div class="row"> 7299 <div class="col-12 col-md-6 text-center"> 7300 <img class="p-img" src="{{imageLarge}}" alt="{{name}}"> 7301 </div> 7302 <div class="col-12 col-md-6 pr-1 mt-1"> 7303 <p class="font-weight-bold">{{name}}</p> 7304 {{#if download}} 7305 <a target="_blank" href="{{url}}"><i class="material-icons">save_alt</i> <u>@Translate("Download","Download")</u></a> 7306 {{/if}} 7307 </div> 7308 </div> 7309 </div> 7310 {{/each}} 7311 </div> 7312 </div> 7313 </div> 7314 </div> 7315 </div> 7316 </div> 7317 {{/each}} 7318 </div> 7319 </div> 7320 </div> 7321 </div> 7322 </script> 7323 </div> 7324 } 7325 else 7326 { 7327 <div class="card text-white bg-danger mt-3 mx-auto" style="width: 850px;"> 7328 <div class="card-header py-2"> 7329 <h2 class="m-0 text-center text-white">ERROR!</h2> 7330 </div> 7331 <div class="card-body py-2"> 7332 <h1 class="card-text m-0 text-center text-white">This product range group is <br>missing a ProductCategory</h1> 7333 </div> 7334 <div class="card-footer py-2"> 7335 <h3 class="m-0 text-center text-white">Fix this to show products</h3> 7336 </div> 7337 </div> 7338 } 7339 <code class="d-none js-e-breadcrumb-item-go-back-link"> 7340 <li class="breadcrumb-go-back-link breadcrumb-item m-0 p-0"> 7341 <a href="javascript:history.back();"> 7342 <span>@Translate("Go back","Go back")</span> 7343 </a> 7344 </li> 7345 </code> 7346 } 7347 } 7348 else 7349 { 7350 <div class="row mt-2"> 7351 @signIn() 7352 </div> 7353 } 7354 } 7355 } 7356
keyboard_arrow_up