Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing:
==> bankercode [in template "10154#10192#154171928" at line 42, column 6]
----
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: #if bankercode?starts_with("amp") && ... [in template "10154#10192#154171928" at line 42, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
2<#assign url404 = '/error/404.html' >
3<#assign oadURL = propsUtil.get('elan.oad.url') >
4<#assign url = themeDisplay.getURLCurrent() >
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>
6
7<#if qstringmap["ecid"]?has_content>
8 <#assign ecidExt="&ecid="+qstringmap["ecid"]?first>
9<#else>
10 <#assign ecidExt="">
11</#if>
12
13<#if qstringmap["bankercode"]?has_content>
14 <#assign bankercode= qstringmap["bankercode"]?first>
15
16 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bankercode)>
17 <#if fiData?first?has_content>
18 <#assign fi = fiData?first>
19 <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))>
20 <#assign subbu_special = fi.offerId>
21 </#if>
22 </#if>
23
24 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bankercode)>
25 <#list bData as b>
26 <#assign rLC = b.reallocationcode >
27 <#assign lc = b.locationcode >
28 <#assign mappedLC = b.mappedLocationCode >
29 </#list>
30<#else>
31 <script>
32 console.log("MainProductBcode missing");
33 //location.href = '${url404}';
34 </script>
35</#if>
36
37<#if url?contains('11t1')>
38 <#assign tier = '11t1'>
39<#elseif url?contains('11t2')>
40 <#assign tier = '11t2'>
41</#if>
42<#if bankercode?starts_with("amp") && (url?contains("11t1m"))>
43 <#assign ameriprise = true>
44<#else>
45 <#assign ameriprise = false>
46</#if>
47<#if ameriprise>
48 <#assign tier = '11t1m'>
49</#if>
50<#assign environment = url?replace('/${tier}.*','','r')>
51
52
53<#if mappedLC?has_content && !ameriprise>
54 <#assign lc = mappedLC >
55</#if>
56
57<#if lc?has_content>
58 <#assign prefix = "00000" >
59 <#assign lcWithPrefix = prefix + lc >
60 <#assign withPrefixLength = lcWithPrefix?length >
61 <#assign startHere = withPrefixLength - 5>
62 <#assign lc = lcWithPrefix?substring(startHere)>
63 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
64 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
65
66 <#assign clientProfile = clientProfileList?first>
67 <#assign partnerName = clientProfile.getMarketingNameLong()>
68 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
69 <#assign cdnLogoUrl = propsUtil.get('rackspace.cdn.web.url')>
70 <#assign pbu = clientProfile.getPbu()>
71 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
72 <script>
73 console.log('pbu', '${pbu!''}');
74 console.log('subbu', '${subbu!''}');
75 </script>
76 <#assign optoutData = utilServ.makeCall('crc_DDCSAAOptOut',pbu+'&'+subbu)>
77 <#if (optoutData?size == 0)>
78 <#if (subbu_special?has_content)>
79 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
80 <script>
81 console.log('new subbu', '${subbu_special!''}');
82 </script>
83 <#else>
84 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
85 </#if>
86
87 <#if (fiCardsData?size > 0)>
88 <#assign temp = []>
89 <#assign offerTypeList = []>
90 <#assign index = 0>
91 <#list fiCardsData as fib>
92 <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>
93 <#assign offerTypeList = offerTypeList + [fib.offerType]>
94 <#assign temp = temp + fiCardsData[index..index]>
95 </#if>
96 <#assign index = index + 1>
97 </#list>
98 <#assign fiCardsData = temp>
99 <#if !(fiCardsData?size > 0)>
100 <script>
101 console.log("empty card/offerType List");
102 //location.href = '${url404}';
103 </script>
104 </#if>
105 <#if ameriprise>
106 <#assign lc_used = mappedLC>
107 <#else>
108 <#assign lc_used = lc>
109 </#if>
110 <div class="content-container content-container-main" title="${partnerName!''}">
111 <header class="jn-header">
112 <div>
113 <a href="${environment}/${tier}/index?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}"><< Back to Overview</a>
114 </div>
115 <div>
116 <#if url?contains("11t2")>
117 <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}">
118 </#if>
119 <div class="styled-select slate">
120 <select>
121 <#list fiCardsData as fib>
122 <#if ameriprise>
123 <#if (fib.offerType=="101")>
124 <#assign productURL="premier-visa-signature">
125 <#assign productName="Ameriprise Premier Visa Signature">
126 <#elseif (fib.offerType=="103")>
127 <#assign productURL = "visa-signature">
128 <#assign productName = "Ameriprise Visa Signature">
129 </#if>
130 <#else>
131 <#if (fib.offerType=="108" || fib.offerType=="109")>
132 <#assign productURL="consumer-platinum2103">
133 <#assign productName="Platinum Card">
134 <#elseif (fib.offerType=="104")>
135 <#assign productURL = "max-cash">
136 <#assign productName = "Max Cash Preferred Card">
137 <#elseif (fib.offerType=="101" || fib.offerType=="103")>
138 <#assign productURL = "real-rewards">
139 <#assign productName = "Real Rewards Card">
140 <#elseif fib.offerType == "115">
141 <#assign productURL = "secured">
142 <#assign productName = "Secured Card" >
143 <#elseif fib.offerType == "144">
144 <#assign productURL = "smart-business-rewards">
145 <#assign productName = "Smart Business Rewards Card" >
146 <#elseif fib.offerType == "128">
147 <#assign productURL = "business-cashback">
148 <#assign productName = "Business Cash Card" >
149 <#elseif fib.offerType == "143">
150 <#assign productURL = "business-real-rewards">
151 <#assign productName = "Business Real Rewards Card" >
152 <#elseif fib.offerType == "121">
153 <#assign productURL = "business-platinum2103">
154 <#assign productName = "Business Card" >
155 </#if>
156 </#if>
157 <#if url?matches(".*/${productURL}.*")>
158 <option value="${environment}/${tier}/${productURL}?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}" selected="selected">${productName}</option>
159 <#else>
160 <option value="${environment}/${tier}/${productURL}?bankercode=${bankercode}&ecdma-lc=${lc_used}${ecidExt}">${productName}</option>
161 </#if>
162
163 </#list>
164 </select>
165 </div>
166 </div>
167 </header>
168 </div>
169 <script>
170 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
171 var partnerName = "${partnerName!0}";
172 var metaDesc = "";
173 switch (page) {
174 case "consumer-platinum2103":
175 document.title = "The purchasing power of Zero | "+partnerName+" Platinum Card";
176 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.";
177 break;
178 case "max-cash":
179 document.title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card";
180 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select";
181 break;
182 case "real-rewards":
183 document.title = "Sign up and earn bonus points | "+partnerName+" Real Rewards Card";
184 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase.";
185 break;
186 case "secured":
187 document.title = "Strengthen your finances | "+partnerName+" Secured Card";
188 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit.";
189 break;
190 case "smart-business-rewards":
191 document.title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card";
192 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.";
193 break;
194 case "business-cashback":
195 document.title = "Flexible rewards for your business | "+partnerName+" Business Cash Card";
196 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses.";
197 break;
198 case "business-real-rewards":
199 document.title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card";
200 metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ;
201 break;
202 case "business-platinum2103":
203 document.title = "Pay down your other credit card balances faster | "+partnerName+" Business Card";
204 metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles";
205 break;
206 case "premier-visa-signature":
207 document.title = "Exclusively for Ameriprise clients | Ameriprise® Premier Visa Signature® Card";
208 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.";
209 break;
210 case "visa-signature":
211 document.title = "Exclusively for Ameriprise clients | Ameriprise® Visa Signature® Card";
212 metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $250 cash value when deposited into an eligible Ameriprise account after spending $2,000 in eligible net purchases within the first 90 days of account opening.";
213 break;
214 }
215 if (metaDesc.length > 0) {
216 var m = document.createElement('meta');
217 m.name = 'description';
218 m.content = metaDesc;
219 document.head.appendChild(m);
220 }
221
222 AUI().ready(function () {
223 jQuery('.styled-select select').change(function () {
224 location.href = this.value;
225 });
226 });
227 </script>
228
229 <#else>
230 <script>
231 console.log("FI Cards Data empty");
232 //location.href = '${url404}';
233 </script>
234 </#if>
235 <#else>
236 <script>
237 console.log("FI opt out");
238 //location.href = '${url404}';
239 </script>
240 </#if>
241<#else>
242 <script>
243 console.log("location code empty");
244 //location.href = '${url404}';
245 </script>
246</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing:
==> bCode [in template "10154#10192#154680797" at line 75, column 6]
----
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: #if bCode?starts_with("amp") && (url?... [in template "10154#10192#154680797" at line 75, 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 url404 = '/error/404.html' >
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! />
6<#assign environment = url?replace('/11t1.*','','r')>
7<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' >
8<#assign prcaURL = propsUtil.get('elan.prca.url')>
9<#assign prcaURL_TC = 'https://onboarding.elancreditcard.com/gateway/partner/credit-card/begin?locationCode=XXXXX&offerId=XXXXXXXXXX&page=terms' >
10
11<#-- check bankercode validity -->
12<#assign useprcaValue = "" >
13<#assign applicationType = "saa" >
14<#if qstringmap["bankercode"]?has_content>
15 <#assign bCode= qstringmap["bankercode"]?first>
16
17 <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedApp','0&'+bCode)>
18 <#if fiData?first?has_content>
19 <#assign fi = fiData?first>
20 <#if (fi.projectId == "12" || fi.projectId == "13" || fi.projectId == "14")>
21 <#assign subbu_special = fi.offerId>
22 </#if>
23 </#if>
24 <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
25 <#list bData as b>
26 <#assign lc = b.locationcode >
27 <#assign bName = b.branch >
28 <#assign bPhone = b.businessphone >
29 <#assign boeid = b.oeid?trim>
30 <#assign fName = b.firstname?trim>
31 <#assign lName = b.lastname?trim>
32 <#assign rlc = b.reallocationcode >
33 <#assign mappedLC = b.mappedLocationCode >
34 </#list>
35 <script>
36 console.groupCollapsed("fi data from service call 'crcDDCBankerAssistedAppDetail'");
37 console.log('%clc: ', 'font-weight: bold; color: red;', '${lc}');
38 console.log('bName: ','${bName}')
39 console.log('bPhone: ','${bPhone}')
40 console.log('boeid','${boeid}')
41 console.log('fName: ','${fName}')
42 console.log('lName: ','${lName}')
43 console.log('rlc: ','${rlc}')
44 console.log('mappedLC: ','${mappedLC}')
45 console.groupEnd();
46 </script>
47 <#if qstringmap["ecdma-lc"]?has_content>
48 <#assign lc_url= qstringmap["ecdma-lc"]?first>
49 </#if>
50 <script>
51 console.log('%clc from URL: ', 'font-weight: bold; color: green;', '${lc_url}');
52 </script>
53
54<#else>
55 <script>
56 console.log("MainProductBcode missing");
57 //location.href = '${url404}';
58 </script>
59</#if>
60
61<#assign text_to_apply_source = "vanity url" >
62<#if qstringmap["sms"]?has_content>
63 <#assign sms = 1 >
64 <#assign text_to_apply_source = "sms" >
65</#if>
66<#if qstringmap["qrCode"]?has_content>
67 <#assign text_to_apply_source = "qr code" >
68</#if>
69<#assign campaignId = "" >
70<#assign ecidExt="">
71<#if qstringmap["ecid"]?has_content>
72 <#assign campaignId = qstringmap["ecid"]?first >
73 <#assign ecidExt="&ecid="+qstringmap["ecid"]?first>
74</#if>
75<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
76 <#assign ameriprise = true>
77<#else>
78 <#assign ameriprise = false>
79</#if>
80<#if mappedLC?has_content && !ameriprise>
81<#assign lc = mappedLC >
82</#if>
83
84<#if lc?has_content>
85
86 <#assign firstNameLength = fName?length >
87 <#assign lastNameLength = lName?length >
88 <#if firstNameLength + lastNameLength > 19 >
89 <#if lastNameLength > 18 >
90 <#assign bLName = lName?substring(0,18)>
91 <#else>
92 <#assign bLName = lName>
93 </#if>
94 <#assign maxFirstName = 19 - bLName?length >
95 <#if firstNameLength > maxFirstName >
96 <#assign bFName = fName?substring(0,maxFirstName)>
97 <#else>
98 <#assign bFName = fName>
99 </#if>
100 <#else>
101 <#assign bFName = fName >
102 <#assign bLName = lName >
103 </#if>
104
105
106 <#assign prefix = "00000" >
107 <#assign lcWithPrefix = prefix + lc >
108 <#assign withPrefixLength = lcWithPrefix?length >
109 <#assign startHere = withPrefixLength - 5>
110 <#assign lc = lcWithPrefix?substring(startHere)>
111
112 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
113 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
114
115 <#if clientProfileList?first?has_content>
116 <#assign clientProfile = clientProfileList?first>
117 <#assign partnerName = clientProfile.getMarketingNameLong()>
118 <#assign pbu = clientProfile.getPbu()>
119 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
120
121 <#assign optoutData = utilServ.makeCall('crc_DDCSAAOptOut',pbu+'&'+subbu)>
122 <#if (optoutData?size == 0)>
123 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
124 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
125 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
126 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>
127 <#assign partnerUrl = 'https://' + partnerUrl>
128 </#if>
129 <#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')>
130 <#if (clientdata?size > 0)>
131 <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case>
132 <#assign cdnLogoUrl = propsUtil.get('rackspace.cdn.web.url')>
133 <#list clientdata as data>
134 <#assign billingCycle=data.BillingCycles>
135 </#list>
136 <#if pbu == "0864054">
137 <#assign override = "berkshire">
138 <#else>
139 <#assign override = " ">
140 </#if>
141
142 <#-- this one should be delete for prod -->
143
144 <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">
145 <#assign logoFileName = pbu + "-" + subbu + ".png">
146
147 <#assign cdnCardArtUrl = propsUtil.get('rackspace.cdn.cardart.url')>
148 <#assign pageClass = secondaryBackgroundImage.cardType.getData()>
149
150 <#if (subbu_special?has_content)>
151 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>
152 <#else>
153 <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>
154 </#if>
155
156
157 <#assign temp = []>
158 <#assign offerTypeList = []>
159 <#assign index = 0>
160 <#list fiCardsData as fib>
161 <#assign useprcaValue = fib.useprca!"">
162 <#if !(offerTypeList?seq_contains(fib.offerType))>
163 <#assign offerTypeList = offerTypeList + [fib.offerType]>
164 <#assign temp = temp + fiCardsData[index..index]>
165 </#if>
166 <#assign index = index + 1>
167 </#list>
168 <#assign fiCardsData = temp>
169 <#if (fiCardsData?size > 0)>
170 <#if (subbu_special?has_content)>
171 <#assign lc_used = fiCardsData?first.WebLocationCode>
172 <#else>
173 <#if ameriprise>
174 <#assign lc_used = lc_url>
175 <#else>
176 <#assign lc_used = mappedLC>
177 </#if>
178 </#if>
179
180 <#list fiCardsData as fib>
181 <#if ameriprise>
182 <#if (fib.offerType=="101")>
183 <#assign productURL="premier-visa-signature">
184 <#assign productName="Premier Visa Signature">
185 <#assign productClass="ameriprise-premier-visa-signature">
186 <#elseif (fib.offerType=="103")>
187 <#assign productURL = "visa-signature">
188 <#assign productName = "Visa Signature">
189 <#assign productClass="ameriprise-visa-signature">
190 </#if>
191 <#else>
192 <#if (fib.offerType=="108") || (fib.offerType=="109")>
193 <#assign productURL="consumer-platinum">
194 <#assign productName="Platinum">
195 <#elseif (fib.offerType=="104")>
196 <#assign productURL = "max-cash">
197 <#assign productName="Max Cash Preferred">
198 <#elseif (fib.offerType=="101") || (fib.offerType=="103")>
199 <#assign productURL = "real-rewards">
200 <#assign productName="Real Rewards">
201 <#elseif fib.offerType == "115">
202 <#assign productURL = "secured">
203 <#assign productName="Secured">
204 <#elseif fib.offerType == "144">
205 <#assign productURL = "smart-business-rewards">
206 <#assign productName="Smart Business Rewards">
207 <#elseif fib.offerType == "128">
208 <#assign productURL = "business-cashback">
209 <#assign productName="Business Cash">
210 <#elseif fib.offerType == "143">
211 <#assign productURL = "business-real-rewards">
212 <#assign productName="Business Real Rewards">
213 <#elseif fib.offerType == "121">
214 <#assign productURL = "business-platinum2103">
215 <#assign productName="Business">
216 </#if>
217 </#if>
218 <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">
219 <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">
220 <#assign newSourceCode = fib.sourceCode>
221 <#assign newOfferId = fib.offerId>
222 <#if url?matches(".*/${productURL}.*")>
223 <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)>
224 <#if (sdata?size > 0)>
225 <#if (productURL=="platinum" && !ameriprise)>
226 <#assign apr = "">
227 <#list sdata as d>
228 <#if (d.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases") && (d.scrapedValue?has_content))>
229 <#assign apr = d.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")>
230 <script>
231 console.log("scraped data exists");
232 console.log("APR", '${apr}')
233 </script>
234 <#break>
235 </#if>
236 </#list>
237 <script>
238 $(document).ready(function () {
239 var aprText = "${apr}";
240 if (aprText) {
241 var matches= aprText.match(/\d+(\.\d+)?%?/g);
242 var billing_cycle = "";
243 var apr_min = "";
244 var apr_max = "";
245 if (aprText.indexOf("Platinum:") != -1) {
246 billing_cycle = matches[1];
247 apr_min = matches[2];
248 apr_max = matches[3];
249 }
250 if (billing_cycle) {
251 $(".scraped-billing-cycle").html(billing_cycle);
252 }
253 if (apr_min) {
254 $(".scraped-apr-min").html(apr_min);
255 }
256 if (apr_max) {
257 $('.scraped-apr-max').html(apr_max);
258 }
259 }
260 });
261 </script>
262
263 </#if>
264 <#else>
265 <script>
266 console.log("scraped data missing");
267 </script>
268 </#if>
269 <#if ameriprise>
270 <#assign card_art_alt = partnerName + " " + productName + " " + " Card">
271 <#assign rollover_text = partnerName + " " + productName + " " + "Card">
272 <#else>
273 <#assign card_art_alt = partnerName>
274 <#assign rollover_text = partnerName + " " + productName + " " + " Credit Card">
275 <#assign card_text = productName + " Card">
276 </#if>
277 <div class="hero-container ${pageClass} ${productClass!''}" title="${rollover_text!''}">
278 <div class="hero-main">
279 <div class="hero-main-logo" title="${partnerName!''}">
280 <#if partnerUrl?has_content>
281 <a href="${partnerUrl!''}" title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
282 <#else>
283 <a title="${partnerName!''}"><img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''}"></a>
284 </#if>
285 <div class="hero-main-logo-homelink">
286 <#if ameriprise>
287 <a href="${environment}/11t1m/index?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}">Back to Overview</a>
288 <#else>
289 <a href="${environment}/11t1/index?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}">Back to Overview</a>
290 </#if>
291 </div>
292 </div>
293 <div class="hero-main-container">
294 <div class="hero-main-offer bg-color-white">
295 <div class="offer-header bg-color-black text-color-white text-bold">${primaryHeadlineText.getData()}</div>
296 <div class="offer-detail">
297 <div class="offer-detail-head">${primaryHeadlineFeature.getData()}</div>
298 <div class="offer-detail-text text-color-default">
299 ${primaryHeadlineFeatureTop.getData()}
300 ${primaryHeadlineFeatureBottom.getData()}
301 </div>
302 <div class="offer-detail-cardArt">
303 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
304 <p>${card_text!''}</p>
305 </div>
306 <#if (fiCardsData?size > 0)>
307 <#if (useprcaValue == "1")>
308 <form class="form1" action='${prcaURL}?locationCode=${lc_used}&offerId=${newOfferId}&preparerType=customer&sourceCode=${newSourceCode}&referral=empstore&applicationType=saa' method="post" id="BAAForm">
309 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
310 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
311 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
312 </form>
313 <#else>
314 <form class="form1" action='${oadURL}?locationCode=${lc_used}&offerId=${newOfferId}&preparerType=customer&sourceCode=${newSourceCode}&referral=empstore&applicationType=saa' method="post" id="BAAForm">
315 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
316 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
317 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
318 </form>
319 </#if>
320 <#else>
321 <#if (useprcaValue == "1")>
322 <form class="form2" action='${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&sourceCode=${sourceCode}&applicationType=${applicationType}' method="post" id="BAAForm">
323 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
324 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
325 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
326 </form>
327 <#else>
328 <form class="form2" action='${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=customer&sourceCode=${sourceCode}' method="post" id="BAAForm">
329 <label for="appDataBAA" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label>
330 <textarea rows="20" cols="100" name="applicationData" id="appDataBAA" style="display:none;"></textarea>
331 <input type="submit" data-button-name="cta-button-top" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button apply-button text-bold button-bg-color-custom text-color-white" value="${ctaText.getData()}" disabled />
332 </form>
333 </#if>
334 </#if>
335 </div>
336 </div>
337 </div>
338 </div>
339 <div class="hero-primary-benefits bg-color-black-half-transparent text-color-white">
340 <#if secondaryFeatureText.getData() != "">
341 <#foreach item in secondaryFeatureText.getSiblings()>
342 <div class="primary-benefit">
343 <#assign newDataPB = item.getData() >
344 <#if (newDataPB?contains("https://apply.elancreditcard.com/oad/terms.controller?"))>
345 <#assign tcLink = prcaURL_TC?replace("XXXXXXXXXX", fib.offerId)?replace("XXXXX", mappedLC) >
346 <#assign startPhrase = "href=" >
347 <#assign posHrefStart = newDataPB?index_of(startPhrase) + startPhrase?length>
348 <#assign endPhrase = "target=" >
349 <#assign posHrefEnd = newDataPB?index_of(endPhrase) + startPhrase?length - endPhrase?length>
350 <#assign posHrefLen = newDataPB?length - 1>
351 <#assign currentHrefVal = newDataPB[posHrefStart..posHrefEnd]>
352 <#assign newDataPB = newDataPB?replace(currentHrefVal, tcLink)>
353 </#if>
354 <div class="primary-benefit-wrapper text-color-white">
355 ${newDataPB}
356 </div>
357 </div>
358 </#foreach>
359 </#if>
360 </div>
361 </div>
362 <div class="standard-content-container" title="${rollover_text!''}">
363 <h2 class="learnmore text-color-custom text-bold" onclick="learnmore(event)">
364 LEARN MORE
365 <svg viewBox="0 0 150 100" width="45" height="30">
366 <polyline points="40 40 80 80 120 38" stroke-width="20"
367 stroke-linecap="butt" fill="none" stroke-linejoin="miter"/>
368 </svg>
369 </h2>
370 <h2 class="text-bold" id="more">${secondaryHeadlineText.getData()}</h2>
371 <div class="secondary-benefits">
372 <div class="option">
373 <#assign newData = additionalInfoGroupA.getData() >
374 <#if (newData?contains("https://apply.elancreditcard.com/oad/terms.controller?"))>
375 <#assign tcLink = prcaURL_TC?replace("XXXXXXXXXX", fib.offerId)?replace("XXXXX", mappedLC) >
376 <#assign startPhrase = "href=" >
377 <#assign posHrefStart = newData?index_of(startPhrase) + startPhrase?length>
378 <#assign endPhrase = "target=" >
379 <#assign posHrefEnd = newData?index_of(endPhrase) + startPhrase?length - endPhrase?length>
380 <#assign posHrefLen = newData?length - 1>
381 <#assign currentHrefVal = newData[posHrefStart..posHrefEnd]>
382 <#assign newData = newData?replace(currentHrefVal, tcLink)>
383 </#if>
384 ${newData}
385 <#if pbu != "0892445">
386 <#if (sdata?size > 0)>
387 <div>
388
389 <#if (fib.offerType == "104") >
390
391 <#list sdata as d>
392 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
393
394 <h3 class="text-color-custom"><strong>APR<sup>*</sup> for Purchases:</strong></h3>
395 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
396 </p>
397 <#break>
398 </#if>
399 </#list>
400 <#list sdata as d>
401 <#if (d.scrapedLabel?contains("APR for Balance Transfers") && (d.scrapedValue?has_content))>
402
403 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
404 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
405 </p>
406
407 <#break>
408 </#if>
409 </#list>
410 <#else>
411
412 <#if (fib.offerType == "115" || fib.offerType == "123")>
413 <h3 class="text-color-custom"><strong>APR for Purchases and Balance Transfers</strong></h3>
414 <#elseif (fib.offerType=="128" || fib.offerType=="143")>
415 <h3 class="text-color-custom"><strong>Annual Fee</strong></h3>
416 <#else>
417 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
418 </#if>
419 <#list sdata as d>
420 <#if (fib.offerType=="128" || fib.offerType=="143") >
421 <#if (d.scrapedLabel?contains("Annual Membership Fee") && (d.scrapedValue?has_content))>
422 <#if (fiCardsData?size > 0)>
423 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
424 class="text-color-default" target="_blank">Terms & Conditions</a>
425 </p>
426
427 <#else>
428 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
429 class="text-color-default" target="_blank">Terms & Conditions</a>
430 </p>
431 </#if>
432 <#break>
433 </#if>
434
435 <#else>
436 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
437
438 <#if (fiCardsData?size > 0)>
439 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
440 </p>
441 <#else>
442 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
443 </p>
444 </#if>
445 <#break>
446 </#if>
447 </#if>
448 </#list>
449
450 </#if>
451 </div>
452 </#if>
453 </#if>
454 </div>
455 <div class="option">
456 <#assign newData = additionalInfoGroupB.getData() >
457 <#if (newData?contains("https://apply.elancreditcard.com/oad/terms.controller?"))>
458 <#assign tcLink = prcaURL_TC?replace("XXXXXXXXXX", fib.offerId)?replace("XXXXX", mappedLC) >
459 <#assign startPhrase = "href=" >
460 <#assign posHrefStart = newData?index_of(startPhrase) + startPhrase?length>
461 <#assign endPhrase = "target=" >
462 <#assign posHrefEnd = newData?index_of(endPhrase) + startPhrase?length - endPhrase?length>
463 <#assign posHrefLen = newData?length - 1>
464 <#assign currentHrefVal = newData[posHrefStart..posHrefEnd]>
465 <#assign newData = newData?replace(currentHrefVal, tcLink)>
466 </#if>
467 ${newData}
468 <#if pbu != "0892445">
469 <div>
470 <#if (fiCardsData?size > 0)>
471 <#if (sdata?size > 0)>
472 <#if (fib.offerType=="128" || fib.offerType=="143")>
473 <h3 class="text-color-custom"><strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers</strong></h3>
474 <#else>
475 <h3 class="text-color-custom"><strong>Annual Fee</strong></h3>
476 </#if>
477 <#list sdata as d>
478 <#if (fib.offerType=="128" || fib.offerType=="143")>
479 <#if (d.scrapedLabel?contains("Annual Percentage Rate") && (d.scrapedValue?has_content))>
480
481 <#if (fiCardsData?size > 0)>
482 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
483 class="text-color-default" target="_blank">Terms & Conditions</a>
484 </p>
485 <#else>
486 <p>${d.scrapedValue} <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}"
487 class="text-color-default" target="_blank">Terms & Conditions</a>
488 </p>
489 </#if>
490 <#break>
491 </#if>
492 <#else>
493 <#if (d.scrapedLabel?contains("Annual Membership Fee") && (d.scrapedValue?has_content))>
494
495 <#if (fiCardsData?size > 0)>
496 <p>
497 <#if (fib.offerType == "123")>
498 Annual Fee: ${d.scrapedValue}
499 <#else>
500 ${d.scrapedValue}
501 </#if>
502 <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" target="_blank">Terms & Conditions</a>
503 </p>
504 <#else>
505 <p>
506 <#if (fib.offerType == "123")>
507 Annual Fee: ${d.scrapedValue}
508 <#else>
509 ${d.scrapedValue}
510 </#if>
511 <a href="${oadURL_TC}?step=display&offerId=${newOfferId}&locationCode=${lc_used}" class="text-color-default" target="_blank">Terms & Conditions</a>
512 </p>
513 </#if>
514 <#break>
515 </#if>
516 </#if>
517 </#list>
518 </#if>
519 </#if>
520 </div>
521 </#if>
522 </div>
523 </div>
524 </div>
525 <div class="banner-wrapper" title="${rollover_text!''}">
526 <div class="banner bg-color-custom ${override}">
527 <div class="banner-cardArt">
528 <img src="${cardArtImage!''}" alt="${card_art_alt!''}" title="${card_art_alt!''}" srcset="" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">
529 </div>
530 <div class="banner-cta">
531 <div class="banner-cta-text text-color-white text-bold">
532 ${optionalCtaFeatureText.getData()}
533 </div>
534 <a id="oadSecButton" data-button-name="cta-button-bottom" title="Apply Now for ${rollover_text!'Credit Card'}" class="jn-button banner-cta-apply-button text-bold button-bg-color-white text-color-custom">${optionalCtaText.getData()}</a>
535 </div>
536 </div>
537 </div>
538
539
540 </#if>
541 </#list>
542
543 <script>
544 var reportingData = window.reportingData || {};
545 document.addEventListener('DOMContentLoaded', function() {
546 console.log('inside ready');
547 var page = location.pathname.split('/')[location.pathname.split('/').length-1];
548 var hostName = location.hostname;
549
550 function getDomainFromHostname(hostname) {
551 var parts = hostname.split('.');
552 return parts.length === 3 ? parts[1] : parts[0];
553 }
554 var domain = getDomainFromHostname(hostName);
555 var partnerName = "${partnerName!''}";
556
557 var ameriprise = '${ameriprise?string("yes", "no")}';
558 var locationCode = "${rlc!lc}";
559 var eidAmp = "";
560 if (ameriprise == "yes") {
561 var bankercode_amp = '${bCode}';
562 eidAmp = bankercode_amp.substring(3);
563 locationCode ="";
564 }
565
566 $('.jn-button').removeAttr('disabled');
567 $('.jn-button').removeClass('jn-disabled');
568 jQuery('#oadSecButton').on('click', function(e) {
569 jQuery('#BAAForm').submit();
570 });
571
572 jQuery('#BAAForm').on('submit', function(e){
573 e.preventDefault();
574 console.log('in custom submit');
575 var xmlData;
576 if(ameriprise == "yes") {
577 var applicationJsonData = {
578 "prefillData": {
579 "versionNumber": "1.0",
580 "applicationData": {
581 "referral": {
582 "employeeId": eidAmp,
583 "partnerLocationId": "${mappedLC!'0'}"
584 },
585 "partnerParams": {
586 "pudf1": "${bName!'0'}",
587 "pudf3": "${boeid!0}",
588 "pudf2": "${bFName!'0'} ${bLName!'0'}",
589 "pudf4": areaCode + exchangeCode + num
590 }
591 }
592 }
593 }
594 xmlData = JSON.stringify(applicationJsonData);
595 } else {
596 xmlData = '<?xml version="1.0"?>'+
597 "<prefillData>"+
598 "<versionNumber>1.0</versionNumber>"+
599 "<applicationData>"+
600 "<bankerInformation>"+
601 "<locationCode>" + locationCode + "</locationCode>"+
602 "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+
603 "<employeeID>${boeid!0}</employeeID>"+
604 "<name>" +
605 "<first>${bFName!'0'}</first>" +
606 "<last>${bLName!'0'}</last>" +
607 "</name>"+
608 "<phone>"+
609 "<areaCode>"+areaCode+"</areaCode>"+
610 "<exchange>"+exchangeCode+"</exchange>"+
611 "<number>"+num+"</number>"+
612 "</phone>"+
613 "</bankerInformation>"+
614 "</applicationData>"+
615 "</prefillData>"
616 }
617 console.log("useprcaValue---->"+${useprcaValue})
618 if('${useprcaValue}' =='1'){
619
620 var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}";
621 var firstName = "${fName!'0'}".trim();
622 var lastName = "${lName!'0'}".trim();
623 var fullName = employeeFullName.trim();
624
625 if (fullName.length <= 19) {
626 employeeFullName = fullName;
627 } else if (firstName.charAt(0) + ' ' + lastName.length <= 19) {
628 employeeFullName = firstName.charAt(0) + ' ' + lastName;
629 } else {
630 employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 17);
631 }
632 var applicationJsonData = {
633 "prefillData": {
634 "versionNumber": "1.0",
635 "applicationData": {
636 "bankerInformation": {
637 "locationCode": locationCode,
638 "originatingBranchId": "${bName!'0'}",
639 "employeeId": "${boeid!0}",
640 "employeeFullName": employeeFullName,
641 "employeePhoneNumber": phoneNum
642 }
643 }
644 }
645 };
646
647 var jsonData = JSON.stringify(applicationJsonData);
648
649 jQuery('#appDataBAA').val(jsonData);
650 }else{
651 jQuery('#appDataBAA').val(xmlData);
652 }
653
654 var buttonName = jQuery('.jn-button').data('button-name');
655 /* SiteCatalyst onClick tracking */
656 reportingData.apply_button = buttonName;
657 AUI().ready(function() {
658 if (window.publisherFW) {
659 window.publisherFW.publishEvent("onClick", reportingData);
660 }
661 });
662
663 this.submit();
664 });
665 var regex = /\d+/g;
666 var bdNumber = "${bPhone!''}";
667 var phoneNum = bdNumber.match(regex);
668 var areaCode = "";
669 var exchangeCode = "";
670 var num = "";
671 if(phoneNum != null) {
672 phoneNum = phoneNum.join("");
673 areaCode = phoneNum.substring(0,3);
674 exchangeCode = phoneNum.substring(3,6);
675 num = phoneNum.substring(6,10);
676 }
677 var product = "";
678 switch(page) {
679 case "consumer-platinum2103":
680 product="Platinum Card"
681 break;
682 case "real-rewards":
683 product="Real Rewards Card"
684 break;
685 case "secured":
686 product="Secured Card"
687 break;
688 case "business-cashback":
689 product="Business Cash Card"
690 break;
691 case "business-real-rewards":
692 product="Business Real Rewards Card"
693 break;
694 case "business-rewards-plus":
695 product="Business Rewards PLUS Card"
696 break;
697 case "premier-visa-signature":
698 product="Premier Visa Signature Card"
699 break;
700 case "business-platinum2103":
701 product="Business"
702 break;
703 case "visa-signature":
704 product="Visa Signature Card"
705 break;
706 default:
707 product = "All Cards";
708 }
709
710 /* update SiteCatalyst data object */
711 reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' ');
712 reportingData.location_code = '${rlc!0}';
713 reportingData.product = product;
714 reportingData.site_section = 'credit cards';
715 reportingData.platform = 'microsite';
716 reportingData.partner_name = "${partnerName}";
717 reportingData.Banker_id = '${boeid}';
718 reportingData.Banker_code = '${bCode}';
719 reportingData.visitor_type = 'prospect';
720 reportingData.text_to_apply_source = '${text_to_apply_source}';
721 reportingData.page_type = 'product';
722 reportingData.campaign_id = '${campaignId}';
723
724
725 });
726 </script>
727 <script async>
728 function learnmore(e) {
729 e.preventDefault();
730 var element = document.getElementById("more");
731 element.scrollIntoView({behavior: 'smooth'});
732 }
733 </script>
734 <#else>
735 <script>
736 console.log("FI Cards Data empty");
737 //location.href = '${url404}';
738 </script>
739 </#if>
740 <#else>
741 <script>
742 console.log("not Tier1 Fi");
743 //location.href = '${url404}';
744 </script>
745 </#if>
746 <#else>
747 <script>
748 console.log("Fi opt-out");
749 //location.href = '${url404}';
750 </script>
751 </#if>
752 <#else>
753 <script>
754 console.log("client profile empty");
755 //location.href = '${url404}';
756 </script>
757 </#if>
758</#if>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing:
==> qstringmap["bankercode"] [in template "10154#10192#157469122" 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 "10154#10192#157469122" 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 bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)>
7<#list bData as b>
8 <#assign lc = b.locationcode >
9 <#assign rLC = b.reallocationcode >
10 <#assign mappedLC = b.mappedLocationCode >
11</#list>
12<#if mappedLC?has_content && !(url?contains("11t1m"))>
13 <#assign lc = mappedLC >
14</#if>
15<#if lc?has_content>
16 <#assign prefix = "00000" >
17 <#assign lcWithPrefix = prefix + lc >
18 <#assign withPrefixLength = lcWithPrefix?length >
19 <#assign startHere = withPrefixLength - 5>
20 <#assign lc = lcWithPrefix?substring(startHere)>
21 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
22 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
23
24 <#assign clientProfile = clientProfileList?first>
25 <#assign partnerName=clientProfile.getMarketingNameLong()>
26</#if>
27
28<div class="content-container" title="${partnerName!''} - Disclaimer">
29 <div class="jn-disclaimer tier3-disclaimer-${class.getData()}">
30 ${content.getData()}
31 </div>
32</div>
Er trad een fout op tijdens de verwerking van de sjabloon.
The following has evaluated to null or missing:
==> qstringmap["bankercode"] [in template "10154#10192#154187598" at line 6, 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 "10154#10192#154187598" at line 6, 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<#assign url404 = '/error/404.html'>
5
6<#assign bCode= qstringmap["bankercode"]?first>
7<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)>
8<#list bData as b>
9 <#assign lc = b.locationcode >
10 <#assign rLC = b.reallocationcode >
11 <#assign mappedLC = b.mappedLocationCode >
12</#list>
13
14<#if bCode?starts_with("amp") && (url?contains("11t1m"))>
15 <#assign ameriprise = true>
16<#else>
17 <#assign ameriprise = false>
18</#if>
19<#if mappedLC?has_content && !ameriprise>
20 <#assign lc = mappedLC >
21</#if>
22
23<#if lc?has_content>
24
25 <#assign prefix = "00000" >
26 <#assign lcWithPrefix = prefix + lc >
27 <#assign withPrefixLength = lcWithPrefix?length >
28 <#assign startHere = withPrefixLength - 5>
29 <#assign lc = lcWithPrefix?substring(startHere)>
30 <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! />
31 <#assign clientProfileList = clientProfileService.findByLocationCode(lc)>
32
33 <#assign clientProfile = clientProfileList?first>
34 <#assign pbu = clientProfile.getPbu()>
35 <#assign subbu = clientProfile.getSUBBRANDBUNBR()>
36 <#assign partnerName=clientProfile.getMarketingNameLong()>
37 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! />
38 <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)>
39 <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()>
40 <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\://.*")>
41 <#-- add protocal if missing -->
42 <#assign partnerUrl = 'https://' + partnerUrl>
43 </#if>
44
45 <#assign footerHtml = footerContent.getData()?replace("© 2025 Elan Financial Services", "")>
46 <footer class="footer bg-color-black text-color-white">
47 ${footerHtml}
48 </footer>
49
50 <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
51 <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script>
52 <style>
53 #opt-out-button,
54 .modal__btn.learn-more {
55 background: #0C2074;
56 border: 1px solid #0C2074;
57 color: white;
58 text-transform: uppercase;
59 text-decoration: none;
60 font-size: 16px;
61 padding: 0.5rem 2rem;
62 display: inline-block;
63 border-radius: 0;
64 }
65 #opt-out-button:hover,
66 .modal__btn.learn-more:hover {
67 color: white;
68 border-color: #2C76AF !important;
69 background-color: #2C76AF !important;
70 }
71 .modal__btn.learn-more {
72 background: white;
73 border: 1px solid #0C2074;
74 color: #0C2074;
75 }
76 #opt-out-button[disabled="true"] {
77 background-color: rgba(0,0,0,.15);
78 color: rgba(0,0,0,.45);
79 border-color: rgba(0,0,0,.25);
80 }
81 #opt-out-button:hover[disabled="true"] {
82 background-color: rgba(0,0,0,.15) !important;
83 color: rgba(0,0,0,.45) !important;
84 border-color: rgba(0,0,0,.25) !important;
85 }
86 #opt-out-button:focus {
87 outline-style: solid;
88 outline-color: white;
89 outline-offset: -3px;
90 outline-width: 1px;
91 }
92 .opt-out-link svg {
93 width: 30px;
94 height: 14px;
95 width: auto;
96 vertical-align: middle;
97 }
98 .modal__overlay {
99 position: fixed;
100 top: 0;
101 left: 0;
102 right: 0;
103 bottom: 0;
104 background: rgba(0,0,0,0.6);
105 display: flex;
106 justify-content: center;
107 align-items: center;
108 }
109
110 .modal__container {
111 background-color: #fff;
112 padding: 30px;
113 max-width: 500px;
114 max-height: 100vh;
115 border-radius: 4px;
116 overflow-y: auto;
117 box-sizing: border-box;
118 }
119
120 .modal__header {
121 display: flex;
122 justify-content: space-between;
123 align-items: center;
124 }
125
126 .modal__title {
127 margin-top: 0;
128 margin-bottom: 0;
129 font-weight: 600;
130 font-size: 20px;
131 line-height: 1.25;
132 color: #00449e;
133 box-sizing: border-box;
134 }
135
136 .modal__close {
137 background: transparent;
138 border: 1px solid white;
139 padding: 4px 8px;
140 }
141 .modal__close:hover {
142 border: 1px solid black;
143 }
144
145 .modal__header .modal__close:before { content: "\2715"; }
146
147 .modal__content {
148 margin-top: 2rem;
149 margin-bottom: 2rem;
150 line-height: 1.5;
151 }
152
153 @keyframes mmfadeIn {
154 from { opacity: 0; }
155 to { opacity: 1; }
156 }
157
158 @keyframes mmfadeOut {
159 from { opacity: 1; }
160 to { opacity: 0; }
161 }
162
163 @keyframes mmslideIn {
164 from { transform: translateY(15%); }
165 to { transform: translateY(0); }
166 }
167
168 @keyframes mmslideOut {
169 from { transform: translateY(0); }
170 to { transform: translateY(-10%); }
171 }
172
173 .micromodal-slide {
174 display: none;
175 }
176
177 .micromodal-slide.is-open {
178 display: block;
179 }
180
181 .micromodal-slide[aria-hidden="false"] .modal__overlay {
182 animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1);
183 }
184
185 .micromodal-slide[aria-hidden="false"] .modal__container {
186 animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1);
187 }
188
189 .micromodal-slide[aria-hidden="true"] .modal__overlay {
190 animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1);
191 }
192
193 .micromodal-slide[aria-hidden="true"] .modal__container {
194 animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1);
195 }
196
197 .micromodal-slide .modal__container,
198 .micromodal-slide .modal__overlay {
199 will-change: transform;
200 }
201 </style>
202
203 <div class="modal micromodal-slide" id="modal-1" aria-hidden="true">
204 <div class="modal__overlay" tabindex="-1" data-micromodal-close>
205 <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
206 <header class="modal__header">
207 <h2 class="modal__title" id="modal-1-title">
208 Your California privacy choices
209 </h2>
210 <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
211 </header>
212 <div class="modal__content" id="modal-1-content">
213 <div id="message-no-cookie">
214 <p>
215 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>
216
217 <p> </p>
218
219 <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>
220 </div>
221 <div id="message-with-cookie">
222 <p>You have successfully opted-out.</p>
223 </div>
224 </div>
225 <div class="modal__footer">
226 <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>
227 <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button>
228 </div>
229 </div>
230 </div>
231 </div>
232 <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP -->
233 <script>
234 const fdicNode = document.querySelector('.footer .fdic')
235 </script>
236 <#if url?contains("11t1m")>
237 <script>
238 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
239 fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?loc=${lc!0}" target="_blank">Privacy and Security</a>';
240 </script>
241 <#else>
242 <script>
243 document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright");
244 document.querySelector('.footer .fdic').innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?loc=${lc!0}" target="_blank">Privacy and Security</a>';
245 var newNode = document.createElement("div");
246 newNode.classList.add("member-agreement");
247 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>';
248 var parent = fdicNode.parentNode;
249 parent.insertBefore(newNode, fdicNode);
250 </script>
251 </#if>
252
253 <#if partnerUrl?has_content>
254 <script>
255 document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>";
256 </script>
257 </#if>
258 <script>
259 /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */
260 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>');
261 /* END CALIFORNIA OPT-OUT MODAL TRIGGER */
262 </script>
263 <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC -->
264 <script>
265 window.getCookieDomain = function() {
266 var hostname = window.location.hostname.split(".");
267 return hostname && hostname.slice(hostname.length - 2).join(".");
268 }
269 window.setToOptOut = function() {
270 if (window.getCookie('privacy_optout')) {
271 document.getElementById('message-no-cookie').style.display = 'none';
272 document.getElementById('message-with-cookie').style.display = 'block';
273 document.getElementById('opt-out-button').setAttribute('disabled', true)
274 } else {
275 document.getElementById('message-no-cookie').style.display = 'block';
276 document.getElementById('message-with-cookie').style.display = 'none';
277 }
278 }
279 window.getCookie = function(name) {
280 var value = '; ' + document.cookie;
281 var parts = value.split('; ' + name + '=');
282 if (parts.length === 2) return parts.pop().split(';').shift();
283 }
284 window.californiaOptOut = function() {
285 if (!window.getCookie('privacy_optout')) {
286 document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;';
287 try {
288 if (window.CustomEvent) {
289 window.dispatchEvent(new CustomEvent('privacy_optout'));
290 } else {
291 var privacyOptoutEvent = document.createEvent('Event');
292 privacyOptoutEvent.initEvent('privacy_optout', true, true);
293 window.dispatchEvent(privacyOptoutEvent);
294 }
295 window.setToOptOut();
296 } catch (err) {
297 console.error(err);
298 }
299 }
300 }
301 MicroModal.init({
302 onShow: window.setToOptOut
303 });
304 AUI().ready(function() {
305 // user browser setting for Global Privacy Control to opt out of sharing information with third parties
306 const isBrowserGpcOptOut = navigator.globalPrivacyControl;
307 if(isBrowserGpcOptOut === true) {
308 window.californiaOptOut();
309 }
310 });
311 </script>
312 <!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->
313</#if>