Meu Perfil
Meu Perfil
Título da Página
The following has evaluated to null or missing: ==> autorId [in template "34764#34807#41127" at line 71, column 46] ---- 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 autorId != "" && autorId?? [in template "34764#34807#41127" at line 71, column 41] ----
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 >
22
23 <#assign nomeParaContato = "">
24
25 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']")??>
26
27 <#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='Text77253735']").getStringValue()!""
28 nomeParaContato = nomeParaContato?replace("\n\t\t", "")
29 nomeParaContato = nomeParaContato?replace("\n\t", "")
30 >
31
32 </#if>
33 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']")??>
34 <#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text94974146']").getStringValue()!""
35 telefone = telefone?replace("\n\t\t", "")
36 telefone = telefone?replace("\n\t", "")
37 >
38 </#if>
39
40 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??>
41 <#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!""
42 email = email?replace("\n\t\t", "")
43 email = email?replace("\n\t", "")
44 >
45 </#if>
46
47 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']")??>
48 <#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfCopyOfText18267936']").getStringValue()!""
49 desc = desc?replace("\n\t\t", "")
50 desc = desc?replace("\n\t", "")
51 >
52 </#if>
53 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']")??>
54 <#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text97565506']").getStringValue()!""
55 imagem = imagem?replace("(\r\n)+", "",'r')
56 imagem = imagem?replace(" ", "",'r')
57 >
58 </#if>
59 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']")??>
60 <#assign
61 autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='Text99746569']").getStringValue()!""
62 autorId = autorId?replace("\n\t\t", "")
63 autorId = autorId?replace("\n\t", "")
64 autorArticleId = ""
65 >
66 </#if>
67 <#assign
68 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
69 >
70
71 <#if autorId != "" && autorId??>
72 <#assign
73 autor = UserLocalService.fetchUser(autorId?number)!""
74 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
75 />
76 <#if autor != "">
77 <#assign autor = autor.getFullName()!"">
78 <#else>
79 <#assign autor = "Anônimo" >
80 </#if>
81 <#else>
82 <#assign autor = "Anônimo" >
83 </#if>
84 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
85 <#assign urlWC = "">
86 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
87 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
88 <#assign urlWC = autorArticle.getUrlTitle()!"">
89 </#if>
90
91 <#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
92 tagName = tags[0]!""
93 orgOrUser = ""
94 >
95
96 <#if tagName?contains("organization") && tagName != "" >
97 <#assign orgOrUser = "org">
98 <#else>
99 <#assign orgOrUser = "user">
100 </#if>
101
102 <#if orgOrUser == "org" >
103
104 <#assign
105 orgId = tagName?keep_after("organization-")
106 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
107 >
108
109
110 <#if organization != "" && autor != "Anônimo">
111
112 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
113 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
114 urlWC = orgJournalArticle.getUrlTitle()!""
115 autor = organization.getName()!""
116 >
117
118 </#if>
119 </#if>
120
121 <#if themeDisplay.isSignedIn() >
122 <#if tagName?contains("organization-")>
123 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
124 <#else>
125 <#if autorId?number == themeDisplay.getUserId()>
126 <script>console.log("oi");</script>
127 <#assign userIsAdmin = true>
128 </#if>
129 </#if>
130
131
132 </#if>
133
134
135
136 <div class="demanda-lista-item">
137
138 <div class="lista-checkmark">
139 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
140 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
141 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
142 </div>
143
144
145 <div class="lista-titulo">
146 <h5>${entry.getHighlightedTitle()}</h5>
147 </div>
148
149 <div class="lista-arrow">
150 <button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}">
151 <i class="fa-solid fa-chevron-down"></i>
152 </button>
153 </div>
154
155 <div class="lista-desc">
156 <p>${desc}</p>
157 </div>
158
159 <div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}">
160 <#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !="">
161 <div class="lista-details">
162 <div class="lista-pic">
163 <i class="fa-solid fa-image-slash"></i>
164 <#if imagem?trim !="" >
165 <img class="bioec_demanda_img" src="${imagem}">
166 <#else>
167 <div class="bioec_demanda_img_placeholder">
168 <i class="fa-solid fa-image"></i>
169 sem imagem
170 </div>
171 </#if>
172 </div>
173 <#if nomeParaContato != "" || telefone != "" || email != "" >
174 <div class="lista-contato">
175 <p>Contato</p>
176 <p class="lista-author">${nomeParaContato}</p>
177 <p class="lista-phone">${telefone}</p>
178 <p class="lista-email">${email}</p>
179 </div>
180 </#if>
181 </div>
182 </#if>
183
184 <#if categorias?seq_contains("recusado") >
185 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
186 <p>Conteúdo Em Análise Pelo Cetiqt:</p>
187 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
188 </div>
189 </#if>
190 <div class="lista-footnote">
191 <div>
192 <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>
193 </div>
194 <#if userIsAdmin>
195 <div class="buttonsActions">
196 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalDemanda${JournalArticleID}">
197 <i class="fa-solid fa-edit"></i>
198 </div>
199 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-demanda-${entry.getClassPK()}">
200 <i class="fa-solid fa-trash-can"></i>
201 </div>
202
203 </div>
204 </#if>
205 </div>
206 </div>
207 </div>
208
209 <#if userIsAdmin>
210 <div style="display: none;" id="modal-demanda-${entry.getClassPK()}" class="modal fade" role="dialog">
211 <div class="modal-dialog modal-lg" role="document">
212 <div class="modal-content">
213 <div class="modal-header" >
214 <h4 class="m-0">Remover Demanda</h4>
215 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
216 <span aria-hidden="true">
217 <i class="fa-solid fa-close"></i>
218 </span>
219 </button>
220 </div>
221 <div class="modal-body">
222 <h5>Você tem certeza que deseja remover essa demanda?</h5>
223 <div>
224 Ao clicar em continuar, a demanda será removida do seu perfil.
225 </div>
226 </div>
227 <div class="modal-footer justify-content-end">
228 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
229 <button class="bioec_primary_button" type="button" onclick="excluirDemanda(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
230 </div>
231 </div>
232 </div>
233 </div>
234
235 <#-- modal edição -->
236
237
238 <div style="display: none;" id="modalDemanda${JournalArticleID}" class="modal fade bioec-profile-demanda-modal modalDemanda" role="dialog">
239 <div class="modal-dialog modal-lg" role="document">
240 <form id="formularioDemanda${JournalArticleID}" class="form-group modal-content formularioDemanda">
241 <div id="demandaModal-l1${JournalArticleID}" class="modal-header demandaModal-l1">
242 <h5>Adicionar demanda</h5>
243 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
244 <span aria-hidden="true">×</span>
245 </button>
246 </div>
247 <div id="demandaModal-l2${JournalArticleID}" class="modal-body demandaModal-l2">
248 <div id="demandaTitle${JournalArticleID}" class="demandaTitle">
249 <label class="ReqLabel" for="demandaInputTitle${JournalArticleID}">Título da demanda</label>
250 <input id="demandaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required>
251 </div>
252 <div id="demandaName${JournalArticleID}" class="demandaName">
253 <label class="" for="demandaInputName${JournalArticleID}">Nome para contato</label>
254 <input value="${nomeParaContato}" id="demandaInputName${JournalArticleID}" placeholder="Inserir nome" type="text">
255 </div>
256 <div id="demandaTelephone${JournalArticleID}" class="demandaTelephone">
257 <label class="" for="demandaInputPhone${JournalArticleID}">Telefone para contato</label>
258 <input value="${telefone}" id="demandaInputPhone${JournalArticleID}" name="demandaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14" />
259 </div>
260 <div id="demandaEmail${JournalArticleID}" class="demandaEmail">
261 <label class="" for="demandaInputEmail${JournalArticleID}">E-mail para contato</label>
262 <input value="${email}" id="demandaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text">
263 </div>
264 <div id="demandaDesc${JournalArticleID}" class="demandaDesc">
265 <label class="ReqLabel" for="demandaInputDesc${JournalArticleID}">Descrição</label>
266 <textarea id="demandaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea>
267 </div>
268 <div id="demandaImg${JournalArticleID}" class="demandaImg">
269 <div style="display: flex; flex-direction: column; gap: 8px">
270 <label>Imagem da demanda (Máx. 10 MB)</label>
271 <label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemDemanda${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label>
272 <input class="inputCarregarImagemDemanda" id="inputCarregarImagemDemanda${JournalArticleID}" type="file" accept="image/*" onchange="encodeDemandaImageAsURL${JournalArticleID}(this)">
273 <input class="d-none" id="inputDemandaBase64${JournalArticleID}" value="${imagem}" />
274 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div>
275 <button type="button" id="removerImagemDemanda${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemDemanda" >
276 <i class="fa fa-trash"></i> Remover imagem
277 </button>
278 </div>
279 <div class="imagemCarregadaDemanda imagemCarregadaDemanda${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div>
280 </div>
281 </div>
282 <div class="TextImportant">
283 <p>
284 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
285 </p>
286 </div>
287
288 <div id="demandaModal-l3${JournalArticleID}" class="modal-footer demandaModal-l3">
289 <button class="btn button-empty" onclick="" id="demandas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button>
290 </div>
291 </form>
292 </div>
293 </div>
294
295 </#if>
296 <#--
297
298
299
300
301 <div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
302 <div class="modal-dialog modal-lg" role="document">
303
304 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
305 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
306 <h5>Adicionar Infraestrutura</h5>
307 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
308 <span aria-hidden="true">×</span>
309 </button>
310 </div>
311 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
312 <div id="infraName${JournalArticleID}" class="infraName">
313 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
314 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
315 </div>
316 <div id="infraModel${JournalArticleID}" class="infraModel">
317 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
318 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
319 </div>
320 <div id="infraBrand${JournalArticleID}" class="infraBrand">
321 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
322 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
323 </div>
324
325 <div id="infraImg${JournalArticleID}" class="infraImg">
326 <div style="display: flex; flex-direction: column; gap: 8px">
327 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
328 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
329 CARREGAR IMAGEM
330 </label>
331 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
332 <input class="d-none" id="inputInfraBase64${JournalArticleID}" />
333 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div>
334 <button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" >
335 <i class="fa fa-trash"></i> Remover imagem
336 </button>
337 </div>
338 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div>
339 </div>
340
341 <div id="infraFunction${JournalArticleID}" class="infraFunction">
342 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
343 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
344 </div>
345 </div>
346 <div class="TextImportant">
347 <p>
348 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
349 </p>
350 </div>
351 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
352 <button class="bioec_secondary_button" id="demandas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button>
353 </div>
354 </form>
355
356 </div>
357
358
359 -->
360
361
362
363 <script>
364 <#if userIsAdmin>
365 function excluirDemanda(wcId, orgId) {
366 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
367 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/" + wcId, {
368 method: 'DELETE',
369 "headers": {
370 "x-csrf-token": Liferay.authToken,
371 "Content-Type": "application/json"
372 }
373 })
374 .then(res => {
375 if(res.status == 200) {
376 Liferay.Util.openToast({
377 message: "Infraestrutura excluida com sucesso",
378 type: "success",
379 title: "",
380 toastProps: {
381 autoClose: 5000
382 }
383 })
384 setTimeout(function(){ location.reload(); }, 2000)
385 } else {
386 Liferay.Util.openToast({
387 message: "Erro ao excluir infraestrutura",
388 type: "danger",
389 title: "",
390 toastProps: {
391 autoClose: 5000
392 }
393 })
394 }
395 });
396 }
397
398
399
400
401 function validImageSize(base64="") {
402 const decoded = atob(base64.substring(base64.indexOf(',') + 1));
403 const sizeMB = decoded.length / 1e+6;
404 console.log("MB: " + decoded.length / 1e+6);
405 if(sizeMB > 10) {
406 Liferay.Util.openToast({
407 message: "O tamanho da imagem não deve ultrapassar 10 MB.",
408 type: "danger",
409 title: "",
410 toastProps: {
411 autoClose: 5000
412 }
413 })
414 return false
415 }
416 return true
417 }
418
419 function encodeDemandaImageAsURL${JournalArticleID}(element) {
420 let file = element.files[0];
421 let reader = new FileReader();
422 reader.onloadend = () => {
423 if(reader.result) {
424 if(!validImageSize(reader.result)) return;
425 try {
426 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
427 base64_input.value = reader.result
428 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
429
430 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
431 removeImageButton.classList.remove("d-none")
432 } catch (error) {
433 console.error(error)
434 }
435 }
436 }
437 reader.readAsDataURL(file);
438 }
439
440 function removeImageDemanda${JournalArticleID}() {
441 try {
442 const file_input = document.getElementById("inputCarregarImagemDemanda${JournalArticleID}")
443 Array.from(document.getElementsByClassName("imagemCarregadaDemanda${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
444 const base64_input = document.getElementById("inputDemandaBase64${JournalArticleID}")
445 file_input.value = null
446 base64_input.value = ""
447
448 const removeImageButton = document.getElementById("removerImagemDemanda${JournalArticleID}")
449 removeImageButton.classList.add("d-none")
450 } catch (error) {
451 console.error(error)
452 }
453}
454
455
456document.getElementById("removerImagemDemanda${JournalArticleID}").addEventListener("click", removeImageDemanda${JournalArticleID});
457
458<#-- Rest da edição de organização -->
459
460<#if orgOrUser == "org">
461document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
462 event.preventDefault();
463 adicionarDemanda${JournalArticleID}();
464});
465
466function adicionarDemanda${JournalArticleID}() {
467 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
468 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
469
470
471
472 const demandaData = {
473 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
474 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
475 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
476 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
477 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
478 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
479 }
480
481 console.log(demandaData);
482
483 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
484 method: 'PUT',
485 "headers": {
486 "x-csrf-token": Liferay.authToken,
487 "Content-Type": "application/json"
488 },
489 body: JSON.stringify(demandaData)
490 })
491 .then(res => {
492 if(res.status == 200) {
493 Liferay.Util.openToast({
494 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.",
495 type: "success",
496 title: "",
497 toastProps: {
498 autoClose: 5000
499 }
500 })
501 setTimeout(function(){ location.reload(); }, 2000);
502 } else {
503 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
504 Liferay.Util.openToast({
505 message: "Erro ao editada demanda",
506 type: "danger",
507 title: "",
508 toastProps: {
509 autoClose: 5000
510 }
511 })
512 }
513 })
514
515 }
516</#if>
517
518<#-- Rest da edição de pessoa fisica -->
519
520
521 <#if orgOrUser == "user">
522
523 document.querySelector('#formularioDemanda${JournalArticleID}').addEventListener('submit', event => {
524 event.preventDefault();
525 adicionarDemanda${JournalArticleID}();
526 });
527
528 function adicionarDemanda${JournalArticleID}() {
529 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
530 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",true);
531
532 const demandaData = {
533 titulo: document.getElementById("demandaInputTitle${JournalArticleID}").value,
534 nomeContato: document.getElementById("demandaInputName${JournalArticleID}").value,
535 telefoneContato: document.getElementById("demandaInputPhone${JournalArticleID}").value,
536 emailContato: document.getElementById("demandaInputEmail${JournalArticleID}").value,
537 descricao: document.getElementById("demandaInputDesc${JournalArticleID}").value,
538 imagem: document.getElementById("inputDemandaBase64${JournalArticleID}").value,
539 }
540
541 console.log(demandaData);
542
543 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/demanda/${JournalArticleFrontId}", {
544 method: 'PUT',
545 "headers": {
546 "x-csrf-token": Liferay.authToken,
547 "Content-Type": "application/json"
548 },
549 body: JSON.stringify(demandaData)
550 })
551 .then( res => {
552 if(res.status == 200) {
553 Liferay.Util.openToast({
554 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.",
555 type: "success",
556 title: "",
557 toastProps: {
558 autoClose: 5000
559 }
560 })
561 setTimeout(function(){ location.reload(); }, 2000);
562 } else {
563 $("#demandas-saveAndClose${JournalArticleID}").prop("disabled",false);
564 Liferay.Util.openToast({
565 message: "Erro ao editar Demanda",
566 type: "danger",
567 title: "",
568 toastProps: {
569 autoClose: 5000
570 }
571 })
572 }
573 });
574
575 };
576
577
578 </#if>
579
580
581 </#if>
582 </script>
583
584
585
586
587 </#list>
588 </#if>
589 </div>
590</div>
591
592<style>
593.bioec_demanda_img {
594 overflow: hidden;
595 background-size: contain;
596 background-position: center;
597 background-repeat: no-repeat;
598}
599
600.bioec_demanda_img_placeholder {
601 width: 140px;
602 height: 140px;
603 background-color: #E8ECEF;
604 display: flex;
605 flex-direction: column;
606 align-items: center;
607 justify-content: center;
608 font-size: 14px;
609 color: #5B5C61;
610}
611
612.bioec_demanda_img_placeholder i {
613 font-size: 44px;
614}
615
616
617.pagination-items-per-page.active > a,
618.pagination-items-per-page.active > button,
619.pagination-items-per-page.show > a,
620.pagination-items-per-page.show > button,
621.page-item.active .page-link,
622.page-item.show .page-link{
623 border-color: #4ECD66;
624 background-color: #4ECD66;
625}
626
627.pagination-results,
628.pagination-items-per-page > a,
629.pagination-items-per-page > button,
630.pagination-items-per-page > a:hover,
631.pagination-items-per-page > button:hover,
632.page-link{
633 color: #4ebe66;
634}
635
636.bioec-profile-demanda-main{
637 display: flex;
638 gap: 40px;
639 flex-direction: column;
640 padding-bottom: 20px;
641}
642.bioec-profile-demanda-main h5{
643 font-weight: 700;
644}
645.bioec-profile-demanda-main h5, .bioec-profile-demanda-main p{
646 color: #5B5C61;
647 margin-bottom: 0px;
648 font-size: 16px;
649
650}
651
652.bioec-profile-demanda-main #demanda-lista-container>div{
653 border: 1px #BEBEBE solid;
654 padding: 24px 24px 0 24px;
655 margin-bottom: 40px;
656 display: grid;
657 grid-row-gap: 24px;
658 grid-template-columns: 24px 12px 1fr 15px;
659 grid-template-areas:
660 "ck . tit arrw"
661 "desc desc desc desc"
662 "clps clps clps clps";
663}
664
665.bioec-profile-demanda-main .lista-checkmark { grid-area: ck; display: flex; }
666.bioec-profile-demanda-main .lista-checkmark i { font-size: 24px; }
667.bioec-profile-demanda-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
668.bioec-profile-demanda-main .lista-arrow { grid-area: arrw; }
669
670.bioec-profile-demanda-main .lista-titulo {
671 grid-area: tit;
672 display: flex;
673 flex-direction: column;
674 justify-content: center;
675
676}
677
678.bioec-profile-demanda-main .lista-titulo h5{
679 margin-bottom: 0px;
680}
681
682.bioec-profile-demanda-main .lista-desc {
683grid-area: desc;
684}
685
686.bioec-profile-demanda-main .lista-desc p{
687 margin: 0;
688}
689
690.bioec-profile-demanda-main a{
691 color: #5B5C61;
692}
693
694.demanda-port{
695 border: 1px #BEBEBE solid;
696 padding: 24px;
697 display: flex;
698 flex-direction: column;
699 align-items: center;
700 gap: 24px;
701}
702
703.demanda-port p{
704text-align: center;
705
706}
707
708.demanda-port div{
709display: flex;
710 justify-content: space-between;
711 width: min(558px, 100%);
712}
713
714.button-empty {
715border: solid 1px #4ECD66;
716padding: 8px 24px;
717color: #333244;
718 transition: 250ms;
719}
720
721.button-empty:hover{
722 background-color: #4ECD66;
723}
724
725.button-filled {
726background-color: #4ECD66;
727border: solid 1px #4ECD66;
728padding: 8px 24px;
729color: #333244;
730transition: 250ms;
731
732}
733
734.button-filled:hover{
735 background-color: transparent;
736}
737
738.bioec-profile-demanda-main .lista-footnote {
739
740 display: flex;
741 justify-content: space-between;
742 border-top: 1px solid #E8ECEF;
743 padding-top: 12px;
744 font-size: 14px;
745 font-weight: 300;
746 gap: 15px;
747 color: #5B5C61;
748
749}
750.lista-collapse{
751display: flex;
752flex-direction: column;
753gap: 24px;
754grid-area: clps;
755padding-bottom: 24px;
756}
757
758 .lista-details{
759 display: flex;
760 justify-content: flex-start;
761 gap: 24px;
762}
763.lista-pic img {
764 max-height: 138px;
765 max-width: 138px;
766}
767
768.bioec-profile-demanda-main p{
769
770}
771
772.imagemCarregadaDemanda {
773 height: 100px;
774 width: 100px;
775 background-size: contain;
776 background-position: center;
777 background-repeat: no-repeat;
778}
779
780
781.ButtonAddDemanda {
782 background: #4ECD66;
783 border-radius: 8px;
784 padding: 8px 24px;
785 border: none;
786 font-weight: 700;
787 color: #333244;
788 font-family: 'Roboto';
789 float: right;
790 text-transform: uppercase;
791}
792.ButtonAddDemanda:hover{
793 color: #333244;
794 text-decoration: none;
795}
796
797.bioec-profile-demanda-modal label {
798 margin: 0;
799 cursor: default;
800 font-size: 20px;
801 font-weight: 700;
802 color: #5B5C61;
803}
804
805.bioec-profile-demanda-modal div {
806 width: 100%;
807}
808
809#demandaModal-l1, .demandaModal-l1 {
810 padding: 18px 24px;
811 display: flex;
812 justify-content: space-between;
813}
814
815#demandaModal-l1 img, .demandaModal-l1 img {
816 cursor: pointer;
817}
818
819#demandaModal-l1 h5, .demandaModal-l1 h5 {
820 margin: 0;
821 font-size: 20px;
822 font-weight: 700;
823 color: #5B5C61;
824}
825
826#demandaModal-l2, .demandaModal-l2 {
827 border-top: 1px solid #E8ECEF;
828 display: grid;
829 grid-template-columns: 1fr 1fr;
830 grid-template-areas:
831 "titu nome"
832 "fone mail"
833 "desc desc"
834 "imagem ."
835 ;
836 column-gap: 24px;
837 row-gap: 40px;
838 padding: 24px;
839}
840
841#demandaModal-l2>div, .demandaModal-l2>div {
842 display: flex;
843 flex-direction: column;
844 gap: 8px;
845}
846
847#demandaTitle, .demandaTitle {
848 grid-area: titu;
849}
850
851#demandaName, .demandaName {
852 grid-area: nome;
853}
854
855#demandaTelephone, .demandaTelephone {
856 grid-area: fone;
857}
858
859#demandaEmail, .demandaEmail {
860 grid-area: mail;
861}
862
863#demandaBrand, .demandaBrand {
864 grid-area: marca;
865}
866
867#demandaModal-l2>#demandaImg, .demandaModal-l2>.demandaImg {
868 grid-area: imagem;
869 display: flex;
870 flex-direction: column;
871}
872
873#demandaDesc, .demandaDesc {
874 grid-area: desc;
875
876}
877
878#demandaDesc input, .demandaDesc input {
879 height: 80px;
880}
881
882.TextImportant{
883 border-bottom: 1px solid #E8ECEF;
884 padding: 24px;
885 color: #5B5C61;
886}
887
888.bioec-profile-demanda-modal input[type="text"] {
889 border-top: none;
890 border-left: none;
891 border-right: none;
892 border-bottom: 1px solid #BEBEBE;
893 width: 100%;
894 font-size: 16px;
895
896}
897
898
899.bioec-profile-demanda-modal input[type="text"]:focus-visible {
900 outline: none;
901 border-bottom: 1px solid black;
902
903}
904
905.bioec-profile-demanda-modal .ReqLabel:before {
906 content: "* ";
907 color: #D90000;
908
909}
910
911#inputCarregarImagemDemanda, .inputCarregarImagemDemanda {
912 display: none;
913}
914
915#carregarImagem, .carregarImagem {
916 padding: 8px 24px;
917 border: 1px solid #4ECD66;
918 width: fit-content;
919 transition: 250ms;
920
921}
922
923#carregarImagem:hover, .carregarImagem:hover {
924 background-color: #4ECD66;
925}
926
927.button-empty {
928 border: solid 1px #4ECD66;
929 padding: 8px 24px;
930 color: #333244;
931 transition: 250ms;
932 font-weight: bold;
933}
934
935.button-empty:hover {
936 background-color: #4ECD66;
937}
938
939.button-filled {
940 background-color: #4ECD66;
941 border: solid 1px #4ECD66;
942 padding: 8px 24px;
943 color: #333244;
944 transition: 250ms;
945 font-weight: bold;
946}
947
948.button-filled:hover {
949 background-color: transparent;
950}
951
952#demandaModal-l3, .demandaModal-l3 {
953 gap: 24px;
954 display: flex;
955 justify-content: flex-end;
956 padding: 24px;
957}
958
959.modal {
960 padding: initial !important;
961 border-radius: 4px !important;
962
963}
964
965.modal a.close-modal {
966 display: none;
967}
968
969#removerImagemDemanda, .removerImagemDemanda {
970 background: none;
971 border: none;
972 outline: none;
973 color: #5B5C61;
974 font-size: 16px;
975 font-weight: 900;
976 line-height: 24px;
977 letter-spacing: 0em;
978 width: fit-content;
979 margin-left: 16px;
980}
981
982
983@media(max-width: 964px){
984 .lista-pic img {
985 width: 100%;
986 max-height: unset;
987 max-width: unset;
988
989 }
990}
991
992@media (max-width: 550px) {
993 #demandaModal-l2, .demandaModal-l2 {
994 display: flex;
995 flex-direction: column;
996 }
997
998 #demandaModal-l3, .demandaModal-l3 {
999 display: flex;
1000 flex-direction: column;
1001 }
1002}
1003
1004@media(max-width: 450px){
1005 .bioec-profile-demanda-main .lista-details{
1006 flex-direction: column;
1007 }
1008
1009 .lista-contato{
1010 text-align: center;
1011 }
1012
1013 .bioec-profile-demanda-main .lista-footnote{
1014 flex-direction: column;
1015 gap: 10px;
1016 align-items: flex-end;
1017 text-align: right;
1018 }
1019}
1020
1021@media(max-width: 992px){
1022 #demanda-lista-container {
1023 padding-inline: 15px;
1024 }
1025}
1026
1027.bioec-profile-demanda-main .lista-footnote .buttonsActions {
1028 display: flex;
1029 gap: 17px;
1030}
1031
1032@media (max-width: 768px) {
1033 .bioec-profile-demanda-main .lista-desc {
1034 gap: 24px;
1035 flex-direction: column-reverse;
1036 }
1037 .bioec-profile-demanda-main .lista-footnote {
1038 flex-direction: column;
1039 align-items: center;
1040 }
1041 .bioec-profile-demanda-main .lista-footnote > div {
1042 text-align: center;
1043 }
1044
1045 .bioec-profile-demanda-main .lista-footnote .barra-pipe {
1046 display: none;
1047 }
1048 .bioec-profile-demanda-main .lista-footnote .lista-author {
1049 display: flex;
1050 gap: 4px;
1051 justify-content: center;
1052 }
1053 .bioec-profile-demanda-main .lista-footnote .buttonsActions {
1054 width: 100%;
1055 justify-content: space-between;
1056 }
1057}
1058
1059
1060</style>
1061
1062
1063<script>
1064
1065
1066
1067</script>
The following has evaluated to null or missing: ==> autorId [in template "34764#34807#41133" at line 81, column 54] ---- 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 autorId != "" && autorId?? [in template "34764#34807#41133" at line 81, column 49] ----
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 mbMessageLocalService = serviceLocator.findService("com.liferay.message.boards.service.MBMessageLocalService")>
5<#assign OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")
6 tagsLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")
7>
8
9
10
11
12
13
14
15
16<div class="bioec-profile-oferta-main">
17 <div id="oferta-lista-container" class="d-flex flex-column">
18 <#if entries?has_content>
19 <#list entries as entry>
20 <#assign journalArticle = JournalArticleLocalService.getLatestArticle(entry.getClassPK()) >
21 <#assign JournalArticleID = journalArticle.getId()>
22 <#assign JournalArticleFrontId = journalArticle.getArticleId()>
23 <#assign articleXml = journalArticle.getDocument().getRootElement()
24 userIsAdmin = false
25 orgId = ""
26 >
27
28 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']")??>
29
30 <#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto50355704']").getStringValue()!""
31 nomeParaContato = nomeParaContato?replace("\n\t\t", "")
32 nomeParaContato = nomeParaContato?replace("\n\t", "")
33 >
34 </#if>
35
36 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")??>
37 <#assign telefone = articleXml.selectSingleNode("dynamic-element[@field-reference='Text90715721']")!""
38 telefone = telefone.getStringValue()!""
39 telefone = telefone?replace("\n\t\t", "")
40 telefone = telefone?replace("\n\t", "")
41 >
42
43 </#if>
44
45 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']")??>
46 <#assign email = articleXml.selectSingleNode("dynamic-element[@field-reference='Text68569631']").getStringValue()!""
47 email = email?replace("\n\t\t", "")
48 email = email?replace("\n\t", "")
49 >
50 </#if>
51
52
53 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']")??>
54 <#assign desc = articleXml.selectSingleNode("dynamic-element[@field-reference='CopyOfText18267936']").getStringValue()!""
55 desc = desc?replace("\n\t\t", "")
56 desc = desc?replace("\n\t", "")
57 >
58 </#if>
59
60 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']")??>
61 <#assign imagem = articleXml.selectSingleNode("dynamic-element[@field-reference='Text80669990']").getStringValue()!""
62 imagem = imagem?replace("\n\t\t", "")
63 imagem = imagem?replace("\n\t", "")
64 >
65 </#if>
66
67 <#if articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']")??>
68 <#assign autorId = articleXml.selectSingleNode("dynamic-element[@field-reference='CampoDeTexto97452704']").getStringValue()!""
69 autorId = autorId?replace("\n\t\t", "")
70 autorId = autorId?replace("\n\t", "")
71 autorArticleId = ""
72 >
73 </#if>
74
75 <#assign
76 commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0"
77 >
78
79
80
81 <#if autorId != "" && autorId??>
82 <#assign
83 autor = UserLocalService.fetchUser(autorId?number)!""
84 autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0"
85 />
86 <#if autor != "">
87 <#assign autor = autor.getFullName()!"">
88 <#else>
89 <#assign autor = "Anônimo" >
90 </#if>
91 <#else>
92 <#assign autor = "Anônimo" >
93 </#if>
94 <#assign categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" >
95 <#assign urlWC = "">
96
97 <#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo">
98 <#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) >
99 <#assign urlWC = autorArticle.getUrlTitle()!"">
100 </#if>
101
102
103 <#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )
104 tagName = tags[0]!""
105 orgOrUser = ""
106 >
107
108 <#if tagName?contains("organization") && tagName != "" >
109 <#assign orgOrUser = "org">
110 <#else>
111 <#assign orgOrUser = "user">
112 </#if>
113
114 <#if orgOrUser == "org" >
115
116 <#assign
117 orgId = tagName?keep_after("organization-")
118 organization = OrganizationLocalService.fetchOrganization(orgId?number)!""
119 >
120
121
122 <#if organization != "" && autor != "Anônimo">
123 <#assign orgArticleId = organization.getExpandoBridge().getAttribute("journal-article")
124 orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)
125 urlWC = orgJournalArticle.getUrlTitle()!""
126 autor = organization.getName()!""
127 >
128
129 </#if>
130 </#if>
131
132 <#if themeDisplay.isSignedIn() >
133 <#if tagName?contains("organization-")>
134 <#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)>
135 <#else>
136 <#if autorId?number == themeDisplay.getUserId()>
137 <script>console.log("oi");</script>
138 <#assign userIsAdmin = true>
139 </#if>
140 </#if>
141
142
143 </#if>
144
145
146 <div class="oferta-lista-item">
147 <div class="lista-checkmark">
148 <#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if>
149 <#if categorias?seq_contains("pendente") > <i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if>
150 <#if categorias?seq_contains("recusado") > <i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if>
151 </div>
152
153
154 <div class="lista-titulo">
155 <h5>${entry.getHighlightedTitle()}</h5>
156 </div>
157
158 <div class="lista-arrow">
159 <button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}">
160 <i class="fa-solid fa-chevron-down"></i>
161 </button>
162 </div>
163
164 <div class="lista-desc">
165 <p>${desc}</p>
166 </div>
167
168 <div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}">
169 <#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !="">
170 <div class="lista-details">
171 <div class="lista-pic">
172 <i class="fa-solid fa-image-slash"></i>
173 <#if imagem?trim !="" >
174 <img class="bioec_oferta_img" src="${imagem}">
175 <#else>
176 <div class="bioec_oferta_img_placeholder">
177 <i class="fa-solid fa-image"></i>
178 sem imagem
179 </div>
180 </#if>
181 </div>
182 <#if nomeParaContato != "" || telefone != "" || email != "" >
183 <div class="lista-contato">
184 <p>Contato</p>
185 <p class="lista-author">${nomeParaContato}</p>
186 <p class="lista-phone">${telefone}</p>
187 <p class="lista-email">${email}</p>
188 </div>
189 </#if>
190 </div>
191 </#if>
192
193 <#if categorias?seq_contains("recusado") >
194 <div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;">
195 <p>Conteúdo Em Análise Pelo Cetiqt:</p>
196 <p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p>
197 </div>
198 </#if>
199 <div class="lista-footnote">
200 <div>
201 <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>
202 </div>
203 <#if userIsAdmin>
204 <div class="buttonsActions">
205 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalOferta${JournalArticleID}">
206 <i class="fa-solid fa-edit"></i>
207 </div>
208 <div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-oferta-${entry.getClassPK()}">
209 <i class="fa-solid fa-trash-can"></i>
210 </div>
211
212 </div>
213 </#if>
214 </div>
215 </div>
216 </div>
217
218 <#if userIsAdmin>
219 <div style="display: none;" id="modal-oferta-${entry.getClassPK()}" class="modal fade" role="dialog">
220 <div class="modal-dialog modal-lg" role="document">
221 <div class="modal-content">
222 <div class="modal-header" >
223 <h4 class="m-0">Remover Oferta</h4>
224 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
225 <span aria-hidden="true">
226 <i class="fa-solid fa-close"></i>
227 </span>
228 </button>
229 </div>
230 <div class="modal-body">
231 <h5>Você tem certeza que deseja remover essa oferta?</h5>
232 <div>
233 Ao clicar em continuar, a oferta será removida do seu perfil.
234 </div>
235 </div>
236 <div class="modal-footer justify-content-end">
237 <button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button>
238 <button class="bioec_primary_button" type="button" onclick="excluirOferta(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>
239 </div>
240 </div>
241 </div>
242 </div>
243
244 <#-- modal edição -->
245
246
247 <div style="display: none;" id="modalOferta${JournalArticleID}" class="modal fade bioec-profile-oferta-modal modalOferta" role="dialog">
248 <div class="modal-dialog modal-lg" role="document">
249 <form id="formularioOferta${JournalArticleID}" class="form-group modal-content formularioOferta">
250 <div id="ofertaModal-l1${JournalArticleID}" class="modal-header ofertaModal-l1">
251 <h5>Adicionar oferta</h5>
252 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
253 <span aria-hidden="true">×</span>
254 </button>
255 </div>
256 <div id="ofertaModal-l2${JournalArticleID}" class="modal-body ofertaModal-l2">
257 <div id="ofertaTitle${JournalArticleID}" class="ofertaTitle">
258 <label class="ReqLabel" for="ofertaInputTitle${JournalArticleID}">Título da oferta</label>
259 <input id="ofertaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required>
260 </div>
261 <div id="ofertaName${JournalArticleID}" class="ofertaName">
262 <label class="" for="ofertaInputName${JournalArticleID}">Nome para contato</label>
263 <input value="${nomeParaContato}" id="ofertaInputName${JournalArticleID}" placeholder="Inserir nome" type="text">
264 </div>
265 <div id="ofertaTelephone${JournalArticleID}" class="ofertaTelephone">
266 <label class="" for="ofertaInputPhone${JournalArticleID}">Telefone para contato</label>
267 <input value="${telefone}" id="ofertaInputPhone${JournalArticleID}" name="ofertaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14" />
268 </div>
269 <div id="ofertaEmail${JournalArticleID}" class="ofertaEmail">
270 <label class="" for="ofertaInputEmail${JournalArticleID}">E-mail para contato</label>
271 <input value="${email}" id="ofertaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text">
272 </div>
273 <div id="ofertaDesc${JournalArticleID}" class="ofertaDesc">
274 <label class="ReqLabel" for="ofertaInputDesc${JournalArticleID}">Descrição</label>
275 <textarea id="ofertaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea>
276 </div>
277 <div id="ofertaImg${JournalArticleID}" class="ofertaImg">
278 <div style="display: flex; flex-direction: column; gap: 8px">
279 <label>Imagem da oferta (Máx. 10 MB)</label>
280 <label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemOferta${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label>
281 <input class="inputCarregarImagemOferta" id="inputCarregarImagemOferta${JournalArticleID}" type="file" accept="image/*" onchange="encodeOfertaImageAsURL${JournalArticleID}(this)">
282 <input class="d-none" id="inputOfertaBase64${JournalArticleID}" value="${imagem}"/>
283 <div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div>
284 <button type="button" id="removerImagemOferta${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if> removerImagemOferta" >
285 <i class="fa fa-trash"></i> Remover imagem
286 </button>
287 </div>
288 <div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div>
289 </div>
290 </div>
291 <div class="TextImportant">
292 <p>
293 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
294 </p>
295 </div>
296
297 <div id="ofertaModal-l3${JournalArticleID}" class="modal-footer ofertaModal-l3">
298 <button class="btn button-empty" onclick="" id="ofertas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button>
299 </div>
300 </form>
301 </div>
302 </div>
303
304 </#if>
305 <#--
306
307
308
309
310 <div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog">
311 <div class="modal-dialog modal-lg" role="document">
312
313 <form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}">
314 <div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" >
315 <h5>Adicionar Infraestrutura</h5>
316 <button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close">
317 <span aria-hidden="true">×</span>
318 </button>
319 </div>
320 <div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2">
321 <div id="infraName${JournalArticleID}" class="infraName">
322 <label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label>
323 <input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required>
324 </div>
325 <div id="infraModel${JournalArticleID}" class="infraModel">
326 <label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label>
327 <input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required>
328 </div>
329 <div id="infraBrand${JournalArticleID}" class="infraBrand">
330 <label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label>
331 <input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required>
332 </div>
333
334 <div id="infraImg${JournalArticleID}" class="infraImg">
335 <div style="display: flex; flex-direction: column; gap: 8px">
336 <label>Imagem da infraestrutura (Máx. 10 MB)</label>
337 <label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;">
338 CARREGAR IMAGEM
339 </label>
340 <input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)">
341 <input class="d-none" id="inputInfraBase64${JournalArticleID}" />
342 <div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div>
343 <button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" >
344 <i class="fa fa-trash"></i> Remover imagem
345 </button>
346 </div>
347 <div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div>
348 </div>
349
350 <div id="infraFunction${JournalArticleID}" class="infraFunction">
351 <label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label>
352 <input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required>
353 </div>
354 </div>
355 <div class="TextImportant">
356 <p>
357 Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal.
358 </p>
359 </div>
360 <div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3">
361 <button class="bioec_secondary_button" id="ofertas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button>
362 </div>
363 </form>
364
365 </div>
366
367
368 -->
369
370
371
372 <script>
373 <#if userIsAdmin>
374 function excluirOferta(wcId, orgId) {
375 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
376 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/" + wcId, {
377 method: 'DELETE',
378 "headers": {
379 "x-csrf-token": Liferay.authToken,
380 "Content-Type": "application/json"
381 }
382 })
383 .then(res => {
384 if(res.status == 200) {
385 Liferay.Util.openToast({
386 message: "Infraestrutura excluida com sucesso",
387 type: "success",
388 title: "",
389 toastProps: {
390 autoClose: 5000
391 }
392 })
393 setTimeout(function(){ location.reload(); }, 2000)
394 } else {
395 Liferay.Util.openToast({
396 message: "Erro ao excluir infraestrutura",
397 type: "danger",
398 title: "",
399 toastProps: {
400 autoClose: 5000
401 }
402 })
403 }
404 });
405 }
406
407
408
409
410 function validImageSize(base64="") {
411 const decoded = atob(base64.substring(base64.indexOf(',') + 1));
412 const sizeMB = decoded.length / 1e+6;
413 console.log("MB: " + decoded.length / 1e+6);
414 if(sizeMB > 10) {
415 Liferay.Util.openToast({
416 message: "O tamanho da imagem não deve ultrapassar 10 MB.",
417 type: "danger",
418 title: "",
419 toastProps: {
420 autoClose: 5000
421 }
422 })
423 return false
424 }
425 return true
426 }
427
428 function encodeOfertaImageAsURL${JournalArticleID}(element) {
429 let file = element.files[0];
430 let reader = new FileReader();
431 reader.onloadend = () => {
432 if(reader.result) {
433 if(!validImageSize(reader.result)) return;
434 try {
435 const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}")
436 base64_input.value = reader.result
437 Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' )
438
439 const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}")
440 removeImageButton.classList.remove("d-none")
441 } catch (error) {
442 console.error(error)
443 }
444 }
445 }
446 reader.readAsDataURL(file);
447 }
448
449 function removeImageOferta${JournalArticleID}() {
450 try {
451 const file_input = document.getElementById("inputCarregarImagemOferta${JournalArticleID}")
452 Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" )
453 const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}")
454 file_input.value = null
455 base64_input.value = ""
456
457 const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}")
458 removeImageButton.classList.add("d-none")
459 } catch (error) {
460 console.error(error)
461 }
462}
463
464
465
466document.getElementById("removerImagemOferta${JournalArticleID}").addEventListener("click", removeImageOferta${JournalArticleID});
467
468<#-- Rest da edição de organização -->
469
470<#if orgOrUser == "org">
471document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => {
472 event.preventDefault();
473 adicionarOferta${JournalArticleID}();
474});
475
476function adicionarOferta${JournalArticleID}() {
477 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
478 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true);
479
480
481
482 const ofertaData = {
483 titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value,
484 nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value,
485 telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value,
486 emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value,
487 descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value,
488 imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value,
489 }
490
491 console.log(ofertaData);
492
493 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", {
494 method: 'PUT',
495 "headers": {
496 "x-csrf-token": Liferay.authToken,
497 "Content-Type": "application/json"
498 },
499 body: JSON.stringify(ofertaData)
500 })
501 .then(res => {
502 if(res.status == 200) {
503 Liferay.Util.openToast({
504 message: "Oferta 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.",
505 type: "success",
506 title: "",
507 toastProps: {
508 autoClose: 5000
509 }
510 })
511 setTimeout(function(){ location.reload(); }, 2000);
512 } else {
513 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false);
514 Liferay.Util.openToast({
515 message: "Erro ao editar oferta",
516 type: "danger",
517 title: "",
518 toastProps: {
519 autoClose: 5000
520 }
521 })
522 }
523 })
524 }
525</#if>
526
527<#-- Rest da edição de pessoa fisica -->
528
529
530
531 <#if orgOrUser == "user">
532
533 document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => {
534 event.preventDefault();
535 adicionarOferta${JournalArticleID}();
536 });
537
538 function adicionarOferta${JournalArticleID}() {
539 Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""});
540 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true);
541
542 const ofertaData = {
543 titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value,
544 nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value,
545 telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value,
546 emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value,
547 descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value,
548 imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value,
549 }
550
551 console.log(ofertaData);
552
553 fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", {
554 method: 'PUT',
555 "headers": {
556 "x-csrf-token": Liferay.authToken,
557 "Content-Type": "application/json"
558 },
559 body: JSON.stringify(ofertaData)
560 })
561 .then( res => {
562 if(res.status == 200) {
563 Liferay.Util.openToast({
564 message: "Oferta 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.",
565 type: "success",
566 title: "",
567 toastProps: {
568 autoClose: 5000
569 }
570 })
571 setTimeout(function(){ location.reload(); }, 2000);
572 } else {
573 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false);
574 Liferay.Util.openToast({
575 message: "Erro ao editar Oferta",
576 type: "danger",
577 title: "",
578 toastProps: {
579 autoClose: 5000
580 }
581 })
582 }
583 });
584
585 };
586
587
588 </#if>
589
590
591 </#if>
592 </script>
593
594
595
596
597 </#list>
598 </#if>
599 </div>
600</div>
601
602<style>
603.bioec_oferta_img {
604 overflow: hidden;
605 background-size: contain;
606 background-position: center;
607 background-repeat: no-repeat;
608}
609
610.bioec_oferta_img_placeholder {
611 width: 140px;
612 height: 140px;
613 background-color: #E8ECEF;
614 display: flex;
615 flex-direction: column;
616 align-items: center;
617 justify-content: center;
618 font-size: 14px;
619 color: #5B5C61;
620}
621
622.bioec_oferta_img_placeholder i {
623 font-size: 44px;
624}
625
626
627.pagination-items-per-page.active > a,
628.pagination-items-per-page.active > button,
629.pagination-items-per-page.show > a,
630.pagination-items-per-page.show > button,
631.page-item.active .page-link,
632.page-item.show .page-link{
633 border-color: #4ECD66;
634 background-color: #4ECD66;
635}
636
637.pagination-results,
638.pagination-items-per-page > a,
639.pagination-items-per-page > button,
640.pagination-items-per-page > a:hover,
641.pagination-items-per-page > button:hover,
642.page-link{
643 color: #4ebe66;
644}
645
646.bioec-profile-oferta-main{
647 display: flex;
648 gap: 40px;
649 flex-direction: column;
650 padding-bottom: 20px;
651}
652.bioec-profile-oferta-main h5{
653 font-weight: 700;
654}
655.bioec-profile-oferta-main h5, .bioec-profile-oferta-main p{
656 color: #5B5C61;
657 margin-bottom: 0px;
658 font-size: 16px;
659
660}
661
662.bioec-profile-oferta-main #oferta-lista-container>div{
663 border: 1px #BEBEBE solid;
664 padding: 24px 24px 0 24px;
665 margin-bottom: 40px;
666 display: grid;
667 grid-row-gap: 24px;
668 grid-template-columns: 24px 12px 1fr 15px;
669 grid-template-areas:
670 "ck . tit arrw"
671 "desc desc desc desc"
672 "clps clps clps clps";
673}
674
675.bioec-profile-oferta-main .lista-checkmark { grid-area: ck; display: flex; }
676.bioec-profile-oferta-main .lista-checkmark i { font-size: 24px; }
677.bioec-profile-oferta-main .lista-pic { grid-area: pic; display: flex; justify-content: center;}
678.bioec-profile-oferta-main .lista-arrow { grid-area: arrw; }
679
680.bioec-profile-oferta-main .lista-titulo {
681 grid-area: tit;
682 display: flex;
683 flex-direction: column;
684 justify-content: center;
685
686}
687
688.bioec-profile-oferta-main .lista-titulo h5{
689 margin-bottom: 0px;
690}
691
692.bioec-profile-oferta-main .lista-desc {
693grid-area: desc;
694}
695
696.bioec-profile-oferta-main .lista-desc p{
697 margin: 0;
698}
699
700.bioec-profile-oferta-main a{
701 color: #5B5C61;
702}
703
704.oferta-port{
705 border: 1px #BEBEBE solid;
706 padding: 24px;
707 display: flex;
708 flex-direction: column;
709 align-items: center;
710 gap: 24px;
711}
712
713.oferta-port p{
714text-align: center;
715
716}
717
718.oferta-port div{
719display: flex;
720 justify-content: space-between;
721 width: min(558px, 100%);
722}
723
724.button-empty {
725border: solid 1px #4ECD66;
726padding: 8px 24px;
727color: #333244;
728 transition: 250ms;
729}
730
731.button-empty:hover{
732 background-color: #4ECD66;
733}
734
735.button-filled {
736background-color: #4ECD66;
737border: solid 1px #4ECD66;
738padding: 8px 24px;
739color: #333244;
740transition: 250ms;
741
742}
743
744.button-filled:hover{
745 background-color: transparent;
746}
747
748.bioec-profile-oferta-main .lista-footnote {
749
750 display: flex;
751 justify-content: space-between;
752 border-top: 1px solid #E8ECEF;
753 padding-top: 12px;
754 font-size: 14px;
755 font-weight: 300;
756 gap: 15px;
757 color: #5B5C61;
758
759}
760.lista-collapse{
761display: flex;
762flex-direction: column;
763gap: 24px;
764grid-area: clps;
765padding-bottom: 24px;
766}
767
768 .lista-details{
769 display: flex;
770 justify-content: flex-start;
771 gap: 24px;
772}
773.lista-pic img {
774 max-height: 138px;
775 max-width: 138px;
776}
777
778.bioec-profile-oferta-main p{
779
780}
781
782.imagemCarregadaOferta {
783 height: 100px;
784 width: 100px;
785 background-size: contain;
786 background-position: center;
787 background-repeat: no-repeat;
788}
789
790
791.ButtonAddOferta {
792 background: #4ECD66;
793 border-radius: 8px;
794 padding: 8px 24px;
795 border: none;
796 font-weight: 700;
797 color: #333244;
798 font-family: 'Roboto';
799 float: right;
800 text-transform: uppercase;
801}
802.ButtonAddOferta:hover{
803 color: #333244;
804 text-decoration: none;
805}
806
807.bioec-profile-oferta-modal label {
808 margin: 0;
809 cursor: default;
810 font-size: 20px;
811 font-weight: 700;
812 color: #5B5C61;
813}
814
815.bioec-profile-oferta-modal div {
816 width: 100%;
817}
818
819#ofertaModal-l1, .ofertaModal-l1 {
820 padding: 18px 24px;
821 display: flex;
822 justify-content: space-between;
823}
824
825#ofertaModal-l1 img, .ofertaModal-l1 img {
826 cursor: pointer;
827}
828
829#ofertaModal-l1 h5, .ofertaModal-l1 h5 {
830 margin: 0;
831 font-size: 20px;
832 font-weight: 700;
833 color: #5B5C61;
834}
835
836#ofertaModal-l2, .ofertaModal-l2 {
837 border-top: 1px solid #E8ECEF;
838 display: grid;
839 grid-template-columns: 1fr 1fr;
840 grid-template-areas:
841 "titu nome"
842 "fone mail"
843 "desc desc"
844 "imagem ."
845 ;
846 column-gap: 24px;
847 row-gap: 40px;
848 padding: 24px;
849}
850
851#ofertaModal-l2>div, .ofertaModal-l2>div {
852 display: flex;
853 flex-direction: column;
854 gap: 8px;
855}
856
857#ofertaTitle, .ofertaTitle {
858 grid-area: titu;
859}
860
861#ofertaName, .ofertaName {
862 grid-area: nome;
863}
864
865#ofertaTelephone, .ofertaTelephone {
866 grid-area: fone;
867}
868
869#ofertaEmail, .ofertaEmail {
870 grid-area: mail;
871}
872
873#ofertaBrand, .ofertaBrand {
874 grid-area: marca;
875}
876
877#ofertaModal-l2>#ofertaImg, .ofertaModal-l2>.ofertaImg {
878 grid-area: imagem;
879 display: flex;
880 flex-direction: column;
881}
882
883#ofertaDesc, .ofertaDesc {
884 grid-area: desc;
885
886}
887
888#ofertaDesc input, .ofertaDesc input {
889 height: 80px;
890}
891
892.TextImportant{
893 border-bottom: 1px solid #E8ECEF;
894 padding: 24px;
895 color: #5B5C61;
896}
897
898.bioec-profile-oferta-modal input[type="text"] {
899 border-top: none;
900 border-left: none;
901 border-right: none;
902 border-bottom: 1px solid #BEBEBE;
903 width: 100%;
904 font-size: 16px;
905
906}
907
908
909.bioec-profile-oferta-modal input[type="text"]:focus-visible {
910 outline: none;
911 border-bottom: 1px solid black;
912
913}
914
915.bioec-profile-oferta-modal .ReqLabel:before {
916 content: "* ";
917 color: #D90000;
918
919}
920
921#inputCarregarImagemOferta, .inputCarregarImagemOferta {
922 display: none;
923}
924
925#carregarImagem, .carregarImagem {
926 padding: 8px 24px;
927 border: 1px solid #4ECD66;
928 width: fit-content;
929 transition: 250ms;
930
931}
932
933#carregarImagem:hover, .carregarImagem:hover {
934 background-color: #4ECD66;
935}
936
937.button-empty {
938 border: solid 1px #4ECD66;
939 padding: 8px 24px;
940 color: #333244;
941 transition: 250ms;
942 font-weight: bold;
943}
944
945.button-empty:hover {
946 background-color: #4ECD66;
947}
948
949.button-filled {
950 background-color: #4ECD66;
951 border: solid 1px #4ECD66;
952 padding: 8px 24px;
953 color: #333244;
954 transition: 250ms;
955 font-weight: bold;
956}
957
958.button-filled:hover {
959 background-color: transparent;
960}
961
962#ofertaModal-l3, .ofertaModal-l3 {
963 gap: 24px;
964 display: flex;
965 justify-content: flex-end;
966 padding: 24px;
967}
968
969.modal {
970 padding: initial !important;
971 border-radius: 4px !important;
972
973}
974
975.modal a.close-modal {
976 display: none;
977}
978
979#removerImagemOferta, .removerImagemOferta {
980 background: none;
981 border: none;
982 outline: none;
983 color: #5B5C61;
984 font-size: 16px;
985 font-weight: 900;
986 line-height: 24px;
987 letter-spacing: 0em;
988 width: fit-content;
989 margin-left: 16px;
990}
991
992
993@media(max-width: 964px){
994 .lista-pic img {
995 width: 100%;
996 max-height: unset;
997 max-width: unset;
998
999 }
1000}
1001
1002@media (max-width: 550px) {
1003 #ofertaModal-l2, .ofertaModal-l2 {
1004 display: flex;
1005 flex-direction: column;
1006 }
1007
1008 #ofertaModal-l3, .ofertaModal-l3 {
1009 display: flex;
1010 flex-direction: column;
1011 }
1012}
1013
1014@media(max-width: 450px){
1015 .bioec-profile-oferta-main .lista-details{
1016 flex-direction: column;
1017 }
1018
1019 .lista-contato{
1020 text-align: center;
1021 }
1022
1023 .bioec-profile-oferta-main .lista-footnote{
1024 flex-direction: column;
1025 gap: 10px;
1026 align-items: flex-end;
1027 text-align: right;
1028 }
1029}
1030
1031@media(max-width: 992px){
1032 #oferta-lista-container {
1033 padding-inline: 15px;
1034 }
1035}
1036
1037.bioec-profile-oferta-main .lista-footnote .buttonsActions {
1038 display: flex;
1039 gap: 17px;
1040}
1041
1042@media (max-width: 768px) {
1043 .bioec-profile-oferta-main .lista-desc {
1044 gap: 24px;
1045 flex-direction: column-reverse;
1046 }
1047 .bioec-profile-oferta-main .lista-footnote {
1048 flex-direction: column;
1049 align-items: center;
1050 }
1051 .bioec-profile-oferta-main .lista-footnote > div {
1052 text-align: center;
1053 }
1054
1055 .bioec-profile-oferta-main .lista-footnote .barra-pipe {
1056 display: none;
1057 }
1058 .bioec-profile-oferta-main .lista-footnote .lista-author {
1059 display: flex;
1060 gap: 4px;
1061 justify-content: center;
1062 }
1063 .bioec-profile-oferta-main .lista-footnote .buttonsActions {
1064 width: 100%;
1065 justify-content: space-between;
1066 }
1067}
1068
1069
1070</style>
1071
1072
1073<script>
1074
1075
1076
1077</script>
Notícia
Cientista brasileira ganha do programa da L’Oreal e Unesco por desenvolver doces com PANCs
A etnobióloga, Patrícia Medeiros, tem pesquisado desde 2013 as plantas alimentícias não convencionais, PANCs, com o objetivo de aumentar a renda de comunidades extrativistas ao popularizar os espécimes silvestres pouco conhecidos nas cidades na diversificação da dieta humana. E no contexto onde os efeitos das mudanças climáticas são cada vez mais evidentes o resultado de sua pesquisa foi reconhecido com o prêmio do programa da L’Oreal e Unesco para mulheres na ciência.
Clique aqui e saiba mais.
Notícia
Artigo de Pedro Frizo destaca como as redes locas podem ser estratégicas para a bioeconomia amazônica
Neste artigo Pedro trás sua opinião sobre como a configuração das redes locais de relações estratégicas em condições propícias para a adoção e circulação de novas formas organizacionais, lógicas de produção e de comercialização devem ser levada em conta para a integração dos empreendimentos que envolvem os diversos ativos da bioeconomia amazônica.
Clique aqui e leia o artigo na integra.
Notícia
Embrapa desenvolve película biodegradável para embalar alimentos
Pesquisadores da parceria entre a Embrapa, a UFSCar e a universidade francesa de Grenoble Alpes conseguiram incorporar nanocristais de celulose à gelatina. O resultado foi uma película resistente para proteger alimentos, antimicrobiana, antioxidante, estável, biodegradável e até comestível. A técnica empregada na produção permite o uso de soluções à base de água, sem a necessidade de empregar aditivos de processamento, além da vantagem de possuir um tempo de processamento mais curto com perspectiva para produção em escala industrial.
Clique aqui e saiba mais.
De 24 a 30 de julho ocorre a 74ª Reunião Anual da Sociedade Brasileira para o Progresso da Ciência
Com intensa programação nos quatro campus da Universidade de Brasília (UnB), a 74ª Reunião Anual da Sociedade Brasileira para o Progresso da Ciência (SBPC) irá discutir o tema “Ciência, independência e soberania nacional”. As mais de 200 atividades sejam presenciais ou online irão cobrir diversos áreas de pesquisas nacionais incluindo a Bioeconomia. Clique aqui para mais informações e se inscrever.
Nos dias 16 e 17 de agosto CNI irá realizar o evento: Estratégia da Indústria para uma Economia de Baixo Carbono
FOMENTO - FAPESP lança chamada do PIPE com BIOTA, BIOEN e Mudanças Climáticas
Lançada no dia 15 de junho pela FAPESP chamada no âmbito do programa PIPE-TC (Pesquisa Inovativa em Pequenas Empresas - Transferência de Conhecimento) para a seleção de propostas de projetos voltados ao desenvolvimento de soluções inovadoras nos temas associados aos programas BIOTA (Programa FAPESP de Pesquisas em Caracterização, Conservação, Restauração e Uso Sustentável da Biodiversidade), BIOEN (Programa FAPESP de Pesquisa em Bioenergia) e PFPMCG (Programa FAPESP de Pesquisa sobre Mudanças Climáticas Globais).
O projeto deve ser realizado necessariamente em parceria com instituição de ensino superior ou de pesquisa no Estado de São Paulo. O valor total a ser solicitado à FAPESP será de até R$ 300 mil para a Fase 1 e de até R$ 1 milhão para a Fase 2, sendo que pelo menos 30% e no máximo 50% do orçamento solicitado deverão ser alocados na instituição de pesquisa parceira.
Clique aqui e saiba mais.
Programação do SINAFERM-SHEB-ENZITEC 2022 incluirá Escola de Bioprocessos
Com inscrições até 31 de julho, a Escola de Bioprocessos fará parte da programação do SINAFERM-SHEB-ENZITEC 2022 e acontecerá de forma on-line entre os dias 22 à 26 de agosto.
A Escola de Bioprocessos irá oferecer 10 cursos abordando diferentes aspectos para contribuir com o aperfeiçoamento de profissionais da área de bioprocessos, e contará com a participação de profissionais de diversas empresas e instituições renomadas.
Clique aqui para mais informações.
Série Cadernos ABBI discute assuntos estratégicos e o potencial do Brasil em ser líder global da bioeconomia
Com a missão de ser uma fonte de informação confiável para atualização contínua de seus associados, parceiros e sociedade, a Associação Brasileira de Bioinovação lançou a série Cadernos ABBI. A série visa discutir assuntos estratégicos, o potencial brasileiro de ser o líder global da bioeconomia avançada, e a importância do investimento em tecnologias inovadoras a partir de recursos biológicos e renováveis.
Clique aqui e acesse a série completa.
Notícia
Novo projeto de Ellen Windemuth explora o conceito de economia circular
Em entrevista exclusiva ao Um Só Planeta, Ellen Windemuth, CEO da WaterBear Network, comentou como foi o processo de produção de seu novo documentário 'Going Circular' e falou sobre o conceito de economia verde.
Clique aqui e leia a entrevista completa.
Notícia
A bioeconomia como parte da solução para os desafios da mudança climática
Em entrevista ao website Indústria Verde, Paulo Coutinho, pesquisador-chefe do Instituto SENAI de Inovação em Biossintéticos e Fibras, falou da importância dos modelos de produção da bioeconomia para a transição para uma economia de baixo carbono no Brasil.
Clique aqui e leia a entrevista completa.
Notícia
Empreendedores fundadores da Manioca pretendem salvar a Amazônia pescando os consumidores pelo estômago
Ao fazer com que brasileiros e estrangeiros usem ingredientes da Amazônia em pratos do dia a dia, os fundadores da Manioca esperam que ingredientes no Norte deixem de ser restritos em comidas típicas da região e que seu uso passe a ser rotineiro pelos chefs de restaurantes por todo o país.
Clique aqui e saiba mais.
Notícia
Cada vez mais usinas de cana-de-açúcar consideram a produção de Biogás e Biometano
Incentivadas pelo programa Metano Zero lançado pelo Governo Federal que visa incentivar a geração de biometano e d biogás através do auxílio de bancos públicos, as usinas de cana-de-açúcar passaram a incluir em seus planos o investimento em novas plantas industriais de biogás e biometano. Inclusive os grandes grupos do setor estão firmando parcerias com universidades renomadas e financiando pesquisas na área de biocombustíveis e biogás.
Clique aqui e saiba mais.
Notícia
Matérias-primas renováveis são utilizadas na produção de ácidos orgânicos
Pesquisadores da Embrapa Agroenergia desenvolveram bioprocessos que exigem poucas adaptações nas instalações industriais atuais para produzir os ácidos lático, cítrico, xilônico e kójico, muito utilizados nas indústrias alimentícia, química, cosmética e farmacêutica, bem como na agricultura. Sendo possível agregar valor a biomassas e residuos agroindustriais de cadeias relacionadas a produção de biocombustíveis.
Clique aqui e saiba mais.
Notícia
Estudo da IEA Bioenergy Task 45 discute tecnologias de captura e armazenamento de carbono
Resultado de estudo da IEA Bioenergy Task 45 discute como as tecnologias de captura e armazenamento de carbono usando oxicombustível combinadas com o uso de biomassa como combustível alternativo são uma opção atraente para mitigar o impacto do setor de cimento nas mudanças climáticas.
Clique aqui e acesso o estudo completo.
Notícia
Emergência climática requer uma resposta imediata, completa e decisiva
Em artigo Leonardo Lacerda, Diretor Geral de Mudanças Climáticas da The Nature Conservancy, oferece uma visão do que a ação climática pode proporcionar ao nosso planeta. Comparando a conexão entre a saúde humana e a saúde do planeta, e destacando a urgência por ações contra a crise climática e proteção da biodiversidade .
Clique aqui e acesse ao artigo completo.
Notícia
Como o Brasil pode se tornar um grande player da energia verde
Pesquisadores da ESALQ-USP discutem o potencial brasileiro para se tornar um grande player na transição energética. Neste contexto, os autores destacam a importância do hidrogênio verde como rota energética para a descarbonização dos transportes, principalmente a partir de bioinsumos.
Clique aqui e acesse ao artigo completo.
Notícia
Estudo da Embrapa apresenta os resultados da expansão sustentável do cacau
Durante a programação do Chocolat Xingu 2022 – Festival Internacional do Cacau e Chocolate, no Pará, a Embrapa Amazônia Oriental apresentou os resultados do estudo “A (Theobroma cacao) no estado do Pará e sua contribuição para a recuperação de áreas degradadas e redução do fogo”.
Clique aqui para saber mais e acesse o estudo completo.
FOMENTO – Inscrições abertas para submissão de propostas ao programa INICIATIVA AMAZÔNIA+10
O primeiro edital da iniciativa Amazônia+10 está com chamada aberta até 10 de agosto de 2022. Este programa foi criado em novembro de 2021 pela FAPESP, em parceria com os Conselhos Nacionais de Secretários Estaduais para Assuntos de CT&I (Consecti) e das Fundações Estaduais de Amparo à Pesquisa (Confap) com foco no desenvolvimento de ciência, tecnologia e inovação (C,T&I) na Amazônia Legal.
O Programa Amazônia+10 destinará um valor mínimo de R$ 300.000,00 para cada proposta submetida.
Clique aqui e saiba mais.
FOMENTO – Projeto Amazônia: Bioeconomy Connections abre chamada para Startups, PMEs e MEIs
A Embaixada Brasileira - Brasilianische Botschaft in Berlin - está promovendo o projeto “Amazônia: Bioeconomy Bonnections”, com o objetivo de facilitar parcerias entre iniciativas brasileiras voltadas para a bioeconomia no bioma amazônico e parceiros econômicos e/ou técnico-científicos na Alemanha. As inscrições estão abertas até 05 de agosto de 2022.
Clique aqui e saiba mais.
Notícia
ESTUDOS SOBRE ARMAZENAMENTO DE CARBONO APOIADOS PELA FAPESP SUBSIDIAM PROJETO DE LEI