Nav Bar do usuário deslogado.

Meu Perfil

Nome Completo

E-mail

default@portaldebioeconomia.com

Telefone

Cidade

Estado

País

  • Sobre
  • Organizações
  • Demandas
  • Ofertas
  • Publicações
Sobre drop zone
A sintaxe do FreeMarker é inválida.

String index out of range: The index was 0 (0-based), but the length of the string is only 0.

----
FTL stack trace ("~" means nesting-related):
- Failed at: #if setoresDoUsuario[0].getStringValu... [in template "template_id" at line 41, column 9]
----
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:
==> articleXml.selectSingleNode("dynamic-element[@name='Text94974146']")  [in template "334468#334509#488827" at line 34, column 61]

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

----
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: nomeParaContato = articleXml.selectSi...  [in template "334468#334509#489378" at line 30, column 42]
----
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				 
29						 
30				<#assign nomeParaContato = articleXml.selectSingleNode("dynamic-element[@name='CampoDeTexto50355704']").getStringValue()!"" 
31								 nomeParaContato = nomeParaContato?replace("\n\t\t", "") 
32								 nomeParaContato = nomeParaContato?replace("\n\t", "")			 
33
34				 
35	 
36			 
37				<#assign telefone = articleXml.selectSingleNode("dynamic-element[@name='Text90715721']")!"" 
38				telefone = telefone.getStringValue()!"" 
39								 telefone = telefone?replace("\n\t\t", "") 
40								 telefone = telefone?replace("\n\t", "")	 
41
42 
43				 
44		 
45				 
46				<#assign email = articleXml.selectSingleNode("dynamic-element[@name='Text68569631']").getStringValue()!"" 
47								 email = email?replace("\n\t\t", "") 
48								 email = email?replace("\n\t", "")					 
49
50 
51				 
52 
53				 
54				<#assign desc = articleXml.selectSingleNode("dynamic-element[@name='CopyOfText18267936']").getStringValue()!"" 
55								 desc = desc?replace("\n\t\t", "") 
56								 desc = desc?replace("\n\t", "")		 
57
58 
59				<#assign imagem = articleXml.selectSingleNode("dynamic-element[@name='Text80669990']").getStringValue()!"" 
60								imagem = imagem?replace("\n\t\t", "") 
61								 imagem = imagem?replace("\n\t", "")		 
62
63 
64				<#assign autorId = articleXml.selectSingleNode("dynamic-element[@name='CampoDeTexto97452704']").getStringValue()!"" 
65						autorId = autorId?replace("\n\t\t", "") 
66						autorId = autorId?replace("\n\t", "")			 
67							autorArticleId = "" 
68						commentsCount = mbMessageLocalService.getDiscussionMessagesCount(entry.getClassName(), entry.getClassPK(), 0)!"0" 
69				>	 
70				 
71				 
72			 
73						<#if autorId != "" && autorId??> 
74					<#assign 
75						autor = UserLocalService.fetchUser(autorId?number)!"" 
76						autorArticleId = autor.getExpandoBridge().getAttribute("journal-article")!"0" 
77				/> 
78				<#if autor != ""> 
79				<#assign autor = autor.getFullName()!""> 
80				<#else> 
81				<#assign autor = "Anônimo" > 
82				</#if> 
83				<#else>  
84				<#assign autor = "Anônimo" > 
85		</#if>		 
86		<#assign 	categorias = AssetCategoryLocalService.getCategoryNames(entry.getClassName(), entry.getClassPK())!"" > 
87		<#assign urlWC = ""> 
88		 
89		<#if autorArticleId != "0" && autorArticleId != "" && autor != "Anônimo"> 
90		<#assign autorArticle = JournalArticleLocalService.getLatestArticle(themeDisplay.getLayout().getGroupId(), autorArticleId?string) > 
91		<#assign urlWC = autorArticle.getUrlTitle()!""> 
92		</#if> 
93		 
94		 
95				<#assign tags = tagsLocalService.getTagNames("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()?number )  
96				 tagName = tags[0]!"" 
97				 orgOrUser = "" 
98
99				  
100				 <#if tagName?contains("organization") && tagName != "" > 
101					 <#assign orgOrUser = "org"> 
102					<#else> 
103					 <#assign orgOrUser = "user"> 
104				 </#if> 
105			 
106				<#if orgOrUser == "org" > 
107 
108					<#assign 
109					orgId = tagName?keep_after("organization-")				 
110					organization =  OrganizationLocalService.fetchOrganization(orgId?number)!"" 
111
112			 
113					 
114					<#if organization != "" && autor != "Anônimo"> 
115						<#assign	orgArticleId = organization.getExpandoBridge().getAttribute("journal-article") 
116							orgJournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),orgArticleId?c)  
117							urlWC = orgJournalArticle.getUrlTitle()!"" 
118							autor = organization.getName()!"" 
119
120 
121					</#if> 
122				</#if> 
123				 
124					<#if themeDisplay.isSignedIn() > 
125							<#if tagName?contains("organization-")> 
126								<#assign userIsAdmin = OrganizationLocalService.hasUserOrganization(themeDisplay.getUserId(), orgId?number)> 
127								<#else> 
128								<#if autorId?number == themeDisplay.getUserId()> 
129								<script>console.log("oi");</script> 
130									<#assign userIsAdmin = true> 
131								</#if> 
132							</#if> 
133							 
134						 
135					</#if> 
136				 
137 
138				<div class="oferta-lista-item"> 
139				<div class="lista-checkmark"> 
140								<#if categorias?seq_contains("aprovado") > <i title="Aprovado" style="color: #4ECD66" class="fa-solid fa-circle-check"></i> </#if> 
141								<#if categorias?seq_contains("pendente") >	<i title="Em análise" style="color: #D90000"class="fa-solid fa-spinner"></i> </#if> 
142								<#if categorias?seq_contains("recusado") >	<i title="Recusado" style="color: #D90000"class="fa-solid fa-exclamation-circle"></i> </#if> 
143				</div> 
144	 
145 
146					<div class="lista-titulo"> 
147						<h5>${entry.getHighlightedTitle()}</h5> 
148					</div> 
149 
150					<div class="lista-arrow"> 
151						<button style="padding: 0;" class="btn" type="button" data-toggle="collapse" data-target="#collapseID${entry.getClassPK()}" aria-expanded="false" aria-controls="collapseID${entry.getClassPK()}"> 
152							<i class="fa-solid fa-chevron-down"></i> 
153						</button> 
154					</div> 
155 
156					<div class="lista-desc"> 
157						<p>${desc}</p> 
158					</div> 
159 
160					<div class="lista-collapse collapse" id="collapseID${entry.getClassPK()}"> 
161					<#if nomeParaContato != "" || telefone != "" || email != "" || imagem?trim !=""> 
162					<div class="lista-details"> 
163								<div class="lista-pic"> 
164									<i class="fa-solid fa-image-slash"></i> 
165									<#if imagem?trim !="" > 
166											<img class="bioec_oferta_img" src="${imagem}"> 
167										<#else> 
168											<div class="bioec_oferta_img_placeholder"> 
169												<i class="fa-solid fa-image"></i> 
170													sem imagem 
171											</div> 
172									</#if> 
173								</div> 
174							<#if nomeParaContato != "" || telefone != "" || email != "" > 
175							<div class="lista-contato"> 
176								<p>Contato</p> 
177								<p class="lista-author">${nomeParaContato}</p> 
178								<p class="lista-phone">${telefone}</p> 
179								<p class="lista-email">${email}</p> 
180							</div> 
181							</#if> 
182						</div> 
183						</#if> 
184						 
185							<#if categorias?seq_contains("recusado") > 
186							<div style="border-top: 1px solid #E8ECEF; font-weight: bold; padding-top: 24px;"> 
187							<p>Conteúdo Em Análise Pelo Cetiqt:</p> 
188							<p>Conteúdo recusado pelo CETIQT por violar as políticas de privacidade.</p> 
189							</div> 
190							</#if> 
191						<div class="lista-footnote"> 
192								<div> 
193									<span class="lista-date">${journalArticle.getDisplayDate()?string('dd/MM/yyyy')}</span> | <span class="lista-commentNumber">${commentsCount} cometários</span> <span class="barra-pipe"> | </span> <span class="lista-author">Publicado por <a <#if urlWC != ''>href="/w/${urlWC}</#if>">${autor}</a></span> 
194								</div> 
195								<#if userIsAdmin> 
196									<div class="buttonsActions"> 
197									<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modalOferta${JournalArticleID}"> 
198											<i class="fa-solid fa-edit"></i> 
199										</div> 
200										<div style="cursor: pointer;font-size: 16px;" data-toggle="modal" data-target="#modal-oferta-${entry.getClassPK()}"> 
201												<i class="fa-solid fa-trash-can"></i> 
202										</div> 
203										 
204									</div> 
205								</#if>		 
206						</div> 
207					</div> 
208				</div> 
209				 
210					<#if userIsAdmin> 
211						<div style="display: none;" id="modal-oferta-${entry.getClassPK()}" class="modal fade" role="dialog"> 
212							<div class="modal-dialog modal-lg" role="document"> 
213								<div class="modal-content"> 
214									<div class="modal-header" > 
215										<h4 class="m-0">Remover Oferta</h4> 
216										<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
217											<span aria-hidden="true"> 
218												<i class="fa-solid fa-close"></i> 
219											</span> 
220										</button>    
221									</div> 
222									<div class="modal-body"> 
223										<h5>Você tem certeza que deseja remover essa oferta?</h5> 
224										<div> 
225											Ao clicar em continuar, a oferta será removida do seu perfil. 
226										</div> 
227									</div> 
228									<div class="modal-footer justify-content-end"> 
229											<button class="bioec_secondary_button" data-dismiss="modal">CANCELAR</button> 
230											<button class="bioec_primary_button" type="button" onclick="excluirOferta(${JournalArticleFrontId}, ${orgId})">CONTINUAR</button>  
231									</div> 
232								</div> 
233							</div>			 
234						</div> 
235						 
236						<#-- modal edição --> 
237						 
238						 
239						<div style="display: none;" id="modalOferta${JournalArticleID}" class="modal fade bioec-profile-oferta-modal modalOferta" role="dialog"> 
240									<div class="modal-dialog modal-lg" role="document"> 
241										<form id="formularioOferta${JournalArticleID}" class="form-group modal-content formularioOferta"> 
242												<div id="ofertaModal-l1${JournalArticleID}" class="modal-header ofertaModal-l1"> 
243													<h5>Adicionar oferta</h5> 
244														<button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
245															 <span aria-hidden="true">&times;</span> 
246														</button> 
247												</div> 
248												<div id="ofertaModal-l2${JournalArticleID}" class="modal-body ofertaModal-l2"> 
249														<div id="ofertaTitle${JournalArticleID}" class="ofertaTitle"> 
250																<label class="ReqLabel" for="ofertaInputTitle${JournalArticleID}">Título da oferta</label> 
251																<input id="ofertaInputTitle${JournalArticleID}" value="${entry.getHighlightedTitle()}" type="text" placeholder="Inserir um título" required> 
252														</div> 
253														<div id="ofertaName${JournalArticleID}" class="ofertaName"> 
254																<label class="" for="ofertaInputName${JournalArticleID}">Nome para contato</label> 
255																<input value="${nomeParaContato}" id="ofertaInputName${JournalArticleID}" placeholder="Inserir nome" type="text"> 
256														</div> 
257														<div id="ofertaTelephone${JournalArticleID}" class="ofertaTelephone"> 
258																<label class="" for="ofertaInputPhone${JournalArticleID}">Telefone para contato</label> 
259																<input value="${telefone}" id="ofertaInputPhone${JournalArticleID}" name="ofertaInputPhone" type="text" placeholder ='(__)_____-_____' minlength="14"  /> 
260														</div> 
261														<div id="ofertaEmail${JournalArticleID}" class="ofertaEmail"> 
262																<label class="" for="ofertaInputEmail${JournalArticleID}">E-mail para contato</label> 
263																<input value="${email}" id="ofertaInputEmail${JournalArticleID}" placeholder="Inserir e-mail" type="text"> 
264														</div> 
265														<div id="ofertaDesc${JournalArticleID}" class="ofertaDesc"> 
266																<label class="ReqLabel" for="ofertaInputDesc${JournalArticleID}">Descrição</label> 
267																<textarea id="ofertaInputDesc${JournalArticleID}" style="max-width: 100%;font-size: 16px;height: 80px;border: 1px solid #BEBEBE;" required>${desc}</textarea> 
268														</div> 
269														<div id="ofertaImg${JournalArticleID}" class="ofertaImg"> 
270																<div style="display: flex; flex-direction: column; gap: 8px"> 
271																		<label>Imagem da oferta (Máx. 10 MB)</label> 
272																		<label class="btn carregarImagem" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemOferta${JournalArticleID}" style="font-size: 16px; cursor: pointer;">CARREGAR IMAGEM</label> 
273																		<input class="inputCarregarImagemOferta" id="inputCarregarImagemOferta${JournalArticleID}" type="file" accept="image/*" onchange="encodeOfertaImageAsURL${JournalArticleID}(this)"> 
274																		<input class="d-none" id="inputOfertaBase64${JournalArticleID}" value="${imagem}"/> 
275																		<div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-none d-block" style="background-image: url(${imagem})"></div> 
276																		<button type="button" id="removerImagemOferta${JournalArticleID}" class="<#if imagem == "" || imagem?? == false> d-none </#if>  removerImagemOferta" > 
277																			<i class="fa fa-trash"></i> Remover imagem	 
278																		</button> 
279																	</div> 
280																	<div class="imagemCarregadaOferta imagemCarregadaOferta${JournalArticleID} d-md-block d-none" style="background-image: url(${imagem})"></div> 
281														</div> 
282												</div> 
283													<div class="TextImportant"> 
284														<p> 
285															Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
286														</p> 
287													</div> 
288 
289												<div id="ofertaModal-l3${JournalArticleID}" class="modal-footer ofertaModal-l3"> 
290														<button  class="btn button-empty" onclick="" id="ofertas-saveAndClose${JournalArticleID}">SALVAR E FECHAR</button> 
291												</div> 
292										</form> 
293									</div> 
294								</div> 
295						 
296						</#if> 
297						<#--  
298						 
299						 
300						 
301						 
302						<div style="display: none;" id="modalInfra${JournalArticleID}" class="modal fade bioec-profile-infra-modal" role="dialog"> 
303							<div  class="modal-dialog modal-lg" role="document"> 
304 
305								<form class="form-group modal-content" id="formularioInfraestrutura${JournalArticleID}"> 
306									<div id="infraModal-l1-${JournalArticleID}" class="modal-header infraModal-l1" > 
307										<h5>Adicionar Infraestrutura</h5> 
308										<button id="fecharModal${JournalArticleID}" type="button" class="close" data-dismiss="modal" aria-label="Close"> 
309											<span aria-hidden="true">&times;</span> 
310										</button>    
311									</div> 
312									<div id="infraModal-l2-${JournalArticleID}" class="modal-body infraModal-l2"> 
313										<div id="infraName${JournalArticleID}" class="infraName"> 
314											<label class="ReqLabel" for="inputInfraName${JournalArticleID}">Nome da infraestrutura</label> 
315											<input type="text" id="inputInfraName${JournalArticleID}" value="${entry.getHighlightedTitle()}" placeholder="Nome da infraestrutura" required> 
316										</div> 
317									<div id="infraModel${JournalArticleID}" class="infraModel"> 
318										<label class="ReqLabel" for="inputInfraModel${JournalArticleID}">Modelo</label> 
319										<input type="text" id="inputInfraModel${JournalArticleID}" value="${modelo}" placeholder="Modelo" required> 
320									</div> 
321									<div id="infraBrand${JournalArticleID}" class="infraBrand"> 
322										<label class="ReqLabel" for="inputInfraBrand${JournalArticleID}">Marca</label> 
323										<input type="text" id="inputInfraBrand${JournalArticleID}" value="${marca}" placeholder="Marca" required> 
324									</div> 
325 
326									<div id="infraImg${JournalArticleID}" class="infraImg"> 
327										<div style="display: flex; flex-direction: column; gap: 8px"> 
328											<label>Imagem da infraestrutura (Máx. 10 MB)</label> 
329											<label class="bioec_secondary_button" id="carregarImagem${JournalArticleID}" for="inputCarregarImagemInfra${JournalArticleID}" style="font-size: 16px;color: #333244;align-self:start;"> 
330												CARREGAR IMAGEM 
331											</label> 
332											<input id="inputCarregarImagemInfra${JournalArticleID}" class="inputCarregarImagemInfra" type="file" accept="image/*" onchange="encodeInfraImageAsURL${JournalArticleID}(this)"> 
333											<input class="d-none" id="inputInfraBase64${JournalArticleID}" /> 
334											<div class="imagemCarregadaInfra${JournalArticleID} d-md-none d-block"></div> 
335											<button type="button" id="removerImagemInfra${JournalArticleID}" class="d-none removerImagemInfra" > 
336												<i class="fa fa-trash"></i> Remover imagem	 
337											</button> 
338										</div> 
339										<div class="imagemCarregadaInfra${JournalArticleID} d-md-block d-none"></div> 
340									</div> 
341 
342									<div id="infraFunction${JournalArticleID}" class="infraFunction"> 
343										<label class="ReqLabel" for="inputInfraFunction${JournalArticleID}">Função</label> 
344										<input type="text" id="inputInfraFunction${JournalArticleID}" class="inputInfraFunction" value="${funcao}" placeholder="Função" required> 
345									</div> 
346								</div> 
347								<div class="TextImportant"> 
348									<p> 
349									Importante: O conteúdo enviado passará por um processo interno de aprovação. Só então o conteúdo adicionado aparecerá no portal. 
350									</p> 
351								</div> 
352								<div id="infraModal-l3-${JournalArticleID}" class="modal-footer infraModal-l3"> 
353											<button class="bioec_secondary_button" id="ofertas-saveAndClose${JournalArticleID}" onclick="">SALVAR E FECHAR</button> 
354								</div> 
355							</form> 
356 
357							</div>			 
358						 
359						 
360						--> 
361						 
362				 
363 
364						<script> 
365						<#if userIsAdmin> 
366						function excluirOferta(wcId, orgId) { 
367								Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
368								fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/" + wcId, { 
369									method: 'DELETE', 
370									"headers": { 
371										"x-csrf-token": Liferay.authToken, 
372										"Content-Type": "application/json" 
373
374								}) 
375								.then(res => { 
376									if(res.status == 200) { 
377										Liferay.Util.openToast({ 
378												message: "Infraestrutura excluida com sucesso", 
379												type: "success", 
380												title: "", 
381												toastProps: { 
382														autoClose: 5000 
383
384										}) 
385										setTimeout(function(){ location.reload(); }, 2000) 
386									} else { 
387										Liferay.Util.openToast({ 
388												message: "Erro ao excluir infraestrutura", 
389												type: "danger", 
390												title: "", 
391												toastProps: { 
392														autoClose: 5000 
393
394										}) 
395
396								}); 
397
398							 
399						 
400							 
401							 
402	function validImageSize(base64="") { 
403		const decoded = atob(base64.substring(base64.indexOf(',') + 1)); 
404		const sizeMB = decoded.length / 1e+6; 
405		console.log("MB: " + decoded.length / 1e+6); 
406		if(sizeMB > 10) { 
407			Liferay.Util.openToast({ 
408				message: "O tamanho da imagem não deve ultrapassar 10 MB.", 
409				type: "danger", 
410				title: "", 
411				toastProps: { 
412					autoClose: 5000 
413
414			}) 
415			return false 
416
417		return true 
418
419 
420	function encodeOfertaImageAsURL${JournalArticleID}(element) { 
421  	let file = element.files[0]; 
422    let reader = new FileReader(); 
423    reader.onloadend = () => { 
424			if(reader.result) { 
425				if(!validImageSize(reader.result)) return; 
426				try { 
427					const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}") 
428					base64_input.value = reader.result 
429					Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = 'url(' + reader.result + ')' ) 
430					 
431					const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}") 
432					removeImageButton.classList.remove("d-none") 
433				} catch (error) { 
434					console.error(error) 
435
436
437
438		reader.readAsDataURL(file); 
439
440	 
441	function removeImageOferta${JournalArticleID}() { 
442	try { 
443		const file_input = document.getElementById("inputCarregarImagemOferta${JournalArticleID}") 
444		Array.from(document.getElementsByClassName("imagemCarregadaOferta${JournalArticleID}")).forEach( el => el.style.backgroundImage = "" ) 
445		const base64_input = document.getElementById("inputOfertaBase64${JournalArticleID}") 
446		file_input.value = null 
447		base64_input.value = "" 
448		 
449		const removeImageButton = document.getElementById("removerImagemOferta${JournalArticleID}") 
450		removeImageButton.classList.add("d-none") 
451	} catch (error) { 
452		console.error(error) 
453
454
455 
456 
457 
458document.getElementById("removerImagemOferta${JournalArticleID}").addEventListener("click", removeImageOferta${JournalArticleID}); 
459 
460<#-- Rest da edição de organização --> 
461 
462<#if orgOrUser == "org"> 
463document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => { 
464	event.preventDefault(); 
465	adicionarOferta${JournalArticleID}();  
466}); 
467 
468function adicionarOferta${JournalArticleID}() {		 
469		Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
470		$("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true); 
471	 
472		 
473		 
474		const ofertaData = { 
475			titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value, 
476			nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value, 
477			telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value, 
478			emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value, 
479			descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value, 
480			imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value, 
481
482		 
483		console.log(ofertaData); 
484		 
485			fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", { 
486				method: 'PUT', 
487				"headers": { 
488					"x-csrf-token": Liferay.authToken, 
489					"Content-Type": "application/json" 
490				}, 
491				body: JSON.stringify(ofertaData) 
492			}) 
493			.then(res => { 
494				if(res.status == 200) { 
495					Liferay.Util.openToast({ 
496							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.", 
497							type: "success", 
498							title: "", 
499							toastProps: { 
500									autoClose: 5000 
501
502					}) 
503					 setTimeout(function(){ location.reload(); }, 2000); 
504				} else { 
505				 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false); 
506					Liferay.Util.openToast({ 
507							message: "Erro ao editar oferta", 
508							type: "danger", 
509							title: "", 
510							toastProps: { 
511									autoClose: 5000 
512
513					}) 
514
515			}) 
516
517</#if> 
518 
519<#-- Rest da edição de pessoa fisica --> 
520 
521							 
522							 
523				<#if orgOrUser == "user"> 
524				 
525								document.querySelector('#formularioOferta${JournalArticleID}').addEventListener('submit', event => { 
526					event.preventDefault(); 
527					adicionarOferta${JournalArticleID}();  
528				});			 
529						 
530						function adicionarOferta${JournalArticleID}() { 
531							Liferay.Util.openToast({message: "Enviando requisição",type: "info",title: ""}); 
532							$("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",true); 
533	 
534							const ofertaData = { 
535								titulo: document.getElementById("ofertaInputTitle${JournalArticleID}").value, 
536								nomeContato: document.getElementById("ofertaInputName${JournalArticleID}").value, 
537								telefoneContato: document.getElementById("ofertaInputPhone${JournalArticleID}").value, 
538								emailContato: document.getElementById("ofertaInputEmail${JournalArticleID}").value, 
539								descricao: document.getElementById("ofertaInputDesc${JournalArticleID}").value, 
540								imagem: document.getElementById("inputOfertaBase64${JournalArticleID}").value, 
541
542							 
543							console.log(ofertaData); 
544 
545							fetch(Liferay.ThemeDisplay.getPortalURL() + "/o/oferta/${JournalArticleFrontId}", { 
546											method: 'PUT', 
547											"headers": { 
548													"x-csrf-token": Liferay.authToken, 
549													"Content-Type": "application/json" 
550											}, 
551											body: JSON.stringify(ofertaData) 
552									}) 
553									.then( res => { 
554								if(res.status == 200) { 
555									Liferay.Util.openToast({ 
556										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.", 
557										type: "success", 
558										title: "", 
559										toastProps: { 
560											autoClose: 5000 
561
562									}) 
563									 setTimeout(function(){ location.reload(); }, 2000); 
564								} else { 
565								 $("#ofertas-saveAndClose${JournalArticleID}").prop("disabled",false); 
566									Liferay.Util.openToast({ 
567										message: "Erro ao editar Oferta", 
568										type: "danger", 
569										title: "", 
570										toastProps: { 
571											autoClose: 5000 
572
573									}) 
574
575							}); 
576							 
577					}; 
578						 
579						 
580				</#if> 
581							 
582							 
583								</#if> 
584						</script> 
585					 
586				 
587				 
588				 
589			</#list> 
590		</#if> 
591	</div> 
592</div> 
593 
594<style> 
595.bioec_oferta_img { 
596    overflow: hidden; 
597		background-size: contain; 
598    background-position: center; 
599    background-repeat: no-repeat; 
600
601 
602.bioec_oferta_img_placeholder { 
603    width: 140px; 
604    height: 140px; 
605    background-color: #E8ECEF; 
606    display: flex; 
607    flex-direction: column; 
608    align-items: center; 
609    justify-content: center; 
610    font-size: 14px; 
611    color: #5B5C61; 
612
613 
614.bioec_oferta_img_placeholder i { 
615    font-size: 44px; 
616
617 
618 
619.pagination-items-per-page.active > a,  
620.pagination-items-per-page.active > button,  
621.pagination-items-per-page.show > a,  
622.pagination-items-per-page.show > button, 
623.page-item.active .page-link,  
624.page-item.show .page-link{ 
625    border-color: #4ECD66; 
626    background-color: #4ECD66; 
627
628 
629.pagination-results, 
630.pagination-items-per-page > a,  
631.pagination-items-per-page > button, 
632.pagination-items-per-page > a:hover,  
633.pagination-items-per-page > button:hover, 
634.page-link{ 
635	color: #4ebe66; 
636
637 
638.bioec-profile-oferta-main{ 
639	display: flex; 
640	gap: 40px; 
641	flex-direction: column; 
642	padding-bottom: 20px; 
643
644.bioec-profile-oferta-main h5{ 
645	font-weight: 700; 
646
647.bioec-profile-oferta-main h5, .bioec-profile-oferta-main p{ 
648	color: #5B5C61; 
649	margin-bottom: 0px; 
650	font-size: 16px; 
651 
652
653 
654.bioec-profile-oferta-main #oferta-lista-container>div{ 
655	border: 1px #BEBEBE solid;  
656	padding: 24px 24px 0 24px; 
657	margin-bottom: 40px; 
658	display: grid; 
659	grid-row-gap: 24px; 
660	grid-template-columns: 24px 12px 1fr 15px; 
661	grid-template-areas:  
662		"ck . tit arrw" 
663		"desc desc desc desc" 
664		"clps clps clps clps"; 
665
666 
667.bioec-profile-oferta-main .lista-checkmark { grid-area: ck; display: flex; } 
668.bioec-profile-oferta-main .lista-checkmark i { font-size: 24px; } 
669.bioec-profile-oferta-main .lista-pic { grid-area: pic; display: flex; justify-content: center;} 
670.bioec-profile-oferta-main .lista-arrow { grid-area: arrw; } 
671 
672.bioec-profile-oferta-main .lista-titulo {  
673	grid-area: tit;  
674	display: flex;  
675	flex-direction: column; 
676	justify-content: center; 
677	 
678
679 
680.bioec-profile-oferta-main .lista-titulo h5{ 
681	margin-bottom: 0px; 
682}  
683 
684.bioec-profile-oferta-main .lista-desc { 
685grid-area: desc;  
686}  
687 
688.bioec-profile-oferta-main .lista-desc p{  
689	margin: 0; 
690
691 
692.bioec-profile-oferta-main a{ 
693	color: #5B5C61; 
694
695 
696.oferta-port{ 
697	border: 1px #BEBEBE solid;  
698	padding: 24px; 
699	display: flex; 
700	flex-direction: column; 
701	align-items: center; 
702	gap: 24px; 
703
704 
705.oferta-port p{ 
706text-align: center;	 
707	 
708
709 
710.oferta-port div{ 
711display: flex; 
712	justify-content: space-between; 
713	width: min(558px, 100%); 
714
715 
716.button-empty { 
717border: solid 1px #4ECD66; 
718padding: 8px 24px; 
719color: #333244; 
720	transition: 250ms; 
721
722 
723.button-empty:hover{ 
724	background-color: #4ECD66; 
725
726 
727.button-filled { 
728background-color: #4ECD66; 
729border: solid 1px #4ECD66; 
730padding: 8px 24px; 
731color: #333244; 
732transition: 250ms; 
733	 
734
735 
736.button-filled:hover{ 
737	background-color: transparent; 
738
739 
740.bioec-profile-oferta-main .lista-footnote {  
741 
742	display: flex; 
743	justify-content: space-between; 
744	border-top: 1px solid #E8ECEF; 
745	padding-top: 12px; 
746	font-size: 14px; 
747	font-weight: 300; 
748	gap: 15px; 
749	color: #5B5C61; 
750 
751
752.lista-collapse{ 
753display: flex; 
754flex-direction: column; 
755gap: 24px; 
756grid-area: clps; 
757padding-bottom: 24px; 
758
759 
760 .lista-details{ 
761	display: flex; 
762	justify-content: flex-start; 
763	gap: 24px; 
764
765.lista-pic img { 
766	max-height: 138px; 
767	max-width: 138px; 
768
769 
770.bioec-profile-oferta-main p{ 
771 
772
773 
774.imagemCarregadaOferta { 
775	height: 100px; 
776	width: 100px; 
777	background-size: contain; 
778	background-position: center; 
779	background-repeat: no-repeat; 
780
781 
782 
783.ButtonAddOferta { 
784    background: #4ECD66; 
785    border-radius: 8px; 
786    padding: 8px 24px; 
787    border: none; 
788    font-weight: 700; 
789    color: #333244; 
790    font-family: 'Roboto'; 
791    float: right; 
792    text-transform: uppercase; 
793
794.ButtonAddOferta:hover{ 
795	color: #333244; 
796	text-decoration: none; 
797
798 
799.bioec-profile-oferta-modal label { 
800    margin: 0; 
801    cursor: default; 
802    font-size: 20px; 
803    font-weight: 700; 
804    color: #5B5C61; 
805
806 
807.bioec-profile-oferta-modal div { 
808    width: 100%; 
809
810 
811#ofertaModal-l1, .ofertaModal-l1 { 
812    padding: 18px 24px; 
813    display: flex; 
814    justify-content: space-between; 
815
816 
817#ofertaModal-l1 img, .ofertaModal-l1 img { 
818    cursor: pointer; 
819
820 
821#ofertaModal-l1 h5, .ofertaModal-l1 h5 { 
822   	margin: 0; 
823    font-size: 20px; 
824    font-weight: 700; 
825    color: #5B5C61; 
826
827 
828#ofertaModal-l2, .ofertaModal-l2 { 
829		border-top: 1px solid #E8ECEF; 
830    display: grid; 
831    grid-template-columns: 1fr 1fr; 
832    grid-template-areas: 
833        "titu nome" 
834        "fone mail" 
835        "desc desc" 
836        "imagem ." 
837
838    column-gap: 24px; 
839    row-gap: 40px; 
840    padding: 24px; 
841
842 
843#ofertaModal-l2>div, .ofertaModal-l2>div { 
844    display: flex; 
845    flex-direction: column; 
846    gap: 8px; 
847
848 
849#ofertaTitle, .ofertaTitle { 
850    grid-area: titu; 
851
852 
853#ofertaName, .ofertaName { 
854    grid-area: nome; 
855
856 
857#ofertaTelephone, .ofertaTelephone { 
858    grid-area: fone; 
859
860 
861#ofertaEmail, .ofertaEmail { 
862    grid-area: mail; 
863
864 
865#ofertaBrand, .ofertaBrand { 
866    grid-area: marca; 
867
868 
869#ofertaModal-l2>#ofertaImg, .ofertaModal-l2>.ofertaImg { 
870    grid-area: imagem; 
871    display: flex; 
872    flex-direction: column; 
873
874 
875#ofertaDesc, .ofertaDesc { 
876    grid-area: desc; 
877 
878
879 
880#ofertaDesc input, .ofertaDesc input { 
881    height: 80px; 
882
883 
884.TextImportant{ 
885    border-bottom: 1px solid #E8ECEF; 
886 		padding: 24px; 
887		color: #5B5C61;		 
888
889 
890.bioec-profile-oferta-modal input[type="text"] { 
891    border-top: none; 
892    border-left: none; 
893    border-right: none; 
894    border-bottom: 1px solid #BEBEBE; 
895    width: 100%; 
896    font-size: 16px; 
897 
898
899 
900 
901.bioec-profile-oferta-modal input[type="text"]:focus-visible { 
902    outline: none; 
903    border-bottom: 1px solid black; 
904 
905
906 
907.bioec-profile-oferta-modal .ReqLabel:before { 
908    content: "* "; 
909    color: #D90000; 
910 
911
912 
913#inputCarregarImagemOferta, .inputCarregarImagemOferta { 
914    display: none; 
915
916 
917#carregarImagem, .carregarImagem  { 
918    padding: 8px 24px; 
919    border: 1px solid #4ECD66; 
920    width: fit-content; 
921    transition: 250ms; 
922 
923
924 
925#carregarImagem:hover, .carregarImagem:hover { 
926    background-color: #4ECD66; 
927
928 
929.button-empty { 
930    border: solid 1px #4ECD66; 
931    padding: 8px 24px; 
932    color: #333244; 
933    transition: 250ms; 
934    font-weight: bold; 
935
936 
937.button-empty:hover { 
938    background-color: #4ECD66; 
939
940 
941.button-filled { 
942    background-color: #4ECD66; 
943    border: solid 1px #4ECD66; 
944    padding: 8px 24px; 
945    color: #333244; 
946    transition: 250ms; 
947    font-weight: bold; 
948
949 
950.button-filled:hover { 
951    background-color: transparent; 
952
953 
954#ofertaModal-l3, .ofertaModal-l3 { 
955    gap: 24px; 
956    display: flex; 
957    justify-content: flex-end; 
958    padding: 24px; 
959
960 
961.modal { 
962    padding: initial !important; 
963    border-radius: 4px !important; 
964    
965
966 
967.modal a.close-modal { 
968    display: none; 
969
970 
971#removerImagemOferta, .removerImagemOferta { 
972	background: none; 
973	border: none; 
974	outline: none; 
975	color: #5B5C61; 
976	font-size: 16px; 
977	font-weight: 900; 
978	line-height: 24px; 
979	letter-spacing: 0em; 
980	width: fit-content; 
981	margin-left: 16px; 
982
983 
984 
985@media(max-width: 964px){ 
986    .lista-pic img { 
987        width: 100%; 
988        max-height: unset; 
989        max-width: unset; 
990 
991
992
993 
994@media (max-width: 550px) { 
995    #ofertaModal-l2, .ofertaModal-l2 { 
996        display: flex; 
997        flex-direction: column; 
998
999 
1000    #ofertaModal-l3, .ofertaModal-l3 { 
1001        display: flex; 
1002        flex-direction: column; 
1003
1004
1005 
1006@media(max-width: 450px){ 
1007	.bioec-profile-oferta-main .lista-details{ 
1008		flex-direction: column; 
1009
1010 
1011	.lista-contato{ 
1012		text-align: center; 
1013
1014 
1015	.bioec-profile-oferta-main .lista-footnote{ 
1016	flex-direction: column; 
1017		gap: 10px; 
1018		align-items: flex-end; 
1019		text-align: right; 
1020
1021
1022 
1023@media(max-width: 992px){ 
1024	#oferta-lista-container { 
1025		padding-inline: 15px; 
1026
1027
1028 
1029.bioec-profile-oferta-main .lista-footnote .buttonsActions { 
1030  display: flex; 
1031  gap: 17px; 
1032
1033 
1034@media (max-width: 768px) { 
1035  .bioec-profile-oferta-main .lista-desc { 
1036    gap: 24px; 
1037    flex-direction: column-reverse; 
1038
1039  .bioec-profile-oferta-main .lista-footnote { 
1040    flex-direction: column; 
1041    align-items: center; 
1042
1043  .bioec-profile-oferta-main .lista-footnote > div { 
1044    text-align: center; 
1045
1046   
1047  .bioec-profile-oferta-main .lista-footnote .barra-pipe { 
1048    display: none; 
1049
1050  .bioec-profile-oferta-main .lista-footnote .lista-author { 
1051    display: flex; 
1052    gap: 4px; 
1053    justify-content: center; 
1054
1055  .bioec-profile-oferta-main .lista-footnote .buttonsActions { 
1056    width: 100%; 
1057    justify-content: space-between; 
1058
1059
1060 
1061 
1062</style> 
1063 
1064 
1065<script> 
1066 
1067 
1068 
1069</script> 
Publicações drop zone
sem imagem

| 25/10/2022 | 0 comentários | Publicado por Anônimo
sem imagem

| 25/10/2022 | 0 comentários | Publicado por Anônimo
sem imagem

| 25/10/2022 | 0 comentários | Publicado por Anônimo
sem imagem

| 25/10/2022 | 0 comentários | Publicado por Anônimo
sem imagem

| 25/10/2022 | 0 comentários | Publicado por Anônimo
sem imagem

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

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

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

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

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

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

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

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

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

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

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
sem imagem

| 13/03/2023 | 0 comentários | Publicado por INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
  • Sobre
  • Organizações
  • Demandas
  • Ofertas
  • Publicações
Categoria
Marcador
Rua Fernando de Souza Barros,120.Cidade
Universitária – Rio de Janeiro – RJCEP: 21941-857
+55 21 2582-1001
portaldebioeconomia@cetiqt.senai.br