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
Teste de demanda virada sem img neg

Teste de demanda virada sem img neg

Conteúdo Em Análise Pelo Cetiqt:

Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.

14/03/2023 | 0 cometários | Publicado por Laís Silva teste edição
Teste de demanda virada com img

Teste de demanda virada com img

Conteúdo Em Análise Pelo Cetiqt:

Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.

14/03/2023 | 0 cometários | Publicado por Laís Silva teste edição
Teste de demanda virada sem img

Teste de demanda virada sem img

sem imagem

Contato

lais.silva.060223@teste.com

14/03/2023 | 0 cometários | Publicado por Laís Silva teste edição
Café #41 – Prospectando alternativas proteicas sustentáveis para o futuro

Teste de demanda virada sem img

sem imagem

Contato

lais.silva.060223@teste.com

27/10/2023 | 0 cometários | Publicado por Laís Silva teste edição
Ofertas drop zone
An error occurred while processing the template.
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
Sort
sem imagem

Conteúdo Em Análise Pelo Cetiqt:

Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.

| 14/03/2023 | 0 comentários | Publicado por Anônimo
sem imagem

Conteúdo Em Análise Pelo Cetiqt:

Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.

| 14/03/2023 | 0 comentários | Publicado por Anônimo
sem imagem

| 14/03/2023 | 0 comentários | Publicado por Anônimo
Notícia
sem imagem

Café #41 – Prospectando alternativas proteicas sustentáveis para o futuro

A edição do dia 25 de outubro de 2023 do Café com Bioeconomia reuniu Anna Paola Pierucci (Coordenadora de Relações Internacionais do Instituto de Nutrição Josué de Castro da UFRJ), Cristiana Ambiel (Gerente de Ciência e Tecnologia do The Good Food Institute) e Ricardo Laurino (Presidente da Sociedade Vegetariana Brasileira). O encontro, que acontece quinzenalmente, foi mediado por Fernanda Cardoso (Pesquisadora do Instituto SENAI de Inovação em Biossintéticos e Fibras).


Fernanda iniciou o debate solicitando aos convidados que indicassem as principais oportunidades e desafios ligados à produção de proteínas alternativas no Brasil em termos tecnológicos, geográficos e culturais. Além disso, as tendências de mercado da área e vantagens nutricionais também foram tema da discussão.


Anna Paola destacou que ao abordar as proteínas alternativas devem ser consideradas questões que vão desde a produção no campo até a mesa do consumidor. Ela citou oportunidades relacionadas à obtenção de ingredientes a partir da biodiversidade brasileira e de coprodutos que atualmente não são aproveitados. Em termos de desafios, foram citados a logística de distribuição dos alimentos, a oferta constante das matérias-primas, a escala de produção, e a necessidade de mudanças de hábitos dos grandes produtores, que possuem cadeias produtivas voltadas para produtos de origem animal. Anna Paola pontuou ainda que estudos mais recentes indicam que as proteínas vegetais promovem maior biodiversidade da microbiota intestinal e, consequentemente, impactam na redução do risco de determinadas doenças.


Cristiana ressaltou que por muito tempo o mercado priorizou matrizes de origem animal como fontes de proteínas na dieta, mas que atualmente são vislumbradas outras fontes proteicas e de nutrientes para a alimentação. Nesse contexto, para ela o grande desafio é tornar os produtos acessíveis, além de melhorar aspectos sensoriais para que tenham maior aceitação pela população. Cristiana explicou que a fonte de proteína mais promissora no Brasil é a do feijão, mas pontuou que os produtos derivados de processos fermentativos são uma tendência, e que também existe a possibilidade de utilização de microrganismos como fontes proteicas em formulações alimentícias.


Ricardo indicou que por ser um mercado recente, é natural que existam desafios a serem vencidos em termos de regulamentações e desenvolvimento da cadeia produtiva. Pesquisas internas da SVB indicaram que produtos com o selo vegano dão mais segurança ao consumidor. Ricardo explicou ainda que as empresas tendem a desenvolver produtos com características semelhantes aos produtos comerciais já existentes, mas que há um leque de possibilidades na criação produtos plant-based com experiências sensoriais que surpreendam o consumidor. Ele citou como tendência de longo prazo a criação de equipamentos domésticos, como impressoras 3D, que possibilitem à população formular o produto em suas residências.


O Café com Bioeconomia é um evento quinzenal, on-line e interativo, no qual palestrantes e público discutem temas relevantes para a área. Quer receber nossa agenda e participar? Inscreva-se em: https://portaldebioeconomia.com/


Quer ouvir este e outros Cafés? Estamos no Spotify em Café com Bioeconomia.

Notícia | 27/10/2023 | 0 comentários | Publicado por Anônimo
  • Sobre
  • Organizações
  • Demandas
  • Ofertas
  • <#if themeDisplay.getURLCurrent()?contains("en")> Publication <#else> Publicações
Tag
Category