Content | DTVGO | VANITY | Caja los andes | Chile internalHeader - Login

Content | DTVGO | VANITY | Caja los andes | Chile Title - Login

Ingresa tus datos para iniciar sesión

Content | DTVGO | VANITY | Caja los andes | Chile | Login

An error occurred while processing the template.
The following has evaluated to null or missing:
==> proveedor.modal  [in template "20101#20128#231579" at line 95, column 68]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${proveedor.modal.modalTitle.getData()}  [in template "20101#20128#231579" at line 95, column 66]
----
1<#function substituirCaminhoCDN(caminho)> 
2     <#assign indice = caminho?last_index_of("/documents") + 1> 
3     <#assign novoCaminho = caminho?substring(indice)> 
4  
5     <#return themeDisplay.getCDNBaseURL() + "/" + novoCaminho> 
6</#function> 
7 
8<style> 
9    #modalProveedor .modal-content .modal-body .modal-body-content { 
10        max-width: 460px; 
11        margin-left: auto; 
12        margin-right: auto; 
13
14    #modalProveedor .modal-content { 
15        max-width: 33.5rem; 
16        background-color: #000; 
17
18    #modalProveedor .modal-content .modal-header { 
19        border: none; 
20        height: 6rem; 
21
22    #modalProveedor .modal-content .modal-header .modal-title { 
23        font-size: 16px; 
24        max-width: 59%; 
25        white-space: normal; 
26        margin-top: 15px; 
27
28    #modalProveedor .modal-content .nomeProveedor { 
29        color: #A3A3A3; 
30        text-align: center; 
31        margin-top: 4px; 
32
33    #modalProveedor .modal-content .modal-body .modal-body-content .content_channels { 
34        gap: 4rem; 
35
36    #extraChannelsSection a { 
37        width: 125px; 
38
39    #modalProveedor .channel_list_circle { 
40        margin: auto; 
41        max-width: 100%; 
42        width: 5rem; 
43        height: 5rem; 
44
45    #modalProveedor .modal-content .modal-body { 
46        overflow-y: auto; 
47        max-height: 325px; 
48
49    #modalProveedor .modal-content .modal-body::-webkit-scrollbar-track { 
50        -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 
51        border-radius: 10px; 
52        background-color: #3e3e3e; 
53        margin: 24px 0; 
54
55    #modalProveedor .modal-content .modal-body::-webkit-scrollbar { 
56        width: 6px; 
57        background-color: transparent; 
58        margin: 24px 5px; 
59
60    #modalProveedor .modal-content .modal-body::-webkit-scrollbar-thumb { 
61        border-radius: 10px; 
62        -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); 
63        background-color: #00ACEC; 
64        margin: 24px 0; 
65
66    @media (max-width:471px){ 
67        #modalProveedor .modal-content .modal-header .modal-title { 
68            max-width: 194px; 
69
70        #modalProveedor .modal-content .modal-header { 
71            height: 8rem; 
72
73        #modalProveedor .modal-content .modal-body { 
74            max-height: 285px; 
75
76        #modalProveedor .modal-content .modal-body .modal-body-content { 
77            max-width: 337px; 
78
79        #modalProveedor .modal-content .modal-header .close { 
80            align-self: stretch; 
81            margin-top: 27px; 
82
83
84  </style> 
85	 
86	<div class="gtmObjLogin hide" data-gtm-obj="{pageView:'p-010.012.000.000.000.000',forgotPassword:'e-010.012.001.000.000.119',signIn:'e-010.012.001.000.000.120',loginProvider:'e-010.012.001.000.000.121'}"></div> 
87 
88  <div class="modal modal-dtvgo fade modal-dtvgo--scrollable" id="modalProveedor" tabindex="-1" role="dialog" 
89    aria-labelledby="modalProveedorLabel" aria-hidden="true" 
90    style="display:none;"> 
91   
92    <div class="modal-dialog modal-dialog-centered" role="document"> 
93        <div class="modal-content"> 
94            <div class="modal-header text-color-white"> 
95                <h5 class="modal-title" id="modalProveedorLabel">${proveedor.modal.modalTitle.getData()}</h5> 
96                <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
97                    <span aria-hidden="true">&times;</span> 
98                </button> 
99            </div> 
100            <div class="modal-body"> 
101                <div class="modal-body-content"> 
102                    <div id="extraChannelsSection" class="content_channels"> 
103                        <#if proveedor.modal.operatorLink.getSiblings()?has_content> 
104                          <#list proveedor.modal.operatorLink.getSiblings() as cur_proveedor_modal_operatorLink> 
105                            <#if cur_proveedor_modal_operatorLink.operatorText123.getData()?? && cur_proveedor_modal_operatorLink.operatorText123.getData() != ""> 
106                              <a href="${cur_proveedor_modal_operatorLink.getData()}"> 
107                                  <div class="channel_list_circle"> 
108                                      <#if (cur_proveedor_modal_operatorLink.operatorImage.getData())?? && cur_proveedor_modal_operatorLink.operatorImage.getData() != ""> 
109                                          <img alt="${cur_proveedor_modal_operatorLink.operatorImage.getAttribute("alt")}" data-fileentryid="${cur_proveedor_modal_operatorLink.operatorImage.getAttribute("fileEntryId")}" src="${substituirCaminhoCDN(cur_proveedor_modal_operatorLink.operatorImage.getData())}" /> 
110                                        </#if> 
111                                  </div> 
112                                  <div class="nomeProveedor"> 
113                                      ${cur_proveedor_modal_operatorLink.operatorText123.getData()} 
114                                  </div> 
115                              </a> 
116                            </#if> 
117                          </#list> 
118                        </#if> 
119                    </div> 
120                </div> 
121            </div> 
122        </div> 
123    </div> 
124  </div> 
125  <div class="login"> 
126    <form class="login__form" method="POST"> 
127      <div class="login__form-div"> 
128        <div class="login__form-div-pass"> 
129          <label <#if getterUtil.getBoolean(configureInputs.removeInputsTexts.getData())> 
130              style="display: none" 
131            <#else> 
132            </#if> for="email" class="login__label">${configureInputs.inputEmail.emailText.getData()}</label> 
133          <input class="login__input" type="text" id="email" name="email" required maxlength="60" size='65'> 
134          <p class="error_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()}; 
135              font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.errorMessageEmail.getData()}</p> 
136          <p class="alert_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()}; 
137              font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.messageRequiredField.getData()}</p> 
138        </div> 
139      </div> 
140      <div class="login__form-div"> 
141        <div class="login__form-div-pass"> 
142          <label <#if getterUtil.getBoolean(configureInputs.removeInputsTexts.getData())> 
143              style="display: none" 
144            <#else> 
145            </#if> for="password" class="login__label">${configureInputs.inputPassword.passwordText.getData()}</label> 
146          <input class="login__input" type="password" id="password" name="password" required size='8'> 
147          <div class="pass-view"> 
148            <#if (configureInputs.inputPassword.IconBlockedView.getData())?? && configureInputs.inputPassword.IconBlockedView.getData() != ""> 
149	<img id="iconBlockedView" alt="${configureInputs.inputPassword.IconBlockedView.getAttribute("alt")}" data-fileentryid="${configureInputs.inputPassword.IconBlockedView.getAttribute("fileEntryId")}" src="${substituirCaminhoCDN(configureInputs.inputPassword.IconBlockedView.getData())}" /> 
150</#if> 
151          </div> 
152          <p class="error_message" style=" 
153        text-align: ${errorMessage.alignment.getData()}; 
154        font-size: ${errorMessage.Size.getData()}; 
155        ">${errorMessage.genericErrorMessage.getData()}</p> 
156        <p class="alert_message" style="text-align: ${errorMessage.specificErrorMessages.AlignmentError.getData()}; 
157              font-size: ${errorMessage.specificErrorMessages.sizeError.getData()};">${errorMessage.specificErrorMessages.messageRequiredField.getData()}</p> 
158        </div> 
159    </div> 
160      <div class="forgot_password"> 
161        ${forgotYourPassword.linkToForgotPassword.getData()} 
162      </div> 
163      <div> 
164        <button <#if getterUtil.getBoolean(configureButton.buttonText.removeElementFromScreen.getData())> 
165          style="display: none" 
166        <#else> 
167        style=" color: ${configureButton.buttonText.buttonClassColorText.getData()}; 
168                margin: ${configureButton.buttonText.buttonAlignment.getData()};" 
169        </#if> class="button ${configureButton.buttonText.buttonClassBackgroundColor.getData()} button__gray_link ${configureButton.buttonText.borderClass.getData()}" type="submit" id="validation" >${configureButton.buttonText.getData()} 
170        </button> 
171      </div> 
172      ${makeYourRegistration.textMakeRegistration.getData()} 
173    </form> 
174  </div> 
175   
176  <style> 
177  .plans{ 
178    display: none; 
179
180  </style> 
181   
182  <script> 
183  var infPlan; 
184var infCombo; 
185var freeDayPlan; 
186var typePlan; 
187var payment_text; 
188var errorLogin; 
189var onHold 
190 
191$("#iconBlockedView").attr( 
192  "src", 
193  BASE_IMG + 
194    "/documents/91224/96178/icon-blocked-view.svg/91eefe05-711c-818a-2b9e-49abd806b314?t=1628100125049&version=1.0&imagePreview=1" 
195); 
196 
197function handleCart(data) { 
198  if (!data || data.errors) { 
199    throw "Error while handling shopping cart"; 
200
201 
202  var hasExtra = false; 
203 
204  if (data && data.data && data.data.customerCart) { 
205    var APIproductsList = []; 
206    var displayableProducts = []; 
207    var type = ""; 
208 
209    data.data.customerCart.items.forEach((item) => { 
210      APIproductsList.push({ 
211        id: item.id, 
212        uid: item.uid, 
213        product: { 
214          name: item.product.name, 
215          sku: item.product.sku, 
216        }, 
217        quantity: 1, 
218      }); 
219 
220      if (item.product.categories.length > 0) { 
221        item.product.categories.forEach((category) => { 
222          if (category.name) { 
223            if ( 
224              category.name.toLowerCase().includes("extra") || 
225              category.name.toLowerCase().includes("combo") || 
226              category.name.toLowerCase().includes("plan") 
227            ) { 
228              category.name.toLowerCase().includes("plan") 
229                ? (type = "plan") 
230                : (type = category.name.substring( 
231                    0, 
232                    category.name.length - 1 
233                  )); 
234
235
236        }); 
237
238 
239      if (type == "plan") { 
240        sessionStorage.setItem( 
241          "dataPlan", 
242          JSON.stringify({ 
243            dataProduct: item.product.name, 
244          }) 
245        ); 
246
247 
248      JSON.parse( 
249        sessionStorage.getItem("displayableExtras") 
250      )?.planItems.forEach((product) => { 
251        product.plans.forEach((plan) => { 
252          if ( 
253            JSON.parse(sessionStorage.getItem("dataPlan")).dataProduct == 
254            plan.name 
255          ) { 
256            freeDayPlan = plan.freeTrialValue; 
257            freeTrialPeriodPlan = plan.freeTrialPeriod; 
258            typePlan = plan.typeCharge; 
259            payment_text = plan.payment_text; 
260 
261            if (item.product.name.toLowerCase().includes("combo")) { 
262              plan.combos.some((dado) => { 
263                if ( 
264                  item.product.name.replace(/ /g, "") == 
265                  dado.name.replace(/ /g, "") 
266                ) { 
267                  infCombo = dado; 
268                  return infCombo; 
269
270              }); 
271            } else { 
272              plan.items.some((dado) => { 
273                dado.options.forEach((option) => { 
274                  if (item.product.name == option.label) { 
275                    infPlan = null; 
276                    infPlan = option; 
277                    return infPlan; 
278
279                }); 
280              }); 
281
282
283        }); 
284      }); 
285 
286      displayableProducts.push({ 
287        id: item.id, 
288        name: item.product.name, 
289        sku: item.product.sku, 
290        type: type, 
291        price: item.prices.price.value, 
292        image: item.product.thumbnail.url, 
293        inf: type == "Combo" ? infCombo : infPlan, 
294        freeDay: type == "plan" ? freeDayPlan : "", 
295        freeTrialPeriod: type == "plan" ? freeTrialPeriodPlan : "", 
296        typePlan: type == "plan" ? typePlan : "", 
297        payment_text: type == "plan" ? payment_text : "", 
298      }); 
299 
300      if ( 
301        type && 
302        (type.toLowerCase().includes("extra") || 
303          type.toLowerCase().includes("combo")) 
304      ) { 
305        hasExtra = true; 
306
307    }); 
308 
309    sessionStorage.setItem( 
310      "cart", 
311      JSON.stringify({ 
312        cart: data.data.customerCart.id, 
313        APIproductsList: APIproductsList, 
314        displayableProducts: displayableProducts, 
315      }) 
316    ); 
317 
318    return { 
319      customerCart: data.data.customerCart, 
320      hasExtra: hasExtra, 
321      isEmptyCart: APIproductsList.length == 0, 
322    }; 
323
324 
325  return { 
326    customerCart: null, 
327    hasExtra: null, 
328    isEmptyCart: null, 
329  }; 
330
331 
332function getCart(token) { 
333  var queryGetCart = 
334    "{ customerCart { id items { id uid product { name sku categories { id name } thumbnail { url label } short_description { html } description { html } } prices { discounts { label amount { value } } price { value } } ... on BundleCartItem { bundle_options { values { id  uid  label  price  }  } } quantity } applied_coupons {  code } }}"; 
335 
336  return $.ajax({ 
337    method: "POST", 
338    url: API_ENDPOINT, 
339    headers: { 
340      Authorization: "Bearer " + token, 
341      "Content-Type": "application/json", 
342      "Store": store, 
343    }, 
344    data: JSON.stringify({ query: queryGetCart }), 
345    success: async function (data) { 
346      if (data.errors) { 
347        const cartId = data.data.customerCart.id; 
348        await clearCart(cartId, token); 
349        location.href = pageSelectPlan; 
350
351 
352      return data; 
353    }, 
354    error: function (error) { 
355      clearCart(); 
356      return error; 
357    }, 
358  }); 
359
360 
361function successPlan(data) { 
362  let planItems = []; 
363  if (data.data.products.items.length > 0) { 
364    data.data.products.items.forEach((item) => { 
365      var productNamePlan = item.name; 
366      var typeCharge = item.customAttributes.includes("ano") ? "ano" : "mês"; 
367      var freeTrialValue = parseInt( 
368        JSON.parse(item.customAttributes).free_trial 
369      ); 
370      var freeTrialPeriod = JSON.parse(item.customAttributes).free_trial_period !== false ? JSON.parse(item.customAttributes).free_trial_period.toLowerCase() : " "; 
371      var paymentText = JSON.parse(item.customAttributes).payment_text; 
372      var termsConditions = JSON.parse( 
373        item.customAttributes 
374      ).terms_and_conditions; 
375 
376      planItems.push({ 
377        plans: [ 
378
379            name: productNamePlan, 
380            items: item.items, 
381            combos: item.related_products, 
382            freeTrialValue: freeTrialValue, 
383            freeTrialPeriod: freeTrialPeriod, 
384            typeCharge: typeCharge, 
385            termsConditions: termsConditions, 
386            payment_text: paymentText, 
387          }, 
388        ], 
389      }); 
390    }); 
391    sessionStorage.setItem( 
392      "displayableExtras", 
393      JSON.stringify({ planItems }) 
394    ); 
395  } else { 
396    toggleLoader(false); 
397
398
399 
400function getForgeRockData(email, password) { 
401  let deviceId = (+new Date() + Math.random() * 100).toString(32); 
402  localStorage.setItem('deviceId', deviceId) 
403  return $.ajax({ 
404    url: FORGE_ROCK_URL, 
405    type: "POST", 
406    headers: { 
407      "Content-Type": "application/x-www-form-urlencoded", 
408      Authorization: authorization_forgot_password, 
409      "Accept-API-Version": "resource=2.1", 
410      "auth_chain": "ldapService"  
411    }, 
412    data: { 
413      claims: '{ "id_token": { "deviceId": { "value": ' + deviceId + '}}}', 
414      grant_type: "password", 
415      username: email, 
416      password: password, 
417      scope: "openid profile entitlements vrio device", 
418    }, 
419    success: function (data) { 
420      localStorage.setItem('renewEntitlements', JSON.stringify(data)) 
421      return data; 
422    }, 
423    error: function (error) { 
424      errorLogin = error; 
425      return error; 
426    }, 
427  }); 
428
429 
430function getEntitlementStatus(accessToken) { 
431  return $.ajax({ 
432    url: API_AUTHORIZATION_STATUS_LOGIN, 
433    method: "POST", 
434    headers: { 
435      "Content-Type": "application/json", 
436      "x-api-key": API_KEY_ENTITLEMENT_STATUS, 
437    }, 
438    data: JSON.stringify({ 
439      accessToken: accessToken, 
440      provider: "forgerock", 
441      deviceID: "HCM_NO_DEVICE", 
442      country: userLanguage, 
443    }), 
444    success: function (data) { 
445      return data; 
446    }, 
447    error: function (error) { 
448      return error; 
449    }, 
450  }); 
451
452 
453function handleForgeRockCookie(forgerockId, customerToken, access_token) { 
454  let expires = new Date(Date.now() + 3600 * 1000).toUTCString(); 
455  localStorage.setItem('customerToken', customerToken) 
456  document.cookie = 
457    "token=" + customerToken + "; expires=" + expires + "; path=/"; 
458  document.cookie = 
459    "forgerock_id=" + forgerockId + "; expires=" + expires + "; path=/"; 
460  document.cookie = 
461    "forgerock_accessToken=" + 
462    access_token + 
463    "; expires=" + 
464    expires + 
465    "; path=/"; 
466
467 
468function parseJwt(token) { 
469  var base64Url = token.split(".")[1]; 
470  var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); 
471  var jsonPayload = decodeURIComponent( 
472    atob(base64) 
473      .split("") 
474      .map(function (c) { 
475        return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); 
476      }) 
477      .join("") 
478  ); 
479 
480  return JSON.parse(jsonPayload); 
481
482 
483function doItBeforeRedirect() { 
484  let planSelect; 
485  let redirectShop = false; 
486 
487  //handleCheckoutGTM([], 1, 'create_account') 
488 
489  if (sessionStorage.getItem("cart")) { 
490    JSON.parse(sessionStorage.getItem("cart")).displayableProducts.forEach( 
491      (product) => { 
492        if (product.type == "plan") { 
493          planSelect = product.name; 
494
495
496    ); 
497
498 
499  if (sessionStorage.getItem("dataProduct")) { 
500    if ( 
501      planSelect != 
502      JSON.parse(sessionStorage.getItem("dataProduct")).dataProduct 
503    ) { 
504      redirectShop = true; 
505      sessionStorage.setItem( 
506        "dataPlan", 
507        JSON.stringify({ 
508          dataProduct: JSON.parse(sessionStorage.getItem("dataProduct")) 
509            .dataProduct, 
510        }) 
511      ); 
512    } else { 
513      redirectShop = false; 
514      sessionStorage.removeItem("dataProduct"); 
515      sessionStorage.removeItem("dataOptions"); 
516      sessionStorage.removeItem("dataSku"); 
517      sessionStorage.removeItem("dataPricePlan"); 
518
519
520  return redirectShop; 
521
522 
523function buildRedirectObject() { 
524    return { 
525        0: function (argsCart) { 
526            const redirectShop = doItBeforeRedirect(); 
527            if ( 
528                redirectShop || 
529                argsCart.isEmptyCart == true || 
530                argsCart.isEmptyCart == null 
531            ) { 
532                location.href = pageSelectPlan; 
533            } else if (!argsCart.isEmptyCart && !argsCart.hasExtra) { 
534                location.href = pageShoppingCart; 
535            } else if (!argsCart.isEmptyCart && argsCart.hasExtra) { 
536                location.href = pageCheckout; 
537            } else { 
538                throw "Error while redirecting with no subscription flow"; 
539
540        }, 
541        1: function () { 
542            doItBeforeRedirect(); 
543            location.href = INACTIVE_PRODUCT_URL; 
544        }, 
545        2: function () { 
546            doItBeforeRedirect(); 
547            location.href = ACTIVE_PRODUCT_URL; 
548        }, 
549    }; 
550
551function isOnHold(token) { 
552    const setisOnHold = 
553        '{ ' + 
554        ' customer {' + 
555        '   orders{' + 
556        '       items {' + 
557        '         status' + 
558        '       }' + 
559        '     }' + 
560        '  }' + 
561        '}'; 
562 
563    $.ajax({ 
564        type: "GET", 
565        url: API_ENDPOINT, 
566        headers: { 
567            Authorization: "Bearer " + token, 
568            "Content-Type": "application/json", 
569            Store: store, 
570        }, 
571        data: { query: setisOnHold }, 
572        success: function (data) { 
573            onHold = successIsOnHold(data) 
574        }, 
575        error: function (data) { 
576            displayModalGenericError() 
577
578    }); 
579
580 
581function successIsOnHold(data) { 
582    statusOrder = data.data.customer.orders.items; 
583    let status = statusOrder.slice(-1); 
584 
585    if (status.status.toUpperCase() == "ON HOLD") { 
586        return true 
587    } else { 
588        return false 
589
590
591function getPlans() { 
592  var queryPlano = 
593    '{ products( filter: { category_id: { eq: "' + 
594    id_catPlanos + 
595    '"} }, sort: { sort_order: DESC }) { items { name sku promotional_text button_text customAttributes (fields: ["free_trial","free_trial_period","usage_period", "terms_and_conditions", "payment_text"]) short_description { html } description { html } price_range { minimum_price { regular_price { value currency } final_price { value currency } discount { amount_off percent_off } } } small_image { position disabled url label } thumbnail { position disabled url label } ... on BundleProduct { items { uid title required type position options { uid price id position is_default label product { id name promotional_text sku sort_order customAttributes(fields: ["free_trial","free_trial_period", "usage_period", "terms_and_conditions"]) small_image { position disabled url label } thumbnail { position disabled url label } short_description { html } description { html } price_range { minimum_price { regular_price { currency value } regular_price { currency value } discount { amount_off percent_off __typename } } } __typename } } } } related_products { uid name promotional_text sku customAttributes(fields: ["free_trial","free_trial_period", "usage_period", "terms_and_conditions"]) button_text short_description { html } description { html } price_range { minimum_price { regular_price { value currency } final_price { value currency } discount { amount_off percent_off } } } thumbnail { position disabled url label } } } }}'; 
596 
597  $.ajax({ 
598    url: API_ENDPOINT, 
599    type: "get", 
600    headers: { 
601      "Content-Type": "application/json", 
602      "Store": store, 
603    }, 
604    data: { query: queryPlano }, 
605    success: function (data) { 
606      if (!data.errors) { 
607        successPlan(data); 
608
609    }, 
610    error: function (error) { 
611      toggleLoader(false); 
612    }, 
613  }); 
614
615 
616function setDataToAccessFronchPort( 
617  sessionToken, 
618  expireDate, 
619  refreshToken, 
620  forgerockId 
621) { 
622  const userFromOrbis = parseJwt(sessionToken); 
623  let type, tve 
624  if (userFromOrbis.businessUnit.toLowerCase().includes('br')) { 
625    type = 'ott' 
626    tve = false 
627  } else if (userFromOrbis.businessUnit.toLowerCase().includes('ssla')) { 
628    type = 'latam-ott' 
629    tve = false 
630  } else { 
631    type = 'tve' 
632    tve = true 
633
634 
635  const userObj = { 
636    allowedCountry: true, 
637    country: userFromOrbis.iso2Code, 
638    isTVE: tve, 
639    iso2Code: userFromOrbis.iso2Code, 
640    profile: { 
641      iso2country: userFromOrbis.iso2Code, 
642      email: userFromOrbis.sub, 
643    }, 
644    uid: userFromOrbis.customerId, 
645    userType: type 
646
647  localStorage.setItem("user", JSON.stringify(userObj)); 
648  localStorage.setItem( 
649    "renewEntitlements", 
650    JSON.stringify({ 
651      expireDate: expireDate, 
652      refresh_token: refreshToken, 
653    }) 
654  ); 
655  localStorage.setItem("sessionToken", forgerockId); 
656
657 
658async function handleRedirectUser( 
659  idToken, 
660  refreshToken, 
661  expiresIn, 
662  access_token 
663) { 
664  try { 
665    const { 
666      status, 
667      customerToken, 
668      sessionToken, 
669      forgerock_id, 
670      firstname, 
671      lastname, 
672    } = await getEntitlementStatus(idToken); 
673    const selectRedirect = buildRedirectObject(); 
674    let runRedirect; 
675    localStorage.setItem("customerToken", customerToken); 
676    isOnHold(customerToken) 
677 
678    if (parseInt(status) === 0 && forgerock_id) { 
679      handleForgeRockCookie(forgerock_id, customerToken, access_token); 
680 
681      sessionStorage.setItem( 
682        "user", 
683        JSON.stringify({ 
684          firstname, 
685          lastname, 
686        }) 
687      ); 
688 
689      setDataToAccessFronchPort( 
690        sessionToken, 
691        expiresIn, 
692        refreshToken, 
693        idToken 
694      ); 
695 
696      const dataCart = await getCart(customerToken); 
697      const argsCart = handleCart(dataCart); 
698 
699      runRedirect = selectRedirect[parseInt(status)]; 
700      if(onHold){ 
701        $('#errorWarningModal').modal('show'); 
702      }else{ 
703        runRedirect(argsCart); 
704
705 
706      toggleLoader(false); 
707    } else if (parseInt(status) === 1 || 2) { 
708      setDataToAccessFronchPort( 
709        sessionToken, 
710        expiresIn, 
711        refreshToken, 
712        idToken 
713      ); 
714 
715      runRedirect = selectRedirect[parseInt(status)]; 
716      runRedirect(); 
717 
718      toggleLoader(false); 
719    } else { 
720      throw "Fail to login "; 
721
722  } catch (e) { 
723    clearCredentials(); 
724    toggleLoader(false); 
725
726
727 
728async function login(user, password) { 
729  try { 
730    getPlans(); 
731    toggleLoader(true); 
732    const { id_token, refresh_token, expires_in, access_token } = 
733      await getForgeRockData(user, password); 
734    localStorage.setItem('frToken', access_token) 
735    handleRedirectUser(id_token, refresh_token, expires_in, access_token); 
736  } catch (error) { 
737    if (errorLogin) { 
738      displayErrorLogin(); 
739      toggleLoader(false); 
740      return false; 
741
742    clearCredentials(); 
743    toggleLoader(false); 
744    displayModalGenericError(); 
745    return; 
746
747
748 
749function displayModalGenericError() { 
750  jQuery.noConflict(); 
751  var jQueryRef = $ && typeof $.fn.modal == "function" ? $ : jQuery; 
752  jQueryRef("#errorHandlingPlansModal").modal("show"); 
753
754 
755function clearCredentials() { 
756  document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; 
757  document.cookie = 
758    "forgerock_id=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;"; 
759
760 
761function displayErrorLogin(data) { 
762  $("#password, #email").addClass("input_error"); 
763  $("#password").siblings(".error_message").addClass("active_error-message"); 
764  $("#password, #email") 
765    .siblings(".alert_message") 
766    .removeClass("active_error-message"); 
767  $("#validation").addClass("button__gray_link"); 
768  $("#validation").addClass("cursor"); 
769
770 
771$("input").on("input", function () { 
772  var input = $(this); 
773 
774  if (input.val().length) { 
775    input.addClass("active"); 
776    input.siblings().addClass("labelactive"); 
777    if (!!document.querySelector(".active_error-message")) { 
778      input.removeClass("input_error"); 
779      input.siblings(".error_message").removeClass("active_error-message"); 
780      $(this).siblings(".alert_message").removeClass("active_error-message"); 
781
782  } else { 
783    input.removeClass("active"); 
784    input.siblings().removeClass("labelactive"); 
785
786}); 
787 
788function blurVerificaEmail() { 
789  var email = $("#email").val(); 
790  if (email == "") { 
791    $(this).addClass("input_error"); 
792    $(this).siblings(".error_message").removeClass("active_error-message"); 
793    $(this).siblings(".alert_message").addClass("active_error-message"); 
794    return false; 
795  } else { 
796    $(this).removeClass("input_error"); 
797    $(this).siblings(".error_message").removeClass("active_error-message"); 
798    $(this).siblings(".alert_message").removeClass("active_error-message"); 
799    return true; 
800
801
802$("#email").blur(blurVerificaEmail); 
803 
804function blurVerificaPassword() { 
805  var password = $("#password").val(); 
806  if (password == "") { 
807    $(this).addClass("input_error"); 
808    $(this).siblings(".error_message").removeClass("active_error-message"); 
809    $(this).siblings(".alert_message").addClass("active_error-message"); 
810    return false; 
811  } else { 
812    return true; 
813
814
815$("#password").blur(blurVerificaPassword); 
816 
817$("input").keyup(function () { 
818  if (blurVerificaEmail() && blurVerificaPassword()) { 
819    $("#validation.button__gray_link").removeClass("button__gray_link"); 
820    $("#validation").removeClass("cursor"); 
821  } else if (!document.querySelector("#validation.button__gray_link")) { 
822    $("#validation").addClass("button__gray_link"); 
823    $("#validation").addClass("cursor"); 
824
825}); 
826 
827$(".pass-view").on("click", function () { 
828  var passView = $(this).children("img"), 
829    passViewOpen = 
830      BASE_IMG + 
831      "/documents/91224/96178/icon-unlocked-view.svg/d9eba4cf-3908-3561-6a54-45b87a9c0e50?t=1628100125445&version=1.0&imagePreview=1", 
832    passViewClosed = 
833      BASE_IMG + 
834      "/documents/91224/96178/icon-blocked-view.svg/91eefe05-711c-818a-2b9e-49abd806b314?t=1628100125049&version=1.0&imagePreview=1", 
835    pass = $(this).siblings("#password"); 
836 
837  if (passView.attr("src") == passViewClosed) { 
838    $(passView).attr("src", passViewOpen); 
839    pass.attr("type", "text"); 
840  } else { 
841    $(passView).attr("src", passViewClosed); 
842    pass.attr("type", "password"); 
843
844}); 
845 
846function validation() { 
847  var email = $("#email").val(); 
848  var password = $("#password").val(); 
849  if (password !== "") { 
850    login(email, password); 
851  } else { 
852    $("#password").addClass("input_error"); 
853    $("#password") 
854      .siblings(".alert_message") 
855      .addClass("active_error-message"); 
856
857  if (email == "" && password == "") { 
858    $("#password, #email").addClass("input_error"); 
859    $("#password, #email") 
860      .siblings(".alert_message") 
861      .addClass("active_error-message"); 
862  } else if (email == "") { 
863    $("#email").addClass("input_error"); 
864    $("#email").siblings(".alert_message").addClass("active_error-message"); 
865  } else { 
866    $("#password, #email").addClass("input_error"); 
867    $("#password, #email") 
868      .siblings(".error_message") 
869      .addClass("active_error-message"); 
870
871  return false; 
872
873 
874$("#validation").on("click", validation); 
875 
876function isLoggedIn() { 
877  if (getCookie("token")) { 
878    return true; 
879  } else { 
880    return false; 
881
882
883 
884function clearCart(cartId, customerToken) { 
885  const cleanCartMutation = 
886    'mutation { clearCustomerCart( cartUid: "' + cartId + '") { status } }'; 
887 
888  return $.ajax({ 
889    method: "POST", 
890    url: API_ENDPOINT, 
891    headers: { 
892      Authorization: "Bearer " + customerToken, 
893      "Content-Type": "application/json", 
894      "Store": store, 
895    }, 
896    dataType: "json", 
897    data: JSON.stringify({ 
898      query: cleanCartMutation, 
899    }), 
900    success: function (data) { 
901      return data; 
902    }, 
903    error: function (error) { 
904      return error; 
905    }, 
906  }); 
907
908 
909function getCookie(cname) { 
910  let name = cname + "="; 
911  let decodedCookie = decodeURIComponent(document.cookie); 
912  let ca = decodedCookie.split(";"); 
913 
914  for (let i = 0; i < ca.length; i++) { 
915    let c = ca[i]; 
916    while (c.charAt(0) == " ") { 
917      c = c.substring(1); 
918
919    if (c.indexOf(name) == 0) { 
920      return c.substring(name.length, c.length); 
921
922
923  return ""; 
924
925 
926$(function () { 
927  const isFrToken = localStorage.getItem("sessionToken"); 
928 
929  if (isFrToken) { 
930    try { 
931      const { refresh_token, expireDate, access_token } = JSON.parse( 
932        localStorage.getItem("renewEntitlements") 
933      ); 
934      getPlans() 
935      handleRedirectUser(isFrToken, refresh_token, expireDate); 
936    } catch (error) { 
937      clearCredentials(); 
938      toggleLoader(false); 
939
940
941}); 
942 
943function toggleLoader(show, message = '') { 
944  var jQueryRef = $ ? $ : jQuery; 
945 
946  if (show) { 
947    jQueryRef("#loader-dtvgo").addClass("show"); 
948    jQueryRef('.loader-text').html(message); 
949    jQueryRef('body').css("overflow", "hidden"); 
950  } else { 
951    jQueryRef("#loader-dtvgo").removeClass("show"); 
952    jQueryRef('body').css("overflow", "auto"); 
953
954
955  </script> 

Content | DTVGO | VANITY | Caja los andes | Chile Generic Warning Modal

Content | DTVGO | VANITY | Caja los andes | Chile Generic Error Modal

Content | DTVGO | VANITY | Caja los andes | Chile Footer