حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5883698" at line 8, column 17] ---- Tip: It's the final [] step 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: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5883698" at line 8, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html'>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17
18</#list>
19
20<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
21 <#assign ameriprise = true>
22<#else>
23 <#assign ameriprise = false>
24</#if>
25
26<#if mappedLC?has_content && !ameriprise>
27 <#assign lc = mappedLC >
28</#if>
29<#assign isEmployee = false>
30
31<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
32<#if fiData?first?has_content>
33 <#assign fi = fiData?first>
34 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
35 <#assign subbu_special = fi.offerId>
36 </#if>
37 <#if fi.projectType == "emp">
38 <#assign isEmployee = true>
39 </#if>
40</#if>
41
42<#if lc?has_content>
43 <#assign prefix = "00000" >
44 <#assign lcWithPrefix = prefix + lc>
45 <#assign withPrefixLength = lcWithPrefix?length >
46 <#assign startHere = withPrefixLength - 5>
47 <#assign lc = lcWithPrefix?substring(startHere)>
48 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
49 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
50
51 <#assign clientProfile = clientProfileList?first>
52 <#assign partnerName = clientProfile.getMarketingNameLong()>
53 <#assign pbu = clientProfile.getPbu()>
54 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
55 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
56 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
57 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
58 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
59 <#assign partnerUrl = 'https://' + partnerUrl>
60 </#if>
61
62 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
63 <#if clientdataList?has_content >
64 <#assign clientdata = clientdataList?first >
65 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
66 <#assign backgroundImage = clientdata["backgroundImage"] >
67 <#assign buttonHexColor = clientdata["buttonHexColor"] >
68 <#assign AprMin = clientdata["AprMin"] >
69 <#assign AprMax = clientdata["AprMax"] >
70 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
71 <#assign BillingCycles = clientdata["BillingCycles"] >
72 <#assign textHexColor = clientdata["textHexColor"] >
73 <#assign linkHexColor = clientdata["linkHexColor"] >
74 <#assign hoverColor = clientdata["hoverColor"] >
75 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
76 <#assign transparency = clientdata["transparency"] >
77 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
78 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
79 <#assign businessTransparency = clientdata["businessTransparency"] >
80 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
81 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
82 </#if> -->
83
84 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
85 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
86 <#if pbu == "0864054">
87 <#assign override = "berkshire">
88 <#else>
89 <#assign override = " ">
90 </#if>
91 <#-- this one should be delete for prod -->
92
93 <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
94 <#assign logoFileName = pbu + "-" + subbu + ".png">-->
95
96 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
97 <#if (subbu_special?has_content)>
98 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
99 <#else>
100 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
101 </#if>
102 <#assign temp = []>
103 <#assign consumerCards = []>
104 <#assign businessCards = []>
105 <#assign offerTypeList = []>
106 <#assign index = 0>
107 <#assign ameriprise_cards= []>
108 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
109 <#assign businessOfferTypes =['128', '121', '144', '143']>
110 <#list fiCardsData as fib>
111 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
112 <#assign offerTypeList = offerTypeList + [fib.offerType]>
113 <#assign temp = temp + fiCardsData[index..index]>
114 <#if ameriprise>
115 <#if (fib.offerType == "101" || fib.offerType == "103")>
116 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
117 </#if>
118 <#else>
119 <#if consumerOfferTypes?seq_contains(fib.offerType)>
120 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
121 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
122 <#assign businessCards = businessCards + fiCardsData[index..index]>
123 </#if>
124 </#if>
125 </#if>
126 <#assign index = index + 1>
127
128 </#list>
129 <#assign fiCardsData = temp>
130 <#if ameriprise>
131 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
132 </#if>
133
134 <#if (fiCardsData?size > 0)>
135 <#if (subbu_special?has_content)>
136 <#assign lc_used = fiCardsData?first.WebLocationCode>
137 <#else>
138 <#if ameriprise>
139 <#assign lc_used = mappedLC>
140 <#else>
141 <#assign lc_used = lc>
142 </#if>
143 </#if>
144 <#assign offerId = "">
145 <#assign sourceCode = "">
146 <#assign cardArtImage = "">
147 <#assign productUrl = "">
148 <#assign product = "">
149 <#assign preparerType = "customer">
150 <#assign apr = "">
151 <#assign cardIndex = 0>
152 <#assign empOfferId = "">
153 <#if consumerCards[0]?has_content>
154 <#assign empOfferId = consumerCards[0].empofferId!"">
155 </#if>
156 <#assign marketingChannel = 'SAT2A'>
157 <#if isEmployee>
158 <#assign marketingChannel = 'empl'>
159 <#assign offerId = empOfferId>
160 </#if>
161
162 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
163 <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))>
164 <#list consumerCards as card>
165 <#if (card.offerType=="108" || card.offerType=="109") >
166 <#assign offerId = card.saaofferId>
167 <#if isEmployee>
168 <#assign offerId = card.empofferId!"">
169 </#if>
170 <#assign sourceCode = card.sourceCode>
171 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
172 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
173
174 <#assign productUrl="consumer-platinum2103">
175 <#assign product="Platinum">
176 <#assign cardIndex = 4>
177
178 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
179 <#if (scrapedData?size > 0)>
180 <#list scrapedData as sItem>
181 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
182 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
183 <#break>
184 </#if>
185 </#list>
186 <script>
187 $(document).ready(function () {
188 var aprText = "${apr}";
189 if (aprText) {
190 try {
191 $(".apr-full-text").html(aprText);
192 var matches= aprText.match(/\d+(\.\d+)?%?/g);
193 var billing_cycle = matches[1];
194 var apr_min = apr_min = matches[2];
195 var apr_max = apr_max = matches[3];
196 if (billing_cycle) {
197 $(".scraped-billing-cycle").html(billing_cycle);
198 }
199 if (apr_min) {
200 $(".scraped-apr-min").html(apr_min);
201 }
202 if (apr_max) {
203 $('.scraped-apr-max').html(apr_max);
204 }
205
206 } catch (e) {
207 console.log(e);
208 }
209 } else {
210 $(".apr-full-text").html('');
211 }
212 });
213 </script>
214 </#if>
215 <script>
216 var product = "${product}";
217 var partnerName = "${partnerName}";
218 $(document).ready(function () {
219 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms & conditions</a>');
220 });
221 </script>
222 </#if>
223 </#list>
224 <#else>
225 <#assign displayedCard = consumerCards[0]>
226 <#assign offerId = displayedCard.saaofferId>
227 <#if isEmployee>
228 <#assign offerId = displayedCard.empofferId!"">
229 </#if>
230 <#assign sourceCode = displayedCard.sourceCode>
231 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
232 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
233 <#if ameriprise>
234 <#if (displayedCard.offerType == "101")>
235 <#assign productUrl="ameriprise-premier-visa-signature">
236 <#assign product="Premier Visa Signature">
237 <#assign cardIndex = 0>
238 <#elseif (displayedCard.offerType == "103")>
239 <#assign productUrl = "ameriprise-visa-signature">
240 <#assign product="Visa Signature">
241 <#assign cardIndex = 1>
242 </#if>
243 <#else>
244 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
245 <#assign productUrl = "consumer-platinum2103">
246 <#assign product="Platinum">
247 <#assign cardIndex = 4>
248 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
249 <#if (scrapedData?size > 0)>
250 <#list scrapedData as sItem>
251 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
252 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
253 <#break>
254 </#if>
255 </#list>
256 <script>
257 $(document).ready(function () {
258 var aprText = "${apr}";
259 if (aprText) {
260 try {
261 $(".apr-full-text").html(aprText);
262 var matches= aprText.match(/\d+(\.\d+)?%?/g);
263 var billing_cycle = matches[1];
264 var apr_min = apr_min = matches[2];
265 var apr_max = apr_max = matches[3];
266 if (billing_cycle) {
267 $(".scraped-billing-cycle").html(billing_cycle);
268 }
269 if (apr_min) {
270 $(".scraped-apr-min").html(apr_min);
271 }
272 if (apr_max) {
273 $('.scraped-apr-max').html(apr_max);
274 }
275
276 } catch (e) {
277 console.log(e);
278 }
279 } else {
280 $(".apr-full-text").html('');
281 }
282 });
283 </script>
284 </#if>
285 <#elseif (displayedCard.offerType == "104")>
286 <#assign productUrl = "max-cash">
287 <#assign product="Max Cash Preferred">
288 <#assign cardIndex = 0>
289 <#elseif (displayedCard.offerType == "141")>
290 <#assign productUrl = "college-real-rewards">
291 <#assign product="College Real Rewards">
292 <#assign cardIndex = 2>
293 <#elseif (displayedCard.offerType == "115")>
294 <#assign productUrl = "secured">
295 <#assign product="Secured">
296 <#assign cardIndex = 3>
297 </#if>
298 </#if>
299 </#if>
300 </#if>
301 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
302
303 <#if (offerTypeList?seq_contains("128")) >
304 <#list businessCards as card>
305 <#if (card.offerType=="128")>
306 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
307 <#assign offerId = card.saaofferId>
308 <#assign sourceCode = card.sourceCode>
309 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
310 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
311 <#assign productUrl = "business-cash-preferred">
312 <#assign product="Business Cash Preferred">
313 <#assign cardIndex = 0>
314 </#if>
315 </#list>
316 <#else>
317 <#assign displayedCard = businessCards[0]>
318 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
319 <#assign offerId = displayedCard.saaofferId>
320 <#assign sourceCode = displayedCard.sourceCode>
321 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
322 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
323
324 <#if (displayedCard.offerType=="143")>
325 <#assign productUrl="business-real-rewards">
326 <#assign product="Business Real Rewards">
327 <#assign cardIndex = 2>
328 <#elseif (displayedCard.offerType=="144")>
329 <#assign productUrl = "smart-business-rewards">
330 <#assign product="Smart Business Rewards">
331 <#assign cardIndex = 1>
332 <#elseif (displayedCard.offerType=="121")>
333 <#assign productUrl = "business-platinum2103">
334 <#assign product="Business Card">
335 <#assign cardIndex = 3>
336 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
337 <#if (scrapedData?size > 0)>
338 <#list scrapedData as sItem>
339 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
340 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
341 <#break>
342 </#if>
343 </#list>
344 <script>
345 $(document).ready(function () {
346 var aprText = "${apr}";
347 if (aprText) {
348 try {
349 $(".apr-full-text").html(aprText);
350 var matches= aprText.match(/\d+(\.\d+)?%?/g);
351 var billing_cycle = matches[1];
352 var apr_min = apr_min = matches[2];
353 var apr_max = apr_max = matches[3];
354 if (billing_cycle) {
355 $(".scraped-billing-cycle").html(billing_cycle);
356 }
357 if (apr_min) {
358 $(".scraped-apr-min").html(apr_min);
359 }
360 if (apr_max) {
361 $('.scraped-apr-max').html(apr_max);
362 }
363
364 } catch (e) {
365 console.log(e);
366 }
367 } else {
368 $(".apr-full-text").html('');
369 }
370 });
371 </script>
372 </#if>
373 </#if>
374 </#if>
375 </#if>
376 <#if product != "">
377 <#if ameriprise>
378 <#assign card_art_alt = partnerName + " " + product + " Card">
379 <#assign rollover_text = partnerName + " " + product + " Card">
380 <#else>
381 <#assign card_art_alt = partnerName + " " + product + " Card">
382 <#assign rollover_text = partnerName + " " + product + " Credit Card">
383 <#assign card_text = product + " Card">
384 </#if>
385 </#if>
386 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
387 <div class="hero-main">
388 <div class="hero-main-logo">
389 <#if partnerUrl?has_content>
390 <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
391 <#else>
392 <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
393 </#if>
394 </div>
395 <div class="hero-main-container">
396 <div class="hero-main-offer bg-color-white">
397 <div class="offer-detail">
398
399 <div class="offer-detail-cardArt cardArtImg">
400 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
401 <p>${card_text!''}</p>
402 </div>
403 <div class="offer-detail-text text-color-default hide-desktop">
404 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
405 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
406 </div>
407
408 <#if ameriprise>
409 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
410 <#else>
411 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop">
412 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
413 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
414 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
415 <button
416 type="submit"
417 data-button-name="cta-button-top"
418 data-product-name="${productUrl!''}"
419 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
420 disabled
421 >
422 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
423 </button>
424 </form>
425 </#if>
426 </div>
427
428 <div class="offer-header">
429 <div class="offer-text-top">
430 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
431 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
432 </div>
433 <div class="offer-text-bottom hide-mobile">
434 <div class="offer-detail-text text-color-default">
435 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
436 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
437 </div>
438
439 <#if ameriprise>
440 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
441 <#else>
442 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm">
443 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
444 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
445 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
446 <button
447 type="submit"
448 data-button-name="cta-button-top"
449 data-product-name="${productUrl!''}"
450 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
451 disabled
452 >
453 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
454 </button>
455 </form>
456 </#if>
457 </div>
458 </div>
459 </div>
460 </div>
461 </div>
462 </div>
463
464 </#if>
465</#if>
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5883698" at line 8, column 17] ---- Tip: It's the final [] step 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: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5883698" at line 8, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
5<#assign url404 = '/error/404.html'>
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17
18</#list>
19
20<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
21 <#assign ameriprise = true>
22<#else>
23 <#assign ameriprise = false>
24</#if>
25
26<#if mappedLC?has_content && !ameriprise>
27 <#assign lc = mappedLC >
28</#if>
29<#assign isEmployee = false>
30
31<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
32<#if fiData?first?has_content>
33 <#assign fi = fiData?first>
34 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
35 <#assign subbu_special = fi.offerId>
36 </#if>
37 <#if fi.projectType == "emp">
38 <#assign isEmployee = true>
39 </#if>
40</#if>
41
42<#if lc?has_content>
43 <#assign prefix = "00000" >
44 <#assign lcWithPrefix = prefix + lc>
45 <#assign withPrefixLength = lcWithPrefix?length >
46 <#assign startHere = withPrefixLength - 5>
47 <#assign lc = lcWithPrefix?substring(startHere)>
48 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
49 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
50
51 <#assign clientProfile = clientProfileList?first>
52 <#assign partnerName = clientProfile.getMarketingNameLong()>
53 <#assign pbu = clientProfile.getPbu()>
54 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
55 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
56 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
57 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
58 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
59 <#assign partnerUrl = 'https://' + partnerUrl>
60 </#if>
61
62 <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
63 <#if clientdataList?has_content >
64 <#assign clientdata = clientdataList?first >
65 <#assign backgroundHexColor = clientdata["backgroundHexColor"] >
66 <#assign backgroundImage = clientdata["backgroundImage"] >
67 <#assign buttonHexColor = clientdata["buttonHexColor"] >
68 <#assign AprMin = clientdata["AprMin"] >
69 <#assign AprMax = clientdata["AprMax"] >
70 <#assign cashAdvanceRate = clientdata["cashAdvanceRate"] >
71 <#assign BillingCycles = clientdata["BillingCycles"] >
72 <#assign textHexColor = clientdata["textHexColor"] >
73 <#assign linkHexColor = clientdata["linkHexColor"] >
74 <#assign hoverColor = clientdata["hoverColor"] >
75 <#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] >
76 <#assign transparency = clientdata["transparency"] >
77 <#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] >
78 <#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] >
79 <#assign businessTransparency = clientdata["businessTransparency"] >
80 <#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] >
81 <#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] >
82 </#if> -->
83
84 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
85 <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!>
86 <#if pbu == "0864054">
87 <#assign override = "berkshire">
88 <#else>
89 <#assign override = " ">
90 </#if>
91 <#-- this one should be delete for prod -->
92
93 <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
94 <#assign logoFileName = pbu + "-" + subbu + ".png">-->
95
96 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
97 <#if (subbu_special?has_content)>
98 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
99 <#else>
100 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
101 </#if>
102 <#assign temp = []>
103 <#assign consumerCards = []>
104 <#assign businessCards = []>
105 <#assign offerTypeList = []>
106 <#assign index = 0>
107 <#assign ameriprise_cards= []>
108 <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']>
109 <#assign businessOfferTypes =['128', '121', '144', '143']>
110 <#list fiCardsData as fib>
111 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
112 <#assign offerTypeList = offerTypeList + [fib.offerType]>
113 <#assign temp = temp + fiCardsData[index..index]>
114 <#if ameriprise>
115 <#if (fib.offerType == "101" || fib.offerType == "103")>
116 <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]>
117 </#if>
118 <#else>
119 <#if consumerOfferTypes?seq_contains(fib.offerType)>
120 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
121 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
122 <#assign businessCards = businessCards + fiCardsData[index..index]>
123 </#if>
124 </#if>
125 </#if>
126 <#assign index = index + 1>
127
128 </#list>
129 <#assign fiCardsData = temp>
130 <#if ameriprise>
131 <#assign consumerCards = ameriprise_cards?sort_by("offerType")>
132 </#if>
133
134 <#if (fiCardsData?size > 0)>
135 <#if (subbu_special?has_content)>
136 <#assign lc_used = fiCardsData?first.WebLocationCode>
137 <#else>
138 <#if ameriprise>
139 <#assign lc_used = mappedLC>
140 <#else>
141 <#assign lc_used = lc>
142 </#if>
143 </#if>
144 <#assign offerId = "">
145 <#assign sourceCode = "">
146 <#assign cardArtImage = "">
147 <#assign productUrl = "">
148 <#assign product = "">
149 <#assign preparerType = "customer">
150 <#assign apr = "">
151 <#assign cardIndex = 0>
152 <#assign empOfferId = "">
153 <#if consumerCards[0]?has_content>
154 <#assign empOfferId = consumerCards[0].empofferId!"">
155 </#if>
156 <#assign marketingChannel = 'SAT2A'>
157 <#if isEmployee>
158 <#assign marketingChannel = 'empl'>
159 <#assign offerId = empOfferId>
160 </#if>
161
162 <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)>
163 <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))>
164 <#list consumerCards as card>
165 <#if (card.offerType=="108" || card.offerType=="109") >
166 <#assign offerId = card.saaofferId>
167 <#if isEmployee>
168 <#assign offerId = card.empofferId!"">
169 </#if>
170 <#assign sourceCode = card.sourceCode>
171 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
172 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
173
174 <#assign productUrl="consumer-platinum2103">
175 <#assign product="Platinum">
176 <#assign cardIndex = 4>
177
178 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
179 <#if (scrapedData?size > 0)>
180 <#list scrapedData as sItem>
181 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
182 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
183 <#break>
184 </#if>
185 </#list>
186 <script>
187 $(document).ready(function () {
188 var aprText = "${apr}";
189 if (aprText) {
190 try {
191 $(".apr-full-text").html(aprText);
192 var matches= aprText.match(/\d+(\.\d+)?%?/g);
193 var billing_cycle = matches[1];
194 var apr_min = apr_min = matches[2];
195 var apr_max = apr_max = matches[3];
196 if (billing_cycle) {
197 $(".scraped-billing-cycle").html(billing_cycle);
198 }
199 if (apr_min) {
200 $(".scraped-apr-min").html(apr_min);
201 }
202 if (apr_max) {
203 $('.scraped-apr-max').html(apr_max);
204 }
205
206 } catch (e) {
207 console.log(e);
208 }
209 } else {
210 $(".apr-full-text").html('');
211 }
212 });
213 </script>
214 </#if>
215 <script>
216 var product = "${product}";
217 var partnerName = "${partnerName}";
218 $(document).ready(function () {
219 $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms & conditions</a>');
220 });
221 </script>
222 </#if>
223 </#list>
224 <#else>
225 <#assign displayedCard = consumerCards[0]>
226 <#assign offerId = displayedCard.saaofferId>
227 <#if isEmployee>
228 <#assign offerId = displayedCard.empofferId!"">
229 </#if>
230 <#assign sourceCode = displayedCard.sourceCode>
231 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
232 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
233 <#if ameriprise>
234 <#if (displayedCard.offerType == "101")>
235 <#assign productUrl="ameriprise-premier-visa-signature">
236 <#assign product="Premier Visa Signature">
237 <#assign cardIndex = 0>
238 <#elseif (displayedCard.offerType == "103")>
239 <#assign productUrl = "ameriprise-visa-signature">
240 <#assign product="Visa Signature">
241 <#assign cardIndex = 1>
242 </#if>
243 <#else>
244 <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")>
245 <#assign productUrl = "consumer-platinum2103">
246 <#assign product="Platinum">
247 <#assign cardIndex = 4>
248 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
249 <#if (scrapedData?size > 0)>
250 <#list scrapedData as sItem>
251 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
252 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
253 <#break>
254 </#if>
255 </#list>
256 <script>
257 $(document).ready(function () {
258 var aprText = "${apr}";
259 if (aprText) {
260 try {
261 $(".apr-full-text").html(aprText);
262 var matches= aprText.match(/\d+(\.\d+)?%?/g);
263 var billing_cycle = matches[1];
264 var apr_min = apr_min = matches[2];
265 var apr_max = apr_max = matches[3];
266 if (billing_cycle) {
267 $(".scraped-billing-cycle").html(billing_cycle);
268 }
269 if (apr_min) {
270 $(".scraped-apr-min").html(apr_min);
271 }
272 if (apr_max) {
273 $('.scraped-apr-max').html(apr_max);
274 }
275
276 } catch (e) {
277 console.log(e);
278 }
279 } else {
280 $(".apr-full-text").html('');
281 }
282 });
283 </script>
284 </#if>
285 <#elseif (displayedCard.offerType == "104")>
286 <#assign productUrl = "max-cash">
287 <#assign product="Max Cash Preferred">
288 <#assign cardIndex = 0>
289 <#elseif (displayedCard.offerType == "141")>
290 <#assign productUrl = "college-real-rewards">
291 <#assign product="College Real Rewards">
292 <#assign cardIndex = 2>
293 <#elseif (displayedCard.offerType == "115")>
294 <#assign productUrl = "secured">
295 <#assign product="Secured">
296 <#assign cardIndex = 3>
297 </#if>
298 </#if>
299 </#if>
300 </#if>
301 <#if (class.getData() == "landing-business" && businessCards?size > 0)>
302
303 <#if (offerTypeList?seq_contains("128")) >
304 <#list businessCards as card>
305 <#if (card.offerType=="128")>
306 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
307 <#assign offerId = card.saaofferId>
308 <#assign sourceCode = card.sourceCode>
309 <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png">
310 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg">
311 <#assign productUrl = "business-cash-preferred">
312 <#assign product="Business Cash Preferred">
313 <#assign cardIndex = 0>
314 </#if>
315 </#list>
316 <#else>
317 <#assign displayedCard = businessCards[0]>
318 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
319 <#assign offerId = displayedCard.saaofferId>
320 <#assign sourceCode = displayedCard.sourceCode>
321 <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png">
322 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg">
323
324 <#if (displayedCard.offerType=="143")>
325 <#assign productUrl="business-real-rewards">
326 <#assign product="Business Real Rewards">
327 <#assign cardIndex = 2>
328 <#elseif (displayedCard.offerType=="144")>
329 <#assign productUrl = "smart-business-rewards">
330 <#assign product="Smart Business Rewards">
331 <#assign cardIndex = 1>
332 <#elseif (displayedCard.offerType=="121")>
333 <#assign productUrl = "business-platinum2103">
334 <#assign product="Business Card">
335 <#assign cardIndex = 3>
336 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)>
337 <#if (scrapedData?size > 0)>
338 <#list scrapedData as sItem>
339 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
340 <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
341 <#break>
342 </#if>
343 </#list>
344 <script>
345 $(document).ready(function () {
346 var aprText = "${apr}";
347 if (aprText) {
348 try {
349 $(".apr-full-text").html(aprText);
350 var matches= aprText.match(/\d+(\.\d+)?%?/g);
351 var billing_cycle = matches[1];
352 var apr_min = apr_min = matches[2];
353 var apr_max = apr_max = matches[3];
354 if (billing_cycle) {
355 $(".scraped-billing-cycle").html(billing_cycle);
356 }
357 if (apr_min) {
358 $(".scraped-apr-min").html(apr_min);
359 }
360 if (apr_max) {
361 $('.scraped-apr-max').html(apr_max);
362 }
363
364 } catch (e) {
365 console.log(e);
366 }
367 } else {
368 $(".apr-full-text").html('');
369 }
370 });
371 </script>
372 </#if>
373 </#if>
374 </#if>
375 </#if>
376 <#if product != "">
377 <#if ameriprise>
378 <#assign card_art_alt = partnerName + " " + product + " Card">
379 <#assign rollover_text = partnerName + " " + product + " Card">
380 <#else>
381 <#assign card_art_alt = partnerName + " " + product + " Card">
382 <#assign rollover_text = partnerName + " " + product + " Credit Card">
383 <#assign card_text = product + " Card">
384 </#if>
385 </#if>
386 <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}">
387 <div class="hero-main">
388 <div class="hero-main-logo">
389 <#if partnerUrl?has_content>
390 <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
391 <#else>
392 <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a>
393 </#if>
394 </div>
395 <div class="hero-main-container">
396 <div class="hero-main-offer bg-color-white">
397 <div class="offer-detail">
398
399 <div class="offer-detail-cardArt cardArtImg">
400 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
401 <p>${card_text!''}</p>
402 </div>
403 <div class="offer-detail-text text-color-default hide-desktop">
404 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
405 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
406 </div>
407
408 <#if ameriprise>
409 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
410 <#else>
411 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop">
412 <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
413 <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
414 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
415 <button
416 type="submit"
417 data-button-name="cta-button-top"
418 data-product-name="${productUrl!''}"
419 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
420 disabled
421 >
422 ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
423 </button>
424 </form>
425 </#if>
426 </div>
427
428 <div class="offer-header">
429 <div class="offer-text-top">
430 <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div>
431 <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1>
432 </div>
433 <div class="offer-text-bottom hide-mobile">
434 <div class="offer-detail-text text-color-default">
435 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()}
436 ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()}
437 </div>
438
439 <#if ameriprise>
440 <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>
441 <#else>
442 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm">
443 <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
444 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea>
445 <!-- applyNowLink class is used for ga4 analytics call in other template on page -->
446 <button
447 type="submit"
448 data-button-name="cta-button-top"
449 data-product-name="${productUrl!''}"
450 class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white"
451 disabled
452 >
453 ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span>
454 </button>
455 </form>
456 </#if>
457 </div>
458 </div>
459 </div>
460 </div>
461 </div>
462 </div>
463
464 </#if>
465</#if>
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> url404 [in template "10153#10191#5843849" at line 79, column 28] ---- 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: ${url404} [in template "10153#10191#5843849" at line 79, column 26] ----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign oadURL = propsUtil.get('elan.oad.url') >
3<#assign url = themeDisplay.getURLCurrent() >
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#-- <#assign url404 = '/error/404.html'> -->
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
7<#assign environment = url?replace('/index.*','','r')>
8
9<#assign text_to_apply_source = "vanity url" >
10<#if qstringmap["sms"]?has_content>
11 <#assign sms = 1 >
12 <#assign text_to_apply_source = "sms" >
13</#if>
14<#if qstringmap["qrCode"]?has_content>
15 <#assign text_to_apply_source = "qr code" >
16</#if>
17
18<#if qstringmap["ecid"]?has_content>
19 <#assign ecidExt = qstringmap["ecid"]?first>
20 <#assign ecidExt = htmlUtil.escape(ecidExt)>
21 <#assign ecidExt = htmlUtil.escapeJS(ecidExt)>
22 <#assign ecidExt = "&ecid=" + ecidExt>
23
24 <#assign campaignId = qstringmap["ecid"]?first >
25 <#assign campaignId = htmlUtil.escape(campaignId)>
26 <#assign campaignId = htmlUtil.escapeJS(campaignId)>
27<#else>
28 <#assign ecidExt="">
29 <#assign campaignId = "" >
30</#if>
31<#-- check bankercode validity -->
32<#if oadURL?contains("uat-")>
33 <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' >
34<#else>
35 <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
36</#if>
37<#if qstringmap["bankercode"]?has_content>
38 <#assign bCode= qstringmap["bankercode"]?first>
39 <#assign bCode= htmlUtil.escapeJS(bCode)>
40 <#assign bCode= htmlUtil.escape(bCode)>
41 <#assign isEmployee = false>
42
43 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
44 <#if fiData?first?has_content>
45 <#assign fi = fiData?first>
46 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))>
47 <#assign subbu_special = fi.offerId>
48 </#if>
49 <#if fi.projectType == "emp">
50 <#assign isEmployee = true>
51 </#if>
52 <#else>
53 <script>
54 console.log("fiData missing");
55 location.href = '${url404}';
56 </script>
57 </#if>
58
59 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
60 <#if !bData?first?has_content>
61 <script>
62 console.log("bData missing");
63 location.href = '${url404}';
64 </script>
65 </#if>
66 <#list bData as b>
67 <#assign lc = b.locationcode >
68 <#assign bName = b.branch >
69 <#assign bPhone = b.businessphone >
70 <#assign boeid = b.oeid >
71 <#assign fName = b.firstname?trim >
72 <#assign lName = b.lastname?trim >
73 <#assign rLC = b.reallocationcode >
74 <#assign mappedLC = b.mappedLocationCode >
75 </#list>
76<#else>
77 <script>
78 console.log("MainProductBcode missing");
79 location.href = '${url404}';
80 </script>
81</#if>
82
83<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
84 <#assign ameriprise = true>
85<#else>
86 <#assign ameriprise = false>
87</#if>
88<#if mappedLC?has_content && !ameriprise>
89 <#assign lc = mappedLC >
90</#if>
91
92
93<#if lc?has_content>
94 <#assign firstNameLength = fName?length >
95 <#assign lastNameLength = lName?length >
96 <#if firstNameLength + lastNameLength > 19 >
97 <#if lastNameLength > 18 >
98 <#assign bLName = lName?substring(0,18)>
99 <#else>
100 <#assign bLName = lName>
101 </#if>
102 <#assign maxFirstName = 19 - bLName?length >
103 <#if firstNameLength > maxFirstName >
104 <#assign bFName = fName?substring(0,maxFirstName)>
105 <#else>
106 <#assign bFName = fName>
107 </#if>
108 <#else>
109 <#assign bFName = fName>
110 <#assign bLName = lName>
111 </#if>
112
113 <#assign prefix = "00000" >
114 <#assign lcWithPrefix = prefix + lc >
115 <#assign withPrefixLength = lcWithPrefix?length >
116 <#assign startHere = withPrefixLength - 5>
117 <#assign lc = lcWithPrefix?substring(startHere)>
118 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
119 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
120 <#if (clientProfileList?first?has_content)>
121 <#assign clientProfile = clientProfileList?first>
122 <#assign partnerName = clientProfile.getMarketingNameLong()>
123 <#assign pbu = clientProfile.getPbu()>
124 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
125 <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>
126 <#if (subbu_special?has_content)>
127 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
128 <#else>
129 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
130 </#if>
131
132 <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards-->
133 <#assign temp = []>
134 <#assign consumerCards = []>
135 <#assign businessCards = []>
136 <#assign offerTypeList = []>
137 <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']>
138 <#assign businessOfferTypes =['144', '128', '143', '121']>
139 <#assign index = 0>
140 <#list fiCardsData as fib>
141 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
142 <#assign offerTypeList = offerTypeList + [fib.offerType]>
143 <#assign temp = temp + fiCardsData[index..index]>
144 <#if consumerOfferTypes?seq_contains(fib.offerType)>
145 <#assign consumerCards = consumerCards + fiCardsData[index..index]>
146 <#elseif (businessOfferTypes?seq_contains(fib.offerType))>
147 <#assign businessCards = businessCards + fiCardsData[index..index]>
148 </#if>
149 </#if>
150 <#assign index = index + 1>
151 </#list>
152
153 <#assign fiCardsData = temp>
154
155 <#if (fiCardsData?size > 0)>
156 <#if (subbu_special?has_content)>
157 <#assign lc_used = fiCardsData?first.WebLocationCode>
158 <#else>
159 <#if ameriprise>
160 <#assign lc_used = mappedLC>
161 <#else>
162 <#assign lc_used = lc>
163 </#if>
164 </#if>
165 </#if>
166
167 <#assign offerId = "">
168 <#assign empOfferId = "">
169 <#if consumerCards[0]?has_content>
170 <#assign empOfferId = consumerCards[0].empofferId!"">
171 </#if>
172 <#assign marketingChannel = 'SAT2A'>
173 <#if isEmployee>
174 <#assign marketingChannel = 'empl'>
175 <#assign offerId = empOfferId>
176 </#if>
177
178 <#if (consumerCards?size > 0 || businessCards?size > 0)>
179
180 <div class="content-container content-container-main jn-consumer-content" id="product-display">
181 <#if ((consumerCards?size > 0) && (businessCards?size > 0) && (isEmployee == false))>
182 <nav class="jn-primary-nav two-tabs">
183 <ul>
184 <li title="${partnerName!''} - Personal products">
185 <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a>
186 </li>
187 <li title="${partnerName!''} - Business products">
188 <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a>
189 </li>
190 </ul>
191 </nav>
192 <#else>
193 <#if (consumerCards?size > 0)>
194 <nav class="jn-primary-nav" title="${partnerName!''} - Personal products">
195 <ul>
196 <li>
197 <p class="tab-nav" id="consumerTab"><span>Personal</span></p>
198 </li>
199 </ul>
200 </nav>
201 </#if>
202 <#if (businessCards?size > 0 && (isEmployee == false))>
203 <nav class="jn-primary-nav" title="${partnerName!''} - Business products">
204 <ul>
205 <li>
206 <p class="tab-nav" id="businessTab"><span>Business</span></p>
207 </li>
208 </ul>
209 </nav>
210 </#if>
211 </#if>
212 <#if (consumerCards?size > 0)>
213 <div class="tab-more-wrapper">
214 <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products">
215 <#list consumerCards as fib>
216 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" >
217 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
218 <#assign hasBalanceTransferCalculator = false>
219 <#assign offerId = fib.saaofferId>
220 <#if isEmployee>
221 <#assign offerId = fib.empofferId!"">
222 </#if>
223
224 <#if ameriprise>
225 <#if (fib.offerType == "101")>
226 <#assign productName = "premier-visa-signature">
227 <#assign product="Premier Visa Signature">
228 <#assign cardIndex = 0>
229 <#elseif (fib.offerType == "103")>
230 <#assign productName = "visa-signature">
231 <#assign product="Visa Signature">
232 <#assign cardIndex = 1>
233 </#if>
234 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
235 <#assign titleText = titleText?replace('<[^>]+>','','r')>
236 <#else>
237 <#switch fib.offerType>
238 <#case "101">
239 <#assign productName = "consumer-edr2112">
240 <#assign product="Everyday Rewards+">
241 <#assign cardIndex = 0>
242 <#break>
243 <#case "108">
244 <#assign productName = "consumer-platinum2103">
245 <#assign product="Platinum">
246 <#assign cardIndex = 2>
247 <#assign hasBalanceTransferCalculator = true>
248 <#break>
249 <#case "109">
250 <#assign productName = "consumer-platinum2103">
251 <#assign product="Platinum">
252 <#assign cardIndex = 2>
253 <#assign hasBalanceTransferCalculator = true>
254 <#break>
255 <#case "115">
256 <#assign productName = "secured">
257 <#assign product="Secured">
258 <#assign cardIndex = 5>
259 <#break>
260 <#case "104">
261 <#assign productName = "max-cash">
262 <#assign product="Max Cash Preferred">
263 <#assign cardIndex = 1>
264 <#break>
265 <#case "147">
266 <#assign productName = "max-cash-secured">
267 <#assign product="Max Cash Secured">
268 <#assign cardIndex = 4>
269 <#break>
270 <#case "141">
271 <#assign productName = "college-real-rewards">
272 <#assign product="College Real Rewards">
273 <#assign cardIndex = 3>
274 <#break>
275 <#case "138">
276 <#assign productName = "travel-rewards-plus">
277 <#assign product="Travel Rewards+">
278 <#assign cardIndex = 10>
279 <#break>
280 <#case "154">
281 <#assign productName = "reserve-rewards-plus">
282 <#assign product="Reserve Rewards+">
283 <#assign cardIndex = 11>
284 <#break>
285 <#default>
286 </#switch>
287
288 <#assign newTag = "">
289 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
290 <#assign newTag = "with-new-tag">
291 </#if>
292
293 <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()>
294 <#assign titleText = titleText?replace('<[^>]+>','','r')>
295
296
297 <#assign APR="">
298 <#assign AMF="">
299 <#assign BAL="">
300
301
302 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)>
303 <#if (scrapedData?size > 0)>
304 <#list scrapedData as sItem>
305 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
306 <#assign APR = sItem.scrapedValue>
307 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
308 <#assign AMF = sItem.scrapedValue>
309 <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) >
310 <#assign BAL = sItem.scrapedValue>
311 </#if>
312 <#if (APR?has_content && AMF?has_content && BAL?has_content)>
313 <#break>
314 </#if>
315 </#list>
316 </#if>
317 </#if>
318 <#if ameriprise>
319 <#assign rollover_text = partnerName + " " + product + " " + " Card">
320 <#else>
321 <#assign rollover_text = partnerName + " " + product + " " + " Credit Card">
322 </#if>
323 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}">
324 <div class="tag-container">
325 <div class="tag-corner">
326 <div class="tag-label">NEW</div>
327 </div>
328 </div>
329 <div class="consumer-card-heading hide-desktop">
330 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
331 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
332 </div>
333 <div class="jn-consumer-card-image">
334 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
335
336 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
337 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
338 </#if>
339 <#if (hasBalanceTransferCalculator)>
340 <a style="display: block; text-align: center; max-width: 285px; margin: auto;" href="javascript:void(0);" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a>
341 </#if>
342 </div>
343
344 <div class="jn-consumer-card-info">
345 <div class="consumer-card-heading hide-mobile">
346 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
347 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
348 </div>
349 <div class="jn-additional">
350 <ul class="${fib.offerType}">
351 <#if !ameriprise>
352 <#if (fib.offerType == "104")>
353 <li class="${fib.offerType}">
354 <p>
355 <strong>APR for Purchases: </strong>
356 ${APR!''}
357 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
358 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
359 </a>
360 </p>
361 </li>
362 <li class="${fib.offerType}">
363 <p>
364 <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong>
365 ${BAL!''}
366 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
367 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
368 </a>
369 </p>
370 </li>
371 <#else>
372 <li class="${fib.offerType}">
373 <p>
374 <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")>
375 <strong>APR for Purchases and Balance Transfers: </strong>
376 <#elseif (fib.offerType== "101")>
377 <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
378 <#else>
379 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
380 </#if>
381
382 ${APR!''}
383 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
384 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
385 </a>
386 </p>
387 </li>
388 </#if>
389 </#if>
390 <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content>
391 <#if consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content>
392 <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo>
393 <li>${marketingInfo.getData()}</li>
394 </#list>
395 </#if>
396 <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content>
397 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
398 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
399 <li>${marketingInfo.getData()}</li>
400 </#list>
401 </#if>
402 </#if>
403 <#if !ameriprise>
404 <li>
405 <p>
406 Annual Fee: ${AMF!''}
407 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
408 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
409 </a>
410 </p>
411 </li>
412 </#if>
413 </ul>
414 </div>
415 <ul class="actions">
416 <li>
417 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}" method="post" class="BAAForm" id="BAAForm">
418 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
419 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
420 <a
421 class="applyNowLink apply-now-button"
422 href="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}"
423 data-button-name="apply-now-link"
424 data-product-name="${productName}"
425 >
426 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
427 </a>
428 </form>
429 </li>
430 <li>
431 <#if ameriprise>
432 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">
433 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span>
434 </a>
435 <#else>
436 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
437 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
438 </a>
439 </#if>
440 </li>
441 </ul>
442 </div>
443 </div>
444 </#list>
445 </div>
446 </div>
447 </#if>
448 <#if ((businessCards?size > 0) && (isEmployee == false))>
449 <div class="tab-more-wrapper">
450 <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products">
451
452 <#list businessCards as fib>
453 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
454 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
455 <#switch fib.offerType>
456 <#case "144">
457 <#assign productName = "smart-business-rewards">
458 <#assign product="Smart Business Rewards">
459 <#assign cardIndex = 8>
460 <#break>
461 <#case "128">
462 <#assign productName = "business-cash-preferred">
463 <#assign product="Business Cash Preferred">
464 <#assign cardIndex = 6>
465 <#break>
466 <#case "143">
467 <#assign productName = "business-real-rewards">
468 <#assign product="Business Real Rewards">
469 <#assign cardIndex = 9>
470 <#break>
471 <#case "121">
472 <#assign productName = "business-platinum2103">
473 <#assign product="Business Card">
474 <#assign cardIndex = 7>
475 <#break>
476 <#default>
477 </#switch>
478 <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards -->
479 <#assign offerId = fib.saaofferId>
480
481 <#assign newTag = "">
482 <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")>
483 <#assign newTag = "with-new-tag">
484 </#if>
485 <#assign APR="">
486 <#assign AMF="">
487 <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)>
488 <#if (scrapedData?size > 0)>
489 <#list scrapedData as sItem>
490 <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) >
491 <#assign APR = sItem.scrapedValue>
492 <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) >
493 <#assign AMF = sItem.scrapedValue>
494 </#if>
495 <#if (APR?has_content && AMF?has_content)>
496 <#break>
497 </#if>
498 </#list>
499 </#if>
500
501 <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card">
502 <div class="tag-container">
503 <div class="tag-corner">
504 <div class="tag-label">NEW</div>
505 </div>
506 </div>
507 <div class="consumer-card-heading hide-desktop">
508 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
509 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
510 </div>
511 <div class="jn-consumer-card-image">
512 <img src="${cardArtImage!''}" alt="${rollover_text!''}" class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
513
514 <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) >
515 <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p>
516 </#if>
517 </div>
518
519 <div class="jn-consumer-card-info">
520 <div class="consumer-card-heading hide-mobile">
521 <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div>
522 ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()}
523 </div>
524 <div class="jn-additional">
525 <ul>
526 <li class="${fib.offerType}">
527 <p>
528 <#if (fib.offerType == "144")>
529 <strong>APR for Purchases and Balance Transfers: </strong>
530 <#else>
531 <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong>
532 </#if>
533
534 ${APR!''}
535 <a href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
536 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
537 </a>
538 </p>
539 </li>
540 <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content>
541 <#if consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content>
542 <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo>
543 <li>${marketingInfo.getData()}</li>
544 </#list>
545 </#if>
546 <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content>
547 <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content>
548 <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo>
549 <li>${marketingInfo.getData()}</li>
550 </#list>
551 </#if>
552 </#if>
553 <li>
554 <p>
555 Annual Fee: ${AMF!''} <a
556 href="${oadURL_TC}?step=display&offerId=${offerId}&locationCode=${lc_used}" target="_blank">
557 <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions
558 </a>
559 </p>
560 </li>
561 </ul>
562 </div>
563 <ul class="actions">
564 <li>
565 <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}" method="post" class="BAAForm">
566 <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
567 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>
568 <a
569 class="applyNowLink apply-now-button"
570 href="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&mktChl=${marketingChannel}"
571 data-button-name="apply-now-link"
572 data-product-name="${productName}"
573 >
574 ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}
575 <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span>
576 </a>
577 </form>
578 </li>
579 <li>
580 <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">
581 ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span>
582 </a>
583 </li>
584 </ul>
585 </div>
586 </div>
587
588 </#list>
589
590 </div>
591 </div>
592 </#if>
593 </div>
594 <script>
595 var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]';
596 var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]';
597 $(document).ready(function () {
598 var banker_code = "${bCode!''}";
599 var tabs=$('.tab-nav');
600 var slideDiv = $('.jn-tab-content.active');
601 var screenWidthMobile = 768;
602 var screenWidth = window.innerWidth;
603
604 if (tabs.length == 1) {
605 if ($(consumerSelector).length > 0) {
606 if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) {
607 $("nav.jn-primary-nav").hide();
608 changeCardLayout(consumerSelector);
609 createMetaTag("consumer");
610 } else {
611 hideHeroAndDisclaimer('business');
612 showHeroAndDisclaimer('consumer');
613 changeCardLayout(consumerSelector);
614 renumberFootnote("consumer");
615 createMetaTag("consumer");
616 }
617 }
618 if ($(businessSelector).length > 0) {
619 $(businessSelector).addClass('active');
620 hideHeroAndDisclaimer('consumer');
621 showHeroAndDisclaimer('business');
622 changeCardLayout(businessSelector);
623 renumberFootnote("business");
624 createMetaTag("business");
625 }
626 }
627 if (tabs.length == 2) {
628 renumberFootnote("consumer");
629 renumberFootnote("business");
630 createMetaTag("consumer");
631 if ($(consumerSelector + ' .jn-consumer-item').length < 3) {
632 changeCardLayout(consumerSelector);
633 }
634 if ($(businessSelector + ' .jn-consumer-item').length < 3) {
635 changeCardLayout(businessSelector);
636 }
637
638 var tabsNav = document.querySelectorAll('.tab-nav');
639 togglePrimaryNav(tabsNav);
640
641 if(window.location.href.indexOf('#business') > -1 ) {
642 $(consumerSelector).removeClass('active');
643 $(businessSelector).addClass('active');
644 $('#consumerTab').removeClass('active');
645 $('#businessTab').addClass('active');
646 hideHeroAndDisclaimer('consumer');
647 showHeroAndDisclaimer('business');
648 changeCardLayout(businessSelector);
649 renumberFootnote("business");
650 createMetaTag("business");
651
652 $(tabs).click(function(){
653 if ($(this).attr('id') === "consumerTab") {
654 var newUrl = window.location.toString();
655 window.location = newUrl.replace(/#business/, '#consumer');
656 }
657 if ($(this).attr('id') === "businessTab") {
658 var url = window.location.toString();
659 window.location = url.replace(/#consumer/, '#business');
660 }
661 });
662 }
663 }
664
665 });
666 // Primary Nav function
667
668 function togglePrimaryNav(elem) {
669 for (var i = 0; i < elem.length; i++) {
670 elem[i].addEventListener("click", function(e) {
671
672 var current = this,
673 allSections = document.querySelectorAll('[data-id]'),
674 section = document.querySelector("[data-id='"+ current.id +"']");
675
676 for (var a = 0; a < allSections.length; a++) {
677 allSections[a].classList.remove('active');
678 }
679 for (var c = 0; c < elem.length; c++) {
680 if (current != elem[c]) {
681 elem[c].classList.remove('active');
682 } else {
683 current.classList.add('active');
684 section.classList.add('active');
685 hideHeroAndDisclaimer('consumer');
686 hideHeroAndDisclaimer('business');
687 if(current.getAttribute('id') === "consumerTab"){
688 showHeroAndDisclaimer('consumer');
689 } else if(current.getAttribute('id') === "businessTab"){
690 showHeroAndDisclaimer('business');
691 }
692 }
693 }
694 e.preventDefault();
695 });
696 }
697 }
698
699 function renumberFootnote(type) {
700 var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]';
701 var disclaimerSelector = '.tier1-disclaimer-landing-' + type;
702 var heroSelector = '.tier1-hero-landing-' + type;
703 var numOfFootnote = $(disclaimerSelector + ' sup').length;
704 var showList = [];
705 var hideList=[];
706 for (var i = 1; i <= numOfFootnote; i++) {
707 var cssClass="tag-" + i;
708 if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) {
709 showList.push(i);
710 } else {
711 hideList.push(i);
712 }
713 }
714 /*
715 for (var i = 1; i < showList.length + 1; i++) {
716 if(showList[i-1] != i) {
717 var className="tag-" + showList[i-1];
718 $(heroSelector).find("." + className).html(i);
719 // $(discriptionSelector).find("." + className).html(i);
720 $(disclaimerSelector).find("." + className).html(i);
721 }
722 }
723 */
724 for (var i = 0; i <hideList.length; i++) {
725 var cname="tag-" + hideList[i];
726 $(disclaimerSelector).find("." + cname).parent().hide();
727 }
728 }
729
730 function changeCardLayout(cssSelector) {
731 var numOfCards = $(cssSelector + ' .jn-consumer-item').length;
732 if(numOfCards == 1) {
733 $(cssSelector).addClass('one-card');
734 } else if (numOfCards == 2) {
735 $(cssSelector).addClass('two-card');
736 }
737 }
738 function hideHeroAndDisclaimer(type) {
739 try {
740 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show');
741 document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide');
742 } catch (e) {
743 console.log(e);
744 }
745
746 try {
747 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show');
748 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');
749 } catch (e) {
750 console.log(e);
751 }
752
753 }
754 function showHeroAndDisclaimer(type) {
755 try {
756 document.querySelector('.tier1-hero-landing-'+ type).classList.add('show');
757 document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide');
758 } catch (e) {
759 console.log(e);
760 }
761
762 try {
763 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show');
764 document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');
765 } catch (e) {
766 console.log(e);
767 }
768
769 }
770 function createMetaTag(type) {
771 var partnerName = "${partnerName!0}";
772 var product_name = $('.jn-hero-container .jn-button').data('product-name');
773 var metaDesc = "";
774 if (type == "consumer") {
775 if(location.pathname.indexOf("11t1m") != -1) {
776 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening."
777 } else {
778 if(product_name == "consumer-platinum2103") {
779 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card.";
780 } else if(product_name == "real-rewards") {
781 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
782 } else if(product_name == "secured") {
783 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
784 } else if(product_name == "max-cash") {
785 if('${isEmployee?string("yes", "no")}' == "yes") {
786 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $200 Bonus and 5% cash back on the two categories you select.";
787 } else {
788 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select.";
789 }
790 }
791 }
792
793 } else if (type == "business") {
794 if(product_name == "business-cashback") {
795 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
796 } else if(product_name == "business-real-rewards") {
797 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on.";
798 } else if(product_name == "business-visa") {
799 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
800 } else if(product_name == "smart-business-rewards") {
801 metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card.";
802 }
803 }
804 var m = document.createElement('meta');
805 m.name = 'description';
806 m.content = metaDesc;
807 document.head.appendChild(m);
808 }
809 function goToByScroll(id) {
810 var element = document.getElementById(id);
811 element.scrollIntoView(true);
812 }
813
814 </script>
815 <script>
816 var reportingData = window.reportingData || {};
817 document.addEventListener('DOMContentLoaded', function() {
818 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
819 var hostName = location.hostname;
820 function getDomainFromHostname(hostname) {
821 var parts = hostname.split('.');
822 return parts.length === 3 ? parts[1] : parts[0];
823 }
824 var domain = getDomainFromHostname(hostName);
825 var partnerName = "${partnerName!0}";
826 var ameriprise = '${ameriprise?string("yes", "no")}';
827 var locationCode = "${rLC!lc}";
828 var eidAmp = "";
829 var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img');
830 for (var index = 0; index < heroCardImgs.length; index++) {
831 var heroCardImg = heroCardImgs[index];
832 var heroCardSrc = heroCardImg.getAttribute("src");
833 if(heroCardSrc != "") {
834 resizeImg(heroCardImg);
835 }
836 }
837 if (ameriprise == "yes") {
838 var bankercode_amp = '${bCode}';
839 eidAmp = bankercode_amp.substring(3);
840 locationCode ="";
841 document.title = "Ameriprise Financial Credit Card Overview Page";
842 } else {
843 document.title = partnerName + " Credit Card Index Page";
844 }
845
846 var lc = '${lc!0}';
847
848 var regex = /\d+/g;
849 var bdNumber = "${bPhone!''}";
850 var phoneNum = bdNumber.match(regex);
851 var areaCode = "";
852 var exchangeCode = "";
853 var num = "";
854 if(phoneNum != null) {
855 phoneNum = phoneNum.join("");
856 areaCode = phoneNum.substring(0,3);
857 exchangeCode = phoneNum.substring(3,6);
858 num = phoneNum.substring(6,10);
859 }
860
861 /* update SiteCatalyst data object */
862 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
863 reportingData.page_type = 'product';
864 reportingData.site_section = 'credit cards';
865 reportingData.platform = 'microsite';
866 reportingData.campaign_id = '${campaignId}';
867 reportingData.location_code = '${rLC!0}';
868 reportingData.partner_name = "${partnerName}";
869 reportingData.product = 'All Cards';
870 reportingData.text_to_apply_source = '${text_to_apply_source}';
871 reportingData.visitor_type = 'prospect';
872 reportingData.Banker_id = '${boeid}';
873 reportingData.Banker_code = '${bCode}';
874
875
876 /* SiteCatalyst pageView tracking */
877 AUI().ready(function() {
878 if (window.publisherFW) {
879 window.publisherFW.publishEvent("pageView", reportingData);
880 }
881 });
882
883 $('.jn-button').removeAttr('disabled');
884 $('.jn-button').removeClass('jn-disabled');
885
886 jQuery('.applyNowLink').on('click', function(e) {
887 $(this).closest('.BAAForm').submit();
888 const bankerId = '${boeid}';
889 const employeeId = "";
890 let visitorId = bankerId;
891
892 if('${isEmployee?string("yes", "no")}' == "yes") {
893 visitorId = employeeId;
894 }
895 const htmlElementName = e.target.nodeName;
896 const isButton = (htmlElementName ==='BUTTON');
897 // gets href of clicked anchor tag
898 let href = e.target.href;
899
900 // get action url of form submit button
901 if(isButton) {
902 href = document.getElementById('BAAForm').action;
903 }
904
905 const urlParams = new URLSearchParams(href);
906 let offerId = "";
907
908 if(urlParams.has('offerid')) {
909 offerId = urlParams.get('offerid');
910 }
911
912 if(urlParams.has('offerId')) {
913 offerId = urlParams.get('offerId');
914 }
915
916 window.dataLayer.push({
917 'event' : 'apply_payload',
918 'location_code': locationCode,
919 'banker_code': '${bCode}',
920 'offer_id': offerId,
921 'visitor_id': visitorId,
922 });
923 return false;
924 });
925 jQuery(".BAAForm").on("submit", function(e){
926 e.preventDefault();
927 var xmlData;
928 if('${isEmployee?string("yes", "no")}' == "yes") {
929 }
930 if(ameriprise == "yes") {
931 xmlData = '<?xml version="1.0"?>'+
932 "<prefillData>"+
933 "<versionNumber>1.0</versionNumber>"+
934 "<applicationData>"+
935 "<referral>" +
936 "<employeeId>" + eidAmp + "</employeeId>" +
937 "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+
938 "<divisionNumber></divisionNumber>"+
939 "</referral>" +
940 "<bankerInformation>"+
941 "<locationCode>" + locationCode + "</locationCode>"+
942 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
943 "<employeeID>${boeid!0}</employeeID>"+
944 "<name>" +
945 "<first>${bFName!'0'}</first>" +
946 "<last>${bLName!'0'}</last>" +
947 "</name>"+
948 "<phone>"+
949 "<areaCode>"+areaCode+"</areaCode>"+
950 "<exchange>"+exchangeCode+"</exchange>"+
951 "<number>"+num+"</number>"+
952 "</phone>"+
953 "</bankerInformation>"+
954 "</applicationData>"+
955 "</prefillData>"
956 } else if ('${isEmployee?string("yes", "no")}' == "yes") {
957 xmlData = '<?xml version="1.0"?>'+
958 "<prefillData>"+
959 "<versionNumber>1.0</versionNumber>"+
960 "<applicationData>"+
961 "<bankerInformation>"+
962 "<employeeFullName>Employee Product</employeeFullName>"+
963 "<employeeId>EMPPROD</employeeId>"+
964 "<employeePhoneNumber></employeePhoneNumber>"+
965 "<locationCode>" + locationCode + "</locationCode>"+
966 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
967 "<originatingBranchId></originatingBranchId>"+
968 "<name>" +
969 "<first>${bFName!'0'}</first>" +
970 "<last>${bLName!'0'}</last>" +
971 "</name>"+
972 "<phone>"+
973 "<areaCode>" + areaCode + "</areaCode>"+
974 "<exchange>" + exchangeCode + "</exchange>"+
975 "<number>" + num + "</number>"+
976 "</phone>"+
977 "</bankerInformation>"+
978 "<referral>" +
979 "<divisionNumber></divisionNumber>" +
980 "<partnerLocationID>" + locationCode + "</partnerLocationID>" +
981 "<referralId>EMPPROD</referralId>" +
982 "</referral>" +
983 "</applicationData>"+
984 "</prefillData>";
985 } else {
986 xmlData = '<?xml version="1.0"?>'+
987 "<prefillData>"+
988 "<versionNumber>1.0</versionNumber>"+
989 "<applicationData>"+
990 "<bankerInformation>"+
991 "<locationCode>" + locationCode + "</locationCode>"+
992 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
993 "<employeeID>${boeid!0}</employeeID>"+
994 "<name>" +
995 "<first>${bFName!'0'}</first>" +
996 "<last>${bLName!'0'}</last>" +
997 "</name>"+
998 "<phone>"+
999 "<areaCode>"+areaCode+"</areaCode>"+
1000 "<exchange>"+exchangeCode+"</exchange>"+
1001 "<number>"+num+"</number>"+
1002 "</phone>"+
1003 "</bankerInformation>"+
1004 "</applicationData>"+
1005 "</prefillData>"
1006 }
1007 $(this).children(".appDataBAA").val(xmlData);
1008 var buttonName = $(this).find(".apply-now-button").data("button-name");
1009 var productName = $(this).find(".apply-now-button").data("product-name");
1010 /* SiteCatalyst onClick tracking */
1011 reportingData.apply_button = buttonName;
1012 reportingData.product = productName;
1013
1014 if (window.publisherFW) {
1015 window.publisherFW.publishEvent("onClick", reportingData);
1016 }
1017 var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}';
1018 /* CRC service call */
1019 Liferay.Service(
1020 '/crc-utilities-portlet#crcremote/make-call',
1021 {
1022 storedProcedure: 'crcDDCTextApplyLog',
1023 parameters: paramString
1024 },
1025 function(obj){
1026 }
1027 );
1028
1029 this.submit();
1030 });
1031 });
1032 function resizeImg(img) {
1033 img.addEventListener("load", function() {
1034 var cardImgWidth = img.width;
1035 var cardImgHeight = img.height;
1036 if(cardImgWidth > cardImgHeight) {
1037 img.style.width = "285px";
1038 } else {
1039 img.style.width = "150px";
1040 }
1041 });
1042 }
1043 </script>
1044
1045 </#if>
1046 </#if>
1047</#if>
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843858" at line 5, column 17] ---- Tip: It's the final [] step 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: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843858" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
26 <#assign prefix = "00000" >
27 <#assign lcWithPrefix = prefix + lc >
28 <#assign withPrefixLength = lcWithPrefix?length >
29 <#assign startHere = withPrefixLength - 5>
30 <#assign lc = lcWithPrefix?substring(startHere)>
31 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50
51 <#if (fiCardsData?size > 0) >
52 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
53
54 <#if (cardProvider?size > 0)>
55 <#-- This will be V for visa or M for mastercard. -->
56 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
57 <#else>
58 <script>
59 console.log("No card provider(Visa/Master Card) found for disclaimer");
60 </script>
61 </#if>
62
63 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
64 <div class="disclaimer" >
65 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
66 ${employeeDisclaimersVisa.getData()}
67 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
68 ${employeeDisclaimersMasterCard.getData()}>
69 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
70 ${disclaimersVisa.getData()}
71 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
72 ${disclaimersMasterCard.getData()}
73 </#if>
74 </div>
75 </div>
76 </#if>
77<#else>
78 <script>
79 console.log("No lc for disclaimer");
80 </script>
81</#if>
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843858" at line 5, column 17] ---- Tip: It's the final [] step 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: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843858" at line 5, column 1] ----
1<#assign url = themeDisplay.getURLCurrent() >
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
4
5<#assign bCode= qstringmap["bankercode"]?first>
6<#assign bCode = htmlUtil.escape(bCode)>
7<#assign bCode = htmlUtil.escapeJS(bCode)>
8
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
10<#list bData as b>
11 <#assign lc = b.locationcode >
12 <#assign rLC = b.reallocationcode >
13 <#assign mappedLC = b.mappedLocationCode >
14</#list>
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
16 <#assign ameriprise = true>
17<#else>
18 <#assign ameriprise = false>
19</#if>
20<#if mappedLC?has_content && !ameriprise>
21 <#assign lc = mappedLC >
22</#if>
23
24
25<#if lc?has_content>
26 <#assign prefix = "00000" >
27 <#assign lcWithPrefix = prefix + lc >
28 <#assign withPrefixLength = lcWithPrefix?length >
29 <#assign startHere = withPrefixLength - 5>
30 <#assign lc = lcWithPrefix?substring(startHere)>
31 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
32 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
33
34 <#assign clientProfile = clientProfileList?first>
35 <#assign partnerName=clientProfile.getMarketingNameLong()>
36
37 <#assign pbu = clientProfile.getPbu()>
38 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
39 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>
40 <#assign isEmployee = false>
41
42 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)>
43 <#if fiData?first?has_content>
44 <#assign fi = fiData?first>
45 <#if fi.projectType == "emp">
46 <#assign isEmployee = true>
47 </#if>
48 </#if>
49
50
51 <#if (fiCardsData?size > 0) >
52 <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)>
53
54 <#if (cardProvider?size > 0)>
55 <#-- This will be V for visa or M for mastercard. -->
56 <#assign cardProviderAbbreviated = cardProvider[0].cardType>
57 <#else>
58 <script>
59 console.log("No card provider(Visa/Master Card) found for disclaimer");
60 </script>
61 </#if>
62
63 <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer">
64 <div class="disclaimer" >
65 <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
66 ${employeeDisclaimersVisa.getData()}
67 <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
68 ${employeeDisclaimersMasterCard.getData()}>
69 <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")>
70 ${disclaimersVisa.getData()}
71 <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") >
72 ${disclaimersMasterCard.getData()}
73 </#if>
74 </div>
75 </div>
76 </#if>
77<#else>
78 <script>
79 console.log("No lc for disclaimer");
80 </script>
81</#if>
حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> qstringmap["bankercode"] [in template "10153#10191#5843861" at line 8, column 17] ---- Tip: It's the final [] step 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: #assign bCode = qstringmap["bankercod... [in template "10153#10191#5843861" at line 8, column 1] ----
1<#assign aDateTime = .now>
2<#assign currentYear = aDateTime?string.yyyy>
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/>
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
6<#assign url404 = '/error/404.html'>
7
8<#assign bCode= qstringmap["bankercode"]?first>
9<#assign bCode = htmlUtil.escape(bCode)>
10<#assign bCode = htmlUtil.escapeJS(bCode)>
11
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
13<#list bData as b>
14 <#assign lc = b.locationcode >
15 <#assign rLC = b.reallocationcode >
16 <#assign mappedLC = b.mappedLocationCode >
17</#list>
18
19<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
20 <#assign ameriprise = true>
21<#else>
22 <#assign ameriprise = false>
23</#if>
24<#if mappedLC?has_content && !ameriprise>
25 <#assign lc = mappedLC >
26</#if>
27
28<#if lc?has_content>
29
30 <#assign prefix = "00000" >
31 <#assign lcWithPrefix = prefix + lc >
32 <#assign withPrefixLength = lcWithPrefix?length >
33 <#assign startHere = withPrefixLength - 5>
34 <#assign lc = lcWithPrefix?substring(startHere)>
35<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! >
36 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
37
38 <#assign clientProfile = clientProfileList?first>
39 <#assign pbu = clientProfile.getPbu()>
40 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
41 <#assign partnerName=clientProfile.getMarketingNameLong()>
42 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
43 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
44 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
45 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
46 <#-- add protocal if missing -->
47 <#assign partnerUrl = 'https://' + partnerUrl>
48 </#if>
49 <footer class="footer bg-color-black text-color-white">
50 ${footerContent.getData()}
51 </footer>
52
53 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
54 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
55 <style>
56 #opt-out-button,
57 .modal__btn.learn-more {
58 background: #0C2074;
59 border: 1px solid #0C2074;
60 color: white;
61 text-transform: uppercase;
62 text-decoration: none;
63 font-size: 16px;
64 padding: 0.5rem 2rem;
65 display: inline-block;
66 border-radius: 0;
67 }
68 #opt-out-button:hover,
69 .modal__btn.learn-more:hover {
70 color: white;
71 border-color: #2C76AF !important;
72 background-color: #2C76AF !important;
73 }
74 .modal__btn.learn-more {
75 background: white;
76 border: 1px solid #0C2074;
77 color: #0C2074;
78 }
79 #opt-out-button[disabled="true"] {
80 background-color: rgba(0,0,0,.15);
81 color: rgba(0,0,0,.45);
82 border-color: rgba(0,0,0,.25);
83 }
84 #opt-out-button:hover[disabled="true"] {
85 background-color: rgba(0,0,0,.15) !important;
86 color: rgba(0,0,0,.45) !important;
87 border-color: rgba(0,0,0,.25) !important;
88 }
89 #opt-out-button:focus {
90 outline-style: solid;
91 outline-color: white;
92 outline-offset: -3px;
93 outline-width: 1px;
94 }
95 .opt-out-link svg {
96 width: 30px;
97 height: 14px;
98 width: auto;
99 vertical-align: middle;
100 }
101 .modal__overlay {
102 position: fixed;
103 top: 0;
104 left: 0;
105 right: 0;
106 bottom: 0;
107 background: rgba(0,0,0,0.6);
108 display: flex;
109 justify-content: center;
110 align-items: center;
111 }
112
113 .modal__container {
114 background-color: #fff;
115 padding: 30px;
116 max-width: 500px;
117 max-height: 100vh;
118 border-radius: 4px;
119 overflow-y: auto;
120 box-sizing: border-box;
121 }
122
123 .modal__header {
124 display: flex;
125 justify-content: space-between;
126 align-items: center;
127 }
128
129 .modal__title {
130 margin-top: 0;
131 margin-bottom: 0;
132 font-weight: 600;
133 font-size: 20px;
134 line-height: 1.25;
135 color: #00449e;
136 box-sizing: border-box;
137 }
138
139 .modal__close {
140 background: transparent;
141 border: 1px solid white;
142 padding: 4px 8px;
143 }
144 .modal__close:hover {
145 border: 1px solid black;
146 }
147
148 .modal__header .modal__close:before { content: "\2715"; }
149
150 .modal__content {
151 margin-top: 2rem;
152 margin-bottom: 2rem;
153 line-height: 1.5;
154 }
155
156 @keyframes mmfadeIn {
157 from { opacity: 0; }
158 to { opacity: 1; }
159 }
160
161 @keyframes mmfadeOut {
162 from { opacity: 1; }
163 to { opacity: 0; }
164 }
165
166 @keyframes mmslideIn {
167 from { transform: translateY(15%); }
168 to { transform: translateY(0); }
169 }
170
171 @keyframes mmslideOut {
172 from { transform: translateY(0); }
173 to { transform: translateY(-10%); }
174 }
175
176 .micromodal-slide {
177 display: none;
178 }
179
180 .micromodal-slide.is-open {
181 display: block;
182 }
183
184 .micromodal-slide[aria-hidden="false"] .modal__overlay {
185 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
186 }
187
188 .micromodal-slide[aria-hidden="false"] .modal__container {
189 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
190 }
191
192 .micromodal-slide[aria-hidden="true"] .modal__overlay {
193 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
194 }
195
196 .micromodal-slide[aria-hidden="true"] .modal__container {
197 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
198 }
199
200 .micromodal-slide .modal__container,
201 .micromodal-slide .modal__overlay {
202 will-change: transform;
203 }
204 </style>
205
206 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
207 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
208 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
209 <header class="modal__header">
210 <h2 class="modal__title" id="modal-1-title">
211 Your California privacy choices
212 </h2>
213 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
214 </header>
215 <div class="modal__content" id="modal-1-content">
216 <div id="message-no-cookie">
217 <p>
218 We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p>
219
220 <p> </p>
221
222 <p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p>
223 </div>
224 <div id="message-with-cookie">
225 <p>You have successfully opted-out.</p>
226 </div>
227 </div>
228 <div class="modal__footer">
229 <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>
230 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
231 </div>
232 </div>
233 </div>
234 </div>
235 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
236 <script>
237 const fdicNode = document.querySelector('.footer .fdic');
238 </script>
239 <script>
240 const copyrightNode = document.querySelector('.footer .copyright');
241 if (copyrightNode) {
242 copyrightNode.innerHTML = '<sup>©</sup> Elan Financial Services ' + ${currentYear};
243 }
244
245 </script>
246 <#if url?contains("11t1m")>
247 <script>
248 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
249 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
250 </script>
251 <#else>
252 <script>
253 copyrightNode.classList.add("ecdma-footer-client-name-copyright");
254 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>';
255 var newNode = document.createElement("div");
256 newNode.classList.add("member-agreement");
257 newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>';
258 var parent = fdicNode.parentNode;
259 parent.insertBefore(newNode, fdicNode);
260 </script>
261 </#if>
262
263 <#if partnerUrl?has_content>
264 <script>
265 document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
266 </script>
267 </#if>
268
269 <script>
270 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
271 fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>');
272 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
273 </script>
274 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
275
276 <script>
277 window.getCookieDomain = function() {
278 var hostname = window.location.hostname.split(".");
279 return hostname && hostname.slice(hostname.length - 2).join(".");
280 }
281 window.setToOptOut = function() {
282 if (window.getCookie('privacy_optout')) {
283 document.getElementById('message-no-cookie').style.display = 'none';
284 document.getElementById('message-with-cookie').style.display = 'block';
285 document.getElementById('opt-out-button').setAttribute('disabled', true)
286 } else {
287 document.getElementById('message-no-cookie').style.display = 'block';
288 document.getElementById('message-with-cookie').style.display = 'none';
289 }
290 }
291 window.getCookie = function(name) {
292 var value = '; ' + document.cookie;
293 var parts = value.split('; ' + name + '=');
294 if (parts.length === 2) return parts.pop().split(';').shift();
295 }
296 window.californiaOptOut = function() {
297 if (!window.getCookie('privacy_optout')) {
298 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
299 try {
300 if (window.CustomEvent) {
301 window.dispatchEvent(new CustomEvent('privacy_optout'));
302 } else {
303 var privacyOptoutEvent = document.createEvent('Event');
304 privacyOptoutEvent.initEvent('privacy_optout', true, true);
305 window.dispatchEvent(privacyOptoutEvent);
306 }
307 window.setToOptOut();
308 } catch (err) {
309 console.error(err);
310 }
311 }
312 }
313 MicroModal.init({
314 onShow: window.setToOptOut
315 });
316 AUI().ready(function() {
317 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
318 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
319 if(isBrowserGpcOptOut === true) {
320 window.californiaOptOut();
321 }
322 });
323 </script>
324 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
325
326</#if>