Nav Bar do usuário deslogado.

Meu Perfil

Título da Página

Nome Completo

E-mail

default@portaldebioeconomia.hml.opikode.com

Telefone

Cidade

Estado

País

  • Sobre
  • Organizações
  • Demandas
  • Ofertas
  • Publicações
Sobre drop zone
Nenhuma descrição foi adicionada neste perfil ainda
Nenhuma tema ou setor foi adicionado neste perfil ainda
Organizações drop zone
Nenhuma organização foi cadastrada neste perfil ainda
Demandas drop zone
Um erro ocorreu enquanto processava o modelo.
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">&times;</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">&times;</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> 
Ofertas drop zone
Um erro ocorreu enquanto processava o modelo.
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">&times;</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">&times;</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> 
Publicações drop zone
Ordenar

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.

| 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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 | 22/09/2022 | 0 comentários | Publicado por Anônimo
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.

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo

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.

| 22/09/2022 | 0 comentários | Publicado por Anônimo

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.
 

| 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

ESTUDOS SOBRE ARMAZENAMENTO DE CARBONO APOIADOS PELA FAPESP SUBSIDIAM PROJETO DE LEI

Elton Alisson | Agência FAPESP – Está em tramitação no Senado Federal o Projeto de Lei nº 1.425 com o objetivo de criar um marco legal para a exploração econômica no Brasil da atividade de captura e armazenamento de carbono em reservatórios geológicos, como poços de petróleo e gás, aquíferos salinos e camadas de carvão. De autoria do senador Jean Paul Prates (PT-RN), o projeto é embasado em estudos sobre o tema realizados por pesquisadores vinculados ao Centro de Pesquisa para Inovação em Gases de Efeito Estufa (RCGI). Constituído com apoio da FAPESP e da Shell na Escola Politécnica da Universidade de São Paulo (Poli-USP), o RCGI é um dos 23 Centros de Pesquisa em Engenharia (CPEs) criados pela Fundação nos últimos dez anos. “O projeto de lei proposto é fruto da pesquisa desenvolvida ao longo de quatro anos por cientistas brasileiros na Universidade de São Paulo, via Centro de Pesquisa para Inovação em Gases de Efeito Estufa [Research Centre for Greenhouse Gas Innovation – RCGI] – um lócus de excelência da parceria entre indústria, governos e universidade pública para encontrar soluções para os problemas que elencamos”, destaca o texto do projeto de lei. O RCGI conta com cerca de 400 pesquisadores atuando em 46 projetos de pesquisa focados em estudos avançados relacionados ao uso sustentável do gás natural, biogás, hidrogênio, gestão, transporte, armazenamento e uso de CO2. Alguns dos principais programas de pesquisa mantidos por pesquisadores do centro são sobre captura e armazenamento de carbono (CCS, na sigla em inglês) e bioenergia com captura e armazenamento de carbono (BECCS, na sigla em inglês). “O Brasil tem enorme potencial de fazer CCS não apenas offshore [em poços de petróleo e gás no fundo do mar], como também onshore [em terra]. Um exemplo é a captura e o armazenamento de CO2 que é emitido durante a produção de etanol e de outros biocombustíveis, a chamada BECCS”, diz à Agência FAPESP Julio Meneghini, diretor-geral do RCGI. “Se for feita a captura e o armazenamento de CO2 gerado pela queima do diesel utilizado em caminhões para o transporte e em máquinas para o plantio da cana, por exemplo, e reduzida a aplicação de fertilizantes de origem fóssil para o cultivo da planta destinado à produção de bioenergia, o etanol brasileiro pode ter pegada negativa em termos de emissão de gases de efeito estufa”, avalia. Economia de baixo carbono O texto do projeto de lei destaca que a utilização de mecanismos de sequestro geológico de carbono (CCS), que visam armazenar grandes quantidades de CO2 de forma permanente no substrato geológico, impedindo sua liberação, representa uma alternativa para a redução de emissões de GEE para setores que não conseguem atingir esse objetivo em razão de seus processos produtivos ou custo. O texto aponta, contudo, que as tecnologias de baixo carbono no Brasil estão longe de um cenário de implantação em larga escala, especialmente para o sequestro geológico de carbono. Atualmente, apenas alguns campos na região do pré-sal conseguem desenvolver a atividade de CCS. Algumas das razões para isso, segundo o autor do projeto de lei, são restrições de licenciamento ambiental e a falta de regras claras, além do desafio de integrar os polos industriais em que ocorre a emissão do CO2 aos projetos de injeção para estocagem permanente. Entre as barreiras à implementação de projetos de CCS em larga escala, três aspectos vêm sendo apontados como estratégicos. Primeiro, os custos para construção e operação das infraestruturas; segundo, a falta de políticas de incentivos para fomentar o desenvolvimento da CCS; e terceiro, a ausência ou falha na definição de questões jurídico-regulatórias relacionadas, principalmente, à etapa de armazenamento geológico do CO2. “A implementação das atividades que formam a cadeia de CCS requer a edição de um marco regulatório específico para o seu desenvolvimento no Brasil, especialmente no que se refere à etapa de armazenamento de CO2, uma vez que esta etapa da cadeia inaugura novos usos para o subsolo brasileiro, que podem representar custos e riscos econômicos para o operador”, avalia. Essa ausência de normas sobre CCS no Brasil motivou a criação em 2017 de um grupo de estudos sobre o tema no RCGI, chamado de projeto 42. Atualmente, parte dos pesquisadores migrou para o novo projeto denominado Advocacy, cujos resultados das pesquisas subsidiaram o projeto de lei. O grupo é composto, além de advogados, por pesquisadores com diferentes formações, como engenheiros, geógrafos, economistas e físicos, e mantém colaboração com centros de pesquisa sobre o tema nos Estados Unidos e no Reino Unido. “Um dos objetivos do estudo que realizamos ao longo desses últimos cinco anos foi definir uma proposta legislativa sobre CCS no Brasil que estabelecesse alguns parâmetros, como a autoridade competente para outorga e regulação, os direitos de propriedade relativos à atividade de estocagem de carbono, o licenciamento ambiental e a responsabilidade civil de longo prazo”, explica Hirdan Katarina de Medeiros Costa, coordenadora do projeto que embasou o projeto de lei. Uma das conclusões dos pesquisadores, refletida no projeto de lei, é que por serem formações rochosas com valor econômico e, por isso, se enquadrarem no conceito de recursos minerais, os reservatórios geológicos são de propriedade da União. Em virtude disso, é ela quem deve conceder a outorga para atividade de CCS via Ministério de Minas e Energia (MME), por meio de uma autorização com prazo predeterminado e condições de revogação estipuladas em lei. “Isso dá segurança jurídica para empresas interessadas em fazer o armazenamento de CO2, que é uma atividade econômica custosa”, afirma a advogada Isabela Morbach, uma das pesquisadoras do grupo, que estudou os principais aspectos jurídicos que idealmente precisam estar definidos em um projeto de lei sobre CCS. Uma vez que a tecnologia e a expertise em injeção e armazenamento de CO2 no Brasil foram desenvolvidas pela indústria de petróleo, a regulação de CCS no país deve ser feita pela Agência Nacional do Petróleo, Gás Natural e Biocombustíveis (ANP), sugerem os pesquisadores. Já o licenciamento ambiental deve seguir as normas estabelecidas pelo Instituto Brasileiro do Meio Ambiente e dos Recursos Naturais (Ibama). Os pesquisadores também propõem que a responsabilidade pelo CO2 armazenado em reservatório após o encerramento pode ser transferida para uma gestora de ativos – uma instituição privada formada por um conjunto de operadores e fiscalizada pela ANP. “A gestora de ativos receberia a área depois da empresa que recebeu a licença para exploração fechá-la e monitorá-la por um período suficiente para comprovar a estabilidade do CO2 e garantir que a operação foi feita de forma segura. Após esse período, a área seria devolvida definitivamente para o Estado”, explica Morbach. Experiência internacional A fim de definir a proposta legislativa sobre CCS no Brasil os pesquisadores estudaram as legislações em vigor em países do Reino Unido, na Austrália, Estados Unidos, província de Alberta, no Canadá, e Noruega. Esses últimos três países são os que mais têm avançado na exploração econômica da CCS, com projetos já em operação. “A experiência internacional mostra que essa atividade só pode prosperar se tiver a participação do Estado como uma espécie de fiador, propondo regras cabíveis, implementando leis e assumindo riscos de longo prazo”, diz o geólogo Israel Lacerda de Araújo, também integrante do grupo de pesquisa sobre o tema no RCGI. “Não é possível tirar nenhum projeto do papel quando não se tem regras claras, acordo entre as partes e o Estado como árbitro, atuando inclusive em defesa dos interesses da população do país”, avalia Araújo, que é consultor legislativo no Senado Federal na área de energia, mineração e assuntos correlatos e fez a articulação com Prates para a elaboração do projeto de lei. Este texto foi originalmente publicado por Agência FAPESP de acordo com a licença Creative Commons CC-BY-NC-ND. Leia o original aqui.
Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Acordo entre EMBRAPII e IDESAM beneficiarão pequenas empresas e startups da região Amazônica

