Nav Bar do usuário deslogado.

Organização

INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS

INSTITUTO SENAI DE INOVAÇÃO EM BIOSSINTÉTICOS E FIBRAS
Entidade Governamental
Rio de Janeiro
Rio de Janeiro
Brasil
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Sobre drop zone
An error occurred while processing the template.
The following has evaluated to null or missing:
==> organization.getExpandoBridge().getAttribute("journal-article")  [in template "34764#34807#null" at line 23, column 21]

----
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: articleId = organization.getExpandoBr...  [in template "34764#34807#null" at line 23, column 9]
----
1<#assign  
2	OrganizationLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.OrganizationLocalService")  
3	JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
4/> 
5 
6<#assign  
7	viewerHasPrivileges = false 
8	userId = themeDisplay.getUserId() 
9/> 
10 
11<#if userId?? > 
12	<#assign  
13		orgId = _CUSTOM_FIELD_organization.getData()?number 
14		viewerHasPrivileges = OrganizationLocalService.hasUserOrganization(userId, orgId) 
15		organization = OrganizationLocalService.getOrganization(orgId) 
16	/> 
17</#if> 
18 
19 
20<#if viewerHasPrivileges || DDMStructure_Field04200031.getData() != "0"> 
21<#assign  
22	organization = OrganizationLocalService.getOrganization(_CUSTOM_FIELD_organization.getData()?number) 
23	articleId = organization.getExpandoBridge().getAttribute("journal-article") 
24	journalArticle = JournalArticleLocalService.getArticle(themeDisplay.getLayout().getGroupId(),articleId?c)  
25	articleXml = journalArticle.getDocument().getRootElement() 
26	 
27	setores = articleXml.selectNodes("dynamic-element[@name='Text67772680']") 
28/> 
29<#else> 
30<#assign setores = ["privado"] /> 
31</#if> 
32 
33<#assign  
34 
35	sobre = (viewerHasPrivileges || DDMStructure_Field80037203.getData()!="0")?string(DDMStructure_Text54730891.getData()!"","") 
36	competencias = (viewerHasPrivileges || DDMStructure_Field75645729.getData()!="0")?string(DDMStructure_Text51537691.getData()!"","") 
37	 
38
39 
40<div> 
41 
42				<#if viewerHasPrivileges || DDMStructure_Field80037203.getData()!="0" > 
43					<div class="bioec_org_sobre"> 
44							<label>Sobre a organização</label> 
45							<div class="bioec_org_sobre_container"> 
46								<#if sobre != ""> 
47									${sobre} 
48								<#else> 
49									<div class="bioec_org_sobre_vazio"> 
50											Nenhuma descrição foi adicionada neste perfil ainda 
51									</div> 
52								</#if> 
53							</div> 
54					</div> 
55				</#if> 
56				 
57				<#if viewerHasPrivileges || DDMStructure_Field75645729.getData()!="0" > 
58					<div class="bioec_org_sobre"> 
59							<label>Competências tecnológicas</label> 
60							<div class="bioec_org_sobre_container"> 
61									<#if competencias != ""> 
62										${competencias} 
63									<#else> 
64										<div class="bioec_org_sobre_vazio"> 
65												Nenhuma descrição foi adicionada neste perfil ainda 
66										</div> 
67									</#if> 
68							</div> 
69					</div> 
70				</#if> 
71					 
72				<#if viewerHasPrivileges || DDMStructure_Field04200031.getData()!="0" > 
73					<div class="bioec_org_sobre"> 
74							<label>Setor(es) de atuação</label> 
75							<div class="bioec_org_sobre_container"> 
76							<#if setores[0]!="privado"> 
77									<#if setores?size == 1 && setores[0].getStringValue()?trim == "" > 
78										<div class="bioec_org_sobre_vazio"> 
79												Nenhum setor foi adicionado neste perfil ainda 
80										</div> 
81									<#else> 
82										<#if setores?size != 0 > 
83											<ul> 
84												<#list setores as setor> 
85													<li>${setor.getStringValue()}</li> 
86												</#list> 
87											</ul> 
88										<#else> 
89											<div class="bioec_org_sobre_vazio"> 
90													Nenhum setor foi adicionado neste perfil ainda 
91											</div> 
92										</#if> 
93									</#if> 
94								<#else> 
95								<div class="bioec_org_sobre_vazio"> 
96									Nenhum setor foi adicionado neste perfil ainda 
97								</div> 
98								</#if> 
99							</div> 
100					</div> 
101				</#if> 
102				 
103</div> 
104 
105<style> 
106.bioec_org_sobre label { 
107	color: #5B5C61; 
108	font-weight: 700; 
109	margin-bottom: 10px; 
110	font-size: 20px; 
111	line-height: 30px; 
112
113 
114.bioec_org_sobre_container { 
115	font-size: 16px; 
116	border: 1px solid #BEBEBE; 
117	padding: 24px; 
118	color: #5B5C61; 
119	margin-bottom: 40px; 
120
121 
122.bioec_org_sobre_vazio { 
123	color: #5B5C61; 
124	font-size: 16px; 
125	text-align: center; 
126	font-weight: 700; 
127
128 
129.bioec_org_sobre_container ul { 
130	color: #5B5C61; 
131	margin: 0; 
132
133</style> 
Debora Way Administrador
Leonardo Teixeira Administrador
Paulo Coutinho Administrador
Camila Cardoso Lemos Administrador
Infraestruturas drop zone
Aprovado
sem imagem
Máquina de Medição Tridimensional por Coordenadas Zeiss, modelo Prismo Ultra Super Accuracy

Modelo: Prismo Ultra Super Accuracy

Marca: Zeiss

Função

LABORATÓRIO DE TOMOGRAFIA COMPUTADORIZADA

23/08/2023 | 0 comentários | Publicado por FUND CENTROS DE REFERENCIA EM TECNO LOGIAS INOVADORAS
Aprovado
sem imagem
Tomógrafo de aplicação industrial Zeiss, modelo METROTOM 1500

Modelo: METROTOM 1500

Marca: Zeiss

Função

LABORATÓRIO DE TOMOGRAFIA COMPUTADORIZADA

23/08/2023 | 0 comentários | Publicado por FUND CENTROS DE REFERENCIA EM TECNO LOGIAS INOVADORAS
Aprovado
sem imagem
Digitalizador Óptico GOM, modelo Smart Scan

Modelo: Smart Scan

Marca: GOM

Função

LABORATÓRIO DE TOMOGRAFIA COMPUTADORIZADA

23/08/2023 | 0 comentários | Publicado por FUND CENTROS DE REFERENCIA EM TECNO LOGIAS INOVADORAS
Aprovado
sem imagem
Câmaras de temperatura e umidade

Modelo: a

Marca: a

Função

LABORATÓRIO DE INSTRUMENTAÇÃO

23/08/2023 | 0 comentários | Publicado por FUND CENTROS DE REFERENCIA EM TECNO LOGIAS INOVADORAS
Demandas drop zone
An error occurred while processing the template.
The following has evaluated to null or missing:
==> autorArticleId  [in template "34764#34807#41127" at line 87, column 38]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

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

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

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

| 23/08/2023 | 0 comentários | Publicado por Anônimo
Aprovado
sem imagem

| 23/08/2023 | 0 comentários | Publicado por Anônimo
Aprovado
sem imagem

| 23/08/2023 | 0 comentários | Publicado por Anônimo
Aprovado
sem imagem

| 23/08/2023 | 0 comentários | Publicado por Anônimo
  • Sobre
  • Infraestruturas
  • Demandas
  • Ofertas
  • Publicações
Sort
Category
Tag