Enfermagem - Editora Senac São Paulo
Saúde
Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") [in template "20102#20129#43698982" at line 6, column 27]
----
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 productService = serviceLocat... [in template "20102#20129#43698982" at line 6, column 1]
----
1<#setting locale="pt_BR">
2
3<#assign commerceOrderLocalService = serviceLocator.findService("com.liferay.commerce.service.CommerceOrderLocalService")>
4<#assign contentHelper = serviceLocator.findService("com.liferay.commerce.product.content.util.CPContentHelper") />
5<#assign definitionHelper = serviceLocator.findService("com.liferay.commerce.product.util.CPDefinitionHelper") />
6<#assign productService = serviceLocator.findService("br.senac.sp.editora.services.service.ProductService") />
7<#assign userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")>
8<#assign warehouseService = serviceLocator.findService("com.liferay.commerce.inventory.service.CommerceInventoryWarehouseItemLocalService") />
9
10<#assign companyId = userLocalService.getUser(themeDisplay.getUserId()).getCompanyId() />
11
12<div class="container">
13 <div class="row resultado">
14 <#if entries?has_content>
15 <#list entries as curCPCatalogEntry>
16 <#assign friendlyURL = definitionHelper.getFriendlyURL(curCPCatalogEntry.getCPDefinitionId(),themeDisplay)>
17 <div class="col-md-3 col-xs-12 itemContainerResultado">
18 <div class="itemContainerResultado-content">
19 <a href="${friendlyURL}">
20 <#assign cpMedia = contentHelper.getImages(curCPCatalogEntry.getCPDefinitionId(), themeDisplay) />
21 <#list cpMedia as media>
22 <img src="${media.getURL()}"/>
23 <#break>
24 </#list>
25 </a>
26 <div class="infoProdutoResultado">
27 <div class="infoSuperiores">
28 <a href="${friendlyURL}">
29 <div class="tituloProdutoResultado">
30 <#if curCPCatalogEntry.name?length > 0 >
31 ${curCPCatalogEntry.name?truncate(60, '...')}
32 </#if>
33 </div>
34 <div class="tituloAutorResultado">
35 <#list contentHelper.getCategorizedCPDefinitionSpecificationOptionValues(curCPCatalogEntry.getCPDefinitionId(),43620166) as specs>
36 <#if specs.CPSpecificationOptionId == 43594743>
37 ${specs.getValueCurrentValue()?truncate(45, '...')}
38 <#break>
39 </#if>
40 </#list>
41 </div>
42 </a>
43 </div>
44
45 <div class="valorResultado">
46 <@liferay_commerce_ui["price"]
47 CPCatalogEntry=curCPCatalogEntry
48 />
49 </div>
50 <div class="divEspiarResultado">
51 <#if productService.isAvailable( curCPCatalogEntry.getCPDefinitionId() ) && warehouseService.getStockQuantity(companyId,curCPCatalogEntry.CPSkus[0].getSku()) gt 0 >
52 <span class="comprarResultado">
53 <#assign PortalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] />
54 <#assign id = "add-to-cart" + PortalUtil.generateRandomKey(request, "add-to-cart") + "" + curCPCatalogEntry.CPSkus[0].getSku() />
55 <@liferay_commerce_ui["add-to-cart"]
56 CPInstanceId=curCPCatalogEntry.CPSkus[0].getCPInstanceId()
57 id=id
58 />
59 </span>
60 <#else>
61 <span class="comprarCarrossel4">
62 <button class="btnIndisponivelEspecialCarrossel4" disabled>Livro Indisponível</button>
63 </span>
64 </#if>
65 </div>
66 </div>
67 </div>
68 </div>
69 </#list>
70 </#if>
71 </div>
72</div>
73
74<style>
75
76 .comprarResultado div.form-group {
77 display: none;
78 }
79 .comprarResultado {
80 margin-top: 0px;
81 }
82 span.price-value-final {
83 color: #D2691E;
84 }
85 .price-value {
86 font-size: .8rem !important;
87 }
88 .price-value-final {
89 font-size: 1rem !important;
90 }
91 .valorResultado span.product-price {
92 font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-bold) var(--unnamed-font-size-18)/var(--unnamed-line-spacing-17) var(--unnamed-font-family-montserrat);
93 letter-spacing: var(--unnamed-character-spacing-0);
94 color: var(--unnamed-color-f6921e);
95 text-align: left;
96 font: normal bold 18px/17px Montserrat;
97 letter-spacing: 0px;
98 color: #F6921E;
99 opacity: 1;
100 font-weight: 600;
101 float: left;
102 clear: left;
103 }
104
105 .valorResultado span.product-price::before {
106 content: attr(data-content);
107 font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-12)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat);
108 letter-spacing: var(--unnamed-character-spacing-0);
109 color: var(--unnamed-color-454f63);
110 text-align: left;
111 font-weight: 200;
112 letter-spacing: 0px;
113 color: #454F63;
114 }
115
116 .btnIndisponivelEspecialCarrossel4 {
117 border-radius: 4px;
118 width: 206px;
119 padding: 1px;
120 margin-top: 0.75rem !important;
121 }
122
123 .valorResultado span.product-promo-price {
124 float: left;
125 font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-14)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat);
126 letter-spacing: var(--unnamed-character-spacing-0);
127 color: var(--unnamed-color-454f63);
128 text-align: left;
129 text-decoration: line-through;
130 font-weight: 200;
131 letter-spacing: 0px;
132 color: #454F63;
133 }
134
135 .valorResultado span.product-promo-price::before {
136 content: "De: ";
137 font: var(--unnamed-font-style-normal) normal var(--unnamed-font-weight-medium) var(--unnamed-font-size-12)/var(--unnamed-line-spacing-22) var(--unnamed-font-family-montserrat);
138 letter-spacing: var(--unnamed-character-spacing-0);
139 color: var(--unnamed-color-454f63);
140 text-align: left;
141 font-weight: 200;
142 letter-spacing: 0px;
143 color: #454F63;
144 }
145
146 .valorResultado span.commerce-discount{
147 display: none;
148 }
149
150 .comprarResultado .add-to-cart-quantity-marker.active {
151 opacity: 0;
152 display: none;
153 }
154
155 .comprarResultado form.quantity-selector {
156 display: none;
157 }
158
159 .comprarResultado button.btn.btn-primary {
160 background-color: #5ACC75;
161 width: 206px;
162 padding: 1px;
163 justify-content: center;
164 padding-left: 13%;
165 }
166
167 a.dropdown-toggle.page-link {
168 display: none;
169 }
170
171 @media (max-width: 767px){
172 .btnIndisponivelEspecialCarrossel4 {
173 width: calc(100vw - 150px);
174 }
175
176 .comprarResultado button.btn.btn-primary.btn-lg.btn-add-to-cart.btn-add-to-cart-inline{
177 width: calc(100vw - 150px);
178 padding-left: 5%;
179 height: 30px;
180 }
181 .comprarCarrossel4 {
182
183 margin-top: -8px;
184 }
185
186 .page-item.active .page-link, .nav-underline .tab.active a.page-item .page-link{
187 color:#FFFFFF;
188 font-weight: 600;
189 background-color: #F6921E;
190 }
191
192 .valorResultado span.product-price {
193 font: normal normal bold 16px/17px Montserrat;
194 }
195 .valorResultado span.product-promo-price {
196 font: normal normal nomal 15px/16px Montserrat;
197 }
198 .pagination-items-per-page{
199 display : none;
200 }
201 .pagination-results{
202 font-size: 12px !important;
203 font-weight: 500 !important;
204 }
205
206 .page-item.active .page-link, .nav-underline .tab.active a.page-item .page-link{
207 color:#FFFFFF;
208 font-weight: 600;
209 background-color: #F6921E;
210 }
211
212 }
213
214</style>
215
216<script>
217
218 if (typeof promoPrice !== 'undefined') {
219 promoPrice = document.getElementsByClassName("price");
220 }
221 else {
222 promoPrice = document.getElementsByClassName("price");
223 }
224
225 for (let i = 0; i < document.getElementsByClassName("price").length; i++) {
226 let carrossel = document.getElementsByClassName("price");
227 if(carrossel[i].children.length < 5) {
228 carrossel[i].children[0].innerText = "Por:"
229 carrossel[i].children[1].style.color = "#D2691E"
230 carrossel[i].children[1].style.marginLeft = ".5rem"
231 carrossel[i].style.marginTop = "24px"
232 }
233 else if (carrossel[i].children.length > 7){
234 carrossel[i].children[0].innerHTML = "<del>De:</del>"
235 carrossel[i].children[0].style.color = "#78849e"
236 carrossel[i].children[1].classList.remove("price-value-inactive")
237 let priceBefore = carrossel[i].children[1].innerText
238 carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>'
239 carrossel[i].children[1].style.color = "#78849e"
240
241 carrossel[i].children[2].style.display = "none"
242 carrossel[i].children[3].style.display = "none"
243 carrossel[i].children[4].innerText = "Por:"
244 carrossel[i].children[5].style.display = "none"
245 carrossel[i].children[6].style.display = "none"
246 carrossel[i].children[7].style.color = "#D2691E"
247 carrossel[i].children[7].style.marginLeft = ".5rem"
248 carrossel[i].style.marginTop = "10px"
249 }
250 else {
251 carrossel[i].children[0].innerHTML = "<del>De:</del>"
252 carrossel[i].children[0].style.color = "#78849e"
253 carrossel[i].children[1].classList.remove("price-value-inactive")
254 let priceBefore = carrossel[i].children[1].innerText
255 carrossel[i].children[1].innerHTML = '<del>'+priceBefore+'</del>'
256 carrossel[i].children[1].style.color = "#78849e"
257 carrossel[i].children[2].style.display = "none"
258 carrossel[i].children[3].style.display = "none"
259 carrossel[i].children[4].innerText = "Por:"
260 carrossel[i].children[5].style.color = "#D2691E"
261 carrossel[i].children[5].style.marginLeft = ".5rem"
262 carrossel[i].style.marginTop = "10px"
263 }
264 }
265
266 $(function(){
267 if(screen.width < 768){
268 var paginacao = $("[class*='pagination-results']").text()
269 paginacao = paginacao.split(' ');
270 console.log(paginacao);
271 $("[class*='pagination-results']").html(paginacao[0]+' '+paginacao[1]+' - '+paginacao[3]+' '+paginacao[4]+' '+paginacao[5]+' livros');
272 }
273 });
274
275 function atualizarCarrinho(){
276 var menu = $('.ssp-mega-menu__wrapper')
277 menu.id = "eds-ssp-mega-menu-wrapper"
278 $("#eds-ssp-mega-menu-wrapper" ).load(window.location.href + " #eds-ssp-mega-menu-wrapper" );
279 }
280
281 function criarCarrinhoEPostCartItem(cpInstanceId, cpDefinitionId, bodyCart){
282 var urlCreateCart = "${themeDisplay.getURLPortal()}/o/headless-commerce-delivery-cart/v1.0/channels/23978336/carts"
283
284 $.ajax({
285 contentType: "application/json",
286 headers: {
287 "x-csrf-token": Liferay.authToken,
288 "accept": "application/json"
289 },
290 method: "POST",
291 url: urlCreateCart,
292 data: JSON.stringify(bodyCart),
293
294 success: function( data ){
295 postCartItem(cpInstanceId, cpDefinitionId, data)
296 }
297 })
298 }
299
300 function postCartItem(cpInstanceId, cpDefinitionId, carrinho){
301 cartId = carrinho.id
302
303 var url2 = "${themeDisplay.getURLPortal()}/o/headless-commerce-delivery-cart/v1.0/carts/"+ cartId + "/items"
304
305 var body = {
306 "productId": cpDefinitionId,
307 "quantity": 1,
308 "skuId": cpInstanceId
309 }
310
311
312 $.ajax({
313 contentType: "application/json",
314 headers: {
315 "x-csrf-token": Liferay.authToken,
316 "accept": "application/json"
317 },
318 method: "POST",
319 url: url2,
320 data: JSON.stringify(body),
321
322 success: function( data ){
323 atualizarCarrinho()
324 }
325 })
326 }
327
328
329 function addCartItem(cpInstanceId, cpDefinitionId){
330 cpDefinitionId += 1
331 var accountId = 0
332 var carrinho = null
333
334 var url1 = "${themeDisplay.getURLPortal()}/o/headless-commerce-delivery-cart/v1.0/channels/23978336/carts"
335
336 var urlCreateCart = "${themeDisplay.getURLPortal()}/o/headless-commerce-delivery-cart/v1.0/channels/23978336/carts"
337
338 var userId = Liferay.ThemeDisplay.getUserId()
339
340 var bodyCart = {
341 "accountId": accountId,
342 "currencyCode": "BRL"
343 }
344
345 Liferay.Service('/commerce.commerceaccount/get-personal-commerce-account',
346 {
347 userId: userId
348 },
349 function(obj) {
350 accountId = obj.commerceAccountId
351 bodyCart.accountId = accountId
352 }
353 );
354
355 $.ajax({
356 contentType: "application/json",
357 headers: {
358 "x-csrf-token": Liferay.authToken,
359 "accept": "application/json"
360 },
361 method: "GET",
362 url: url1,
363
364 success: function( data ){
365 for(var i = 0; i < data.items.length; i++){
366 if(data.items[i].accountId == accountId){
367 carrinho = data.items[i]
368 break
369 }
370
371 }
372 if(carrinho == null || carrinho == undefined){
373 criarCarrinhoEPostCartItem(cpInstanceId, cpDefinitionId, bodyCart)
374 }
375 else{
376 postCartItem(cpInstanceId, cpDefinitionId,carrinho)
377 }
378 }
379 })
380 }
381</script>
QUER FICAR POR DENTRO DE PROMOÇÕES E NOVIDADES?