Dia 1º de julho, durante a Expo Amazônia Bio&TIC, a Empresa Brasileira de Inovação Industrial (EMBRAPII) e o IDESAM – Instituto de Conservação e Desenvolvimento Sustentável da Amazônia assinam um acordo de cooperação com o objetivo de beneficiar diretamente a inovação por pequenas empresas e startups que atuam na região, preservando a biodiversidade e a sustentabilidade ao mesmo tempo em que fomentam a produtividade local.

Clique aqui para saber mais

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Em parceira Petrobras e Vallourec vão testar uso de óleo vegetal no refino

O objeto da parceria entre Petrobras e Vallorec é o bio-óleo — óleo de origem vegetal, 100% renovável que já está em fase de testes no Centro de Pesquisas e Inovação da Petrobras (Cenpes) e tem potencial para ser utilizado como matéria-prima na geração de produtos renováveis.


Neste acordo as empresas vão avaliar oportunidades de cooperação tecnológica na produção e uso do bio-óleo, resultante da condensação de gases produzidos durante a transformação da madeira em carvão vegetal.

Clique aqui para saber mais.

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Couro de micélio pode ser um dos aliados do mundo da moda rumo à sustentabilidade

Sendo uma das indústrias mais poluentes do mundo emitindo 10% do carbono global, a moda tem buscado soluções alternativas para ser reduzir suas contribuições as mudanças climáticas. Neste contexto o couro de micélio, feito com a parte vegetativa do fungo de cogumelos, surge como uma alternativa mais sustentável, para substituir o couro bovino e o couro de plástico sintético. Clique aqui para saber mais.
Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo

