Meu Perfil
Meu Perfil
Título da Página
The following has evaluated to null or missing:
==> autorArticleId [in template "34764#34807#41127" at line 87, column 38]
----
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 autorArticleId != "0" && autorArt... [in template "34764#34807#41127" at line 87, column 33]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
2<#assign UserLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService")>
3<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
4<#assign
5mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")
6 tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")
7 OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")
8>
9
10
11<div class="bioec-profile-demanda-main">
12 <div id="demanda-lista-container" class="d-flex flex-column">
13 <#if entries?has_content>
14 <#list entries as entry>
15 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) >
16 <#assign JournalArticleID = journalArticle.getId()>
17 <#assign JournalArticleFrontId = journalArticle.getArticleId()>
18 <#assign articleXml = journalArticle.getDocument().getRootElement()
19 userIsAdmin = false
20 orgId = ""
21 autorId = ""
22 >
23
24 <#assign nomeParaContato = "">
25
26 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']")??>
27
28 <#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']").getStringValue()!""
29 nomeParaContato = nomeParaContato?replace("\n\t\t", "")
30 nomeParaContato = nomeParaContato?replace("\n\t", "")
31 >
32
33 </#if>
34 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']")??>
35 <#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']").getStringValue()!""
36 telefone = telefone?replace("\n\t\t", "")
37 telefone = telefone?replace("\n\t", "")
38 >
39 </#if>
40
41 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??>
42 <#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!""
43 email = email?replace("\n\t\t", "")
44 email = email?replace("\n\t", "")
45 >
46 </#if>
47
48 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']")??>
49 <#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']").getStringValue()!""
50 desc = desc?replace("\n\t\t", "")
51 desc = desc?replace("\n\t", "")
52 >
53 </#if>
54 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']")??>
55 <#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']").getStringValue()!""
56 imagem = imagem?replace("(\r\n)+", "",'r')
57 imagem = imagem?replace(" ", "",'r')
58 >
59 </#if>
60 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']")??>
61 <#assign
62 autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']").getStringValue()!""
63 autorId = autorId?replace("\n\t\t", "")
64 autorId = autorId?replace("\n\t", "")
65 autorArticleId = ""
66 >
67 </#if>
68 <#assign
69 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
70 >
71
72 <#if autorId != "" && autorId??>
73 <#assign
74 autor = UserLocalService.fetchUser(autorId?number)!""
75 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
76 />
77 <#if autor != "">
78 <#assign autor = autor.getFullName()!"">
79 <#else>
80 <#assign autor = "Anônimo" >
81 </#if>
82 <#else>
83 <#assign autor = "Anônimo" >
84 </#if>
85 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
86 <#assign urlWC = "">
87 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
88 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
89 <#assign urlWC = autorArticle.getUrlTitle()!"">
90 </#if>
91
92 <#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
93 tagName = tags[0]!""
94 orgOrUser = ""
95 >
96
97 <#if tagName?contains("organization") && tagName != "" >
98 <#assign orgOrUser = "org">
99 <#else>
100 <#assign orgOrUser = "user">
101 </#if>
102
103 <#if orgOrUser == "org" >
104
105 <#assign
106 orgId = tagName?keep_after("organization-")
107 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
108 >
109
110
111 <#if organization != "" && autor != "Anônimo">
112
113 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
114 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
115 urlWC = orgJournalArticle.getUrlTitle()!""
116 autor = organization.getName()!""
117 >
118
119 </#if>
120 </#if>
121
122 <#if themeDisplay.isSignedIn() >
123 <#if tagName?contains("organization-")>
124 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
125 <#else>
126 <#if autorId?number == themeDisplay.getUserId()>
127 <script>console.log("oi");</script>
128 <#assign userIsAdmin = true>
129 </#if>
130 </#if>
131
132
133 </#if>
134
135
136
137 <div class="demanda-lista-item">
138
139 <div class="lista-checkmark">
140 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
141 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
142 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
143 </div>
144
145
146 <div class="lista-titulo">
147 <h5>${entry.getHighlightedTitle()}</h5>
148 </div>
149
150 <div class="lista-arrow">
151 <button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}">
152 <i class="fa-solid fa-chevron-down"></i>
153 </button>
154 </div>
155
156 <div class="lista-desc">
157 <p>${desc}</p>
158 </div>
159
160 <div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}">
161 <#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !="">
162 <div class="lista-details">
163 <div class="lista-pic">
164 <i class="fa-solid fa-image-slash"></i>
165 <#if imagem?trim !="" >
166 <img class="bioec_demanda_img" src="${imagem}">
167 <#else>
168 <div class="bioec_demanda_img_placeholder">
169 <i class="fa-solid fa-image"></i>
170 sem imagem
171 </div>
172 </#if>
173 </div>
174 <#if nomeParaContato != "" || telefone != "" || email != "" >
175 <div class="lista-contato">
176 <p>Contato</p>
177 <p class="lista-author">${nomeParaContato}</p>
178 <p class="lista-phone">${telefone}</p>
179 <p class="lista-email">${email}</p>
180 </div>
181 </#if>
182 </div>
183 </#if>
184
185 <#if categorias?seq_contains("recusado") >
186 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
187 <p>Conteúdo Em Análise Pelo Cetiqt:</p>
188 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
189 </div>
190 </#if>
191 <div class="lista-footnote">
192 <div>
193 <span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span>
194 </div>
195 <#if userIsAdmin>
196 <div class="buttonsActions">
197 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalDemanda${JournalArticleID}">
198 <i class="fa-solid fa-edit"></i>
199 </div>
200 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-demanda-${entry.getClassPK()}">
201 <i class="fa-solid fa-trash-can"></i>
202 </div>
203
204 </div>
205 </#if>
206 </div>
207 </div>
208 </div>
209
210 <#if userIsAdmin>
211 <div style="display: none;" id="modal-demanda-${entry.getClassPK()}" class="modal fade" role="dialog">
212 <div class="modal-dialog modal-lg" role="document">
213 <div class="modal-content">
214 <div class="modal-header" >
215 <h4 class="m-0">Remover Demanda</h4>
216 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
217 <span aria-hidden="true">
218 <i class="fa-solid fa-close"></i>
219 </span>
220 </button>
221 </div>
222 <div class="modal-body">
223 <h5>Você tem certeza que deseja remover essa demanda?</h5>
224 <div>
225 Ao clicar em continuar, a demanda será removida do seu perfil.
226 </div>
227 </div>
228 <div class="modal-footer justify-content-end">
229 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
230 <button class="bioec_primary_button" type="button" onclick="excluirDemanda(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
231 </div>
232 </div>
233 </div>
234 </div>
235
236 <#-- modal edição -->
237
238
239 <div style="display: none;" id="modalDemanda${JournalArticleID}" class="modal fade bioec-profile-demanda-modal modalDemanda" role="dialog">
240 <div class="modal-dialog modal-lg" role="document">
241 <form id="formularioDemanda${JournalArticleID}" class="form-group modal-content formularioDemanda">
242 <div id="demandaModal-l1${JournalArticleID}" class="modal-header demandaModal-l1">
243 <h5>Adicionar demanda</h5>
244 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
245 <span aria-hidden="true">×</span>
246 </button>
247 </div>
248 <div id="demandaModal-l2${JournalArticleID}" class="modal-body demandaModal-l2">
249 <div id="demandaTitle${JournalArticleID}" class="demandaTitle">
250 <label class="ReqLabel" for="demandaInputTitle${JournalArticleID}">Título da demanda</label>
251 <input id="demandaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required>
252 </div>
253 <div id="demandaName${JournalArticleID}" class="demandaName">
254 <label class="" for="demandaInputName${JournalArticleID}">Nome para contato</label>
255 <input value="${nomeParaContato}" id="demandaInputName${JournalArticleID}" placeholder="Inserir nome" type="text">
256 </div>
257 <div id="demandaTelephone${JournalArticleID}" class="demandaTelephone">
258 <label class="" for="demandaInputPhone${JournalArticleID}">Telefone para contato</label>
259 <input value="${telefone}" id="demandaInputPhone${JournalArticleID}" name="demandaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14" />
260 </div>
261 <div id="demandaEmail${JournalArticleID}" class="demandaEmail">
262 <label class="" for="demandaInputEmail${JournalArticleID}">E-mail para contato</label>
263 <input value="${email}" id="demandaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text">
264 </div>
265 <div id="demandaDesc${JournalArticleID}" class="demandaDesc">
266 <label class="ReqLabel" for="demandaInputDesc${JournalArticleID}">Descrição</label>
267 <textarea id="demandaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea>
268 </div>
269 <div id="demandaImg${JournalArticleID}" class="demandaImg">
270 <div style="display: flex; flex-direction: column; gap: 8px">
271 <label>Imagem da demanda (Máx. 10 MB)</label>
272 <label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemDemanda${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label>
273 <input class="inputCarregarImagemDemanda" id="inputCarregarImagemDemanda${JournalArticleID}" type="file" accept="image/*" onchange="encodeDemandaImageAsURL${JournalArticleID}(this)">
274 <input class="d-none" id="inputDemandaBase64${JournalArticleID}" value="${imagem}" />
275 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div>
276 <button type="button" id="removerImagemDemanda${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemDemanda" >
277 <i class="fa fa-trash"></i> Remover imagem
278 </button>
279 </div>
280 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div>
281 </div>
282 </div>
283 <div class="TextImportant">
284 <p>
285 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
286 </p>
287 </div>
288
289 <div id="demandaModal-l3${JournalArticleID}" class="modal-footer demandaModal-l3">
290 <button class="btn button-empty" onclick="" id="demandas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button>
291 </div>
292 </form>
293 </div>
294 </div>
295
296 </#if>
297 <#--
298
299
300
301
302 <div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
303 <div class="modal-dialog modal-lg" role="document">
304
305 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
306 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
307 <h5>Adicionar Infraestrutura</h5>
308 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
309 <span aria-hidden="true">×</span>
310 </button>
311 </div>
312 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
313 <div id="infraName${JournalArticleID}" class="infraName">
314 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
315 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
316 </div>
317 <div id="infraModel${JournalArticleID}" class="infraModel">
318 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
319 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
320 </div>
321 <div id="infraBrand${JournalArticleID}" class="infraBrand">
322 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
323 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
324 </div>
325
326 <div id="infraImg${JournalArticleID}" class="infraImg">
327 <div style="display: flex; flex-direction: column; gap: 8px">
328 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
329 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
330 CARREGAR IMAGEM
331 </label>
332 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
333 <input class="d-none" id="inputInfraBase64${JournalArticleID}" />
334 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div>
335 <button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" >
336 <i class="fa fa-trash"></i> Remover imagem
337 </button>
338 </div>
339 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div>
340 </div>
341
342 <div id="infraFunction${JournalArticleID}" class="infraFunction">
343 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
344 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
345 </div>
346 </div>
347 <div class="TextImportant">
348 <p>
349 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
350 </p>
351 </div>
352 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
353 <button class="bioec_secondary_button" id="demandas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button>
354 </div>
355 </form>
356
357 </div>
358
359
360 -->
361
362
363
364 <script>
365 <#if userIsAdmin>
366 function excluirDemanda(wcId, orgId) {
367 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
368 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/" + wcId, {
369 method: 'DELETE',
370 "headers": {
371 "x-csrf-token": Liferay.authToken,
372 "Content-Type": "application/json"
373 }
374 })
375 .then(res => {
376 if(res.status == 200) {
377 Liferay.Util.openToast({
378 message: "Infraestrutura excluida com sucesso",
379 type: "success",
380 title: "",
381 toastProps: {
382 autoClose: 5000
383 }
384 })
385 setTimeout(function(){ location.reload(); }, 2000)
386 } else {
387 Liferay.Util.openToast({
388 message: "Erro ao excluir infraestrutura",
389 type: "danger",
390 title: "",
391 toastProps: {
392 autoClose: 5000
393 }
394 })
395 }
396 });
397 }
398
399
400
401
402 function validImageSize(base64="") {
403 const decoded = atob(base64.substring(base64.indexOf(',') + 1));
404 const sizeMB = decoded.length / 1e+6;
405 console.log("MB: " + decoded.length / 1e+6);
406 if(sizeMB > 10) {
407 Liferay.Util.openToast({
408 message: "O tamanho da imagem não deve ultrapassar 10 MB.",
409 type: "danger",
410 title: "",
411 toastProps: {
412 autoClose: 5000
413 }
414 })
415 return false
416 }
417 return true
418 }
419
420 function encodeDemandaImageAsURL${JournalArticleID}(element) {
421 let file = element.files[0];
422 let reader = new FileReader();
423 reader.onloadend = () => {
424 if(reader.result) {
425 if(!validImageSize(reader.result)) return;
426 try {
427 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
428 base64_input.value = reader.result
429 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
430
431 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
432 removeImageButton.classList.remove("d-none")
433 } catch (error) {
434 console.error(error)
435 }
436 }
437 }
438 reader.readAsDataURL(file);
439 }
440
441 function removeImageDemanda${JournalArticleID}() {
442 try {
443 const file_input = document.getElementById("inputCarregarImagemDemanda${JournalArticleID}")
444 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
445 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
446 file_input.value = null
447 base64_input.value = ""
448
449 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
450 removeImageButton.classList.add("d-none")
451 } catch (error) {
452 console.error(error)
453 }
454}
455
456
457document.getElementById("removerImagemDemanda${JournalArticleID}").addEventListener("click", removeImageDemanda${JournalArticleID});
458
459<#-- Rest da edição de organização -->
460
461<#if orgOrUser == "org">
462document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
463 event.preventDefault();
464 adicionarDemanda${JournalArticleID}();
465});
466
467function adicionarDemanda${JournalArticleID}() {
468 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
469 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
470
471
472
473 const demandaData = {
474 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
475 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
476 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
477 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
478 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
479 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
480 }
481
482 console.log(demandaData);
483
484 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
485 method: 'PUT',
486 "headers": {
487 "x-csrf-token": Liferay.authToken,
488 "Content-Type": "application/json"
489 },
490 body: JSON.stringify(demandaData)
491 })
492 .then(res => {
493 if(res.status == 200) {
494 Liferay.Util.openToast({
495 message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
496 type: "success",
497 title: "",
498 toastProps: {
499 autoClose: 5000
500 }
501 })
502 setTimeout(function(){ location.reload(); }, 2000);
503 } else {
504 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
505 Liferay.Util.openToast({
506 message: "Erro ao editada demanda",
507 type: "danger",
508 title: "",
509 toastProps: {
510 autoClose: 5000
511 }
512 })
513 }
514 })
515
516 }
517</#if>
518
519<#-- Rest da edição de pessoa fisica -->
520
521
522 <#if orgOrUser == "user">
523
524 document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
525 event.preventDefault();
526 adicionarDemanda${JournalArticleID}();
527 });
528
529 function adicionarDemanda${JournalArticleID}() {
530 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
531 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
532
533 const demandaData = {
534 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
535 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
536 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
537 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
538 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
539 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
540 }
541
542 console.log(demandaData);
543
544 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
545 method: 'PUT',
546 "headers": {
547 "x-csrf-token": Liferay.authToken,
548 "Content-Type": "application/json"
549 },
550 body: JSON.stringify(demandaData)
551 })
552 .then( res => {
553 if(res.status == 200) {
554 Liferay.Util.openToast({
555 message: "Demanda editada com sucesso. Após a submissão, será iniciado o processo interno de aprovação do conteúdo enviado. Só então o conteúdo submetido aparecerá no portal.",
556 type: "success",
557 title: "",
558 toastProps: {
559 autoClose: 5000
560 }
561 })
562 setTimeout(function(){ location.reload(); }, 2000);
563 } else {
564 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
565 Liferay.Util.openToast({
566 message: "Erro ao editar Demanda",
567 type: "danger",
568 title: "",
569 toastProps: {
570 autoClose: 5000
571 }
572 })
573 }
574 });
575
576 };
577
578
579 </#if>
580
581
582 </#if>
583 </script>
584
585
586
587
588 </#list>
589 </#if>
590 </div>
591</div>
592
593<style>
594.bioec_demanda_img {
595 overflow: hidden;
596 background-size: contain;
597 background-position: center;
598 background-repeat: no-repeat;
599}
600
601.bioec_demanda_img_placeholder {
602 width: 140px;
603 height: 140px;
604 background-color: #E8ECEF;
605 display: flex;
606 flex-direction: column;
607 align-items: center;
608 justify-content: center;
609 font-size: 14px;
610 color: #5B5C61;
611}
612
613.bioec_demanda_img_placeholder i {
614 font-size: 44px;
615}
616
617
618.pagination-items-per-page.active > a,
619.pagination-items-per-page.active > button,
620.pagination-items-per-page.show > a,
621.pagination-items-per-page.show > button,
622.page-item.active .page-link,
623.page-item.show .page-link{
624 border-color: #4ECD66;
625 background-color: #4ECD66;
626}
627
628.pagination-results,
629.pagination-items-per-page > a,
630.pagination-items-per-page > button,
631.pagination-items-per-page > a:hover,
632.pagination-items-per-page > button:hover,
633.page-link{
634 color: #4ebe66;
635}
636
637.bioec-profile-demanda-main{
638 display: flex;
639 gap: 40px;
640 flex-direction: column;
641 padding-bottom: 20px;
642}
643.bioec-profile-demanda-main h5{
644 font-weight: 700;
645}
646.bioec-profile-demanda-main h5, .bioec-profile-demanda-main p{
647 color: #5B5C61;
648 margin-bottom: 0px;
649 font-size: 16px;
650
651}
652
653.bioec-profile-demanda-main #demanda-lista-container>div{
654 border: 1px #BEBEBE solid;
655 padding: 24px 24px 0 24px;
656 margin-bottom: 40px;
657 display: grid;
658 grid-row-gap: 24px;
659 grid-template-columns: 24px 12px 1fr 15px;
660 grid-template-areas:
661 "ck . tit arrw"
662 "desc desc desc desc"
663 "clps clps clps clps";
664}
665
666.bioec-profile-demanda-main .lista-checkmark { grid-area: ck; display: flex; }
667.bioec-profile-demanda-main .lista-checkmark i { font-size: 24px; }
668.bioec-profile-demanda-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
669.bioec-profile-demanda-main .lista-arrow { grid-area: arrw; }
670
671.bioec-profile-demanda-main .lista-titulo {
672 grid-area: tit;
673 display: flex;
674 flex-direction: column;
675 justify-content: center;
676
677}
678
679.bioec-profile-demanda-main .lista-titulo h5{
680 margin-bottom: 0px;
681}
682
683.bioec-profile-demanda-main .lista-desc {
684grid-area: desc;
685}
686
687.bioec-profile-demanda-main .lista-desc p{
688 margin: 0;
689}
690
691.bioec-profile-demanda-main a{
692 color: #5B5C61;
693}
694
695.demanda-port{
696 border: 1px #BEBEBE solid;
697 padding: 24px;
698 display: flex;
699 flex-direction: column;
700 align-items: center;
701 gap: 24px;
702}
703
704.demanda-port p{
705text-align: center;
706
707}
708
709.demanda-port div{
710display: flex;
711 justify-content: space-between;
712 width: min(558px, 100%);
713}
714
715.button-empty {
716border: solid 1px #4ECD66;
717padding: 8px 24px;
718color: #333244;
719 transition: 250ms;
720}
721
722.button-empty:hover{
723 background-color: #4ECD66;
724}
725
726.button-filled {
727background-color: #4ECD66;
728border: solid 1px #4ECD66;
729padding: 8px 24px;
730color: #333244;
731transition: 250ms;
732
733}
734
735.button-filled:hover{
736 background-color: transparent;
737}
738
739.bioec-profile-demanda-main .lista-footnote {
740
741 display: flex;
742 justify-content: space-between;
743 border-top: 1px solid #E8ECEF;
744 padding-top: 12px;
745 font-size: 14px;
746 font-weight: 300;
747 gap: 15px;
748 color: #5B5C61;
749
750}
751.lista-collapse{
752display: flex;
753flex-direction: column;
754gap: 24px;
755grid-area: clps;
756padding-bottom: 24px;
757}
758
759 .lista-details{
760 display: flex;
761 justify-content: flex-start;
762 gap: 24px;
763}
764.lista-pic img {
765 max-height: 138px;
766 max-width: 138px;
767}
768
769.bioec-profile-demanda-main p{
770
771}
772
773.imagemCarregadaDemanda {
774 height: 100px;
775 width: 100px;
776 background-size: contain;
777 background-position: center;
778 background-repeat: no-repeat;
779}
780
781
782.ButtonAddDemanda {
783 background: #4ECD66;
784 border-radius: 8px;
785 padding: 8px 24px;
786 border: none;
787 font-weight: 700;
788 color: #333244;
789 font-family: 'Roboto';
790 float: right;
791 text-transform: uppercase;
792}
793.ButtonAddDemanda:hover{
794 color: #333244;
795 text-decoration: none;
796}
797
798.bioec-profile-demanda-modal label {
799 margin: 0;
800 cursor: default;
801 font-size: 20px;
802 font-weight: 700;
803 color: #5B5C61;
804}
805
806.bioec-profile-demanda-modal div {
807 width: 100%;
808}
809
810#demandaModal-l1, .demandaModal-l1 {
811 padding: 18px 24px;
812 display: flex;
813 justify-content: space-between;
814}
815
816#demandaModal-l1 img, .demandaModal-l1 img {
817 cursor: pointer;
818}
819
820#demandaModal-l1 h5, .demandaModal-l1 h5 {
821 margin: 0;
822 font-size: 20px;
823 font-weight: 700;
824 color: #5B5C61;
825}
826
827#demandaModal-l2, .demandaModal-l2 {
828 border-top: 1px solid #E8ECEF;
829 display: grid;
830 grid-template-columns: 1fr 1fr;
831 grid-template-areas:
832 "titu nome"
833 "fone mail"
834 "desc desc"
835 "imagem ."
836 ;
837 column-gap: 24px;
838 row-gap: 40px;
839 padding: 24px;
840}
841
842#demandaModal-l2>div, .demandaModal-l2>div {
843 display: flex;
844 flex-direction: column;
845 gap: 8px;
846}
847
848#demandaTitle, .demandaTitle {
849 grid-area: titu;
850}
851
852#demandaName, .demandaName {
853 grid-area: nome;
854}
855
856#demandaTelephone, .demandaTelephone {
857 grid-area: fone;
858}
859
860#demandaEmail, .demandaEmail {
861 grid-area: mail;
862}
863
864#demandaBrand, .demandaBrand {
865 grid-area: marca;
866}
867
868#demandaModal-l2>#demandaImg, .demandaModal-l2>.demandaImg {
869 grid-area: imagem;
870 display: flex;
871 flex-direction: column;
872}
873
874#demandaDesc, .demandaDesc {
875 grid-area: desc;
876
877}
878
879#demandaDesc input, .demandaDesc input {
880 height: 80px;
881}
882
883.TextImportant{
884 border-bottom: 1px solid #E8ECEF;
885 padding: 24px;
886 color: #5B5C61;
887}
888
889.bioec-profile-demanda-modal input[type="text"] {
890 border-top: none;
891 border-left: none;
892 border-right: none;
893 border-bottom: 1px solid #BEBEBE;
894 width: 100%;
895 font-size: 16px;
896
897}
898
899
900.bioec-profile-demanda-modal input[type="text"]:focus-visible {
901 outline: none;
902 border-bottom: 1px solid black;
903
904}
905
906.bioec-profile-demanda-modal .ReqLabel:before {
907 content: "* ";
908 color: #D90000;
909
910}
911
912#inputCarregarImagemDemanda, .inputCarregarImagemDemanda {
913 display: none;
914}
915
916#carregarImagem, .carregarImagem {
917 padding: 8px 24px;
918 border: 1px solid #4ECD66;
919 width: fit-content;
920 transition: 250ms;
921
922}
923
924#carregarImagem:hover, .carregarImagem:hover {
925 background-color: #4ECD66;
926}
927
928.button-empty {
929 border: solid 1px #4ECD66;
930 padding: 8px 24px;
931 color: #333244;
932 transition: 250ms;
933 font-weight: bold;
934}
935
936.button-empty:hover {
937 background-color: #4ECD66;
938}
939
940.button-filled {
941 background-color: #4ECD66;
942 border: solid 1px #4ECD66;
943 padding: 8px 24px;
944 color: #333244;
945 transition: 250ms;
946 font-weight: bold;
947}
948
949.button-filled:hover {
950 background-color: transparent;
951}
952
953#demandaModal-l3, .demandaModal-l3 {
954 gap: 24px;
955 display: flex;
956 justify-content: flex-end;
957 padding: 24px;
958}
959
960.modal {
961 padding: initial !important;
962 border-radius: 4px !important;
963
964}
965
966.modal a.close-modal {
967 display: none;
968}
969
970#removerImagemDemanda, .removerImagemDemanda {
971 background: none;
972 border: none;
973 outline: none;
974 color: #5B5C61;
975 font-size: 16px;
976 font-weight: 900;
977 line-height: 24px;
978 letter-spacing: 0em;
979 width: fit-content;
980 margin-left: 16px;
981}
982
983
984@media(max-width: 964px){
985 .lista-pic img {
986 width: 100%;
987 max-height: unset;
988 max-width: unset;
989
990 }
991}
992
993@media (max-width: 550px) {
994 #demandaModal-l2, .demandaModal-l2 {
995 display: flex;
996 flex-direction: column;
997 }
998
999 #demandaModal-l3, .demandaModal-l3 {
1000 display: flex;
1001 flex-direction: column;
1002 }
1003}
1004
1005@media(max-width: 450px){
1006 .bioec-profile-demanda-main .lista-details{
1007 flex-direction: column;
1008 }
1009
1010 .lista-contato{
1011 text-align: center;
1012 }
1013
1014 .bioec-profile-demanda-main .lista-footnote{
1015 flex-direction: column;
1016 gap: 10px;
1017 align-items: flex-end;
1018 text-align: right;
1019 }
1020}
1021
1022@media(max-width: 992px){
1023 #demanda-lista-container {
1024 padding-inline: 15px;
1025 }
1026}
1027
1028.bioec-profile-demanda-main .lista-footnote .buttonsActions {
1029 display: flex;
1030 gap: 17px;
1031}
1032
1033@media (max-width: 768px) {
1034 .bioec-profile-demanda-main .lista-desc {
1035 gap: 24px;
1036 flex-direction: column-reverse;
1037 }
1038 .bioec-profile-demanda-main .lista-footnote {
1039 flex-direction: column;
1040 align-items: center;
1041 }
1042 .bioec-profile-demanda-main .lista-footnote > div {
1043 text-align: center;
1044 }
1045
1046 .bioec-profile-demanda-main .lista-footnote .barra-pipe {
1047 display: none;
1048 }
1049 .bioec-profile-demanda-main .lista-footnote .lista-author {
1050 display: flex;
1051 gap: 4px;
1052 justify-content: center;
1053 }
1054 .bioec-profile-demanda-main .lista-footnote .buttonsActions {
1055 width: 100%;
1056 justify-content: space-between;
1057 }
1058}
1059
1060
1061</style>
1062
1063
1064<script>
1065
1066
1067
1068</script>
Moinho úmido de cisalhamento
Redução do tamanho de partícula de materiais sólidos.
Contato
gisi_analitica@cetiqt.senai.br
Análise térmica - TGA/DSC
Determinação do perfil térmico dos materiais através do aquecimento em taxa controlada e sob atmosfera conhecida de modo a conhecer as temperaturas de degradação, fusão, perda de água, etc dos materiais subetidos à esta análise, determinando o percentual de perda de massa em cada etapa.
Contato
gisi_analitica@cetiqt.senai.br
Análise de teor de Nitrogênio Kjeldahl
Determinação de teor de proteína através da quantificação de nitrogênio pelo método de Kjeldahl.
Contato
gisi_analitica@cetiqt.senai.br
Análise térmica - Ponto de fulgor
Determinação do ponto de fulgor de materiais líquidos.
Contato
gisi_analitica@cetiqt.senai.br
Análise elementar
Identificação e quantificação dos teores dos elementos C, H, N, S e O através da combustão da amostra. É possível realizar a medição de amostras sólidas e líquidas.
Contato
gisi_analitica@cetiqt.senai.br
Análise térmica - Ponto de fusão
Determinação do ponto de fusão de materiais sólidos.
Contato
gisi_analitica@cetiqt.senai.br
Caracterização de sólidos - Espectrômetro de Difração de Raios X (DRX)
Determinação da estrutura cristalográfica de materiais sólidos e grau de cristalinidade.
Contato
gisi_analitica@cetiqt.senai.br
Caracterização de sólidos - Espectrômetro de Fluorescência de Raios X
Identificação e quantificação de elementos metálicos presentes em amostras diversas. Capacidade para leitura do sódio ao urânio.
Contato
gisi_analitica@cetiqt.senai.br
Caraterização de sólidos - BET
Análise da estrutura porosa de materiais sólidos determinando parâmetros como diâmetro de poros, volume de poros e área superficial.
Contato
gisi_analitica@cetiqt.senai.br
Cromatografia GC-FID-BID-TCD
Análise de moléculas voláteis ou volatilizáveis através de cromatografia gasosa. Compostos como diesel, ácidos graxos, terpenos e produtos naturais, farmacêuticos e desenvolvimento de metodologias para análises diversas sob consulta.
Contato
gisi_analitica@cetiqt.senai.br
Cromatografia GC-MS
Análise de moléculas voláteis ou volatilizáveis através de cromatografia gasosa. Compostos como diesel, ácidos graxos, terpenos e produtos naturais, farmacêuticos e desenvolvimento de metodologias para análises diversas sob consulta com identificação através de espectrometria de massas e comparação com uma biblioteca interna de dados espectrográficos.
Contato
gisi_analitica@cetiqt.senai.br
Cromatografia APC/GPC
Análise de polímeros sintéticos solúveis em solventes orgânicos para análise de distribuição de tamanho de cadeia e peso molecular.
Contato
gisi_analitica@cetiqt.senai.br
HPLC-MS
Análise de carboidratos, ácidos orgânicos, moléculas derivadas de lignina, corantes, antioxidantes, farmacêuticos, intermediários químicos e desenvolvimento de metodologias para análise diversas sob consulta
Contato
gisi_analitica@cetiqt.senai.br
Investigação em Materiais Têxteis
Análises de microscopia (óptica, MEV e Força Atômica), análises de defeitos ocasionados no processo produtivo. Identificar os defeitos através de análises microscópicas e sugerir soluções para o problema.
Contato
(07)03093-2219
rbergamini@cetiqt.senai.br
Otimização de produtos - Tecidos Planos
Produção de protótipos de tecido plano. Utilizar os teares planos da planta piloto de tecelagem do Instituto SENAI de Inovação para produzir protótipos em escala piloto com 50 cm de largura.
Contato
(07)03093-2219
rbergamini@cetiqt.senai.br
Produção de Fibras Sintéticas
Produzir novas fibras sintéticas (polipropileno, poliéster, poliamida, etc.), aditivadas ou não, por fiação por fusão através do uso da extrusora localizada na Planta Piloto de Fibras Químicas do Instituto de Inovação. Podem ser produzidas multi ou monofilamentos contínuos com morfologias monocomponentes ou bicomponetes (núcleo/casca, lado a lado, ilhas no oceano e fatias segmentadas).
Contato
(07)03093-2219
rbergamini@cetiqt.senai.br
Identificação de produtos químicos têxteis
Identificar, através de técnicas analíticas (cromatografia, FTIR, XRF, etc.), os componentes químicos presentes nos produtos utilizados pela indústria têxtil, como: amaciantes, detergentes, espessantes, dentre outros.
Contato
(21)99308-4506
rbergamini@cetiqt.senai.br
Análises antivirais em têxteis
Analisar a atividade antiviral em materiais têxteis utilizando as cepas dos vírus do Sarampo em laboratório NB2 e da COVID-19 em laboratório NB3, através da norma ISO 18184, em parceria com a FIOCRUZ.
Contato
(21)99308-4506
rbergamini@cetiqt.senai.br
Reciclagem de materiais têxteis
Reciclar materiais têxteis através de processos físicos e/ou químicos. Serviço de reciclagem de resíduos têxteis através de processos físicos (desfibragem) e/ou químicos para produção de novos fios e tecidos (economia circular).
Contato
(21)99308-4506
rbergamini@cetiqt.senai.br
Tingimento de materias têxteis
Realizar tingimento em fios, tecidos naturais, sintéticos ou misturas, em escala piloto, pelos processos de esgotamento ou impregnação. Serviço de tingimento de materiais têxteis (fios, tecidos planos ou malhas) naturais, sintéticos ou misturas, em escala piloto, através dos processos contínuos ou descontímuos. Processos como: pad-batch, pad steam, pad dry, dentre outros.
Contato
(21)99308-4506
rbergamini@cetiqt.senai.br