Nos dias 12 e 13 de julho ocorre o Symposium SAE BRASIL Bio Fuel 2022

Em formato digital ao vivo e online, a SAE BRASIL, irá reunir os principais expoentes desta complexa fase de transição das fontes de energias fósseis para energias renováveis para discutir os temas: as novas tecnologias para aumento de eficiência e redução das emissões locais para as próximas décadas, os programas governamentais da Índia, Estados Unidos e do Brasil para descarbonização e aumento do uso da Biomassa, Biometano e H2 verde, nos diferentes tipos de veículos, como comerciais urbanos e caminhões, destacando o Brasil e sua vantagem na integração do uso da biomassa nesta cadeia. Clique aqui para mais informações e se inscrever.
| 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Bactéria produtora de substituto biodegradável ao plástico é encontrada na Baixada Santista

Pesquisadores do Research Center for Greenhouse Gas Innovation (RCGI), centro de pesquisa em engenharia sediado na Escola Politécnica (Poli) da USP encontraram no mangue da Baixada Santista uma bactéria chamada Methylopila oligotropha que possui a capacidade de produzir poli-hidroxialcanoatos, ou simplesmente PHAs, um composto biodegradável com propriedades similares a alguns tipos de plásticos

Clique aqui para saber mais.

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Cientistas desenvolvem nova aplicação para resíduos de biomassa: produção de PET

Cientistas da Suíça e na Áustria desenvolveram um novo plástico reciclável com propriedades semelhantes ao PET a partir das partes não comestíveis das plantas. Este plástico é resistente ao calor poderia ser usado para embalagens de alimentos.

Clique aqui para saber mais.

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
Notícia

Com o avanço na bioeconomia surgem novos conceitos

Estimulados pelas medidas de adaptação às mudanças climáticas do último relatório do IPCC, cada vez mais conceitos como capital natural, serviços ecossistêmicos e conservação da biodiversidade têm sido utilizados.

Clique aqui e entenda a diferença entre eles.

Notícia | 22/09/2022 | 0 comentários | Publicado por Anônimo
  • Sobre
  • Organizações
  • Demandas
  • Ofertas
  • <#if themeDisplay.getURLCurrent()?contains("en")> Publication <#else> Publicações
Marcador
Categoria